| 
					
				 | 
			
			
				@@ -14,18 +14,17 @@ const JSZIP = require('jszip'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 require('dotenv').config({ path: './env/.env.local' }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const session = require('express-session'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const multer  = require('multer'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const XLSX = require('xlsx'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const pptxgen = require('pptxgenjs'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// const XLSX = require('xlsx'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// const pptxgen = require('pptxgenjs'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const msal = require('@azure/msal-node'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const FormData = require("form-data"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const {pool, sql} = require('./config/sql.js'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const { v4: uuidv4 } = require('uuid'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// const FormData = require("form-data"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// const { v4: uuidv4 } = require('uuid'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const {init} = require('./ext.js'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 let POSSIBLE_EXT; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const apiUrl = 'http://192.168.20.99:5050'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const createErrors = require('http-errors'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// const createErrors = require('http-errors'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const gateWayKey = process.env.GATE_WAY_KEY; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -47,9 +46,9 @@ const msalConfig = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const cca = new msal.ConfidentialClientApplication(msalConfig); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const {Document, Packer, Paragraph, TextRun} = require('docx'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const messages = require('dote/src/messages.js'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const { rejects } = require('assert'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 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'; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -107,12 +106,10 @@ wsServer.on('request', function(req) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           getPercentageComplete(value, connection); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         catch (error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          // console.log(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           console.log(error.message); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           console.log(error.name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           console.log(error.errors); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           connection.sendUTF(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          // return res.json(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -123,9 +120,11 @@ async function getPercentageComplete(url, connection) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   const result = await axios.get(url); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (result && result.data && result.data.percentageComplete >= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     const percent = result.data.percentageComplete; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // console.log(result.data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (percent > 100) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      percent = 100; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     connection.sendUTF(Number(percent.toFixed(2))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (result.data.percentageComplete !== 100) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (result.data.percentageComplete < 100) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       setTimeout(()=>getPercentageComplete(url, connection), 1000); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -140,11 +139,9 @@ serverApp.use(cors(corsOption)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 serverApp.use(bodyParser.json()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 serverApp.get("/tab",  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  // isAuthenticated,  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   async function (req, res, next) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     POSSIBLE_EXT = await init(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     res.sendFile(globalPath.join(__dirname, "/views/hello.html"),  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      // { idTokenClaims: req.session.account.idTokenClaims } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -160,31 +157,7 @@ serverApp.post("/getProfileOnBehalfOf", async (req, res, next) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   req.session.auth = result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return res.send(result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// function isAuthenticated(req, res, next) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//   if (!req.session.isAuthenticated) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//     return res.redirect('/auth/signin'); // redirect to sign-in route 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//   next(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// };  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// function isAccessToken(req, res, next) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//   if (!req.session.accessToken) {  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//     return authProvider.acquireToken({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//       scopes: ['.default'], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//       redirectUri: redirectUri, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//       successRedirect: '/api-redirect' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//     })(req, res, next); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//   next(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// serverApp.get("/auth/signin", authProvider.login({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//   scopes: ['.default'], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//   redirectUri: redirectUri, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//   successRedirect: '/tab' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// })) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// serverApp.post("/redirect", authProvider.handleRedirect()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 serverApp.post("/redirect", (req, res, next)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   console.log(req); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -193,8 +166,6 @@ serverApp.get("/redirect", (req, res, next)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 serverApp.post("/api-get",    
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  // isAuthenticated, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  // isAccessToken,  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   async (req, res, next) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     const uri = req.body.api_uri || req.session.apiUri; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     let param = {}; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -210,7 +181,6 @@ serverApp.post("/api-get", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 serverApp.get("/api-redirect",  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  // isAuthenticated, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   async function (req, res, next) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       const uri = req.session.apiUri; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       let param = {}; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -226,7 +196,6 @@ serverApp.get("/api-redirect", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 serverApp.get("/post-redirect",  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  // isAuthenticated, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   async function (req, res, next) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     const uri = req.session.apiUri; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     let param = {}; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -242,23 +211,6 @@ serverApp.get("/post-redirect", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// serverApp.post("/api-update", authProvider.acquireToken({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//   scopes: [], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//   redirectUri: redirectUri, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//   successRedirect: '/post-redirect' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// })); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// serverApp.post("/api-post", authProvider.acquireToken({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//   scopes: ['.default'], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//   redirectUri: redirectUri, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//   successRedirect: '/post-redirect' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// })); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// serverApp.post("/getGroupList", authProvider.acquireToken({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//     scopes: ['.default'], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//     redirectUri: redirectUri, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//     successRedirect: '/group-redirect' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// })); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 serverApp.post("/getGroupList",  async function (req, res, next) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     // throw new Error('Error'); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -300,15 +252,6 @@ serverApp.post("/getGroupList",  async function (req, res, next) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       if (teams && teams.length) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      // if (public && public.length) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // const options = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //   responseType: 'arraybuffer', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //   headers: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //     Authorization: `Bearer ${req.session.accessToken}`, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //     ConsistencyLevel: 'eventual', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //     withCredentials:true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //   }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         for (let team of teams) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // for (let team of public) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           const item = await getFetch(endPoint + "/groups/"+team.id+"/drive/items/root/children", req.session.accessToken); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -330,23 +273,8 @@ serverApp.post("/getGroupList",  async function (req, res, next) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       next(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   }  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function isAccessTokens(req, res, next) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (!req.session.accessToken) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return authProvider.acquireToken({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      scopes: ['.default'], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      redirectUri: redirectUri, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      successRedirect: req.url 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    })(req, res, next); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  next(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 serverApp.post('/api/makeFolder',  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // isAuthenticated, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // isAccessTokens, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     async (req, res, next)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       const options = getOptions(req.session.accessToken); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -401,158 +329,48 @@ function getErrorMessage(error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return errorText; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-serverApp.post('/api/makeWord',  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // isAuthenticated, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // isAccessTokens, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    async (req, res, next)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const options = getOptions(req.session.accessToken); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const {siteId, path, name} = req.body; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const doc = new Document({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        sections : [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            properties: {}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            children : [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              new Paragraph({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                children: [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      Packer.toBuffer(doc).then(async (buffer)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const resultObj = {message:"", success: 'F'};; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        try{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          const base64EncodeData = Buffer.from(buffer).toString('base64'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          const labelData = await setLabel(gateWayKey, req.session.account.idTokenClaims.email, name,  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      "878173ae-cc36-4881-af57-604af868314c", base64EncodeData, "Make New Word 문서"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          if (labelData.success === 'F') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return res.json(labelData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          const sitesInfo = await axios.get(endPoint + "/sites/"+ siteId + path, options); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          if (sitesInfo.data && sitesInfo.data.id) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const itemId = sitesInfo.data.id; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const result = await axios.put(endPoint + "/sites/"+ siteId +"/drive/items/"+itemId+':/'+name+':/content', labelData.data, options); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (result.data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              resultObj.message = "요청하신 Word 파일이 생성되었습니다.<br>파일명 : "+ name; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              resultObj.success = 'S'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              resultObj.message = "요청하신 Word 파일이 생성되지 않았습니다."; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            resultObj.message = "생성할 폴더 경로를 찾을 수 없습니다."; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        catch(error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          resultObj.message = "요청하신 Word 파일 생성 중 오류가 발생하였습니다.<br>" + getErrorMessage(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        res.send(resultObj); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-serverApp.post('/api/makeExcel',  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // isAuthenticated, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // isAccessTokens, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+serverApp.post('/api/makeFile',  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     async (req, res, next)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      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'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      var wbout = XLSX.write(wb, {bookType:'xlsx',  type: 'buffer'}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const base64EncodeData = Buffer.from(wbout).toString('base64'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-       
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const resultObj = {message:'', success: 'F'}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      try{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const labelData = await setLabel(gateWayKey, req.session.account.idTokenClaims.email, name,  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                        "878173ae-cc36-4881-af57-604af868314c", base64EncodeData, "Make New Excel 통합 문서"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (labelData.success === 'F') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          return res.json(labelData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const parentData = await axios.get(endPoint + "/sites/"+ siteId +path, options); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (parentData.data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          const result = await axios.put(endPoint + "/sites/"+ siteId +"/drive/items/"+parentData.data.id+':/'+name+':/content', labelData.data, options); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          if (result.data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            resultObj.message ='요청하신 Excel 파일이 생성 되었습니다.'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            resultObj.success = 'S'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            resultObj.message = '요청하신 Excel 파일이 생성 되지 않았습니다.'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      catch(error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        resultObj.message = "요청하신 Excel 파일 생성 중 오류가 발생하였습니다.<br>" + getErrorMessage(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      res.json(resultObj); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const result = await createNewFile(req); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return res.json(result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-async function setLabelFiles(param, headers, lengthSync, apiKey, email) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  console.log('======================setLabelFiles=====================================') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  // const param = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  //   apiKey: apiKey, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  //   email: email, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  //   file : files, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // dispFileName: dispFileName, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // aipGuid: aipGuid, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // fileData: fileData, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // comment: comment, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  // } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  const resultObj = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    message : null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    success : 'F', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    data : null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  const errorMessage = '레이블 적용 중 오류가 발생했습니다.<br>에러 : '; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // const result = await axios.post(apiUrl + '/api/v1/stream/set-label', param); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // console.log('실행') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // console.log(param); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const result = await axios.post(apiUrl + '/api/v1/file/encrypt', param, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      headers : { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ...headers, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        "Content-Length" : lengthSync, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // console.log(result.data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (result && result.data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      if (result.data.statusCode === 200 && !result.data.result.errorCode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // resultObj.data = Buffer.from(result.data.result.fileData, "base64"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // console.log(param.get('apiKey')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // console.log(param.get('email')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const infoParam = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          apiKey: apiKey, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          email: email, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          dispFileName: result.data.result.dispFileName, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          realFileName: result.data.result.outputFileName, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // console.log(infoParam); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const infoData = await axios.post(apiUrl + '/api/v1/file/info', infoParam); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // console.log('=================infoData ========================'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // console.log(infoData.data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        resultObj.data = result.data.result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        resultObj.success = 'S';  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        resultObj.message = errorMessage + result.data.result.errorMessage; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+async function createNewFile(req) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const resultObj = {message:'', success: 'F'}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const {siteId, path, name, fileName, ext} = req.body; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  try{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const options = getOptions(req.session.accessToken); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const typeName = fileName.substring(0, fileName.indexOf(' ')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const newFile = fs.readFileSync('./src/static/template/template' + ext); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const base64EncodeData = Buffer.from(newFile).toString('base64'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    console.log(name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const labelData = await setLabel(gateWayKey, req.session.account.idTokenClaims.email, name,  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    "878173ae-cc36-4881-af57-604af868314c", base64EncodeData, "Make New " + fileName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (labelData.success === 'F') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      throw labelData.message; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      resultObj.message = errorMessage + '수신 데이터 없음'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const parentData = await axios.get(endPoint + "/sites/"+ siteId +path, options); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (parentData.data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const result = await axios.put(endPoint + "/sites/"+ siteId +"/drive/items/"+parentData.data.id+':/'+name+':/content', labelData.data, options); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (result.data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        resultObj.message ='요청하신 ' + typeName + ' 파일이 생성 되었습니다.'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        resultObj.success = 'S'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        resultObj.message = '요청하신 ' + typeName + ' 파일이 생성 되지 않았습니다.'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  catch (error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    console.log(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    resultObj.message = errorMessage + JSON.stringify(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  catch(error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    resultObj.message = "요청하신 " + typeName + " 파일 생성 중 오류가 발생하였습니다.<br>" + getErrorMessage(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return resultObj; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 async function setLabel(apiKey, email, dispFileName, aipGuid, fileData, comment) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   const param = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     apiKey: apiKey, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -591,48 +409,7 @@ async function setLabel(apiKey, email, dispFileName, aipGuid, fileData, comment) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return resultObj; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-serverApp.post('/api/makePptx',  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // isAuthenticated, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // isAccessTokens, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    async (req, res, next)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const options = getOptions(req.session.accessToken); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const {siteId, path, name} = req.body; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const pres = new pptxgen(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      pres.addSlide(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const resultObj = {message:'', success: 'F'}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      pres.stream().then(async (data)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        try{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          const base64EncodeData = Buffer.from(data).toString('base64'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          const labelData = await setLabel(gateWayKey, req.session.account.idTokenClaims.email, name,  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      "878173ae-cc36-4881-af57-604af868314c", base64EncodeData, "Make New PowerPoint 프레젠테이션"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          if (labelData.success === 'F') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return res.json(labelData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-           
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          const parentData = await axios.get(endPoint + "/sites/"+ siteId +path, options); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          if (parentData.data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const result = await axios.put(endPoint + "/sites/"+ siteId +"/drive/items/"+parentData.data.id+':/'+name+':/content', labelData.data, options); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (result.data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              resultObj.message ='요청하신 PowerPoint 프레젠테이션 파일이 생성 되었습니다.'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              resultObj.success = 'S'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              resultObj.message = '요청하신 PowerPoint 프레젠테이션 파일이 생성 되지 않았습니다.'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        catch(error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          resultObj.message = "요청하신 PowerPoint 프레젠테이션 파일 생성 중 오류가 발생하였습니다.<br>" + getErrorMessage(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        res.json(resultObj); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 serverApp.post('/api/check-name',  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // isAuthenticated, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // isAccessTokens, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     async (req, res, next)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       const options = getOptions(req.session.accessToken); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -644,10 +421,6 @@ serverApp.post('/api/check-name', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           const result = await axios.get(endPoint + "/sites/"+ siteId +"/drive/items/" + itemId +"/children", options); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           if (result && result.data && result.data.value) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             let idx = result.data.value.findIndex(obj=>obj.name === name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // console.log(name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // console.log(idx); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // console.log((idx > -1)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // console.log(result.data.value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             res.json({hasName: (idx > -1)}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -783,7 +556,7 @@ serverApp.post('/api/upload', upload.array('file'), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 let ext = globalPath.extname(originName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (supportedArr.length > 0 && !supportedArr.includes(ext)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     return res.json({success:'F', message: '파일명 : ' + originName  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                      +'<br>해당 파일은 업로드 불가 파일입니다. 다시 시도해주세요.<br>가능 확장자 :'  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                      +'<br>업로드 불가 파일이 포함되어 있습니다.<br>가능 확장자 :'  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                       + JSON.stringify(supportedArr)}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -963,7 +736,7 @@ serverApp.post('/api/download', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           const options = getOptions(req.session.accessToken); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           const arr = JSON.parse(fileIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           const url = endPoint + "/sites/"+ siteId + "/drive/items/"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          const result = await axios(url + arr[0], options); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          const result = await axios(url + arr[0].id, options); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           // 단일 파일 다운로드 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           if (arr.length === 1 && result && result.data && result.data.file) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -973,26 +746,28 @@ serverApp.post('/api/download', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             const bufferData = Buffer.from(fileData.data, 'base64'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             const param = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               apiKey: gateWayKey, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              email : res.session.account.idTokenClaims.email, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              email : req.session.account.idTokenClaims.email, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               dispFileName: result.data.name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               comment: "", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               fileData: Buffer.from(bufferData).toString('base64') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             const deleteLabelResult = await axios.post(apiUrl + '/api/v1/stream/delete-label', param); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (deleteLabelResult && deleteLabelResult.data && !deleteLabelResult.data.result.errorCode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              return res.json({success: 'S', data: Buffer.from(data.data, 'base64'), name: deleteLabelResult.data.result.name}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              const fileData = deleteLabelResult.data.result.fileData; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              return res.json({success: 'S', data: fileData, name: deleteLabelResult.data.result.dispFileName}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              throw deleteLabelResult.data.result.dispFileName + ' : ' +deleteLabelResult.data.result.errorMessage; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          //폴더 또는 다중 파일 다운로드 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          //폴더 또는 다중 파일 다운로드  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             const zip = new JSZIP(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // const downObj = await getFolderItems(url, arr, options, req.session, zip); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             const timer = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             console.log('getFolderItems Start : ', timer.toLocaleString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             await getFolderItems(url, arr, options, req.session, zip); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             const timerEnd = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            console.log('getFolderItems end : ', timerEnd.toLocaleString(), ',소요시간 : '+ timeCheck(timer,timerEnd)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // createZipFile(downObj, zip); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            console.log('getFolderItems end : ', timerEnd.toLocaleString(), ', 소요시간 : '+ timeCheck(timer,timerEnd)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             const now = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             const year = now.getFullYear().toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             let month = now.getMonth() + 1; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1000,12 +775,7 @@ serverApp.post('/api/download', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             let date = now.getDate(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (date < 10) date = "0" + date; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             zip.generateAsync({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              type: 'nodebuffer', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              // mimeType: 'application/epub+zip', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              // compression: 'DEFLATE', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              // compressionOptions: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              //   level: 9 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              // }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              type: 'base64', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }).then((resZip)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               const endTime = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               console.log('시작 시간 :', startTime.toLocaleString(), ', 종료 시간 :', endTime.toLocaleString(), ', 소요 시간 :', timeCheck(startTime, endTime)); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1028,244 +798,78 @@ serverApp.post('/api/download', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-serverApp.post('/api/folderMove', async (req, res, next)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (req.body) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const {id, name, siteId, driveId, text, moveSiteId, movePath} = req.body; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const resultObj = {message:'폴더 이동에 실패 하였습니다.', success: 'F'}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (name && isNaN(name)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const nameArray = JSON.parse(name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const options = getOptions(req.session.accessToken); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      if (nameArray && nameArray.length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        for (let moveItem of nameArray) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          if (moveItem) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-             
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              const copyFolderPath = `${endPoint}/sites/${siteId}/drive/items/${moveItem.id}`; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              const result = await axios.get(copyFolderPath, options); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              if (result && result.data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                const data = result.data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                const moveUri = `${endPoint}/sites/${moveSiteId}/${movePath}`; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                const moveFolderResult = await findSubFolder(data, moveUri, moveSiteId, options); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                console.log('moveFolderResult : ',moveFolderResult); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (!moveFolderResult) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  resultObj.message ='폴더 이동 중 오류가 발생하였습니다.'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+async function getFolderItems(url, array, options, session, zip) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const fileArr       = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const fileInfoArr   = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  await Promise.all(array.map((obj)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return axios.get(url + obj.id, options); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  })) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  .then(async (siteInfos)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      for (let site of siteInfos) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const data = site.data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          if (data.folder) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            zip.folder(data.name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (data.folder.childCount) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              const itemsData = await axios.get(url + data.id + '/children', options); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              if (itemsData && itemsData.data && itemsData.data.value.length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  await getFolderItems(url, itemsData.data.value, options, session, zip.folder(data.name)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  await axios.delete(endPoint + "/sites/"+ siteId + "/drive/items/" + moveItem.id, options); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  resultObj.message ='폴더 이동 되었습니다.'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  resultObj.success = 'S'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                catch(error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  if (error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    throw error; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            catch (error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              console.log(error.message); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              console.log(error.name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              console.log(error.errors); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              resultObj.message = error.errors; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              // resultObj.failItems.push(moveItem); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const dataUrl = data['@microsoft.graph.downloadUrl']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const fileOption = {responseType: 'arraybuffer', headers: { withCredentials : true }}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (dataUrl) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              fileArr.push(axios.get(dataUrl, fileOption)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              fileInfoArr.push(data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              throw '파일 명 : ' + data.name + '<br>파일 데이터 정보가 없습니다.'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return res.json(resultObj); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-async function findSubFolder(data, movePath, moveSiteId, options) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    let resultType = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const moveItem = await axios.get(movePath, options); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      if (moveItem.data && moveItem.data.id) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (fileArr.length) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return Promise.all(fileArr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  .then((result)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (result && result.length) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return Promise.all(result.map((data, idx)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         const param = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          "name": data.name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          "folder": {}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          "@microsoft.graph.conflictBehavior": "rename" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const makeFolderData = await axios.post(`${endPoint}/sites/${moveSiteId}/drive/items/${moveItem.data.id}/children`, param, options); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (makeFolderData && makeFolderData.data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const makeFolderPath = `${endPoint}/sites/${moveSiteId}/${makeFolderData.data.parentReference.path}/${data.name}`; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-             
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (data.folder.childCount) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              const siteId = data.parentReference.siteId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              const childrenData = await axios.get(`${endPoint}/sites/${siteId}/drive/items/${data.id}/children`, options); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              if (childrenData && childrenData.data && childrenData.data.value) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                const childrenValues = childrenData.data.value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (childrenValues.length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  for (let ii = 0; ii < childrenValues.length; ii++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      const children = childrenValues[ii]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      if (children && children.folder) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                          const result = await findSubFolder(children, makeFolderPath, moveSiteId, options); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                          resultType = result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                          const dataUrl = children['@microsoft.graph.downloadUrl']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                          const response = await axios.get(dataUrl, {responseType: 'arraybuffer', headers: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            withCredentials:true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                          },}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                          if (response.data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            const file = response.data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            const uploadResult = await axios.put(`${endPoint}/sites/${moveSiteId}/drive/items/${makeFolderData.data.id}:/${children.name}:/content`,  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                                  file.buffer, options); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            if (uploadResult) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                              resultType = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          apiKey: gateWayKey, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          email : session.account.idTokenClaims.email, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          dispFileName: fileInfoArr[idx].name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          comment: "", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          fileData: Buffer.from(data.data).toString('base64') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return axios.post(apiUrl + '/api/v1/stream/delete-label', param); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }))   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  catch(error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    console.log(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return resultType; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  return resultType; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function createZipFile(obj, zip) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (obj.files && obj.files.length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    for (let file of obj.files) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      console.log(file.name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      zip.file(file.name, file.data, {base64: true}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (obj.folder && obj.folder.length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    for (let folder of obj.folder) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      console.log(folder.name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      zip.folder(folder.name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      if (folder.subFolder) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        createZipFile(folder.subFolder, zip.folder(folder.name)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-async function getFolderItems(url, array, options, session, zip) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  // const files         = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  // const folder        = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  const sitesInfoArr  = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  const fileArr       = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  const fileInfoArr   = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  // const folderCheckTime = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  // for (let fileId of array) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  //   sitesInfoArr.push(axios.get(url + fileId, options)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  // } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  // const siteInfos = await Promise.all(sitesInfoArr).catch((error)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  //   console.log(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  //   throw error; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  // }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  for (let fileId of array) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    sitesInfoArr.push(axios.get(url + fileId, options)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  const siteInfos = await Promise.all(sitesInfoArr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  for (let site of siteInfos) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const data = site.data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      if (data.folder) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // const folderObj = {name : data.name, subFolder : []}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        zip.folder(data.name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (data.folder.childCount) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          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); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              // let result = await getFolderItems(url, idArr, options, session, zip.folder(data.name)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              await getFolderItems(url, idArr, options, session, zip.folder(data.name)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              // folderObj.subFolder = result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  .then((deleteLabelFiles)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (deleteLabelFiles && deleteLabelFiles.length) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return Promise.all( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        deleteLabelFiles.map((item)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const data = item.data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (data.success && !data.result.errorCode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              zip.file(data.result.dispFileName, data.result.fileData, {base64: true}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            catch(error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              if (error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                throw error; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              throw data.result.dispFileName + ' : ' + data.result.errorMessage; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // subFolder.push(result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // folder.push(folderObj); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const dataUrl = data['@microsoft.graph.downloadUrl']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        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).then((result)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    let deleteLabelArr = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    for (let idx in result) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      let fileData = result[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)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        })) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return deleteLabelArr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  // 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(fileDataArr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  // 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 : data.result.dispFileName, data: data.result.fileData}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      zip.file(data.result.dispFileName, data.result.fileData, {base64: true}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    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, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  // }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  // return resultObj; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1274,8 +878,6 @@ serverApp.post('/api/getPossibleExtList', async (req, res, next)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 serverApp.post('/api/delete',  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  // isAuthenticated, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  // isAccessTokens, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   async (req, res, next)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (req.body) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       const {siteId, itemIds} = req.body; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1519,136 +1121,6 @@ async (req, res, next)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //   console.log('Connected to database'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 // }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-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' 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 && 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); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      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'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      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(apiUrl + '/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(apiUrl + '/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 = '파일명 : ' + name + '<br>에러 : ' + result.data.result.errorMessage; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      console.log(result.data.result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  }  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  catch(error) {  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    console.log(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    resultObj.error = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    resultObj.errorMessage = '레이블 해제 중 오류가 발생하였습니다.<br>' + JSON.stringify(error.message); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  return resultObj;  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 function getOptions(token) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   const options = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     headers: { 
			 |