From e0f470137b9932ff6b53b8433534e3f3df57142c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Padez?= Date: Thu, 26 Feb 2026 20:22:42 +0000 Subject: [PATCH] persist model access policy to database Co-Authored-By: Claude Opus 4.6 --- src/databases/officer_db/src/index.ts | 2 +- .../officer_db/src/queries/server-config.ts | 15 +++++++++++++++ src/servers/api/server-settings/pi-mono.ts | 15 +++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/databases/officer_db/src/index.ts b/src/databases/officer_db/src/index.ts index 86408953..08295415 100644 --- a/src/databases/officer_db/src/index.ts +++ b/src/databases/officer_db/src/index.ts @@ -18,7 +18,7 @@ export { cleanupExpiredTokens, } from './queries/auth'; -export { readServerSettings, writeServerSettings } from './queries/server-config'; +export { readServerSettings, writeServerSettings, readConfigValue, writeConfigValue } from './queries/server-config'; export { getUserSettings, setUserSettings, getUserState, patchUserState, getDockPaths, setDockPaths } from './queries/user-data'; diff --git a/src/databases/officer_db/src/queries/server-config.ts b/src/databases/officer_db/src/queries/server-config.ts index a4a42207..93cb64e1 100644 --- a/src/databases/officer_db/src/queries/server-config.ts +++ b/src/databases/officer_db/src/queries/server-config.ts @@ -18,3 +18,18 @@ export async function writeServerSettings(settings: Record): Pr set: { value: settings, updatedAt: new Date() }, }); } + +export async function readConfigValue(key: string, fallback: T): Promise { + const [row] = await db.select().from(serverConfig).where(eq(serverConfig.key, key)); + return (row?.value as T) ?? fallback; +} + +export async function writeConfigValue(key: string, value: unknown): Promise { + await db + .insert(serverConfig) + .values({ key, value, updatedAt: new Date() }) + .onConflictDoUpdate({ + target: serverConfig.key, + set: { value, updatedAt: new Date() }, + }); +} diff --git a/src/servers/api/server-settings/pi-mono.ts b/src/servers/api/server-settings/pi-mono.ts index 8ff1e4e2..dfc4f790 100644 --- a/src/servers/api/server-settings/pi-mono.ts +++ b/src/servers/api/server-settings/pi-mono.ts @@ -3,6 +3,7 @@ import { createRouter } from '../../create-router'; import { PI_CONFIG_DIR } from '../../data-path'; import { invalidateModelCache } from '../pi/list-models'; import { logger } from '../pi/logger'; +import { readConfigValue, writeConfigValue } from 'officerdb'; export const piMonoRouter = createRouter(); @@ -387,6 +388,20 @@ piMonoRouter.put('/api-keys', async (ctx) => { return ctx.json({ ok: true }); }); +type AccessPolicy = { allowedModels: string[] }; +const ACCESS_POLICY_KEY = 'pi-access-policy'; + +piMonoRouter.get('/access-policy', async (ctx) => { + const policy = await readConfigValue(ACCESS_POLICY_KEY, { allowedModels: [] }); + return ctx.json(policy); +}); + +piMonoRouter.put('/access-policy', async (ctx) => { + const body = await ctx.req.json(); + await writeConfigValue(ACCESS_POLICY_KEY, body); + return ctx.json(body); +}); + const REMOTE_HEALTH_CONFIG: Record string); headers: (key: string) => Record;