Your IP : 216.73.216.48


Current Path : /hdd/hdd21/my5/backup/my5-backend/src/
Upload File :
Current File : /hdd/hdd21/my5/backup/my5-backend/src/ori.main.js

process.chdir(__dirname + '/../');
const express = require('express');
const dotenv = require('dotenv');
const graphqlHttp = require('express-graphql');
const fs = require('fs');
const busboy = require('connect-busboy');
const authMiddleware = require('./authMiddleware');
const fileAuthMiddleware = require('./fileAuthMiddleware');
const rootQuery = require('./schemas/schema');
const login = require('./login');
const fileUpload = require('./fileUpload');
const getFiles = require('./getFiles');
const multer = require('multer');
const db = require('./db');

const {pathExists, jwtGen, getHumanDate} = require('./utils');
dotenv.config();

const app = express();
app.set('trust proxy', true);
const port = process.env.PORT;

const storage = multer.diskStorage({
  destination: (req, file, cb) => {
    cb(null, process.env.FILE_UPLOAD_DIR);
  },
  filename: (req, file, cb) => {
    const userInfo = req.locals.userInfo;
    const fileInfo = req.locals.fileInfo;
    const targetDir =
      userInfo.pin + '/' + req.body.path + '/' + fileInfo.fileName;
    cb(null, targetDir);
  }
});

const upload = multer({
  storage,
  fileFilter: (req, file, cb) => {
    const path = req.body.path;
    const userInfo = req.locals.userInfo;
    pathExists(path, userInfo.pin, (exists, parentID, curr) => {
      if (exists) {
        
        if(!!curr.find(v => v.name === file.originalname)){
          console.log('originalName', file.originalname);
          const fileNameArr = file.originalname.split('.');
          fileNameArr[fileNameArr.length-1] = `${getHumanDate()}.${fileNameArr[fileNameArr.length-1]}`;
          const fileNameExtended = fileNameArr.join('.');
          req.locals.fileInfo = {parentID, fileName: fileNameExtended};
        }else{
          req.locals.fileInfo = {parentID, fileName: file.originalname};
        }
        cb(null, exists);
      }
    });
  }
});

app.use(busboy());
app.use(express.json({ limit: "800mb" }));
app.use(require('cors')());
app.use(
  '/graphql',
  authMiddleware,
  graphqlHttp({
    schema: rootQuery,
    graphiql: true
  })
);

// app.use();

app.get('/', (req, res) => {
  res.send('Hello world!');
});

app.post('/login', login);
app.post(
  '/files/cloud/folder',
  authMiddleware,
  require('./fileUpload/cloud/folder')
);

app.post(
  '/files/cloud/file',
  authMiddleware,
  upload.fields([{name: 'file'}, {name: 'path'}]),
  (req, res) => {
    const fileInfo = req.locals.fileInfo;
    const userInfo = req.locals.userInfo;

    // Set bigger request timeout in miliseconds
    // 90 sec
    req.setTimeout(90000);

    db.query(
      'INSERT INTO `filesystems` (type, name, owner, parentID, status, timestamp) VALUES ("FILE", ?, ?, ?, "active", ?)',
      [fileInfo.fileName, userInfo.pin, fileInfo.parentID, Math.floor(Date.now() / 1000)],
      err => {
        if (err) throw err;
        res.send();
      }
    );
  }
);
app.get('/files', authMiddleware, getFiles);

app.post('/files/cloud/getToken', authMiddleware, (req, res) => {
  const path = req.body.path;
  const splitPath = path.split('/');
  const dirPath = splitPath.slice(0, -1).join('/');
  const fileName = splitPath.slice(-1);
  const userInfo = req.locals.userInfo;

  pathExists(dirPath, userInfo.pin, (exists, _) => {
    if (exists) {
      const filePath = `${userInfo.pin}/${dirPath}/${fileName}`;
      const shortToken = jwtGen({file: filePath}, {expiry: '2s'});
      res.send(shortToken);
    } else {
      res.sendStatus(400);
    }
  });
});

app.get('/files/cloud/download', fileAuthMiddleware, (req, res) => {
  const filePath = res.locals.filePath;
  res.download(`${uploadDir}/${filePath}`);
});

app.delete('/files/cloud/file', authMiddleware, (req, res) => {
  const path = req.body.path;
  const splitPath = path.split('/');
  const dirPath = splitPath.slice(0, -1).join('/');
  const fileName = splitPath.slice(-1)[0];
  const userInfo = req.locals.userInfo;

  pathExists(dirPath, userInfo.pin, (exists, _, curr) => {
    if (exists) {
      
      const normalizedFilename = fileName.startsWith('/')
      ? fileName.replace('/', '')
      : fileName;
      const dbFile = curr.find(v => v.name === normalizedFilename);
      db.query('UPDATE `filesystems` SET `status` = "deleted" WHERE `id`=?', [dbFile.id], err => {
        if(err) throw err;
        res.send('deleted' + dbFile.id);
      });
    } else {
      res.sendStatus(400);
    }
  });
});

// Setup
const uploadDir = process.env.FILE_UPLOAD_DIR;
fs.access(uploadDir, err => {
  if (!!err && err.code === 'ENOENT') {
    console.log(`Directory ${uploadDir} doesn't exist. Creating..`);
    fs.mkdirSync(uploadDir);
  }

  app.listen(port, err => {
    if (err) {
      throw err;
    }
    console.log(`Listening on port ${port}`);
  });
});