| 
					
				 | 
			
			
				@@ -49,6 +49,7 @@ const cca = new msal.ConfidentialClientApplication(msalConfig); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const {Document, Packer, Paragraph, TextRun} = require('docx'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const messages = require('dote/src/messages.js'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const { rejects } = require('assert'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 let WebSocketServer = require('websocket').server; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 // const redirectUri = 'https://localhost:53000/redirect'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const redirectUri = 'https://localhost:53000/redirect'; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -372,7 +373,7 @@ serverApp.post('/api/makeFolder', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           resultObj.message = "생성할 폴더 경로를 찾을 수 없습니다."; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       catch(error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         resultObj.message = "폴더 생성 중 오류가 발생하였습니다.<br>" + getErrorMessage(error); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -381,7 +382,7 @@ serverApp.post('/api/makeFolder', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       res.json(resultObj); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function getErrorMessage(error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+function getErrorMessage(error) {    
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   let errorText = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (error.response && error.response.status && error.response.statusText && error.response.data  && error.response.data.error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     // console.log(error.response); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -393,8 +394,8 @@ function getErrorMessage(error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     console.log('================================ Error =====================================') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     console.log(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    errorText = error; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    errorText = error;  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return errorText; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -664,153 +665,79 @@ serverApp.post('/api/check-name', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-async function uploadDrive(options, folder, siteId, path, res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+async function uploadDrive(options, folder, siteId, path) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   const startTime = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (folder) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (!Array.isArray(folder)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      folder = [folder]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    for (let item of folder) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const fileInfo = JSON.parse(item); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const resultObj = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    success : 'S', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    message : '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const param = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        name: fileInfo.name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        folder: {}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        '@microsoft.graph.conflictBehavior': 'rename' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (!Array.isArray(folder)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    folder = [folder]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  for (let item of folder) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const fileInfo = JSON.parse(item); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      let folderPath = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      if (fileInfo.path) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        folderPath = fileInfo.path;  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (!path.includes(':')) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          folderPath = ":" + folderPath; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      let uri = endPoint + "/sites/"+ siteId + path + folderPath; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const result = await new Promise (async (resolve, reject)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const sitesInfo = await axios.get(uri, options); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            resolve(sitesInfo.data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          catch(error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (error.response) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              reject(error.response); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              reject(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }).then(async (result)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          return await new Promise(async (resolve, reject)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              const uploadFolder = await axios.post(endPoint + "/sites/"+ siteId +"/drive/items/" + result.id +"/children", param, options); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              resolve(uploadFolder.data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            catch(error){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              if (error.response) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                reject(error.response); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                reject(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      catch(error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return res.json({success:'F', message: '요청하신 파일 업로드 중 오류가 발생하였습니다.<br>' + getErrorMessage(error)}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const param = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      name: fileInfo.name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      folder: {}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // '@microsoft.graph.conflictBehavior': 'rename' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let folderPath = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (fileInfo.path) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      folderPath = fileInfo.path;  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (!path.includes(':')) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        folderPath = ":" + folderPath; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const makeFolderTime = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let uri = endPoint + "/sites/"+ siteId + path + folderPath; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const result = await new Promise (async (resolve, reject)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        axios.get(uri, options).then((sitesInfo)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          resolve(sitesInfo.data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        .catch((error)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          reject(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    .then(async (result)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return await new Promise(async (resolve, reject)=>{  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          axios.post(endPoint + "/sites/"+ siteId +"/drive/items/" + result.id +"/children", param, options) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              .then((uploadFolder)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                resolve(uploadFolder.data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              .catch((error)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                reject(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    .catch((error)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return {success:'F', message: '요청하신 파일 업로드 중 오류가 발생하였습니다.<br>' + getErrorMessage(error)}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    console.log('폴더 시작 시간 :', startTime.toLocaleString(), ', 폴더 종료 시간 :', makeFolderTime.toLocaleString(), ', 소요 시간 :', timeCheck(startTime, makeFolderTime)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (result.success === 'F') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const makeFolderTime = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  console.log('폴더 시작 시간 :', startTime.toLocaleString(), ', 폴더 종료 시간 :', makeFolderTime.toLocaleString(), ', 소요 시간 :', timeCheck(startTime, makeFolderTime)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return resultObj; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 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, file_path} = req.body; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let {siteId, path, folder, file_path} = req.body;  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (siteId && path) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       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]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //     for (let item of folder) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //       const fileInfo = JSON.parse(item); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //       const param = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //         name: fileInfo.name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //         folder: {}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //         '@microsoft.graph.conflictBehavior': 'rename' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //       }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //       let folderPath = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //       if (fileInfo.path) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //         folderPath = fileInfo.path;  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //         if (!path.includes(':')) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //           folderPath = ":" + folderPath; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //       let uri = endPoint + "/sites/"+ siteId + path + folderPath; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //       try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //         const result = await new Promise (async (resolve, reject)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //           try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //             const sitesInfo = await axios.get(uri, options); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //             resolve(sitesInfo.data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //           } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //           catch(error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //             if (error.response) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //               reject(error.response); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //             else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //               reject(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //           } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //         }).then(async (result)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //           return await new Promise(async (resolve, reject)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //             try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //               const uploadFolder = await axios.post(endPoint + "/sites/"+ siteId +"/drive/items/" + result.id +"/children", param, options); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //               resolve(uploadFolder.data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //             catch(error){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //               if (error.response) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //                 reject(error.response); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //               } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //               else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //                 reject(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //               } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //           }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //         }).catch((error)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //           console.log(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //         }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //       catch(error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //         return res.json({success:'F', message: '요청하신 파일 업로드 중 오류가 발생하였습니다.<br>' + getErrorMessage(error)}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //     const makeFolderTime = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //     let betweenTime = makeFolderTime - startTime; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //     if (betweenTime > 60000) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //       betweenTime = (betweenTime/1000/60) + ' 분'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //     else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //       betweenTime = (betweenTime/1000) + ' 초'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //       console.log('폴더 시작 시간 :', startTime.toLocaleString(), ', 폴더 종료 시간 :', makeFolderTime.toLocaleString(), ', 소요 시간 :', betweenTime); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      await uploadDrive(options, folder, siteId, path, res); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (folder){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const uploadDriveResult = await uploadDrive(options, folder, siteId, path); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (uploadDriveResult.success === 'F') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          return res.json(uploadDriveResult); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         const promiseArray = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         const labelPromiseArray = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         const fileWriteArray = []; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1080,150 +1007,209 @@ serverApp.post('/api/download', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   // isAuthenticated, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   // isAccessTokens, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   async (req, res, next)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    let startTime = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (req.body) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      let startTime = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       const {siteId, path, fileIds, zipName} = req.body; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       if (siteId && path && fileIds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        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); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          if (sitesInfo && sitesInfo.data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const data = sitesInfo.data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (data.folder) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              const folderObj = await getFolderItems(endPoint + "/sites/"+ siteId + "/drive/items/", arr, options, req.session); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              const zip = new JSZIP(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              if (folderObj) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                createZipFile(folderObj, zip); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                const now = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                const year = now.getFullYear().toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                let month = now.getMonth() + 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (month < 10) month = "0" + month; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                let date = now.getDate(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (date < 10) date = "0" + date; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                zip.generateAsync({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  type: 'nodebuffer', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  mimeType: 'application/epub+zip', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  compression: 'DEFLATE', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  compressionOptions: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    level: 9 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                }).then((resZip)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  const endTime = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  let betweenTime = endTime - startTime; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  if (betweenTime > 60000) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    betweenTime = (betweenTime/1000/60) + ' 분'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    betweenTime = (betweenTime/1000) + ' 초';        
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  console.log('시작 시간 :', startTime.toLocaleString(), ', 종료 시간 :', endTime.toLocaleString(), ', 소요 시간 :', betweenTime); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  return res.json({success: 'S', data: resZip, name: data.name + '_' + year + '-' + month + '-' + date + '.zip'}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .catch((error)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  console.log(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  return res.json({success: 'F', message:'파일 다운로드 중 오류가 발생하였습니다.', error: error}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              const dataUrl = data['@microsoft.graph.downloadUrl']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              const response = await axios.get(dataUrl, {responseType: 'arraybuffer', headers: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                withCredentials:true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              },}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              if (response.data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                const file = Buffer.from(response.data, 'arraybuffer').toString('base64'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                let decodeFile = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  const param = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    apiKey: gateWayKey, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    email : req.session.account.idTokenClaims.email, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    dispFileName: data.name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    comment: "", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    fileData: file 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  const result = await axios.post(apiUrl + '/api/v1/stream/delete-label', param); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  if (result && result.data.statusCode === 200 && !result.data.result.errorCode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      decodeFile = result.data.result.fileData; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      return res.json({message: '파일명 : ' +data.name + '<br>에러 : ' + result.data.result.errorMessage, success: 'F'}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                catch(error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  return res.json({message: '레이블 해제 중 오류가 발생하였습니다.<br>' + JSON.stringify(error.message), success: 'F'}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                const endTime = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                let betweenTime = endTime - startTime; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (betweenTime > 60000) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  betweenTime = (betweenTime/1000/60) + ' 분'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  betweenTime = (betweenTime/1000) + ' 초';        
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                console.log('시작 시간 :', startTime.toLocaleString(), ', 종료 시간 :', endTime.toLocaleString(), ', 소요 시간 :', betweenTime); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                return res.json({success: 'S', data: decodeFile, type: data.file.mimeType, name: data.name}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                return res.json({message:'파일 다운로드에 실패하였습니다.', success:'F'}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          const options = getOptions(req.session.accessToken); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          const arr = JSON.parse(fileIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          const url = endPoint + "/sites/"+ siteId + "/drive/items/"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          const zip = new JSZIP(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          const downObj = await getFolderItems(url, arr, options, req.session); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          const folderLength = downObj.folder.length; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          const fileLength = downObj.files.length; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          if (downObj && (folderLength > 1 || fileLength > 1 || (folderLength + fileLength) > 1)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            createZipFile(downObj, zip); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const now = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const year = now.getFullYear().toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let month = now.getMonth() + 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (month < 10) month = "0" + month; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let date = now.getDate(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (date < 10) date = "0" + date; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            zip.generateAsync({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              type: 'nodebuffer', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              mimeType: 'application/epub+zip', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              compression: 'DEFLATE', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              compressionOptions: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                level: 9 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }).then((resZip)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              const endTime = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              console.log('시작 시간 :', startTime.toLocaleString(), ', 종료 시간 :', endTime.toLocaleString(), ', 소요 시간 :', timeCheck(startTime, endTime)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              return res.json({success: 'S', data: resZip, name: zipName + '_' + year + '-' + month + '-' + date + '.zip'}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            .catch((error)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              console.log(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              return res.json({success: 'F', message:'파일 다운로드 중 오류가 발생하였습니다.', error: error}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          else if (downObj.folder.length > 0 && downObj.files.length === 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return res.json({success:'F', messages:'폴더안에 파일이 존재하지 않습니다.'}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          else if (downObj.files.length === 1){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const data = downObj.files[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            console.log(data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return res.json({success: 'S', data: data.data, name: data.name}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              const url = endPoint + "/sites/"+ siteId + "/drive/items/"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              const zip = new JSZIP(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              const downObj = await getFolderItems(url, arr, options, req.session); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              if (downObj) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                createZipFile(downObj, zip); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                const now = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                const year = now.getFullYear().toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                let month = now.getMonth() + 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (month < 10) month = "0" + month; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                let date = now.getDate(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (date < 10) date = "0" + date; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                zip.generateAsync({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  type: 'nodebuffer', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  mimeType: 'application/epub+zip', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  compression: 'DEFLATE', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  compressionOptions: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    level: 9 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                }).then((resZip)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  const endTime = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  let betweenTime = endTime - startTime; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  if (betweenTime > 60000) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    betweenTime = (betweenTime/1000/60) + ' 분'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    betweenTime = (betweenTime/1000) + ' 초';        
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  console.log('시작 시간 :', startTime.toLocaleString(), ', 종료 시간 :', endTime.toLocaleString(), ', 소요 시간 :', betweenTime); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  return res.json({success: 'S', data: resZip, name: zipName + '_' + year + '-' + month + '-' + date + '.zip'}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .catch((error)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  console.log(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  return res.json({success: 'F', message:'파일 다운로드 중 오류가 발생하였습니다.', error: error}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            catch(err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              // console.log(sitesInfo.data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              console.log(err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          // } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return res.json({message:'다운로드 파일 정보를 확인 할 수 없습니다.', success:'F'}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    catch(error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return res.json({success: 'F', message:'파일 다운로드 중 오류가 발생하였습니다.<br>'+ getErrorMessage(error)}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// serverApp.post('/api/download', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//   // isAuthenticated, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//   // isAccessTokens, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//   async (req, res, next)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//     try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//       let startTime = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//       if (req.body) {  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//         const {siteId, path, fileIds, zipName} = req.body; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//         if (siteId && path && fileIds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//           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); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//             if (sitesInfo && sitesInfo.data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//               const data = sitesInfo.data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//               if (data.folder) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                   const folderObj = await getFolderItems(endPoint + "/sites/"+ siteId + "/drive/items/", arr, options, req.session); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                   // return res.json({success: 'F', message:'test', obj : folderObj}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                   const zip = new JSZIP(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                   if (folderObj) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                     createZipFile(folderObj, zip); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                     const now = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                     const year = now.getFullYear().toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                     let month = now.getMonth() + 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                     if (month < 10) month = "0" + month; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                     let date = now.getDate(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                     if (date < 10) date = "0" + date; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                     zip.generateAsync({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                       type: 'nodebuffer', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                       mimeType: 'application/epub+zip', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                       compression: 'DEFLATE', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                       compressionOptions: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                         level: 9 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                       }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                     }).then((resZip)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                       const endTime = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                       let betweenTime = endTime - startTime; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                       if (betweenTime > 60000) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                         betweenTime = (betweenTime/1000/60) + ' 분'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                       else {  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                         betweenTime = (betweenTime/1000) + ' 초';        
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                       console.log('시작 시간 :', startTime.toLocaleString(), ', 종료 시간 :', endTime.toLocaleString(), ', 소요 시간 :', betweenTime); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                       return res.json({success: 'S', data: resZip, name: data.name + '_' + year + '-' + month + '-' + date + '.zip'}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                     }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                     .catch((error)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                       console.log(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                       return res.json({success: 'F', message:'파일 다운로드 중 오류가 발생하였습니다.', error: error}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                     }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+               
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//             else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//               const dataUrl = data['@microsoft.graph.downloadUrl']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//               const response = await axios.get(dataUrl, {responseType: 'arraybuffer', headers: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                 withCredentials:true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//               },}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//               if (response.data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                 const file = Buffer.from(response.data, 'arraybuffer').toString('base64'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                 let decodeFile = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                 try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                   const param = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                     apiKey: gateWayKey, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                     email : req.session.account.idTokenClaims.email, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                     dispFileName: data.name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                     comment: "", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                     fileData: file 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                   const result = await axios.post(apiUrl + '/api/v1/stream/delete-label', param); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                   if (result && result.data.statusCode === 200 && !result.data.result.errorCode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                       decodeFile = result.data.result.fileData; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                   else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                       return res.json({message: '파일명 : ' +data.name + '<br>에러 : ' + result.data.result.errorMessage, success: 'F'}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                 catch(error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                   return res.json({message: '레이블 해제 중 오류가 발생하였습니다.<br>' + JSON.stringify(error.message), success: 'F'}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                 const endTime = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                 let betweenTime = endTime - startTime; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                 if (betweenTime > 60000) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                   betweenTime = (betweenTime/1000/60) + ' 분'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                 else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                   betweenTime = (betweenTime/1000) + ' 초';        
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                 console.log('시작 시간 :', startTime.toLocaleString(), ', 종료 시간 :', endTime.toLocaleString(), ', 소요 시간 :', betweenTime); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                 return res.json({success: 'S', data: decodeFile, type: data.file.mimeType, name: data.name}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//               } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//               else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                 return res.json({message:'파일 다운로드에 실패하였습니다.', success:'F'}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//               } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//           } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//         else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//             try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//               const url = endPoint + "/sites/"+ siteId + "/drive/items/"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//               const zip = new JSZIP(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//               const downObj = await getFolderItems(url, arr, options, req.session); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//               if (downObj) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                 createZipFile(downObj, zip); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                 const now = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                 const year = now.getFullYear().toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                 let month = now.getMonth() + 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                 if (month < 10) month = "0" + month; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                 let date = now.getDate(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                 if (date < 10) date = "0" + date; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                 zip.generateAsync({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                   type: 'nodebuffer', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                   mimeType: 'application/epub+zip', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                   compression: 'DEFLATE', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                   compressionOptions: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                     level: 9 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                   }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                 }).then((resZip)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                   const endTime = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                   console.log('시작 시간 :', startTime.toLocaleString(), ', 종료 시간 :', endTime.toLocaleString(), ', 소요 시간 :', timeCheck(startTime, endTime)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                   return res.json({success: 'S', data: resZip, name: zipName + '_' + year + '-' + month + '-' + date + '.zip'}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                 }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                 .catch((error)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                   console.log(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                   return res.json({success: 'F', message:'파일 다운로드 중 오류가 발생하였습니다.', error: error}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                 }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//               } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//             catch(err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//               console.log(err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//               return res.json({success: 'F', message:'파일 다운로드 중 오류가 발생하였습니다.', error: getErrorMessage(err)}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//           } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//         else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//           return res.json({message:'다운로드 파일 정보를 확인 할 수 없습니다.', success:'F'}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//     catch(error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//       return res.json({success: 'F', message:'파일 다운로드 중 오류가 발생하였습니다.<br>'+ getErrorMessage(error)}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 serverApp.post('/api/folderMove', async (req, res, next)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (req.body) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     const {id, name, siteId, driveId, text, moveSiteId, movePath} = req.body; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1328,13 +1314,13 @@ async function findSubFolder(data, movePath, moveSiteId, options) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 function createZipFile(obj, zip) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (obj.files.length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (obj.files && obj.files.length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     for (let file of obj.files) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       zip.file(file.name, file.data, {base64: true}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (obj.folder.length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (obj.folder && obj.folder.length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     for (let folder of obj.folder) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       zip.folder(folder.name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       if (folder.subFolder) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1345,46 +1331,89 @@ function createZipFile(obj, zip) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 async function getFolderItems(url, array, options, session) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  const files = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  // let subFolder = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  let folder = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const files         = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const folder        = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const sitesInfoArr  = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const fileArr       = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const fileInfoArr   = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const folderCheckTime = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   for (let fileId of array) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const sitesInfo = await axios.get(url + fileId, options); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const data = sitesInfo.data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    sitesInfoArr.push(axios.get(url + fileId, options)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const siteInfos = await Promise.all(sitesInfoArr).catch((error)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    console.log(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  for (let site of siteInfos) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const data = site.data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       if (data.folder) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         const folderObj = {name : data.name, subFolder : []}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (data.folder.childCount) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          const itemsData = await axios.get(url + fileId + '/children', options); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          const itemsData = await axios.get(url + data.id + '/children', options); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           if (itemsData && itemsData.data && itemsData.data.value.length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             const idArr = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             for (let children of itemsData.data.value) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               idArr.push(children.id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            let result = await getFolderItems(url, idArr, options, session); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              let result = await getFolderItems(url, idArr, options, session); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              folderObj.subFolder = result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            catch(error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              if (error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                throw error; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // subFolder.push(result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            folderObj.subFolder = result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         folder.push(folderObj); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         const dataUrl = data['@microsoft.graph.downloadUrl']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const response = await axios.get(dataUrl, {responseType: 'arraybuffer', headers: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          withCredentials:true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        },}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //암호화 해제 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        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 : response.data, type: data.file.mimeType}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const fileOption = {responseType: 'arraybuffer', headers: { withCredentials : true }}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        fileArr.push(axios.get(dataUrl, fileOption)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        fileInfoArr.push(data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  console.log('======================= folder check end ===============================') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  console.log('folder check 소요시간 : ', timeCheck(folderCheckTime, new Date())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  console.log('======================= delete label start ===============================') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const fileDataArr = await Promise.all(fileArr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const deleteLabelTime = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const deleteLabelArr = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  for (let idx in fileDataArr) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let fileData = fileDataArr[idx].data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const param = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      apiKey: gateWayKey, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      email : session.account.idTokenClaims.email, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      dispFileName: fileInfoArr[idx].name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      comment: "", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      fileData: Buffer.from(fileData).toString('base64') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    deleteLabelArr.push(axios.post(apiUrl + '/api/v1/stream/delete-label', param)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const deleteLabelFiles = await Promise.all(deleteLabelArr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  for (let idx in deleteLabelFiles) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const fileObj = deleteLabelFiles[idx]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const data = fileObj.data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (data.success && !data.result.errorCode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      files.push({name : fileInfoArr[idx].name, data: data.result.fileData}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      throw data.result.dispFileName + ' : ' + data.result.errorMessage; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  console.log('======================= delete label end ===============================') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  console.log('delete label 소요시간 : ',timeCheck(deleteLabelTime, new Date())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   const resultObj = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     folder : folder, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     files : files, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1762,14 +1791,16 @@ async function deleteLabelFile(session, name, file) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       resultObj.error = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      resultObj.errorMessage = '파일명 : ' +data.name + '<br>에러 : ' + result.data.result.errorMessage; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      resultObj.errorMessage = '파일명 : ' + name + '<br>에러 : ' + result.data.result.errorMessage; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      console.log(result.data.result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  catch(error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  catch(error) {  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    console.log(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     resultObj.error = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     resultObj.errorMessage = '레이블 해제 중 오류가 발생하였습니다.<br>' + JSON.stringify(error.message); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  return resultObj; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return resultObj;  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 function getOptions(token) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1783,7 +1814,7 @@ function getOptions(token) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 serverApp.use((err, req, res, next)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   console.log(err.message); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  console.log(err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // console.log(err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   console.log(res.statusCode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     res.status(400); 
			 |