123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345 |
- const cookieParser = require('cookie-parser');
- const cors = require("cors");
- const fs = require("fs");
- const path = require("path");
- const express = require("express");
- const axios = require("axios");
- const SERVER_PORT = process.env.port || process.env.PORT || 53000;
- const authProvider = require('./auth/AuthProvider');
- const {fetch, updateFetch} = require('./fetch');
- const bodyParser = require('body-parser');
- const https = require('https');
- require('dotenv').config({ path: './env/.env.test' });
- const session = require('express-session');
- const messages = require('dote/src/messages');
- const serverApp = express();
- serverApp.use(session({
- secret: process.env.EXPRESS_SESSION_SECRET,
- resave: false,
- saveUninitialized: true,
- cookie: {
- httpOnly: true,
- secure: true, // set this to true on production
- sameSite: 'none',
- maxAge: 60 * 60 * 24 * 1000
- }
- }));
- serverApp.set(express.json());
- serverApp.use(cookieParser());
- serverApp.use(express.urlencoded({ extended: false }));
- serverApp.use("/static",express.static(path.join(__dirname, 'static')));
- serverApp.use("/node_modules",express.static(path.join(__dirname, 'node_modules')));
- const options = {
- key: process.env.SSL_KEY_FILE ? fs.readFileSync(process.env.SSL_KEY_FILE) : undefined,
- cert: process.env.SSL_CRT_FILE ? fs.readFileSync(process.env.SSL_CRT_FILE) : undefined,
- };
- const server = https.createServer(options, serverApp);
- const corsOption = {
- origin: "*",
- }
- serverApp.use(cors(corsOption));
- serverApp.use(bodyParser.json());
- server.listen(SERVER_PORT, function () {
- console.log(`\n${serverApp.name} listening to ${SERVER_PORT}`);
- });
- serverApp.get("/tab",
- isAuthenticated,
- async function (req, res, next) {
- res.sendFile(path.join(__dirname, "/views/hello.html"),
- { idTokenClaims: req.session.account.idTokenClaims }
- );
- }
- );
- 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: 'https://localhost:53000/redirect',
- successRedirect: '/api-redirect'
- })(req, res, next);
- }
- next();
- }
- serverApp.get("/auth/signin", authProvider.login({
- scopes: ['.default'],
- redirectUri: 'https://localhost:53000/redirect',
- successRedirect: '/tab'
- }))
- serverApp.post("/redirect", authProvider.handleRedirect());
- serverApp.post("/api-get",
- isAuthenticated,
- isAccessToken,
- async (req, res, next) => {
- const uri = req.body.api_uri || req.session.apiUri;
- let param = {};
- if (req.session.param) {
- param = req.session.param;
- }
- try {
- const graphResponse = await fetch(process.env.GRAPH_API_ENDPOINT + "v1.0" + uri, req.session.accessToken, param);
- res.json(graphResponse);
- } catch (error) {
- next(error);
- }
- });
- serverApp.get("/api-redirect",
- isAuthenticated,
- async function (req, res, next) {
- const uri = req.session.apiUri;
- let param = {};
- if (req.session.param) {
- param = req.session.param;
- }
- try {
- const graphResponse = await fetch(process.env.GRAPH_API_ENDPOINT + "v1.0" + uri, req.session.accessToken, param);
- res.json(graphResponse);
- } catch (error) {
- next(error);
- }
- })
- serverApp.get("/post-redirect",
- isAuthenticated,
- async function (req, res, next) {
- const uri = req.session.apiUri;
- let param = {};
- if (req.session.param) {
- param = req.session.param;
- }
- try {
- const graphResponse = await updateFetch(process.env.GRAPH_API_ENDPOINT + "v1.0" + uri, req.session.accessToken, param);
- res.json(graphResponse);
- } catch (error) {
- next(error);
- }
- }
- )
- serverApp.post("/api-update", authProvider.acquireToken({
- scopes: [],
- redirectUri: 'https://localhost:53000/redirect',
- successRedirect: '/post-redirect'
- }));
- serverApp.post("/api-post", authProvider.acquireToken({
- scopes: ['.default'],
- redirectUri: 'https://localhost:53000/redirect',
- successRedirect: '/post-redirect'
- }));
- serverApp.post("/getGroupList", authProvider.acquireToken({
- scopes: ['.default'],
- redirectUri: 'https://localhost:53000/redirect',
- successRedirect: '/group-redirect'
- }));
- serverApp.get("/group-redirect",
- isAuthenticated,
- async function (req, res, next) {
- // return;
- try {
- const oneDrive = await fetch(process.env.GRAPH_API_ENDPOINT + "v1.0/me/drive/root", req.session.accessToken);
- const sharePointIds = await fetch(process.env.GRAPH_API_ENDPOINT + "v1.0/me/drive/SharePointIds", req.session.accessToken);
- // const oneDriveItems = await fetch(process.env.GRAPH_API_ENDPOINT + "v1.0/me/drive/root/children", req.session.accessToken);
- const graphResponse = await fetch(process.env.GRAPH_API_ENDPOINT + "v1.0/me/joinedTeams", req.session.accessToken);
- const sites = await fetch(process.env.GRAPH_API_ENDPOINT + "v1.0/sites/root", req.session.accessToken);
- const sitesSharePoint = await fetch(process.env.GRAPH_API_ENDPOINT + "v1.0/sites/root/SharePointIds", req.session.accessToken);
- const teams = graphResponse.value;
- oneDrive.sharePoint = sharePointIds;
- sites.sharePoint = sitesSharePoint;
- const resultObj = {
- oneDrive : {
- teams: oneDrive,
- // items: oneDriveItems.value,
- },
- joinedTeams : {
- teams : teams,
- items : {},
- },
- sites : {
- teams : sites,
- // items : {},
- },
- }
- // if (sites) {
- // if (Array.isArray(sites)) {
- // for(let site of sites) {
- // const siteObj = await fetch(process.env.GRAPH_API_ENDPOINT + "v1.0/sites/"+site.id+"/drive/items/root/children", req.session.accessToken);
- // resultObj.sites.items[site.id] = siteObj.value;
- // }
- // }
- // else if (sites.id) {
- // const sitesObj = await fetch(process.env.GRAPH_API_ENDPOINT + "v1.0/sites/"+sites.id+"/drive/items/root/children", req.session.accessToken);
- // if (sitesObj) {
- // resultObj.sites.items[sites.id] = sitesObj.value;
- // }
- // }
- // }
- if (teams && teams.length) {
- const options = {
- responseType: 'arraybuffer',
- headers: {
- Authorization: `Bearer ${req.session.accessToken}`,
- ConsistencyLevel: 'eventual',
- },
- };
- for (let team of teams) {
- const item = await fetch(process.env.GRAPH_API_ENDPOINT + "v1.0/groups/"+team.id+"/drive/items/root/children", req.session.accessToken);
- const sharePoint = await fetch(process.env.GRAPH_API_ENDPOINT + "v1.0/groups/"+team.id+"/drive/SharePointIds", req.session.accessToken);
- if (sharePoint) {
- team.sharePoint = sharePoint;
- }
- if (item && item.value) {
- resultObj.joinedTeams.items[team.id] = item.value;
- }
- }
- }
- res.json(resultObj);
- } catch (error) {
- next(error);
- }
- }
- )
- serverApp.post('/makeFolder',
- isAuthenticated,
- (req, res, next)=>{
- if (!req.session.accessToken) {
- return authProvider.acquireToken({
- scopes: ['.default'],
- redirectUri: 'https://localhost:53000/redirect',
- successRedirect: '/makeFolder'
- })(req, res, next);
- }
- next();
- },
- async (req, res, next)=>{
- const options = {
- headers: {
- Authorization: `Bearer ${req.session.accessToken}`,
- },
- };
- const {siteId, path, param} = req.body;
- try{
- const sitesInfo = await axios.get(process.env.GRAPH_API_ENDPOINT + "v1.0/sites/"+ siteId + path, options);
- if (sitesInfo.data) {
- const itemId = sitesInfo.data.id;
- const result = await axios.post(process.env.GRAPH_API_ENDPOINT + "v1.0/sites/"+ siteId +"/drive/items/" + itemId +"/children", JSON.parse(param), options);
- res.json(result.data)
- }
- }
- catch(error) {
- console.log(error.response.data.error);
-
- // resultObj.success = 'F';
- // resultObj.message = '선택하신 파일 정보 삭제중 오류가 발생하였습니다.\n' + error.response.data.error.message;
- // return res.json(resultObj);
- }
- })
- serverApp.post('/uploadItems',
- isAuthenticated,
- (req, res, next)=>{
- if (!req.session.accessToken) {
- return authProvider.acquireToken({
- scopes: ['.default'],
- redirectUri: 'https://localhost:53000/redirect',
- successRedirect: '/uploadItems'
- })(req, res, next);
- }
- next();
- },
- async (req, res, next)=>{
- if (req.body) {
- const {siteId, path, param} = req.body;
- if (siteId && param) {
- const options = {
- headers: {
- Authorization: `Bearer ${req.session.accessToken}`,
- },
- };
- const sitesInfo = await axios.get(process.env.GRAPH_API_ENDPOINT + "v1.0/sites/"+ siteId + path, options);
- if (sitesInfo.data) {
- const itemId = sitesInfo.data.id;
- const fileInfo = JSON.parse(param);
- const result = await axios.post(process.env.GRAPH_API_ENDPOINT + "v1.0/sites/"+ siteId +"/drive/items/"+itemId+':/'+fileInfo.name+':/content', fileInfo, options);
- res.json(result.data);
- }
- }
- }
- })
- serverApp.post('/deleteItems',
- isAuthenticated,
- (req, res, next)=>{
- if (!req.session.accessToken) {
- return authProvider.acquireToken({
- scopes: ['.default'],
- redirectUri: 'https://localhost:53000/redirect',
- successRedirect: '/deleteItems'
- })(req, res, next);
- }
- next();
- },
- async (req, res, next)=>{
- if (req.body) {
- const {siteId, itemIds} = req.body;
- const resultObj = {success: '', message:''};
- if (siteId && itemIds) {
- const itemIdArr = JSON.parse(itemIds);
- if (itemIdArr.length > 0) {
- const options = {
- headers: {
- Authorization: `Bearer ${req.session.accessToken}`,
- },
- };
- for (let itemId of itemIdArr) {
- try{
- await axios.delete(process.env.GRAPH_API_ENDPOINT + "v1.0/sites/"+ siteId + "/drive/items/" + itemId, options);
- }
- catch(error) {
- console.log(error.response.data.error);
-
- resultObj.success = 'F';
- resultObj.message = '선택하신 파일 정보 삭제중 오류가 발생하였습니다.\n' + error.response.data.error.message;
- return res.json(resultObj);
- }
- }
- resultObj.success = 'S';
- resultObj.message = '파일 정보가 삭제되었습니다.';
- res.json(resultObj);
- }
- }
- else {
- resultObj.success = 'F';
- resultObj.message = '파라미터 정보를 확인해주세요.';
- res.json(resultObj);
- }
- }
- })
|