46 lines
1.1 KiB
JavaScript
46 lines
1.1 KiB
JavaScript
import dotenv from 'dotenv';
|
|
import chalk from 'chalk';
|
|
import jwt from 'jsonwebtoken'
|
|
import { randomUUID } from 'node:crypto'
|
|
dotenv.config();
|
|
|
|
export default class AuthHandler {
|
|
ips = new Map()
|
|
#secret
|
|
|
|
constructor() {
|
|
this.#secret = process.env.JWT_SECRET || 'random-id-for-now-123013123u1o23o12i3ukjdsbvkfndijnx1ijs';
|
|
}
|
|
|
|
check(req, res) {
|
|
if(this.ips.get(req.headers["x-forwarded-for"])) {
|
|
console.log(chalk.green(" ", req.headers["x-forwarded-for"]))
|
|
return true
|
|
} else {
|
|
console.log(chalk.red(" ", req.headers["x-forwarded-for"]))
|
|
return false
|
|
}
|
|
}
|
|
|
|
login(req, res) {
|
|
const { login } = req.body;
|
|
if(login === process.env.LOGIN) {
|
|
this.ips.set(req.headers["x-forwarded-for"], new Date())
|
|
return true;
|
|
} else {
|
|
return false
|
|
}
|
|
}
|
|
|
|
sign(payload, options = {}) {
|
|
return jwt.sign(
|
|
payload,
|
|
this.#secret,
|
|
{ expiresIn: '30d', ...options }
|
|
);
|
|
}
|
|
|
|
verify(token) {
|
|
return jwt.verify(token, this.#secret)
|
|
}
|
|
} |