|
@@ -325,11 +325,7 @@ serverApp.post('/api/makeFolder',
|
|
|
// isAccessTokens,
|
|
|
async (req, res, next)=>{
|
|
|
|
|
|
- const options = {
|
|
|
- headers: {
|
|
|
- Authorization: `Bearer ${req.session.accessToken}`,
|
|
|
- },
|
|
|
- };
|
|
|
+ const options = getOptions(req.session.accessToken);
|
|
|
const {siteId, path, name} = req.body;
|
|
|
const resultObj = {message:"", success: 'F'};
|
|
|
const param ={
|
|
@@ -383,11 +379,7 @@ serverApp.post('/api/makeWord',
|
|
|
// isAuthenticated,
|
|
|
// isAccessTokens,
|
|
|
async (req, res, next)=>{
|
|
|
- const options = {
|
|
|
- headers: {
|
|
|
- Authorization: `Bearer ${req.session.accessToken}`,
|
|
|
- },
|
|
|
- };
|
|
|
+ const options = getOptions(req.session.accessToken);
|
|
|
const {siteId, path, name} = req.body;
|
|
|
const doc = new Document({
|
|
|
sections : [
|
|
@@ -434,13 +426,7 @@ serverApp.post('/api/makeExcel',
|
|
|
// isAccessTokens,
|
|
|
async (req, res, next)=>{
|
|
|
|
|
|
- const fileOptions = { headers: {
|
|
|
- Authorization: `Bearer ${req.session.accessToken}`,
|
|
|
- }}
|
|
|
-
|
|
|
- const options = { headers: {
|
|
|
- Authorization: `Bearer ${req.session.accessToken}`,
|
|
|
- }}
|
|
|
+ const options = getOptions(req.session.accessToken);
|
|
|
const {siteId, path, name} = req.body;
|
|
|
const wb = XLSX.utils.book_new();
|
|
|
XLSX.utils.book_append_sheet(wb, XLSX.utils.json_to_sheet([]), 'Sheet1');
|
|
@@ -470,9 +456,7 @@ serverApp.post('/api/makePptx',
|
|
|
// isAccessTokens,
|
|
|
async (req, res, next)=>{
|
|
|
|
|
|
- const options = { headers: {
|
|
|
- Authorization: `Bearer ${req.session.accessToken}`,
|
|
|
- }}
|
|
|
+ const options = getOptions(req.session.accessToken);
|
|
|
const {siteId, path, name} = req.body;
|
|
|
const pres = new pptxgen();
|
|
|
pres.addSlide("TITLE_SLIDE");
|
|
@@ -503,11 +487,7 @@ serverApp.post('/api/check-name',
|
|
|
// isAccessTokens,
|
|
|
async (req, res, next)=>{
|
|
|
|
|
|
- const options = {
|
|
|
- headers: {
|
|
|
- Authorization: `Bearer ${req.session.accessToken}`,
|
|
|
- },
|
|
|
- };
|
|
|
+ const options = getOptions(req.session.accessToken);
|
|
|
const {siteId, path, name} = req.body;
|
|
|
try{
|
|
|
const sitesInfo = await axios.get(endPoint + "/sites/"+ siteId + path, options);
|
|
@@ -540,21 +520,18 @@ serverApp.post('/api/check-name',
|
|
|
}
|
|
|
})
|
|
|
|
|
|
-
|
|
|
serverApp.post('/api/upload', upload.array('file'),
|
|
|
// isAuthenticated,
|
|
|
// isAccessTokens,
|
|
|
async (req, res, next)=>{
|
|
|
const startTime = new Date();
|
|
|
const files = req.files;
|
|
|
- let {siteId, path, folder} = req.body;
|
|
|
+ let {siteId, path, folder, file_path} = req.body;
|
|
|
if (siteId && path) {
|
|
|
- const options = {
|
|
|
- headers: {
|
|
|
- Authorization: `Bearer ${req.session.accessToken}`,
|
|
|
- },
|
|
|
- };
|
|
|
-
|
|
|
+ const options = getOptions(req.session.accessToken);
|
|
|
+ // const folderResult = await makeFolder(options, folder, siteId, path, file_path, files, req.session);
|
|
|
+ // console.log(folderResult);
|
|
|
+ // return res.json(folderResult);
|
|
|
if (folder) {
|
|
|
if (!Array.isArray(folder)) {
|
|
|
folder = [folder];
|
|
@@ -629,6 +606,7 @@ serverApp.post('/api/upload', upload.array('file'),
|
|
|
|
|
|
const promiseArray = [];
|
|
|
if (files && files.length > 0) {
|
|
|
+ console.log(files);
|
|
|
let beforeUri = '';
|
|
|
let beforeItemId = '';
|
|
|
for (let file of files) {
|
|
@@ -636,33 +614,48 @@ serverApp.post('/api/upload', upload.array('file'),
|
|
|
let filePath = req.body[ fileName + "_path"];
|
|
|
file.originalname = Buffer.from(file.originalname, 'ascii').toString('utf8');
|
|
|
let originName = file.originalname;
|
|
|
+
|
|
|
if (originName.lastIndexOf('.') >= 0) {
|
|
|
const possibleExt = await getPossibleExt();
|
|
|
- const {supported_file_ext, protected_file_ext} = possibleExt;
|
|
|
+ const {supported_file_ext, protected_file_ext} = possibleExt.data;
|
|
|
const ext = originName.substring(originName.lastIndexOf('.'), originName.length);
|
|
|
+
|
|
|
if (supported_file_ext && protected_file_ext) {
|
|
|
- const supportedArr = supported_file_ext.split(';');
|
|
|
+
|
|
|
+ let supportedArr = supported_file_ext.split(';');
|
|
|
+
|
|
|
+ if (!supportedArr[supportedArr.length - 1]) {
|
|
|
+ supportedArr.splice(supportedArr.length - 1);
|
|
|
+ }
|
|
|
+
|
|
|
if (!supportedArr.includes(ext)) {
|
|
|
- return res.json({success:'F', message: '파일명 : '+originName+'<br>해당 파일은 업로드 불가 파일입니다. 다시 시도해주세요.'});
|
|
|
+ return res.json({success:'F', message: '파일명 : ' + originName
|
|
|
+ +'<br>해당 파일은 업로드 불가 파일입니다. 다시 시도해주세요.<br>가능 확장자 :'
|
|
|
+ + JSON.stringify(supportedArr)});
|
|
|
}
|
|
|
+
|
|
|
const fileData = Buffer.from(file.buffer).toString('base64');
|
|
|
const param = {
|
|
|
- apiKey: process.env.GATE_WAY_KEY,
|
|
|
+ apiKey: gateWayKey,
|
|
|
email: req.session.account.idTokenClaims.email,
|
|
|
dispFileName: originName,
|
|
|
aipGuid: "878173ae-cc36-4881-af57-604af868314c",
|
|
|
comment: "",
|
|
|
fileData: fileData
|
|
|
}
|
|
|
-
|
|
|
+ console.log(param);
|
|
|
try {
|
|
|
- // const result = await axios.post('https://115.91.94.42/api/v1/stream/set-label', param);
|
|
|
const result = await axios.post('http://192.168.20.99:5050/api/v1/stream/set-label', param);
|
|
|
+ console.log(result);
|
|
|
if (result) {
|
|
|
- if (result.data.statusCode === 200) {
|
|
|
+ if (result.data.statusCode === 200 && !result.data.result.errorCode) {
|
|
|
let bufferValue = Buffer.from(result.data.result.fileData, "base64");
|
|
|
file = bufferValue;
|
|
|
}
|
|
|
+ else {
|
|
|
+ console.log(result.data);
|
|
|
+ return res.json({success:'F', message: '파일명 : ' + originName + '<br>에러 : ' + result.data.result.errorMessage});
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
catch(error) {
|
|
@@ -700,12 +693,8 @@ serverApp.post('/api/upload', upload.array('file'),
|
|
|
beforeUri = uri;
|
|
|
beforeItemId = itemId;
|
|
|
}
|
|
|
- const fileOptions = { headers: {
|
|
|
- Authorization: `Bearer ${req.session.accessToken}`,
|
|
|
- "Content-Type" : file.mimeType
|
|
|
- }}
|
|
|
- // await axios.put(endPoint + "/sites/"+ siteId +"/drive/items/"+itemId+':/'+file.originalname+':/content', file.buffer, fileOptions);
|
|
|
- promiseArray.push(axios.put(endPoint + "/sites/"+ siteId +"/drive/items/"+itemId+':/'+originName+':/content', file, fileOptions));
|
|
|
+
|
|
|
+ promiseArray.push(axios.put(endPoint + "/sites/"+ siteId +"/drive/items/"+itemId+':/'+originName+':/content', file, options));
|
|
|
}
|
|
|
}
|
|
|
if (promiseArray.length > 0) {
|
|
@@ -738,11 +727,7 @@ serverApp.post('/api/download',
|
|
|
if (req.body) {
|
|
|
const {siteId, path, fileIds, zipName} = req.body;
|
|
|
if (siteId && path && fileIds) {
|
|
|
- const options = {
|
|
|
- headers: {
|
|
|
- Authorization: `Bearer ${req.session.accessToken}`,
|
|
|
- },
|
|
|
- };
|
|
|
+ const options = getOptions(req.session.accessToken);
|
|
|
const arr = JSON.parse(fileIds);
|
|
|
if (arr.length === 1) {
|
|
|
const sitesInfo = await axios.get(endPoint + "/sites/"+ siteId + "/drive/items/" + arr[0], options);
|
|
@@ -789,28 +774,25 @@ serverApp.post('/api/download',
|
|
|
const response = await axios.get(dataUrl, {responseType: 'arraybuffer', headers: {
|
|
|
withCredentials:true,
|
|
|
},});
|
|
|
+
|
|
|
if (response.data) {
|
|
|
- const file = response.data;
|
|
|
+ const file = Buffer.from(response.data, 'arraybuffer').toString('base64');
|
|
|
let decodeFile = null;
|
|
|
try {
|
|
|
const param = {
|
|
|
- apiKey: process.env.GATE_WAY_KEY,
|
|
|
+ apiKey: gateWayKey,
|
|
|
email : req.session.account.idTokenClaims.email,
|
|
|
dispFileName: data.name,
|
|
|
comment: "",
|
|
|
- fileData: Buffer.from(file).toString("base64")
|
|
|
+ fileData: file
|
|
|
}
|
|
|
+
|
|
|
const result = await axios.post('http://192.168.20.99:5050/api/v1/stream/delete-label', param);
|
|
|
- if (result && result.data.statusCode === 200) {
|
|
|
- var binaryString = atob(result.data.result.fileData);
|
|
|
- var bytes = new Uint8Array(binaryString.length);
|
|
|
- for (var i = 0; i < binaryString.length; i++) {
|
|
|
- bytes[i] = binaryString.charCodeAt(i);
|
|
|
- }
|
|
|
- decodeFile = bytes.buffer;
|
|
|
+ if (result && result.data.statusCode === 200 && !result.data.result.errorCode) {
|
|
|
+ decodeFile = result.data.result.fileData;
|
|
|
}
|
|
|
else {
|
|
|
- return res.json({message: '레이블 해제 중 오류가 발생하였습니다.<br>' + result.data.message, success: 'F'});
|
|
|
+ return res.json({message: '파일명 : ' +data.name + '<br>에러 : ' + result.data.result.errorMessage, success: 'F'});
|
|
|
}
|
|
|
}
|
|
|
catch(error) {
|
|
@@ -891,11 +873,7 @@ serverApp.post('/api/folderMove', async (req, res, next)=>{
|
|
|
const resultObj = {message:'폴더 이동에 실패 하였습니다.', success: 'F'};
|
|
|
if (name && isNaN(name)) {
|
|
|
const nameArray = JSON.parse(name);
|
|
|
- const options = {
|
|
|
- headers: {
|
|
|
- Authorization: `Bearer ${req.session.accessToken}`,
|
|
|
- },
|
|
|
- };
|
|
|
+ const options = getOptions(req.session.accessToken);
|
|
|
|
|
|
if (nameArray && nameArray.length > 0) {
|
|
|
for (let moveItem of nameArray) {
|
|
@@ -1013,7 +991,7 @@ function createZipFile(obj, zip) {
|
|
|
|
|
|
if (obj.files.length > 0) {
|
|
|
for (let file of obj.files) {
|
|
|
- zip.file(file.name, file.data);
|
|
|
+ zip.file(file.name, file.data, {base64: true});
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -1057,34 +1035,12 @@ async function getFolderItems(url, array, options, session) {
|
|
|
const response = await axios.get(dataUrl, {responseType: 'arraybuffer', headers: {
|
|
|
withCredentials:true,
|
|
|
},});
|
|
|
+
|
|
|
//암호화 해제
|
|
|
- let decodeFile;
|
|
|
- try {
|
|
|
- const param = {
|
|
|
- apiKey: process.env.GATE_WAY_KEY,
|
|
|
- email : session.account.idTokenClaims.email,
|
|
|
- dispFileName: data.name,
|
|
|
- comment: "",
|
|
|
- fileData: Buffer.from(response.data).toString("base64")
|
|
|
- }
|
|
|
- const result = await axios.post('http://192.168.20.99:5050/api/v1/stream/delete-label', param);
|
|
|
- if (result && result.data.statusCode === 200) {
|
|
|
- var binaryString = atob(result.data.result.fileData);
|
|
|
- var bytes = new Uint8Array(binaryString.length);
|
|
|
- for (var i = 0; i < binaryString.length; i++) {
|
|
|
- bytes[i] = binaryString.charCodeAt(i);
|
|
|
- }
|
|
|
- decodeFile = bytes.buffer;
|
|
|
- }
|
|
|
- else {
|
|
|
- return res.json({message: '레이블 해제 중 오류가 발생하였습니다.<br>' + result.data.message, success: 'F'});
|
|
|
- }
|
|
|
- }
|
|
|
- catch(error) {
|
|
|
- return res.json({message: '레이블 해제 중 오류가 발생하였습니다.<br>' + JSON.stringify(error.message), success: 'F'});
|
|
|
+ const result = await deleteLabelFile(session, data.name, response.data);
|
|
|
+ if (!result.error && result.fileData) {
|
|
|
+ files.push({name : data.name, data : result.fileData, type: data.file.mimeType});
|
|
|
}
|
|
|
-
|
|
|
- files.push({name : data.name, data : decodeFile, type: data.file.mimeType});
|
|
|
// files.push({name : data.name, data : response.data, type: data.file.mimeType});
|
|
|
}
|
|
|
}
|
|
@@ -1123,11 +1079,7 @@ serverApp.post('/api/delete',
|
|
|
if (siteId && itemIds) {
|
|
|
const itemIdArr = JSON.parse(itemIds);
|
|
|
if (itemIdArr.length > 0) {
|
|
|
- const options = {
|
|
|
- headers: {
|
|
|
- Authorization: `Bearer ${req.session.accessToken}`,
|
|
|
- },
|
|
|
- };
|
|
|
+ const options = getOptions(req.session.accessToken);
|
|
|
for (let itemId of itemIdArr) {
|
|
|
try{
|
|
|
await axios.delete(endPoint + "/sites/"+ siteId + "/drive/items/" + itemId, options);
|
|
@@ -1164,11 +1116,7 @@ serverApp.post('/api/update-name',
|
|
|
const {siteId, itemId, name} = req.body;
|
|
|
const resultObj = {success: '', message:''};
|
|
|
if (siteId && itemId && name) {
|
|
|
- const options = {
|
|
|
- headers: {
|
|
|
- Authorization: `Bearer ${req.session.accessToken}`,
|
|
|
- },
|
|
|
- };
|
|
|
+ const options = getOptions(req.session.accessToken);
|
|
|
try{
|
|
|
await axios.patch(endPoint + "/sites/"+ siteId + "/drive/items/" + itemId, {name : name}, options);
|
|
|
}
|
|
@@ -1200,12 +1148,7 @@ serverApp.post('/api/move-item',
|
|
|
const resultObj = {message:'', successItems : [], failItems : [], locations: []};
|
|
|
if (name && isNaN(name)) {
|
|
|
const nameArray = JSON.parse(name);
|
|
|
- const options = {
|
|
|
- headers: {
|
|
|
- Authorization: `Bearer ${req.session.accessToken}`,
|
|
|
- ContentType: "application/json",
|
|
|
- },
|
|
|
- };
|
|
|
+ const options = getOptions(req.session.accessToken);
|
|
|
|
|
|
if (nameArray && nameArray.length > 0) {
|
|
|
for (let moveItem of nameArray) {
|
|
@@ -1248,12 +1191,7 @@ async (req, res, next)=>{
|
|
|
const resultObj = {message:'', successItems : [], failItems : [], locations: []};
|
|
|
if (name && isNaN(name)) {
|
|
|
const nameArray = JSON.parse(name);
|
|
|
- const options = {
|
|
|
- headers: {
|
|
|
- Authorization: `Bearer ${req.session.accessToken}`,
|
|
|
- ContentType: "application/json",
|
|
|
- },
|
|
|
- };
|
|
|
+ const options = getOptions(req.session.accessToken);
|
|
|
|
|
|
if (nameArray && nameArray.length > 0) {
|
|
|
for (let moveItem of nameArray) {
|
|
@@ -1321,12 +1259,7 @@ async (req, res, next)=>{
|
|
|
const {name, siteId, path, teamId, teamName, bindId} = req.body;
|
|
|
const resultObj = {message:'', success: 'F'};
|
|
|
if (name && siteId && path && teamId && teamName) {
|
|
|
- const options = {
|
|
|
- headers: {
|
|
|
- Authorization: `Bearer ${req.session.accessToken}`,
|
|
|
- ContentType: "application/json",
|
|
|
- },
|
|
|
- };
|
|
|
+ const options = getOptions(req.session.accessToken);
|
|
|
|
|
|
try {
|
|
|
const teamInfo = await axios.get(`${endPoint}/teams/${teamId}/channels`, options);
|
|
@@ -1383,24 +1316,141 @@ async (req, res, next)=>{
|
|
|
// });
|
|
|
|
|
|
async function getPossibleExt() {
|
|
|
+ const resultObj = {
|
|
|
+ success : 'F',
|
|
|
+ message : null,
|
|
|
+ data : null,
|
|
|
+ }
|
|
|
const sqlQuery =
|
|
|
`SELECT
|
|
|
A.ConfigValue AS supported_file_ext,
|
|
|
B.ConfigValue AS protected_file_ext
|
|
|
- FROM (SELECT * FROM TB_AIP_CONFIG WHERE ConfigKey = 'SupportedFileExt') A,
|
|
|
- (SELECT * FROM TB_AIP_CONFIG WHERE ConfigKey = 'ProtectedFileExt') B`;
|
|
|
+ FROM (SELECT * FROM TB_AIP_CONFIG WHERE ConfigKey = 'SupportedFileExt' AND AipServerId = 0) A,
|
|
|
+ (SELECT * FROM TB_AIP_CONFIG WHERE ConfigKey = 'ProtectedFileExt' AND AipServerId = 0) B`;
|
|
|
try {
|
|
|
const query = await pool;
|
|
|
const result = await query.request().query(sqlQuery);
|
|
|
- if (result) {
|
|
|
- return result.recordset[0];
|
|
|
+ if (result && result.recordset.length) {
|
|
|
+ resultObj.success = 'S';
|
|
|
+ resultObj.message = 'Success';
|
|
|
+ resultObj.data = result.recordset[0];
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ resultObj.success = 'F';
|
|
|
+ resultObj.message = "Not Found Data";
|
|
|
}
|
|
|
}
|
|
|
catch(error) {
|
|
|
console.log(error);
|
|
|
+ resultObj.success = 'F';
|
|
|
+ resultObj.message = JSON.stringify(error);
|
|
|
}
|
|
|
+
|
|
|
+ return resultObj;
|
|
|
}
|
|
|
|
|
|
+async function setLabelFile(session, file, supported_file_ext) {
|
|
|
+ const resultObj = {
|
|
|
+ success : 'F',
|
|
|
+ message : null,
|
|
|
+ fileData : null,
|
|
|
+ }
|
|
|
+
|
|
|
+ const originName = file.originalname;
|
|
|
+
|
|
|
+ // 파일 확장자
|
|
|
+ if (originName && originName.lastIndexOf('.') >= 0) {
|
|
|
+ const ext = originName.substring(originName.lastIndexOf('.'), originName.length);
|
|
|
+ if (supported_file_ext) {
|
|
|
+ let supportedArr = supported_file_ext.split(';');
|
|
|
+
|
|
|
+ if (!supportedArr[supportedArr.length - 1]) {
|
|
|
+ supportedArr.splice(supportedArr.length - 1);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!supportedArr.includes(ext)) {
|
|
|
+ resultObj.status = 500;
|
|
|
+ resultObj.error = '파일명 : ' + originName
|
|
|
+ +'<br>해당 파일은 업로드 불가 파일입니다. 다시 시도해주세요.<br>가능 확장자 :'
|
|
|
+ + JSON.stringify(supportedArr);
|
|
|
+ return resultObj;
|
|
|
+ }
|
|
|
+
|
|
|
+ const fileData = Buffer.from(file.buffer).toString('base64');
|
|
|
+ console.log('=================fileData =================================');
|
|
|
+ console.log(fileData);
|
|
|
+ const param = {
|
|
|
+ apiKey: gateWayKey,
|
|
|
+ email: session.account.idTokenClaims.email,
|
|
|
+ dispFileName: originName,
|
|
|
+ aipGuid: "878173ae-cc36-4881-af57-604af868314c",
|
|
|
+ comment: "",
|
|
|
+ fileData: fileData
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ const result = await axios.post('http://192.168.20.99:5050/api/v1/stream/set-label', param);
|
|
|
+ if (result) {
|
|
|
+ if (result.data.statusCode === 200 && !result.data.result.errorCode) {
|
|
|
+ resultObj.fileData = Buffer.from(result.data.result.fileData, "base64");
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ console.log(result.data);
|
|
|
+ resultObj.success = 'F';
|
|
|
+ resultObj.message = '파일명 : ' + originName + '<br>에러 : ' + result.data.result.errorMessage;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch(error) {
|
|
|
+ console.log(error);
|
|
|
+ resultObj.success = 'F';
|
|
|
+ resultObj.message = '레이블 설정 중 오류가 발생하였습니다.<br>' + JSON.stringify(error.message);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return resultObj;
|
|
|
+}
|
|
|
+
|
|
|
+async function deleteLabelFile(session, name, file) {
|
|
|
+ const resultObj = {
|
|
|
+ error : false,
|
|
|
+ errorMessage : null,
|
|
|
+ fileData : null,
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ const param = {
|
|
|
+ apiKey: gateWayKey,
|
|
|
+ email : session.account.idTokenClaims.email,
|
|
|
+ dispFileName: name,
|
|
|
+ comment: "",
|
|
|
+ fileData: file
|
|
|
+ }
|
|
|
+
|
|
|
+ const result = await axios.post('http://192.168.20.99:5050/api/v1/stream/delete-label', param);
|
|
|
+ if (result && result.data.statusCode === 200 && !result.data.result.errorCode) {
|
|
|
+ resultObj.fileData = result.data.result.fileData;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ resultObj.error = true;
|
|
|
+ resultObj.errorMessage = '파일명 : ' +data.name + '<br>에러 : ' + result.data.result.errorMessage;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch(error) {
|
|
|
+ resultObj.error = true;
|
|
|
+ resultObj.errorMessage = '레이블 해제 중 오류가 발생하였습니다.<br>' + JSON.stringify(error.message);
|
|
|
+ }
|
|
|
+ return resultObj;
|
|
|
+}
|
|
|
+
|
|
|
+function getOptions(token) {
|
|
|
+ const options = {
|
|
|
+ headers: {
|
|
|
+ Authorization: `Bearer ${token}`,
|
|
|
+ },
|
|
|
+ };
|
|
|
+ return options;
|
|
|
+}
|
|
|
|
|
|
server.listen(SERVER_PORT, function () {
|
|
|
console.log(`\n${serverApp.name} listening to ${SERVER_PORT}`);
|