rewardwee_auth_access
Version:
auth verify access for all microservices
136 lines (96 loc) • 2.63 kB
text/typescript
import { Response } from 'express';
import { RESPONSE_TYPE, TokenPayload } from './customTypes';
import jwt from 'jsonwebtoken';
import { Readable } from 'stream';
import ObjectId from "mongoose"
let myObjectId = ObjectId.Types.ObjectId;
//let dsecret = getGlobalEnv("JWT_SECRET") as string;
//console.log({dsecret})
/**
* A function that returns http response as a stream.
*
* @param res - response object.
*
* @param data - data to be sent as response.
*
* @returns - a void promise.
*
* @remarks - this function is used to send response to the client.
*
* @beta
*
*
*
*/
export const response = (res: Response, data: RESPONSE_TYPE) => {
data.status =
data.status == undefined || data.status == null ? 500 : data.status;
let dataToJson = JSON.stringify(data);
//res.status(data.status).json(data);
res.writeHead(data.status, {
'Content-Length': Buffer.byteLength(dataToJson),
'Content-Type': 'application/json'
});
var stream = new Readable();
stream.push(dataToJson); // stream apparently does not accept objects
stream.push(null); // this
stream.pipe(res);
return;
};
/**
* A function that extracts the content of a jwt token.
*
* @param token - token to be extracted.
* @returns - a promise that resolves to a RESPONSE_TYPE object.
*
*
* @remarks
*
* This function uses the jsonwebtoken library to extract the content of the token.
*
* @beta
*
* @example
*
*
* extractTokenContent(token)
* .then((done: RESPONSE_TYPE)=>{
* console.log(done);
* })
* .catch((err: any)=>{
* console.log(err);
* })
*
*/
export const extractTokenContent = (token: string, secret: string): Promise<RESPONSE_TYPE> => {
// let secret = getGlobalEnv("JWT_SECRET") as string;
return new Promise((resolve:any, reject: any)=>{
try {
const decoded = jwt.verify(token, secret);
if (decoded && typeof decoded === 'object' && 'id' in decoded && 'email' in decoded && 'time' in decoded) {
let token = {
id: decoded.id,
email: decoded.email as string,
time: decoded.time
}
let done: RESPONSE_TYPE = {
data: [decoded],
message: "token verified.",
status: 200,
statusCode: "SUCCESS"
}
resolve(done)
return ;
}
} catch (err) {
let error: RESPONSE_TYPE ={
data:[],
message:'Failed to verify JWT token',
status:500,
statusCode:"UNKNOWN_ERROR"
}
reject(error);
return;
}
})
}