OpenAuth_server/src/keys.ts

70 lines
1.9 KiB
TypeScript
Raw Normal View History

2018-11-06 19:48:50 +00:00
import Logging from "@hibas123/nodelogging";
2020-08-07 14:16:39 +00:00
import * as fs from "fs";
2018-11-06 19:48:50 +00:00
let private_key: string;
let rsa: RSA;
export function sign(message: Buffer): Buffer {
2020-08-07 14:16:39 +00:00
return rsa.sign(message, "buffer");
2018-11-06 19:48:50 +00:00
}
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) {
2018-11-06 19:48:50 +00:00
return new Promise<string>((resolve, reject) => {
return jwt.sign(payload, private_key, options, (err, token) => {
2020-08-07 14:16:39 +00:00
if (err) reject(err);
else resolve(token);
2018-11-06 19:48:50 +00:00
});
2020-08-07 14:16:39 +00:00
});
2018-11-06 19:48:50 +00:00
}
export async function validateJWT(data: string) {
return new Promise<any>((resolve, reject) => {
jwt.verify(data, public_key, (err, valid) => {
2020-08-07 14:16:39 +00:00
if (err) reject(err);
else resolve(valid);
2018-11-06 19:48:50 +00:00
});
2020-08-07 14:16:39 +00:00
});
2018-11-06 19:48:50 +00:00
}
let create = false;
if (fs.existsSync("./keys")) {
if (fs.existsSync("./keys/private.pem")) {
if (fs.existsSync("./keys/public.pem")) {
2020-08-07 14:16:39 +00:00
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");
2018-11-06 19:48:50 +00:00
if (!private_key || !public_key) {
create = true;
}
} else create = true;
} else create = true;
} else create = true;
2020-08-07 14:16:39 +00:00
import * as RSA from "node-rsa";
2018-11-06 19:48:50 +00:00
if (create === true) {
2020-08-07 14:16:39 +00:00
Logging.log("Started RSA Key gen");
2018-11-06 19:48:50 +00:00
let rsa = new RSA({ b: 4096 });
2020-08-07 14:16:39 +00:00
private_key = rsa.exportKey("private");
public_key = rsa.exportKey("public");
2018-11-06 19:48:50 +00:00
if (!fs.existsSync("./keys")) {
2020-08-07 14:16:39 +00:00
fs.mkdirSync("./keys");
2018-11-06 19:48:50 +00:00
}
2020-08-07 14:16:39 +00:00
fs.writeFileSync("./keys/private.pem", private_key);
fs.writeFileSync("./keys/public.pem", public_key);
Logging.log("Key pair generated");
2018-11-06 19:48:50 +00:00
}
2020-08-07 14:16:39 +00:00
rsa = new RSA(private_key, "private");
rsa.importKey(public_key, "public");