diff --git a/src/helpers/cookies/jwt/decodeToken/index.ts b/src/helpers/cookies/jwt/decode/index.ts similarity index 100% rename from src/helpers/cookies/jwt/decodeToken/index.ts rename to src/helpers/cookies/jwt/decode/index.ts diff --git a/src/helpers/cookies/jwt/decodeToken/types.ts b/src/helpers/cookies/jwt/decode/types.ts similarity index 100% rename from src/helpers/cookies/jwt/decodeToken/types.ts rename to src/helpers/cookies/jwt/decode/types.ts diff --git a/src/helpers/cookies/jwt/encode/index.ts b/src/helpers/cookies/jwt/encode/index.ts new file mode 100644 index 0000000..506bab4 --- /dev/null +++ b/src/helpers/cookies/jwt/encode/index.ts @@ -0,0 +1,11 @@ +import jwt from "jsonwebtoken"; + +export const jwtEncode = (payload: any) => { + const tokenLifetime = Number(process.env.SESSION_EXPIRE!); + const jwtSecret = process.env.JWT_SECRET!; + const jwtToken = jwt.sign(payload, jwtSecret, { + expiresIn: tokenLifetime, + }); + + return jwtToken; +}; diff --git a/src/modules/auth/controller/loginWithPassword.controller.ts b/src/modules/auth/controller/loginWithPassword.controller.ts index 21266c7..6d0af31 100644 --- a/src/modules/auth/controller/loginWithPassword.controller.ts +++ b/src/modules/auth/controller/loginWithPassword.controller.ts @@ -1,9 +1,13 @@ import { Context } from "elysia"; import { loginWithPasswordService } from "../services/loginWithPassword.service"; import { loginWithPasswordSchema } from "../auth.schema"; -import { returnErrorResponse } from "../../../helpers/callback/httpResponse"; +import { + returnErrorResponse, + returnReadResponse, +} from "../../../helpers/callback/httpResponse"; import { LoginWithPasswordRequest } from "../auth.types"; import { mainErrorHandler } from "../../../helpers/error/handler"; +import { getUserHeaderInformation } from "../../../helpers/cookies/userHeader/getUserHeaderInformation"; export const loginWithPassword = async ( ctx: Context & { body: LoginWithPasswordRequest } @@ -12,9 +16,20 @@ export const loginWithPassword = async ( if (error || !ctx.body) return returnErrorResponse(ctx.set, 400, "Invalid user input", error); + const userHeaderInfo = getUserHeaderInformation(ctx); + try { - const result = await loginWithPasswordService(ctx.body); - return result; + const processAuth = await loginWithPasswordService( + ctx.body, + userHeaderInfo + ); + + return returnReadResponse( + ctx.set, + 200, + "Autentication Success", + processAuth + ); } catch (error) { return mainErrorHandler(ctx.set, error); } diff --git a/src/modules/auth/services/loginWithPassword.service.ts b/src/modules/auth/services/loginWithPassword.service.ts index e63f891..fff4ed8 100644 --- a/src/modules/auth/services/loginWithPassword.service.ts +++ b/src/modules/auth/services/loginWithPassword.service.ts @@ -2,9 +2,14 @@ import bcrypt from "bcrypt"; import { findUserByEmailOrUsernameService } from "../../user/services/findUserByEmailOrUsername.service"; import { LoginWithPasswordRequest } from "../auth.types"; import { AppError } from "../../../helpers/error/instances/app"; +import { UserHeaderInformation } from "../../../helpers/cookies/userHeader/getUserHeaderInformation/types"; +import { createUserSessionService } from "../../userSession/services/createUserSession.service"; +import { jwtEncode } from "../../../helpers/cookies/jwt/encode"; +import { returnReadResponse } from "../../../helpers/callback/httpResponse"; export const loginWithPasswordService = async ( - request: LoginWithPasswordRequest + request: LoginWithPasswordRequest, + userHeaderInfo: UserHeaderInformation ) => { try { // search for user data using an identifier (username or email) @@ -14,7 +19,14 @@ export const loginWithPasswordService = async ( if (!(await bcrypt.compare(request.password, userData.password))) throw new AppError(401, "Password incorrect"); - return userData; + const userSession = await createUserSessionService({ + userId: userData.id, + userHeaderInformation: userHeaderInfo, + }); + + const jwtToken = jwtEncode(userSession); + + return jwtToken; } catch (error) { throw error; } diff --git a/src/modules/userRole/controller/createUserRole.controller.ts b/src/modules/userRole/controller/createUserRole.controller.ts index 48f5ff6..ed8eabd 100644 --- a/src/modules/userRole/controller/createUserRole.controller.ts +++ b/src/modules/userRole/controller/createUserRole.controller.ts @@ -5,7 +5,7 @@ import { returnWriteResponse, } from "../../../helpers/callback/httpResponse"; import { createUserRoleService } from "../services/createUserRole.service"; -import { JWTDecodeToken } from "../../../helpers/cookies/jwt/decodeToken"; +import { JWTDecodeToken } from "../../../helpers/cookies/jwt/decode"; import { mainErrorHandler } from "../../../helpers/error/handler"; import { createUserRoleSchema } from "../schemas/createUserRole.schema"; diff --git a/src/modules/userSession/repositories/createUserSession.repository.ts b/src/modules/userSession/repositories/createUserSession.repository.ts index ef09985..ec6f783 100644 --- a/src/modules/userSession/repositories/createUserSession.repository.ts +++ b/src/modules/userSession/repositories/createUserSession.repository.ts @@ -17,6 +17,12 @@ export const createUserSessionRepo = async ( }, }, }, + omit: { + lastOnline: true, + deletedAt: true, + createdAt: true, + updatedAt: true, + }, }); return newUserRole; } catch (error) {