@@ -24,7 +24,8 @@ export class OAuthProvider {
2424 instance . oauthServer = new OAuthServer ( {
2525 model : instance ,
2626 grants : [ 'authorization_code' , 'refresh_token' ] ,
27- accessTokenLifetime : 60 * 60 * 24 , // 24 hours, or 1 day
27+ accessTokenLifetime : ( 60 * 60 * 24 ) * 7 , // 7 days * 24 hours, or 1 day
28+ refreshTokenLifetime : ( 60 * 60 * 24 ) * 7 , // 7 days * 24 hours, or 1 day
2829 allowEmptyState : true ,
2930 allowExtendedTokenAttributes : true
3031 } ) ;
@@ -160,7 +161,7 @@ export class OAuthProvider {
160161 }
161162
162163 public async saveToken ( token , client , user ) {
163- this . _logger . info ( "[OAuth] saveToken " + token ) ;
164+ this . _logger . info ( "[OAuth] saveToken for " + user . name + " in " + client . clientId ) ;
164165 const result : any = {
165166 name : "Token for " + user . name ,
166167 accessToken : token . accessToken ,
@@ -185,8 +186,14 @@ export class OAuthProvider {
185186 delete codeobject . _id ;
186187 codeobject . _type = 'code' ;
187188 codeobject . code = code ;
189+ codeobject . id = user . _id ;
190+ codeobject . username = user . username ;
191+ codeobject . email = user . email ;
192+ if ( NoderedUtil . IsNullEmpty ( codeobject . email ) ) codeobject . email = user . username ;
193+ codeobject . fullname = user . name ;
188194 codeobject . redirect_uri = redirect_uri ;
189195 codeobject . client_id = client . clientId
196+ codeobject . name = "Code " + code + " for " + user . name
190197 this . codes [ code ] = codeobject ;
191198 await Config . db . InsertOne ( codeobject , "oauthtokens" , 1 , false , Crypt . rootToken ( ) ) ;
192199 this . _logger . info ( "[OAuth] saveAuthorizationCode " + code + " saved" ) ;
@@ -220,7 +227,7 @@ export class OAuthProvider {
220227
221228 public async getAuthorizationCode ( code ) {
222229 this . _logger . info ( "[OAuth] getAuthorizationCode " + code ) ;
223- let user : TokenUser = this . codes [ code ] ;
230+ let user : any = this . codes [ code ] ;
224231 if ( user == null ) {
225232 let users = await Config . db . query < Base > ( { _type : "code" , "code" : code } , null , 10 , 0 , null , "oauthtokens" , Crypt . rootToken ( ) ) ;
226233 user = users . length ? users [ 0 ] as any : null ;
@@ -246,22 +253,22 @@ export class OAuthProvider {
246253 const redirect_uri = ( user as any ) . redirect_uri ;
247254 const expiresAt = new Date ( ) ;
248255 expiresAt . setMonth ( expiresAt . getMonth ( ) + 1 ) ;
249- user = TokenUser . From ( user ) ;
256+ var tuser = TokenUser . From ( user ) ;
250257 let client = this . getClientById ( client_id ) ;
251258 if ( NoderedUtil . IsNullUndefinded ( client ) ) return null ;
252259
253260 let role = client . defaultrole ;
254261 const keys : string [ ] = Object . keys ( client . rolemappings ) ;
255262 for ( let i = 0 ; i < keys . length ; i ++ ) {
256- if ( user . HasRoleName ( keys [ i ] ) ) role = client . rolemappings [ keys [ i ] ] ;
263+ if ( tuser . HasRoleName ( keys [ i ] ) ) role = client . rolemappings [ keys [ i ] ] ;
257264 }
258265 const result = {
259266 code : code ,
260267 client : this . clients [ 0 ] ,
261268 user : {
262- id : user . _id ,
263- _id : user . _id ,
264- name : user . name ,
269+ id : user . id ,
270+ _id : user . id ,
271+ name : user . fullname ,
265272 username : user . username ,
266273 email : user . username ,
267274 role : role
@@ -271,16 +278,25 @@ export class OAuthProvider {
271278 }
272279 return result ;
273280 }
274- revokeAuthorizationCode ( code ) {
281+ public async revokeAuthorizationCode ( code ) {
282+ if ( typeof code !== "string" ) { code = code . code ; }
275283 this . _logger . info ( "[OAuth] revokeAuthorizationCode " + code ) ;
276284 delete this . codes [ code ] ;
277- Config . db . DeleteMany ( { _type : "code" , "code" : code } , null , "oauthtokens" , Crypt . rootToken ( ) ) ;
285+ const refreshTokenExpiresAt = new Date ( ( new Date ) . getTime ( ) + ( 1000 * Config . oauth_refresh_token_lifetime ) ) . toISOString ( ) ;
286+ const accessTokenExpiresAt = new Date ( ( new Date ) . getTime ( ) + ( 1000 * Config . oauth_access_token_lifetime ) ) . toISOString ( ) ;
287+ await Config . db . DeleteMany ( {
288+ "$or" :
289+ [
290+ { _type : "code" , "code" : code } ,
291+ { _type : "token" , "refreshTokenExpiresAt" : refreshTokenExpiresAt } ,
292+ { _type : "token" , "accessTokenExpiresAt" : accessTokenExpiresAt }
293+ ]
294+ } , null , "oauthtokens" , Crypt . rootToken ( ) ) ;
278295 return true ;
279296 // const user: TokenUser = this.codes[code];
280297 // if (user != null) delete this.codes[code];
281298 // return code;
282299 }
283-
284300 public static tokenCache : CachedToken [ ] = [ ] ;
285301 private static async getCachedAccessToken ( accessToken : string ) : Promise < any > {
286302 await semaphore . down ( ) ;
@@ -292,7 +308,7 @@ export class OAuthProvider {
292308 if ( seconds > Config . oauth_token_cache_seconds ) {
293309 this . tokenCache . splice ( i , 1 ) ;
294310 } else if ( res . token . accessToken == accessToken ) {
295- console . log ( "Return token from cache, using accessToken " + accessToken ) ;
311+ // console.log("Return token from cache, using accessToken " + accessToken);
296312 semaphore . up ( ) ;
297313 return res . token ;
298314 }
@@ -310,7 +326,7 @@ export class OAuthProvider {
310326 if ( seconds > Config . oauth_token_cache_seconds ) {
311327 this . tokenCache . splice ( i , 1 ) ;
312328 } else if ( res . token . refreshToken == refreshToken ) {
313- console . log ( "Return token from cache, using refreshToken " + refreshToken ) ;
329+ // console.log("Return token from cache, using refreshToken " + refreshToken);
314330 semaphore . up ( ) ;
315331 return res . token ;
316332 }
@@ -320,7 +336,7 @@ export class OAuthProvider {
320336 }
321337 private static async addToken ( token : any ) {
322338 await semaphore . down ( ) ;
323- console . log ( "Adding token to cache" ) ;
339+ // console.log("Adding token to cache");
324340 var cuser : CachedToken = new CachedToken ( token ) ;
325341 this . tokenCache . push ( cuser ) ;
326342 semaphore . up ( ) ;
0 commit comments