70 lines
1.9 KiB
TypeScript
70 lines
1.9 KiB
TypeScript
import Logging from "@hibas123/nodelogging";
|
|
import * as fs from "fs"
|
|
|
|
let private_key: string;
|
|
let rsa: RSA;
|
|
export function sign(message: Buffer): Buffer {
|
|
return rsa.sign(message, "buffer")
|
|
}
|
|
|
|
export function verify(message: Buffer, signature: Buffer): boolean {
|
|
return rsa.verify(message, signature);
|
|
}
|
|
|
|
export let public_key: string;
|
|
|
|
import * as jwt from "jsonwebtoken";
|
|
import config from "./config";
|
|
|
|
export function createJWT(payload: any, options: jwt.SignOptions) {
|
|
return new Promise<string>((resolve, reject) => {
|
|
return jwt.sign(payload, private_key, options, (err, token) => {
|
|
if (err) reject(err)
|
|
else resolve(token)
|
|
});
|
|
})
|
|
}
|
|
|
|
export async function validateJWT(data: string) {
|
|
return new Promise<any>((resolve, reject) => {
|
|
jwt.verify(data, public_key, (err, valid) => {
|
|
if (err) reject(err)
|
|
else resolve(valid)
|
|
});
|
|
})
|
|
}
|
|
|
|
let create = false;
|
|
if (fs.existsSync("./keys")) {
|
|
if (fs.existsSync("./keys/private.pem")) {
|
|
if (fs.existsSync("./keys/public.pem")) {
|
|
Logging.log("Using existing private and public key")
|
|
private_key = fs.readFileSync("./keys/private.pem").toString("utf8")
|
|
public_key = fs.readFileSync("./keys/public.pem").toString("utf8")
|
|
|
|
if (!private_key || !public_key) {
|
|
create = true;
|
|
}
|
|
} else create = true;
|
|
} else create = true;
|
|
} else create = true;
|
|
|
|
import * as RSA from "node-rsa"
|
|
|
|
if (create === true) {
|
|
Logging.log("Started RSA Key gen")
|
|
let rsa = new RSA({ b: 4096 });
|
|
private_key = rsa.exportKey("private")
|
|
public_key = rsa.exportKey("public")
|
|
|
|
if (!fs.existsSync("./keys")) {
|
|
fs.mkdirSync("./keys")
|
|
}
|
|
fs.writeFileSync("./keys/private.pem", private_key)
|
|
fs.writeFileSync("./keys/public.pem", public_key)
|
|
Logging.log("Key pair generated")
|
|
}
|
|
|
|
rsa = new RSA(private_key, "private")
|
|
rsa.importKey(public_key, "public")
|