@@ -8,7 +8,8 @@ import fiber from 'fibers';
88import { escapeRegExp , escapeHTML } from '@rocket.chat/string-helpers' ;
99
1010import { settings } from '../../../settings/server' ;
11- import { Users , Rooms , CredentialTokens } from '../../../models/server' ;
11+ import { Users , Rooms } from '../../../models/server' ;
12+ import { CredentialTokens } from '../../../models/server/raw' ;
1213import { IUser } from '../../../../definition/IUser' ;
1314import { IIncomingMessage } from '../../../../definition/IIncomingMessage' ;
1415import { saveUserIdentity , createRoom , generateUsernameSuggestion , addUserToRoom } from '../../../lib/server/functions' ;
@@ -55,20 +56,20 @@ export class SAML {
5556 }
5657 }
5758
58- public static hasCredential ( credentialToken : string ) : boolean {
59- return CredentialTokens . findOneById ( credentialToken ) != null ;
59+ public static async hasCredential ( credentialToken : string ) : Promise < boolean > {
60+ return await CredentialTokens . findOneNotExpiredById ( credentialToken ) != null ;
6061 }
6162
62- public static retrieveCredential ( credentialToken : string ) : Record < string , any > | undefined {
63+ public static async retrieveCredential ( credentialToken : string ) : Promise < Record < string , any > | undefined > {
6364 // The credentialToken in all these functions corresponds to SAMLs inResponseTo field and is mandatory to check.
64- const data = CredentialTokens . findOneById ( credentialToken ) ;
65+ const data = await CredentialTokens . findOneNotExpiredById ( credentialToken ) ;
6566 if ( data ) {
6667 return data . userInfo ;
6768 }
6869 }
6970
70- public static storeCredential ( credentialToken : string , loginResult : object ) : void {
71- CredentialTokens . create ( credentialToken , loginResult ) ;
71+ public static async storeCredential ( credentialToken : string , loginResult : { profile : Record < string , any > } ) : Promise < void > {
72+ await CredentialTokens . create ( credentialToken , loginResult ) ;
7273 }
7374
7475 public static insertOrUpdateSAMLUser ( userObject : ISAMLUser ) : { userId : string ; token : string } {
@@ -380,7 +381,7 @@ export class SAML {
380381 private static processValidateAction ( req : IIncomingMessage , res : ServerResponse , service : IServiceProviderOptions , _samlObject : ISAMLAction ) : void {
381382 const serviceProvider = new SAMLServiceProvider ( service ) ;
382383 SAMLUtils . relayState = req . body . RelayState ;
383- serviceProvider . validateResponse ( req . body . SAMLResponse , ( err , profile /* , loggedOut*/ ) => {
384+ serviceProvider . validateResponse ( req . body . SAMLResponse , async ( err , profile /* , loggedOut*/ ) => {
384385 try {
385386 if ( err ) {
386387 SAMLUtils . error ( err ) ;
@@ -400,7 +401,7 @@ export class SAML {
400401 profile,
401402 } ;
402403
403- this . storeCredential ( credentialToken , loginResult ) ;
404+ await this . storeCredential ( credentialToken , loginResult ) ;
404405 const url = `${ Meteor . absoluteUrl ( 'home' ) } ?saml_idp_credentialToken=${ credentialToken } ` ;
405406 res . writeHead ( 302 , {
406407 Location : url ,
0 commit comments