Persist Plutonium keys by server ID and add key management
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
import { db } from '../db/index.js';
|
||||
import { t5ZombieMapBySlug } from './map-aliases.js';
|
||||
|
||||
export function validServerId(value: unknown): value is string {
|
||||
if (typeof value !== 'string') return false;
|
||||
const match = /^t5_zombie_([a-z0-9]+)_([1-9]|1[0-9]|20)$/.exec(value);
|
||||
return !!match && !!t5ZombieMapBySlug(match[1]);
|
||||
}
|
||||
|
||||
export function listServerKeys() {
|
||||
return db().prepare(`SELECT k.server_id, k.updated_at,
|
||||
EXISTS(SELECT 1 FROM servers s WHERE s.name = k.server_id) AS deployed
|
||||
FROM server_keys k ORDER BY k.server_id`).all() as Array<{
|
||||
server_id: string; updated_at: string; deployed: number;
|
||||
}>;
|
||||
}
|
||||
|
||||
export function getServerKey(serverId: string): string | undefined {
|
||||
return (db().prepare('SELECT pluto_key FROM server_keys WHERE server_id = ?')
|
||||
.get(serverId) as { pluto_key: string } | undefined)?.pluto_key;
|
||||
}
|
||||
|
||||
export function saveServerKey(serverId: unknown, key: unknown): void {
|
||||
if (!validServerId(serverId)) throw new Error('Choose a valid T5 zombie server ID with a lobby number from 1 to 20');
|
||||
if (typeof key !== 'string' || !key.trim() || key.trim().length > 512 || /\s/.test(key.trim())) {
|
||||
throw new Error('Enter a server key without whitespace (maximum 512 characters)');
|
||||
}
|
||||
db().prepare(`INSERT INTO server_keys (server_id, pluto_key) VALUES (?, ?)
|
||||
ON CONFLICT(server_id) DO UPDATE SET pluto_key = excluded.pluto_key, updated_at = datetime('now')`)
|
||||
.run(serverId, key.trim());
|
||||
}
|
||||
|
||||
export function removeServerKey(serverId: string): boolean {
|
||||
return db().prepare('DELETE FROM server_keys WHERE server_id = ?').run(serverId).changes > 0;
|
||||
}
|
||||
Reference in New Issue
Block a user