2021-07-24 15:42:36 -06:00
const express = require ( "express" ) ;
const axios = require ( "axios" ) ;
2021-08-14 21:49:07 -06:00
// Local Imports & Configs
2021-07-24 15:42:36 -06:00
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" ) ;
2021-08-14 21:49:07 -06:00
// Establish path and create router
// Absolute Router Path /api/stash
2021-07-24 15:42:36 -06:00
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
2021-08-21 22:52:19 -06:00
. get ( ` ${ process . env . CAIRO _PUBLIC _URL } /user/data ` , {
2021-07-31 17:57:09 +00:00
headers : { authorization : ` Bearer ${ req . token } ` } ,
} )
. then ( ( authRes ) => {
2021-08-14 21:42:17 -06:00
if ( authRes . data && authRes . data . id ) {
2021-08-02 21:17:50 -06:00
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 ) => {
2021-08-14 21:42:17 -06:00
if ( e . response )
return res
. status ( 401 )
. send ( ` Auth server responded with: ${ e . response . status } ` ) ;
console . error ( e ) ;
res . sendStatus ( 500 ) ;
2021-07-31 17:57:09 +00:00
} ) ;
} ;
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:57:55 -06:00
asUser . getOwnedFiles ( req . user . cairoId , 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-08-02 21:57:55 -06:00
asUser . uploadFile ( req . user . cairoId , req . file ) . then ( ( file ) => {
2021-07-31 17:57:09 +00:00
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 ) ;
2021-08-02 21:57:55 -06:00
asUser . deleteFiles ( req . user . cairoId , req . body ) . then ( ( failed ) => {
2021-07-31 17:57:09 +00:00
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-08-02 21:57:55 -06:00
const userId = req . user == null ? null : req . user . cairoId ;
2021-07-31 17:57:09 +00:00
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 ) ;
2021-08-02 21:57:55 -06:00
const failed = asUser . publicfyFiles ( req . user . cairoId , req . body ) ;
2021-07-24 15:42:36 -06:00
if ( ! failed ) return res . sendStatus ( 200 ) ;
res . status ( 500 ) . json ( failed ) ;
} ) ;
module . exports = router ;