NobGit
public anord read

Ledger

Why work hard when you can work easier?

Languages

Repository composition by tracked source files.

TypeScript
TypeScript 86% CSS 10% SQL 3% Shell 1% HTML 0%
Create file Wiki Documentation
Clone
https://nobgit.com/orgs/anord/ledger.git
ssh://[email protected]:2222/orgs/anord/ledger.git
settings.ts
import { Router } from "express";
import { z } from "zod";
import { requireAdmin } from "../middleware/auth.js";
import { getAdminSettingsBundle, getBrandingSettings, upsertBrandingSettings } from "../../services/settings.js";
import { logAudit } from "../../services/audit.js";

const brandingSchema = z.object({
  siteName: z.string().min(2),
  logoUrl: z.string().url().nullable(),
  brandColor: z.string().regex(/^#[0-9a-fA-F]{6}$/),
  publicKnowledgeBaseEnabled: z.boolean(),
  footerLinks: z.array(
    z.object({
      label: z.string().min(1),
      href: z.string().url()
    })
  ).default([])
});

export const settingsRouter = Router();

settingsRouter.get("/public", async (_req, res) => {
  const branding = await getBrandingSettings();
  return res.json({
    branding: {
      siteName: branding.site_name,
      logoUrl: branding.logo_url,
      brandColor: branding.brand_color,
      publicKnowledgeBaseEnabled: branding.public_knowledge_base_enabled,
      footerLinks: branding.footer_links ?? []
    }
  });
});

settingsRouter.get("/admin", requireAdmin, async (_req, res) => {
  const settings = await getAdminSettingsBundle();
  return res.json(settings);
});

settingsRouter.put("/branding", requireAdmin, async (req, res) => {
  const input = brandingSchema.parse(req.body);
  const updated = await upsertBrandingSettings(input);
  await logAudit(req.user!.id, "settings.branding.update", "branding_settings", updated.id);
  return res.json(updated);
});