45 lines
1.3 KiB
TypeScript
45 lines
1.3 KiB
TypeScript
import { execFile } from "../../helpers/better-api.js";
|
|
import { generateSecretsFile, loadSecretsFile } from "../../helpers/secrets.js";
|
|
import { buildForgejo } from "./build.js";
|
|
|
|
export interface ForgejoSecrets {
|
|
SECRET_KEY: string;
|
|
INTERNAL_TOKEN: string;
|
|
LFS_JWT_SECRET: string;
|
|
OAUTH_JWT_SECRET: string;
|
|
EMAIL_PASSWORD: string;
|
|
}
|
|
|
|
export const loadForgejoSecretsFile =
|
|
loadSecretsFile<ForgejoSecrets>("forgejo");
|
|
export const generateForgejoSecretsFile = generateSecretsFile(
|
|
"forgejo",
|
|
generateForgejoSecrets
|
|
);
|
|
export async function generateForgejoSecrets(): Promise<ForgejoSecrets> {
|
|
const bin = await buildForgejo();
|
|
console.info(
|
|
"Reemplaza la contraseña de mail en secrets/forgejo.json, ¡porfa!"
|
|
);
|
|
return {
|
|
...Object.fromEntries(
|
|
await Promise.all([
|
|
...["SECRET_KEY", "INTERNAL_TOKEN", "LFS_JWT_SECRET"].map(
|
|
async (kind) => [kind, await genSecret(bin, kind as any)]
|
|
),
|
|
genSecret(bin, "JWT_SECRET").then((s) => ["OAUTH_JWT_SECRET", s]),
|
|
])
|
|
),
|
|
EMAIL_PASSWORD: "REEMPLAZAR POR CONTRASEÑA",
|
|
};
|
|
}
|
|
|
|
async function genSecret(
|
|
bin: string,
|
|
kind: "INTERNAL_TOKEN" | "JWT_SECRET" | "LFS_JWT_SECRET" | "SECRET_KEY"
|
|
): Promise<string> {
|
|
// XXX: crosscompilation?
|
|
const { stdout } = await execFile(bin, ["generate", "secret", kind]);
|
|
return stdout;
|
|
}
|