11import { User } from "../interfaces/tables/user" ;
22import { createUser , updateUser , getUserByEmail , getUser } from "../crud/user" ;
33import { InsertResult } from "../interfaces/mysql" ;
4- import {
5- createEmail ,
6- updateEmail ,
7- getEmail ,
8- sendEmailVerification
9- } from "../crud/email" ;
4+ import { createEmail , updateEmail , getEmail } from "../crud/email" ;
105import { mail } from "../helpers/mail" ;
11- import { verifyToken , loginToken , passwordResetToken } from "../helpers/jwt" ;
6+ import {
7+ verifyToken ,
8+ loginToken ,
9+ passwordResetToken ,
10+ refreshToken
11+ } from "../helpers/jwt" ;
1212import { KeyValue , Locals } from "../interfaces/general" ;
1313import { createEvent } from "../crud/event" ;
1414import {
1515 EventType ,
1616 ErrorCode ,
1717 MembershipRole ,
18- Templates
18+ Templates ,
19+ Tokens
1920} from "../interfaces/enum" ;
2021import { compare , hash } from "bcrypt" ;
2122import { deleteSensitiveInfoUser } from "../helpers/utils" ;
2223import { createMembership } from "../crud/membership" ;
2324
25+ export const validateRefreshToken = async ( token : string , locals : Locals ) => {
26+ const data = < User > await verifyToken ( token , Tokens . REFRESH ) ;
27+ if ( ! data . id ) throw new Error ( ErrorCode . USER_NOT_FOUND ) ;
28+ const user = await getUser ( data . id ) ;
29+ await createEvent (
30+ {
31+ userId : user . id ,
32+ type : EventType . AUTH_REFRESH
33+ } ,
34+ locals
35+ ) ;
36+ return {
37+ token : await loginToken ( deleteSensitiveInfoUser ( user ) ) ,
38+ refresh : await refreshToken ( data . id )
39+ } ;
40+ } ;
41+
2442export const login = async (
2543 email : string ,
2644 password : string ,
2745 locals : Locals
2846) => {
2947 const user = await getUserByEmail ( email , true ) ;
3048 if ( ! user . password ) throw new Error ( ErrorCode . MISSING_PASSWORD ) ;
49+ if ( ! user . id ) throw new Error ( ErrorCode . USER_NOT_FOUND ) ;
3150 const correctPassword = await compare ( password , user . password ) ;
3251 if ( correctPassword ) {
3352 await createEvent (
@@ -38,7 +57,10 @@ export const login = async (
3857 } ,
3958 locals
4059 ) ;
41- return await loginToken ( deleteSensitiveInfoUser ( user ) ) ;
60+ return {
61+ token : await loginToken ( deleteSensitiveInfoUser ( user ) ) ,
62+ refresh : await refreshToken ( user . id )
63+ } ;
4264 }
4365 throw new Error ( ErrorCode . INVALID_LOGIN ) ;
4466} ;
@@ -88,7 +110,7 @@ export const sendPasswordReset = async (email: string, locals: Locals) => {
88110} ;
89111
90112export const verifyEmail = async ( token : string , locals : Locals ) => {
91- const emailId = ( < KeyValue > await verifyToken ( token , "email-verify" ) ) . id ;
113+ const emailId = ( < KeyValue > await verifyToken ( token , Tokens . EMAIL_VERIFY ) ) . id ;
92114 const email = await getEmail ( emailId ) ;
93115 await createEvent (
94116 {
@@ -106,7 +128,7 @@ export const updatePassword = async (
106128 password : string ,
107129 locals : Locals
108130) => {
109- const userId = ( < KeyValue > await verifyToken ( token , "password-reset" ) ) . id ;
131+ const userId = ( < KeyValue > await verifyToken ( token , Tokens . PASSWORD_RESET ) ) . id ;
110132 const hashedPassword = await hash ( password || "" , 8 ) ;
111133 await updateUser ( userId , { password : hashedPassword } ) ;
112134 await createEvent (
0 commit comments