2026-04-17 15:09:31 +02:00
|
|
|
import type Database from 'better-sqlite3';
|
|
|
|
|
import type { AllowedDomain } from '$lib/types';
|
|
|
|
|
|
|
|
|
|
export function normalizeDomain(raw: string): string {
|
|
|
|
|
return raw.trim().toLowerCase().replace(/^www\./, '');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function listDomains(db: Database.Database): AllowedDomain[] {
|
|
|
|
|
return db
|
2026-04-18 08:17:44 +02:00
|
|
|
.prepare(
|
|
|
|
|
'SELECT id, domain, display_name, favicon_path FROM allowed_domain ORDER BY domain'
|
|
|
|
|
)
|
2026-04-17 15:09:31 +02:00
|
|
|
.all() as AllowedDomain[];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function addDomain(
|
|
|
|
|
db: Database.Database,
|
|
|
|
|
domain: string,
|
|
|
|
|
displayName: string | null = null,
|
|
|
|
|
addedByProfileId: number | null = null
|
|
|
|
|
): AllowedDomain {
|
|
|
|
|
const normalized = normalizeDomain(domain);
|
|
|
|
|
const row = db
|
|
|
|
|
.prepare(
|
|
|
|
|
`INSERT INTO allowed_domain(domain, display_name, added_by_profile_id)
|
|
|
|
|
VALUES (?, ?, ?)
|
2026-04-18 08:17:44 +02:00
|
|
|
RETURNING id, domain, display_name, favicon_path`
|
2026-04-17 15:09:31 +02:00
|
|
|
)
|
|
|
|
|
.get(normalized, displayName, addedByProfileId) as AllowedDomain;
|
|
|
|
|
return row;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function removeDomain(db: Database.Database, id: number): void {
|
|
|
|
|
db.prepare('DELETE FROM allowed_domain WHERE id = ?').run(id);
|
|
|
|
|
}
|
2026-04-18 08:17:44 +02:00
|
|
|
|
|
|
|
|
export function setDomainFavicon(
|
|
|
|
|
db: Database.Database,
|
|
|
|
|
id: number,
|
|
|
|
|
faviconPath: string | null
|
|
|
|
|
): void {
|
|
|
|
|
db.prepare('UPDATE allowed_domain SET favicon_path = ? WHERE id = ?').run(
|
|
|
|
|
faviconPath,
|
|
|
|
|
id
|
|
|
|
|
);
|
|
|
|
|
}
|