rewardwee_auth_access
Version:
auth verify access for all microservices
158 lines (116 loc) • 3.4 kB
text/typescript
import { Request, Response, NextFunction } from "express";
import { extractTokenContent, response } from "../helpers/misc";
import { RESPONSE_TYPE } from "../helpers/customTypes";
import {AuthLogin} from "../controllers/login"
import { MyHttpRequest } from "../types";
function extractTokenFromHeader(header: string | undefined): string[] | undefined {
if (header == undefined) {
return undefined;
}
const parts = header.split(' ');
if (parts.length === 3 && parts[0] === 'Bearer') {
// console.log({part1: parts[1], part2: parts[2] })
return [parts[1], parts[2] ] ;
}
return undefined;
}
export const isTokenCorrect = (req: MyHttpRequest, res: Response, next: NextFunction)=>{
const authHeader = req.headers.authorization;
const tokenData = extractTokenFromHeader(authHeader);
// console.log({authHeader, tokenData})
if (tokenData != undefined) {
let token = tokenData[0];
// get token
extractTokenContent(token as string, req.body.jk)
.then((verified: RESPONSE_TYPE)=>{
console.log({verified, data: verified.data[0]})
delete req.body.jk ;
let {id,
email ,
time ,
role
} = verified.data[0];
let user_id = tokenData[1]
console.log({token, user_id})
if(id != user_id){
let error: RESPONSE_TYPE ={
data: [],
message: "invalid login token.",
status: 400,
statusCode: "LOGIN_FAILED"
}
console.log({error})
response(res, error);
return
}
AuthLogin.isUserLoggedIn(id, token as string, req.body.UserLoginRecord )
.then((success: any)=>{
delete req.body.UserLoginRecord ;
if(success.statusCode=="LOGIN_SUCCESSFUL"){
req.user_id = id;
req.user_email = email;
req.user_token = token;
req.role = role;
next();
}
else{
response(res, success);
return;
}
})
.catch((err: any)=>{
delete req.body.UserLoginRecord ;
response(res, err);
return;
})
})
.catch((err: RESPONSE_TYPE)=>{
console.log({err})
delete req.body.jk ;
response(res, err);
return;
})
}
else{
let error: RESPONSE_TYPE ={
data: [],
message: "invalid login token.",
status: 400,
statusCode: "LOGIN_FAILED"
}
console.log({error})
response(res, error);
return
}
}
export const isCompany = (req: MyHttpRequest, res: Response, next: NextFunction)=>{
console.log({role: req.role})
if (req.role?.toLowerCase() == "company") {
next();
}
else{
let error: RESPONSE_TYPE ={
data: [],
message: "access denied.",
status: 403,
statusCode: "LOGIN_FAILED"
}
response(res, error);
return
}
}
export const isTalent = (req: MyHttpRequest, res: Response, next: NextFunction)=>{
if (req.role?.toLowerCase() == "talent") {
next();
}
else{
let error: RESPONSE_TYPE ={
data: [],
message: "access denied.",
status: 403,
statusCode: "LOGIN_FAILED"
}
response(res, error);
return
}
}