diff --git a/src/apps/public/account/services.js b/src/apps/public/account/services.js index ebc0006..6729a5d 100644 --- a/src/apps/public/account/services.js +++ b/src/apps/public/account/services.js @@ -43,43 +43,49 @@ const confirm_password_recover_schema = { required : [ 'email', 'password', 'otp', 'checksum' ]//Different requirements }; +async function AuthorizeJWT_email_pwd( email , password ){ + const user = await login( email, password ); + if( !user ){ + return null; + } + const current_date = new Date(); + const iat = Math.floor( (current_date.getTime())/1000 ); + const renewal_exp = ( iat + 3600*jwtRenewalTimeout ) * 1000; + /** + * Renew session token on every login event. + * Previous session token is lost + */ + const session_token = toSha256( `${new Date()}` ); + const session_token_exp = new Date( renewal_exp ); + user.session_token = session_token; + user.session_token_exp = session_token_exp; + await user.save(); + const payload = { + iat: iat, + exp: iat + jwtTimeout * 3600, + aud: jwtOptions.audience, + iss: jwtOptions.audience, + sub: user.id, + }; + const jwt = jsonwebtoken.sign( payload , jwtSecret ); + return { + accessToken : jwt, + payload : payload, + session_token, + session_token_exp, + user : user + }; +} + const AuthorizeJWT = async(req, res) => { try{ if( validator.validate( req.body , login_account_schema ).valid ){ const { email, password } = req.body; - const user = await login( email, password ); - if( !user ){ + const retVal = await AuthorizeJWT_email_pwd( email , password ); + if( !retVal ){ return res.status(401).send( { error : "Invalid credentials" } ); } - const current_date = new Date(); - const iat = Math.floor( (current_date.getTime())/1000 ); - const renewal_exp = ( iat + 3600*jwtRenewalTimeout ) * 1000; - - /** - * Renew session token on every login event. - * Previous session token is lost - */ - const session_token = toSha256( `${new Date()}` ); - const session_token_exp = new Date( renewal_exp ); - user.session_token = session_token; - user.session_token_exp = session_token_exp; - await user.save(); - - const payload = { - iat: iat, - exp: iat + jwtTimeout * 3600, - aud: jwtOptions.audience, - iss: jwtOptions.audience, - sub: user.id, - }; - const jwt = jsonwebtoken.sign( payload , jwtSecret ); - return res.status(200).send( { - accessToken : jwt, - payload : payload, - session_token, - session_token_exp, - user : user - } ); + return res.send( retVal ); }else{ return res.status(400).send( { error : "Invalid request" } ); } @@ -185,10 +191,10 @@ const ConfirmAccount = async(req, res) => { const content = { user_name : email }; const receiver = email; await emailEvent( EMAIL_EVENTS.ACCOUNT_CONFIRMED , receiver , content ); - console.log( - content - ); - return res.status(200).send( { msg : "User created successfully!" } ); + + const retVal = await AuthorizeJWT_email_pwd( email , password ); + + return res.send( retVal ); }else{ return res.status(400).send( { error : "Invalid request" } ); } diff --git a/src/lib/Handlers/Account/index.js b/src/lib/Handlers/Account/index.js index 939c448..6daba6b 100644 --- a/src/lib/Handlers/Account/index.js +++ b/src/lib/Handlers/Account/index.js @@ -64,7 +64,7 @@ async function login( email , password ){ let safe_password = toSha256( password + pwd_secret ); const user = await UserModel.findOne({ email , password : safe_password - },{ password : 0 , session_token : 0 , session_token_exp : 0 }); + },{ password : 0 , session_token : 0 , session_token_exp : 0 }).populate('company'); return user; }