mirror of
https://github.com/fosrl/pangolin.git
synced 2026-02-26 23:06:37 +00:00
Pull secrets from env vars
This commit is contained in:
3
server/lib/getEnvOrYaml.ts
Normal file
3
server/lib/getEnvOrYaml.ts
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
export const getEnvOrYaml = (envVar: string) => (valFromYaml: any) => {
|
||||||
|
return process.env[envVar] ?? valFromYaml;
|
||||||
|
};
|
||||||
@@ -3,13 +3,10 @@ import yaml from "js-yaml";
|
|||||||
import { configFilePath1, configFilePath2 } from "./consts";
|
import { configFilePath1, configFilePath2 } from "./consts";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import stoi from "./stoi";
|
import stoi from "./stoi";
|
||||||
|
import { getEnvOrYaml } from "./getEnvOrYaml";
|
||||||
|
|
||||||
const portSchema = z.number().positive().gt(0).lte(65535);
|
const portSchema = z.number().positive().gt(0).lte(65535);
|
||||||
|
|
||||||
const getEnvOrYaml = (envVar: string) => (valFromYaml: any) => {
|
|
||||||
return process.env[envVar] ?? valFromYaml;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const configSchema = z
|
export const configSchema = z
|
||||||
.object({
|
.object({
|
||||||
app: z
|
app: z
|
||||||
@@ -311,7 +308,10 @@ export const configSchema = z
|
|||||||
.object({
|
.object({
|
||||||
smtp_host: z.string().optional(),
|
smtp_host: z.string().optional(),
|
||||||
smtp_port: portSchema.optional(),
|
smtp_port: portSchema.optional(),
|
||||||
smtp_user: z.string().optional(),
|
smtp_user: z
|
||||||
|
.string()
|
||||||
|
.optional()
|
||||||
|
.transform(getEnvOrYaml("EMAIL_SMTP_USER")),
|
||||||
smtp_pass: z
|
smtp_pass: z
|
||||||
.string()
|
.string()
|
||||||
.optional()
|
.optional()
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ import * as fs from "fs";
|
|||||||
import logger from "@server/logger";
|
import logger from "@server/logger";
|
||||||
import cache from "@server/lib/cache";
|
import cache from "@server/lib/cache";
|
||||||
|
|
||||||
let encryptionKeyPath = "";
|
|
||||||
let encryptionKeyHex = "";
|
let encryptionKeyHex = "";
|
||||||
let encryptionKey: Buffer;
|
let encryptionKey: Buffer;
|
||||||
function loadEncryptData() {
|
function loadEncryptData() {
|
||||||
@@ -27,15 +26,7 @@ function loadEncryptData() {
|
|||||||
return; // already loaded
|
return; // already loaded
|
||||||
}
|
}
|
||||||
|
|
||||||
encryptionKeyPath = config.getRawPrivateConfig().server.encryption_key_path;
|
encryptionKeyHex = config.getRawPrivateConfig().server.encryption_key;
|
||||||
|
|
||||||
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");
|
encryptionKey = Buffer.from(encryptionKeyHex, "hex");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import { privateConfigFilePath1 } from "@server/lib/consts";
|
|||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { colorsSchema } from "@server/lib/colorsSchema";
|
import { colorsSchema } from "@server/lib/colorsSchema";
|
||||||
import { build } from "@server/build";
|
import { build } from "@server/build";
|
||||||
|
import { getEnvOrYaml } from "@server/lib/getEnvOrYaml";
|
||||||
|
|
||||||
const portSchema = z.number().positive().gt(0).lte(65535);
|
const portSchema = z.number().positive().gt(0).lte(65535);
|
||||||
|
|
||||||
@@ -32,19 +33,25 @@ export const privateConfigSchema = z.object({
|
|||||||
}),
|
}),
|
||||||
server: z
|
server: z
|
||||||
.object({
|
.object({
|
||||||
encryption_key_path: z
|
encryption_key: z
|
||||||
.string()
|
.string()
|
||||||
.optional()
|
.optional()
|
||||||
.default("./config/encryption.pem")
|
.transform(getEnvOrYaml("SERVER_ENCRYPTION_KEY")),
|
||||||
.pipe(z.string().min(8)),
|
resend_api_key: z
|
||||||
resend_api_key: z.string().optional(),
|
.string()
|
||||||
reo_client_id: z.string().optional(),
|
.optional()
|
||||||
fossorial_api_key: z.string().optional()
|
.transform(getEnvOrYaml("RESEND_API_KEY")),
|
||||||
|
reo_client_id: z
|
||||||
|
.string()
|
||||||
|
.optional()
|
||||||
|
.transform(getEnvOrYaml("REO_CLIENT_ID")),
|
||||||
|
fossorial_api_key: z
|
||||||
|
.string()
|
||||||
|
.optional()
|
||||||
|
.transform(getEnvOrYaml("FOSSORIAL_API_KEY"))
|
||||||
})
|
})
|
||||||
.optional()
|
.optional()
|
||||||
.default({
|
.prefault({}),
|
||||||
encryption_key_path: "./config/encryption.pem"
|
|
||||||
}),
|
|
||||||
redis: z
|
redis: z
|
||||||
.object({
|
.object({
|
||||||
host: z.string(),
|
host: z.string(),
|
||||||
@@ -157,8 +164,11 @@ export const privateConfigSchema = z.object({
|
|||||||
.optional(),
|
.optional(),
|
||||||
stripe: z
|
stripe: z
|
||||||
.object({
|
.object({
|
||||||
secret_key: z.string(),
|
secret_key: z.string().optional().transform(getEnvOrYaml("STRIPE_SECRET_KEY")),
|
||||||
webhook_secret: z.string(),
|
webhook_secret: z
|
||||||
|
.string()
|
||||||
|
.optional()
|
||||||
|
.transform(getEnvOrYaml("STRIPE_WEBHOOK_SECRET")),
|
||||||
s3Bucket: z.string(),
|
s3Bucket: z.string(),
|
||||||
s3Region: z.string().default("us-east-1"),
|
s3Region: z.string().default("us-east-1"),
|
||||||
localFilePath: z.string()
|
localFilePath: z.string()
|
||||||
|
|||||||
@@ -186,7 +186,7 @@ export type ResourceWithAuth = {
|
|||||||
password: ResourcePassword | null;
|
password: ResourcePassword | null;
|
||||||
headerAuth: ResourceHeaderAuth | null;
|
headerAuth: ResourceHeaderAuth | null;
|
||||||
headerAuthExtendedCompatibility: ResourceHeaderAuthExtendedCompatibility | null;
|
headerAuthExtendedCompatibility: ResourceHeaderAuthExtendedCompatibility | null;
|
||||||
org: Org
|
org: Org;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type UserSessionWithUser = {
|
export type UserSessionWithUser = {
|
||||||
@@ -270,7 +270,6 @@ hybridRouter.get(
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
let encryptionKeyPath = "";
|
|
||||||
let encryptionKeyHex = "";
|
let encryptionKeyHex = "";
|
||||||
let encryptionKey: Buffer;
|
let encryptionKey: Buffer;
|
||||||
function loadEncryptData() {
|
function loadEncryptData() {
|
||||||
@@ -278,16 +277,8 @@ function loadEncryptData() {
|
|||||||
return; // already loaded
|
return; // already loaded
|
||||||
}
|
}
|
||||||
|
|
||||||
encryptionKeyPath =
|
encryptionKeyHex =
|
||||||
privateConfig.getRawPrivateConfig().server.encryption_key_path;
|
privateConfig.getRawPrivateConfig().server.encryption_key;
|
||||||
|
|
||||||
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");
|
encryptionKey = Buffer.from(encryptionKeyHex, "hex");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user