[ABANDONED] API server for Flexor social network.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

40 lines
1.4 KiB

import { hash, compare } from 'bcryptjs'
import { randomBytes } from 'crypto'
import jwt, { SignOptions, VerifyOptions } from 'jsonwebtoken'
export async function hashPassword(password: string): Promise<string> {
return await hash(password, 8)
}
export async function comparePassword(password: string, hash: string): Promise<boolean> {
return await compare(password, hash)
}
export const generateString = (length: number) => randomBytes(Math.max(Math.round(length / 2), 5)).toString('hex')
export namespace JWT {
export interface JWTData {
sub?: string
exp?: number
}
export function sign(data: JWTData, options: SignOptions = {}): Promise<string> {
return new Promise<string>((resolve, reject) => {
jwt.sign(data, process.env.TOKEN_SECRET!, options, (err, token) => {
if (err) return reject(err)
resolve(token)
})
})
}
export function verify(token: string, options?: VerifyOptions): Promise<JWTData> {
return new Promise<JWTData>((resolve, reject) => {
jwt.verify(token, process.env.TOKEN_SECRET!, options, (err, decoded: JWTData | string) => {
if (err) return reject(err)
if (typeof decoded === 'string') return reject('Invalid token')
resolve(decoded)
})
})
}
}