mirror of
https://github.com/fosrl/pangolin.git
synced 2026-03-06 18:56:39 +00:00
Load encryption file dynamically
This commit is contained in:
@@ -19,18 +19,26 @@ import * as fs from "fs";
|
|||||||
import NodeCache from "node-cache";
|
import NodeCache from "node-cache";
|
||||||
import logger from "@server/logger";
|
import logger from "@server/logger";
|
||||||
|
|
||||||
const encryptionKeyPath =
|
let encryptionKeyPath = "";
|
||||||
config.getRawPrivateConfig().server.encryption_key_path;
|
let encryptionKeyHex = "";
|
||||||
|
let encryptionKey: Buffer;
|
||||||
|
function loadEncryptData() {
|
||||||
|
if (encryptionKey) {
|
||||||
|
return; // already loaded
|
||||||
|
}
|
||||||
|
|
||||||
if (!fs.existsSync(encryptionKeyPath)) {
|
encryptionKeyPath = config.getRawPrivateConfig().server.encryption_key_path;
|
||||||
throw new Error(
|
|
||||||
"Encryption key file not found. Please generate one first."
|
if (!fs.existsSync(encryptionKeyPath)) {
|
||||||
);
|
throw new Error(
|
||||||
|
"Encryption key file not found. Please generate one first."
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
encryptionKeyHex = fs.readFileSync(encryptionKeyPath, "utf8").trim();
|
||||||
|
encryptionKey = Buffer.from(encryptionKeyHex, "hex");
|
||||||
}
|
}
|
||||||
|
|
||||||
const encryptionKeyHex = fs.readFileSync(encryptionKeyPath, "utf8").trim();
|
|
||||||
const encryptionKey = Buffer.from(encryptionKeyHex, "hex");
|
|
||||||
|
|
||||||
// Define the return type for clarity and type safety
|
// Define the return type for clarity and type safety
|
||||||
export type CertificateResult = {
|
export type CertificateResult = {
|
||||||
id: number;
|
id: number;
|
||||||
@@ -50,6 +58,9 @@ export async function getValidCertificatesForDomains(
|
|||||||
domains: Set<string>,
|
domains: Set<string>,
|
||||||
useCache: boolean = true
|
useCache: boolean = true
|
||||||
): Promise<Array<CertificateResult>> {
|
): Promise<Array<CertificateResult>> {
|
||||||
|
|
||||||
|
loadEncryptData(); // Ensure encryption key is loaded
|
||||||
|
|
||||||
const finalResults: CertificateResult[] = [];
|
const finalResults: CertificateResult[] = [];
|
||||||
const domainsToQuery = new Set<string>();
|
const domainsToQuery = new Set<string>();
|
||||||
|
|
||||||
@@ -151,7 +162,9 @@ export async function getValidCertificatesForDomains(
|
|||||||
|
|
||||||
// If a certificate was found, format it, add to results, and cache it
|
// If a certificate was found, format it, add to results, and cache it
|
||||||
if (foundCert) {
|
if (foundCert) {
|
||||||
logger.debug(`Creating result cert for ${domain} using cert from ${foundCert.domain}`);
|
logger.debug(
|
||||||
|
`Creating result cert for ${domain} using cert from ${foundCert.domain}`
|
||||||
|
);
|
||||||
const resultCert: CertificateResult = {
|
const resultCert: CertificateResult = {
|
||||||
id: foundCert.certId,
|
id: foundCert.certId,
|
||||||
domain: foundCert.domain, // The actual domain of the cert record
|
domain: foundCert.domain, // The actual domain of the cert record
|
||||||
@@ -172,7 +185,6 @@ export async function getValidCertificatesForDomains(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const decryptedResults = decryptFinalResults(finalResults);
|
const decryptedResults = decryptFinalResults(finalResults);
|
||||||
return decryptedResults;
|
return decryptedResults;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -172,6 +172,12 @@ export function readPrivateConfigFile() {
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// test if the config file is there
|
||||||
|
if (!fs.existsSync(privateConfigFilePath1)) {
|
||||||
|
// load the default values of the zod schema and return those
|
||||||
|
return privateConfigSchema.parse({});
|
||||||
|
}
|
||||||
|
|
||||||
const loadConfig = (configPath: string) => {
|
const loadConfig = (configPath: string) => {
|
||||||
try {
|
try {
|
||||||
const yamlContent = fs.readFileSync(configPath, "utf8");
|
const yamlContent = fs.readFileSync(configPath, "utf8");
|
||||||
|
|||||||
@@ -292,11 +292,33 @@ hybridRouter.get(
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
let encryptionKeyPath = "";
|
||||||
|
let encryptionKeyHex = "";
|
||||||
|
let encryptionKey: Buffer;
|
||||||
|
function loadEncryptData() {
|
||||||
|
if (encryptionKey) {
|
||||||
|
return; // already loaded
|
||||||
|
}
|
||||||
|
|
||||||
|
encryptionKeyPath = privateConfig.getRawPrivateConfig().server.encryption_key_path;
|
||||||
|
|
||||||
|
if (!fs.existsSync(encryptionKeyPath)) {
|
||||||
|
throw new Error(
|
||||||
|
"Encryption key file not found. Please generate one first."
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
encryptionKeyHex = fs.readFileSync(encryptionKeyPath, "utf8").trim();
|
||||||
|
encryptionKey = Buffer.from(encryptionKeyHex, "hex");
|
||||||
|
}
|
||||||
|
|
||||||
// Get valid certificates for given domains (supports wildcard certs)
|
// Get valid certificates for given domains (supports wildcard certs)
|
||||||
hybridRouter.get(
|
hybridRouter.get(
|
||||||
"/certificates/domains",
|
"/certificates/domains",
|
||||||
async (req: Request, res: Response, next: NextFunction) => {
|
async (req: Request, res: Response, next: NextFunction) => {
|
||||||
try {
|
try {
|
||||||
|
loadEncryptData(); // Ensure encryption key is loaded
|
||||||
|
|
||||||
const parsed = getCertificatesByDomainsQuerySchema.safeParse(
|
const parsed = getCertificatesByDomainsQuerySchema.safeParse(
|
||||||
req.query
|
req.query
|
||||||
);
|
);
|
||||||
@@ -425,20 +447,6 @@ hybridRouter.get(
|
|||||||
filtered.push(cert);
|
filtered.push(cert);
|
||||||
}
|
}
|
||||||
|
|
||||||
const encryptionKeyPath =
|
|
||||||
privateConfig.getRawPrivateConfig().server.encryption_key_path;
|
|
||||||
|
|
||||||
if (!fs.existsSync(encryptionKeyPath)) {
|
|
||||||
throw new Error(
|
|
||||||
"Encryption key file not found. Please generate one first."
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
const encryptionKeyHex = fs
|
|
||||||
.readFileSync(encryptionKeyPath, "utf8")
|
|
||||||
.trim();
|
|
||||||
const encryptionKey = Buffer.from(encryptionKeyHex, "hex");
|
|
||||||
|
|
||||||
const result = filtered.map((cert) => {
|
const result = filtered.map((cert) => {
|
||||||
// Decrypt and save certificate file
|
// Decrypt and save certificate file
|
||||||
const decryptedCert = decryptData(
|
const decryptedCert = decryptData(
|
||||||
|
|||||||
Reference in New Issue
Block a user