@@ -62,6 +62,18 @@ export class LoginProvider {
6262 private static _providers : any = { } ;
6363 private static login_providers : Provider [ ] = [ ] ;
6464
65+ public static redirect ( res : any , originalUrl : string ) {
66+ res . write ( '<!DOCTYPE html>' ) ;
67+ res . write ( '<body>' ) ;
68+ res . write ( '<script>top.location = "' + originalUrl + '";</script>' ) ;
69+ // res.write('<a href="' + originalUrl + '">click here</a>');
70+ res . write ( '</body>' ) ;
71+ res . write ( '</html>' ) ;
72+ res . end ( ) ;
73+ // res.redirect(originalUrl);
74+ }
75+
76+
6577 static async validateToken ( rawAssertion : string ) : Promise < User > {
6678 return new Promise < User > ( ( resolve , reject ) => {
6779 var options = {
@@ -123,16 +135,35 @@ export class LoginProvider {
123135 // Audit.LoginSuccess(new TokenUser(user), "weblogin", "cookie", "");
124136 } ) ;
125137
138+ app . use ( function ( req , res , next ) {
139+ res . header ( 'Access-Control-Allow-Origin' , ( req . headers . origin as any ) ) ;
140+ res . header ( "Access-Control-Allow-Headers" , "Origin, X-Requested-With, Content-Type, Accept" ) ;
141+ res . header ( 'Cache-Control' , 'private, no-cache, no-store, must-revalidate' ) ;
142+ res . header ( 'Expires' , '-1' ) ;
143+ res . header ( 'Pragma' , 'no-cache' ) ;
144+ next ( ) ;
145+ } ) ;
146+
126147 app . get ( "/Signout" , ( req : any , res : any , next : any ) : void => {
127148 req . logout ( ) ;
128149 var originalUrl : any = req . cookies . originalUrl ;
129150 if ( ! Util . IsNullEmpty ( originalUrl ) ) {
130- res . cookie ( "originalUrl" , "" , { expires : new Date ( ) } ) ;
131- res . redirect ( originalUrl ) ;
151+ res . cookie ( "originalUrl" , "" , { expires : new Date ( 0 ) } ) ;
152+ LoginProvider . redirect ( res , originalUrl ) ;
132153 } else {
133154 res . redirect ( "/" ) ;
134155 }
135156 } ) ;
157+ app . get ( "/PassiveSignout" , ( req : any , res : any , next : any ) : void => {
158+ req . logout ( ) ;
159+ var originalUrl : any = req . cookies . originalUrl ;
160+ if ( ! Util . IsNullEmpty ( originalUrl ) ) {
161+ res . cookie ( "originalUrl" , "" , { expires : new Date ( 0 ) } ) ;
162+ LoginProvider . redirect ( res , originalUrl ) ;
163+ } else {
164+ res . redirect ( "/Login" ) ;
165+ }
166+ } ) ;
136167 await LoginProvider . RegisterProviders ( app , baseurl ) ;
137168 app . get ( "/jwt" , ( req : any , res : any , next : any ) : void => {
138169 res . setHeader ( "Content-Type" , "application/json" ) ;
@@ -144,6 +175,16 @@ export class LoginProvider {
144175 }
145176 res . end ( ) ;
146177 } ) ;
178+ app . get ( "/jwtlong" , ( req : any , res : any , next : any ) : void => {
179+ res . setHeader ( "Content-Type" , "application/json" ) ;
180+ if ( req . user ) {
181+ var user : TokenUser = new TokenUser ( req . user ) ;
182+ res . end ( JSON . stringify ( { jwt : Crypt . createToken ( user , "365d" ) , user : user } ) ) ;
183+ } else {
184+ res . end ( JSON . stringify ( { jwt : "" } ) ) ;
185+ }
186+ res . end ( ) ;
187+ } ) ;
147188 app . post ( "/jwt" , async ( req : any , res : any , next : any ) : Promise < void > => {
148189 try {
149190 var rawAssertion = req . body . token ;
@@ -256,8 +297,8 @@ export class LoginProvider {
256297 function ( req : any , res : any ) : void {
257298 var originalUrl : any = req . cookies . originalUrl ;
258299 if ( ! Util . IsNullEmpty ( originalUrl ) ) {
259- res . cookie ( "originalUrl" , "" , { expires : new Date ( ) } ) ;
260- res . redirect ( originalUrl ) ;
300+ res . cookie ( "originalUrl" , "" , { expires : new Date ( 0 ) } ) ;
301+ LoginProvider . redirect ( res , originalUrl ) ;
261302 } else {
262303 res . redirect ( "/" ) ;
263304 }
@@ -341,8 +382,8 @@ export class LoginProvider {
341382 function ( req : any , res : any ) : void {
342383 var originalUrl : any = req . cookies . originalUrl ;
343384 if ( ! Util . IsNullEmpty ( originalUrl ) ) {
344- res . cookie ( "originalUrl" , "" , { expires : new Date ( ) } ) ;
345- res . redirect ( originalUrl ) ;
385+ res . cookie ( "originalUrl" , "" , { expires : new Date ( 0 ) } ) ;
386+ LoginProvider . redirect ( res , originalUrl ) ;
346387 } else {
347388 res . redirect ( "/" ) ;
348389 }
@@ -401,15 +442,16 @@ export class LoginProvider {
401442 }
402443 } ) ;
403444 passport . use ( "local" , strategy ) ;
445+ // http://www.passportjs.org/docs/authenticate/#custom-callback
404446 app . use ( "/local" ,
405447 bodyParser . urlencoded ( { extended : false } ) ,
406448 //passport.authenticate("local", { failureRedirect: "/login?failed=true", failureFlash: true }),
407449 passport . authenticate ( "local" , { failureRedirect : "/" } ) ,
408450 function ( req : any , res : any ) : void {
409451 var originalUrl : any = req . cookies . originalUrl ;
410452 if ( ! Util . IsNullEmpty ( originalUrl ) ) {
411- res . cookie ( "originalUrl" , "" , { expires : new Date ( ) } ) ;
412- res . redirect ( originalUrl ) ;
453+ res . cookie ( "originalUrl" , "" , { expires : new Date ( 0 ) } ) ;
454+ LoginProvider . redirect ( res , originalUrl ) ;
413455 } else {
414456 res . redirect ( "/" ) ;
415457 }
0 commit comments