@@ -327,6 +327,7 @@ export class LoginProvider {
327327 res . end ( JSON . stringify ( res2 ) ) ;
328328 } catch ( error ) {
329329 span . recordException ( error ) ;
330+ return res . status ( 500 ) . send ( { message : error . message ? error . message : error } ) ;
330331 } finally {
331332 otel . endSpan ( span ) ;
332333 }
@@ -466,6 +467,7 @@ export class LoginProvider {
466467 LoginProvider . RegisterProviders ( app , baseurl ) ;
467468 } catch ( error ) {
468469 span . recordException ( error ) ;
470+ return res . status ( 500 ) . send ( { message : error . message ? error . message : error } ) ;
469471 } finally {
470472 otel . endSpan ( span ) ;
471473 }
@@ -536,17 +538,27 @@ export class LoginProvider {
536538 user = TokenUser . From ( req . user ) ;
537539 jwt = Crypt . createToken ( user , Config . downloadtoken_expires_in ) ;
538540 }
541+ const { query, headers } = req ;
539542
540- fileInfo . metadata . name = file . originalname ;
541- ( fileInfo . metadata as any ) . filename = file . originalname ;
543+ fileInfo . metadata . name = filename ;
544+ ( fileInfo . metadata as any ) . filename = filename ;
542545 ( fileInfo . metadata as any ) . path = "" ;
546+ ( fileInfo . metadata as any ) . uniquename = query . uniquename ;
547+ ( fileInfo . metadata as any ) . form = query . form ;
548+ ( fileInfo . metadata as any ) . project = query . project ;
549+ ( fileInfo . metadata as any ) . baseurl = query . baseUrl ;
543550 fileInfo . metadata . _acl = [ ] ;
544551 fileInfo . metadata . _createdby = user . name ;
545552 fileInfo . metadata . _createdbyid = user . _id ;
546553 fileInfo . metadata . _created = new Date ( new Date ( ) . toISOString ( ) ) ;
547554 fileInfo . metadata . _modifiedby = user . name ;
548555 fileInfo . metadata . _modifiedbyid = user . _id ;
549556 fileInfo . metadata . _modified = fileInfo . metadata . _created ;
557+
558+ const keys = Object . keys ( query ) ;
559+ for ( let i = 0 ; i < keys . length ; i ++ ) {
560+ fileInfo . metadata [ keys [ i ] ] = query [ keys [ i ] ] ;
561+ }
550562 Base . addRight ( fileInfo . metadata , user . _id , user . name , [ Rights . full_control ] ) ;
551563 Base . addRight ( fileInfo . metadata , WellknownIds . filestore_admins , "filestore admins" , [ Rights . full_control ] ) ;
552564 Base . addRight ( fileInfo . metadata , WellknownIds . filestore_users , "filestore users" , [ Rights . read ] ) ;
@@ -556,8 +568,6 @@ export class LoginProvider {
556568 fileInfo . metadata . _acl [ index ] . rights = ( new Binary ( Buffer . from ( a . rights , "base64" ) , 0 ) as any ) ;
557569 }
558570 } ) ;
559-
560-
561571 resolve ( fileInfo ) ;
562572 } ) ;
563573 } ) ;
@@ -567,6 +577,112 @@ export class LoginProvider {
567577 storage : storage
568578 } ) . any ( ) ;
569579
580+ // app.get("/upload", async (req: any, res: any, next: any): Promise<void> => {
581+ // const query = req.query;
582+ // });
583+ app . delete ( "/upload" , async ( req : any , res : any , next : any ) : Promise < void > => {
584+ const span : Span = otel . startSpan ( "LoginProvider.upload" ) ;
585+ try {
586+ let user : TokenUser = null ;
587+ let jwt : string = null ;
588+ const authHeader = req . headers . authorization ;
589+ if ( authHeader ) {
590+ user = Crypt . verityToken ( authHeader ) ;
591+ jwt = Crypt . createToken ( user , Config . downloadtoken_expires_in ) ;
592+ }
593+ else if ( req . user ) {
594+ user = TokenUser . From ( req . user as any ) ;
595+ jwt = Crypt . createToken ( user , Config . downloadtoken_expires_in ) ;
596+ }
597+ if ( user == null ) {
598+ return res . status ( 404 ) . send ( { message : 'Route ' + req . url + ' Not found.' } ) ;
599+ }
600+ const query = req . query ;
601+ console . log ( "baseUrl: " + query . baseUrl ) ;
602+ console . log ( "form: " + query . form ) ;
603+ console . log ( "project: " + query . project ) ;
604+ console . log ( "uniquename: " + query . uniquename ) ;
605+ let uniquename : string = query . uniquename ;
606+ if ( uniquename . indexOf ( '/' ) > - 1 ) uniquename = uniquename . substr ( 0 , uniquename . indexOf ( '/' ) ) ;
607+ let q : any = { } ;
608+ if ( ! NoderedUtil . IsNullEmpty ( uniquename ) ) {
609+ q = { "metadata.uniquename" : uniquename } ;
610+ }
611+
612+ const arr = await Config . db . query ( q , undefined , 1 , 0 , { "uploadDate" : - 1 } , "files" , jwt , undefined , undefined , span ) ;
613+ if ( arr . length > 0 ) {
614+ await Config . db . DeleteOne ( arr [ 0 ] . _id , "files" , jwt ) ;
615+ }
616+ res . send ( {
617+ status : "success" ,
618+ display_status : "Success" ,
619+ message : uniquename + " deleted"
620+ } ) ;
621+ } catch ( error ) {
622+ span . recordException ( error ) ;
623+ console . error ( error ) ;
624+ return res . status ( 500 ) . send ( { message : error . message ? error . message : error } ) ;
625+ } finally {
626+ otel . endSpan ( span ) ;
627+ }
628+
629+ } ) ;
630+ // app.get("/upload/:fileId", async (req: any, res: any, next: any): Promise<void> => {
631+ app . get ( "/upload" , async ( req : any , res : any , next : any ) : Promise < void > => {
632+ const span : Span = otel . startSpan ( "LoginProvider.upload" ) ;
633+ try {
634+ let user : TokenUser = null ;
635+ let jwt : string = null ;
636+ const authHeader = req . headers . authorization ;
637+ if ( authHeader ) {
638+ user = Crypt . verityToken ( authHeader ) ;
639+ jwt = Crypt . createToken ( user , Config . downloadtoken_expires_in ) ;
640+ }
641+ else if ( req . user ) {
642+ user = TokenUser . From ( req . user as any ) ;
643+ jwt = Crypt . createToken ( user , Config . downloadtoken_expires_in ) ;
644+ }
645+ if ( user == null ) {
646+ return res . status ( 404 ) . send ( { message : 'Route ' + req . url + ' Not found.' } ) ;
647+ }
648+ const query = req . query ;
649+ console . log ( "baseUrl: " + query . baseUrl ) ;
650+ console . log ( "form: " + query . form ) ;
651+ console . log ( "project: " + query . project ) ;
652+ console . log ( "uniquename: " + query . uniquename ) ;
653+ let uniquename : string = query . uniquename ;
654+ if ( uniquename . indexOf ( '/' ) > - 1 ) uniquename = uniquename . substr ( 0 , uniquename . indexOf ( '/' ) ) ;
655+ let q : any = { } ;
656+ if ( ! NoderedUtil . IsNullEmpty ( uniquename ) ) {
657+ q = { "metadata.uniquename" : uniquename } ;
658+ }
659+
660+ const arr = await Config . db . query ( q , undefined , 1 , 0 , { "uploadDate" : - 1 } , "files" , jwt , undefined , undefined , span ) ;
661+
662+ const id = arr [ 0 ] . _id ;
663+ const rows = await Config . db . query ( { _id : safeObjectID ( id ) } , null , 1 , 0 , null , "files" , jwt , undefined , undefined , span ) ;
664+ if ( rows == null || rows . length != 1 ) { return res . status ( 404 ) . send ( { message : 'id ' + id + ' Not found.' } ) ; }
665+ const file = rows [ 0 ] as any ;
666+
667+ console . log ( "id: " + id ) ;
668+
669+ const bucket = new GridFSBucket ( Config . db . db ) ;
670+ let downloadStream = bucket . openDownloadStream ( safeObjectID ( id ) ) ;
671+ res . set ( 'Content-Type' , file . contentType ) ;
672+ res . set ( 'Content-Disposition' , 'attachment; filename="' + file . filename + '"' ) ;
673+ res . set ( 'Content-Length' , file . length ) ;
674+ downloadStream . on ( "error" , function ( err ) {
675+ res . end ( ) ;
676+ } ) ;
677+ downloadStream . pipe ( res ) ;
678+ return ;
679+ } catch ( error ) {
680+ span . recordException ( error ) ;
681+ return res . status ( 500 ) . send ( { message : error . message ? error . message : error } ) ;
682+ } finally {
683+ otel . endSpan ( span ) ;
684+ }
685+ } ) ;
570686 app . post ( "/upload" , async ( req , res ) => {
571687 let user : TokenUser = null ;
572688 let jwt : string = null ;
0 commit comments