69 lines · 2.4 KB
import { repoDb } from "../scoped-db";

export type SecuritySettings = {
  secretScanning: boolean;
  pushProtection: boolean;
  privateReporting: boolean;
  dependencyGraph: boolean;
};

type SettingsRow = {
  secret_scanning: number;
  push_protection: number;
  private_reporting: number;
  dependency_graph: number;
};

const DEFAULTS: SecuritySettings = {
  secretScanning: true,
  pushProtection: false,
  privateReporting: false,
  dependencyGraph: true,
};

export async function loadSecuritySettings(repoId: string): Promise<SecuritySettings> {
  const row = await repoDb(repoId).first<SettingsRow>("SELECT * FROM repo_security_settings WHERE repo_id = ?", repoId);
  if (!row) return DEFAULTS;
  return {
    secretScanning: row.secret_scanning === 1,
    pushProtection: row.push_protection === 1,
    privateReporting: row.private_reporting === 1,
    dependencyGraph: row.dependency_graph === 1,
  };
}

export async function saveSecuritySettings(repoId: string, settings: SecuritySettings): Promise<void> {
  await repoDb(repoId).run(
    `INSERT INTO repo_security_settings (repo_id, secret_scanning, push_protection, private_reporting, dependency_graph, updated_at)
     VALUES (?, ?, ?, ?, ?, ?)
     ON CONFLICT (repo_id) DO UPDATE SET secret_scanning = excluded.secret_scanning, push_protection = excluded.push_protection,
       private_reporting = excluded.private_reporting, dependency_graph = excluded.dependency_graph, updated_at = excluded.updated_at`,