autocreate folder keys
This commit is contained in:
parent
f2f80dd2f7
commit
c73774dc03
3 changed files with 27 additions and 9 deletions
|
@ -1,2 +1,4 @@
|
||||||
ASSET_API_ASSETS_FOLDER = "./.assets/"
|
ASSET_API_ASSETS_FOLDER = "./.assets/"
|
||||||
ASSET_API_IDENTITY_API_ENDPOINT = "http://localhost:3000/"
|
ASSET_API_IDENTITY_API_ENDPOINT = "http://localhost:3000/"
|
||||||
|
ASSET_API_PRIVATE_KEY_PATH = "./.keys/m2m.pem"
|
||||||
|
ASSET_API_PUBLIC_KEY_PATH = "./.keys/m2m.pub"
|
|
@ -18,7 +18,9 @@ import "dotenv/config";
|
||||||
|
|
||||||
const REQUIRED_VARS = [
|
const REQUIRED_VARS = [
|
||||||
"ASSET_API_ASSETS_FOLDER",
|
"ASSET_API_ASSETS_FOLDER",
|
||||||
"ASSET_API_IDENTITY_API_ENDPOINT"
|
"ASSET_API_IDENTITY_API_ENDPOINT",
|
||||||
|
"ASSET_API_PRIVATE_KEY_PATH",
|
||||||
|
"ASSET_API_PUBLIC_KEY_PATH",
|
||||||
];
|
];
|
||||||
|
|
||||||
REQUIRED_VARS.forEach((element) => {
|
REQUIRED_VARS.forEach((element) => {
|
||||||
|
@ -36,3 +38,5 @@ export const LISTEN_PORT = Number(process.env["ASSET_API_LISTEN_PORT"]) || 3001;
|
||||||
export const ASSETS_FOLDER = process.env["ASSET_API_ASSETS_FOLDER"];
|
export const ASSETS_FOLDER = process.env["ASSET_API_ASSETS_FOLDER"];
|
||||||
export const IDENTITY_API_ENDPOINT = process.env["ASSET_API_IDENTITY_API_ENDPOINT"];
|
export const IDENTITY_API_ENDPOINT = process.env["ASSET_API_IDENTITY_API_ENDPOINT"];
|
||||||
export const M2M_ALGORITHM = process.env["ASSET_API_M2M_ALGORITHM"] || "RSA-SHA512";
|
export const M2M_ALGORITHM = process.env["ASSET_API_M2M_ALGORITHM"] || "RSA-SHA512";
|
||||||
|
export const PRIVATE_KEY_PATH = process.env["ASSET_API_PRIVATE_KEY_PATH"]
|
||||||
|
export const PUBLIC_KEY_PATH = process.env["ASSET_API_PUBLIC_KEY_PATH"]
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
import { readFile } from "node:fs/promises";
|
import { readFile } from "node:fs/promises";
|
||||||
import { createWriteStream, readFileSync, writeFileSync } from "node:fs";
|
import { createWriteStream, mkdirSync, readFileSync, writeFileSync, existsSync } from "node:fs";
|
||||||
import { createSign, generateKeyPairSync, randomUUID } from "node:crypto";
|
import { createSign, generateKeyPairSync, randomUUID } from "node:crypto";
|
||||||
import Fastify from "fastify";
|
import Fastify from "fastify";
|
||||||
import multipart from "@fastify/multipart";
|
import multipart from "@fastify/multipart";
|
||||||
|
@ -24,7 +24,7 @@ import mime from "mime";
|
||||||
import { promisify } from "node:util";
|
import { promisify } from "node:util";
|
||||||
import { pipeline } from "node:stream";
|
import { pipeline } from "node:stream";
|
||||||
import cors from "@fastify/cors";
|
import cors from "@fastify/cors";
|
||||||
import { M2M_ALGORITHM, ASSETS_FOLDER, ASSET_API_LANDING_MESSAGE, IDENTITY_API_ENDPOINT } from "./consts.js";
|
import { M2M_ALGORITHM, ASSETS_FOLDER, ASSET_API_LANDING_MESSAGE, IDENTITY_API_ENDPOINT, PRIVATE_KEY_PATH, PUBLIC_KEY_PATH } from "./consts.js";
|
||||||
|
|
||||||
const { private: M2M_PRIVATE_KEY, public: M2M_PUBLIC_KEY } = loadM2MKeys();
|
const { private: M2M_PRIVATE_KEY, public: M2M_PUBLIC_KEY } = loadM2MKeys();
|
||||||
if (M2M_PRIVATE_KEY == null || M2M_PUBLIC_KEY == null) {
|
if (M2M_PRIVATE_KEY == null || M2M_PUBLIC_KEY == null) {
|
||||||
|
@ -131,11 +131,11 @@ app.listen({ port: 3001 });
|
||||||
function loadM2MKeys() {
|
function loadM2MKeys() {
|
||||||
try {
|
try {
|
||||||
return {
|
return {
|
||||||
private: readFileSync("./.keys/m2m.pem").toString("ascii"),
|
private: readFileSync(PRIVATE_KEY_PATH).toString("ascii"),
|
||||||
public: readFileSync("./.keys/m2m.pub").toString("ascii"),
|
public: readFileSync(PUBLIC_KEY_PATH).toString("ascii"),
|
||||||
};
|
};
|
||||||
} catch {
|
} catch {
|
||||||
console.warn("Generating M2M key pair!");
|
console.warn("M2M key pair not found. Generating M2M key pair!");
|
||||||
|
|
||||||
let { publicKey, privateKey } = generateKeyPairSync("rsa", {
|
let { publicKey, privateKey } = generateKeyPairSync("rsa", {
|
||||||
modulusLength: 4096,
|
modulusLength: 4096,
|
||||||
|
@ -149,8 +149,20 @@ function loadM2MKeys() {
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
writeFileSync("./.keys/m2m.pem", privateKey);
|
let privateDir = join(PRIVATE_KEY_PATH, "..");
|
||||||
writeFileSync("./.keys/m2m.pub", publicKey);
|
if (!existsSync(privateDir)) {
|
||||||
|
console.warn("The private key folder does not exist. It will be created.")
|
||||||
|
mkdirSync(privateDir, { recursive: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
let publicDir = join(PUBLIC_KEY_PATH, "..");
|
||||||
|
if (!existsSync(publicDir)) {
|
||||||
|
console.warn("The public key folder does not exist. It will be created.")
|
||||||
|
mkdirSync(publicDir, { recursive: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
writeFileSync(PRIVATE_KEY_PATH, privateKey);
|
||||||
|
writeFileSync(PUBLIC_KEY_PATH, publicKey);
|
||||||
|
|
||||||
return loadM2MKeys();
|
return loadM2MKeys();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue