2021-07-24 15:42:36 -06:00
const express = require ( "express" ) ;
const axios = require ( "axios" ) ;
//Local Imports & Configs
const asUser = require ( "../api/user" ) ;
const upload = require ( "../api/upload" ) ;
2021-07-31 17:57:09 +00:00
const storage = require ( "../api/storage" ) ;
2021-07-24 15:42:36 -06:00
const config = require ( "../config.json" ) ;
//Establish path and create router
/** Absolute Router Path /api/stash*/
const router = express . Router ( ) ;
2021-07-31 17:57:09 +00:00
const cairoMiddleware = ( req , res , next ) => {
if ( req . token == null ) return next ( ) ;
else
axios
. get ( config . Server . authServer , {
headers : { authorization : ` Bearer ${ req . token } ` } ,
} )
. then ( ( authRes ) => {
2021-08-02 21:17:50 -06:00
if ( authRes . status !== 200 ) return res . sendStatus ( authres . status ) ;
if ( authRes . data != null && authRes . data . id != null ) {
asUser . load ( authRes . data . id ) . then ( ( user ) => {
2021-07-31 17:57:09 +00:00
req . user = user ;
next ( ) ;
} ) ;
} else res . status ( 500 ) . json ( authRes . data ) ;
} )
. catch ( ( e ) => {
if ( e . response != null ) res . sendStatus ( e . response . status ) ;
else res . sendStatus ( 500 ) ;
} ) ;
} ;
2021-08-02 21:17:50 -06:00
2021-07-24 15:42:36 -06:00
const authMiddleware = ( req , res , next ) => {
2021-07-31 17:57:09 +00:00
if ( req . token == null ) return res . sendStatus ( 401 ) ;
next ( ) ;
2021-07-24 15:42:36 -06:00
} ;
2021-08-02 21:17:50 -06:00
router . use ( cairoMiddleware ) ;
2021-07-24 15:42:36 -06:00
2021-07-31 17:57:09 +00:00
router . get ( "/files" , authMiddleware , ( req , res ) =>
2021-08-02 21:21:08 -06:00
asUser . getOwnedFiles ( req . user . _id , req . user . owned ) . then ( ( files ) => {
2021-07-31 17:57:09 +00:00
res . status ( 200 ) . json ( files ) ;
} )
) ;
2021-07-24 15:42:36 -06:00
router . post ( "/upload" , authMiddleware , ( req , res ) => {
upload . userUpload ( req , res , ( err ) => {
if ( err || req . file == null ) return res . sendStatus ( 500 ) ;
2021-07-31 17:57:09 +00:00
asUser . uploadFile ( req . user . _id , req . file ) . then ( ( file ) => {
if ( file != null ) return res . json ( file ) ;
2021-07-24 15:42:36 -06:00
upload . cancelUpload ( req . file . path ) ;
return res . sendStatus ( 500 ) ;
2021-07-31 17:57:09 +00:00
} ) ;
2021-07-24 15:42:36 -06:00
} ) ;
} ) ;
router . post ( "/delete" , authMiddleware , ( req , res ) => {
2021-07-31 17:57:09 +00:00
if ( ! req . body || ! ( req . body instanceof Array ) ) return res . sendStatus ( 400 ) ;
asUser . deleteFiles ( req . user . _id , req . body ) . then ( ( failed ) => {
if ( ! failed ) return res . sendStatus ( 200 ) ;
res . status ( 500 ) . json ( failed ) ;
} ) ;
2021-07-24 15:42:36 -06:00
} ) ;
2021-07-31 17:57:09 +00:00
router . get ( "/download" , ( req , res ) => {
2021-07-24 15:42:36 -06:00
if ( ! req . query || ( ! req . query . target && ! req . query . zipTarget ) )
return res . sendStatus ( 404 ) ;
2021-07-31 17:57:09 +00:00
const userId = req . user == null ? null : req . user . _id ;
if ( req . query . target )
return storage . getFile ( userId , req . query . target ) . then ( ( file ) => {
if ( file ) return res . download ( file . path ) ;
return res . sendStatus ( 404 ) ;
} ) ;
2021-07-24 15:42:36 -06:00
return res . sendStatus ( 404 ) ;
} ) ;
router . post ( "/public" , authMiddleware , async ( req , res ) => {
2021-07-31 17:57:09 +00:00
if ( ! req . body || ! ( req . body instanceof Array ) ) return res . sendStatus ( 400 ) ;
const failed = asUser . publicfyFiles ( req . user . _id , req . body ) ;
2021-07-24 15:42:36 -06:00
if ( ! failed ) return res . sendStatus ( 200 ) ;
res . status ( 500 ) . json ( failed ) ;
} ) ;
module . exports = router ;