@@ -3,6 +3,7 @@ import * as winston from "winston";
33import * as express from "express" ;
44import * as cookieSession from "cookie-session" ;
55import * as bodyParser from "body-parser" ;
6+ import * as path from "path" ;
67
78import * as SAMLStrategy from "passport-saml" ;
89import * as GoogleStrategy from "passport-google-oauth20" ;
@@ -90,6 +91,21 @@ export class LoginProvider {
9091 } ) ;
9192 }
9293
94+ static async getProviders ( ) : Promise < any [ ] > {
95+ LoginProvider . login_providers = await Config . db . query < Provider > ( { _type : "provider" } , null , 10 , 0 , null , "config" , TokenUser . rootToken ( ) ) ;
96+ var result : any [ ] = [ ] ;
97+ LoginProvider . login_providers . forEach ( provider => {
98+ var item : any = { name : provider . name , id : provider . id , provider : provider . provider , logo : "fa-question-circle" } ;
99+ if ( provider . provider === "google" ) { item . logo = "fa-google" ; }
100+ if ( provider . provider === "saml" ) { item . logo = "fa-windows" ; }
101+ result . push ( item ) ;
102+ } ) ;
103+ if ( result . length === 0 ) {
104+ var item : any = { name : "Local" , id : "local" , provider : "local" , logo : "fa-question-circle" } ;
105+ result . push ( item ) ;
106+ }
107+ return result ;
108+ }
93109 static async configure ( logger : winston . Logger , app : express . Express , baseurl : string ) : Promise < void > {
94110 this . _logger = logger ;
95111 app . use ( cookieSession ( {
@@ -109,14 +125,20 @@ export class LoginProvider {
109125
110126 app . get ( "/Signout" , ( req : any , res : any , next : any ) : void => {
111127 req . logout ( ) ;
112- res . redirect ( "/" ) ;
128+ var originalUrl : any = req . cookies . originalUrl ;
129+ if ( ! Util . IsNullEmpty ( originalUrl ) ) {
130+ res . cookie ( "originalUrl" , "" , { expires : new Date ( ) } ) ;
131+ res . redirect ( originalUrl ) ;
132+ } else {
133+ res . redirect ( "/" ) ;
134+ }
113135 } ) ;
114136 await LoginProvider . RegisterProviders ( app , baseurl ) ;
115137 app . get ( "/jwt" , ( req : any , res : any , next : any ) : void => {
116138 res . setHeader ( "Content-Type" , "application/json" ) ;
117139 if ( req . user ) {
118140 var user : TokenUser = new TokenUser ( req . user ) ;
119- res . end ( JSON . stringify ( { jwt : Crypt . createToken ( user , "5m" ) } ) ) ;
141+ res . end ( JSON . stringify ( { jwt : Crypt . createToken ( user , "5m" ) , user : user } ) ) ;
120142 } else {
121143 res . end ( JSON . stringify ( { jwt : "" } ) ) ;
122144 }
@@ -152,20 +174,27 @@ export class LoginProvider {
152174 }
153175 res . end ( JSON . stringify ( res2 ) ) ;
154176 } ) ;
177+ app . get ( "/login" , async ( req : any , res : any , next : any ) : Promise < void > => {
178+ try {
179+ res . cookie ( "originalUrl" , req . originalUrl , { maxAge : 900000 , httpOnly : true } ) ;
180+ var file = path . join ( __dirname , 'public' , 'PassiveLogin.html' ) ;
181+ res . sendFile ( file ) ;
182+ // var result: any[] = await this.getProviders();
183+ // res.setHeader("Content-Type", "application/json");
184+ // res.end(JSON.stringify(result));
185+ // res.end();
186+ } catch ( error ) {
187+ res . end ( error ) ;
188+ console . error ( error ) ;
189+ }
190+ try {
191+ LoginProvider . RegisterProviders ( app , baseurl ) ;
192+ } catch ( error ) {
193+ }
194+ } ) ;
155195 app . get ( "/loginproviders" , async ( req : any , res : any , next : any ) : Promise < void > => {
156196 try {
157- LoginProvider . login_providers = await Config . db . query < Provider > ( { _type : "provider" } , null , 10 , 0 , null , "config" , TokenUser . rootToken ( ) ) ;
158- var result : any [ ] = [ ] ;
159- LoginProvider . login_providers . forEach ( provider => {
160- var item : any = { name : provider . name , id : provider . id , provider : provider . provider , logo : "fa-question-circle" } ;
161- if ( provider . provider === "google" ) { item . logo = "fa-google" ; }
162- if ( provider . provider === "saml" ) { item . logo = "fa-windows" ; }
163- result . push ( item ) ;
164- } ) ;
165- if ( result . length === 0 ) {
166- var item : any = { name : "Local" , id : "local" , provider : "local" , logo : "fa-question-circle" } ;
167- result . push ( item ) ;
168- }
197+ var result : any [ ] = await this . getProviders ( ) ;
169198 res . setHeader ( "Content-Type" , "application/json" ) ;
170199 res . end ( JSON . stringify ( result ) ) ;
171200 res . end ( ) ;
0 commit comments