52 lines
1.2 KiB
TypeScript
52 lines
1.2 KiB
TypeScript
export interface KeyToken {
|
|
keytoken_id: string;
|
|
name: string;
|
|
timestamp_created: string;
|
|
timestamp_lastused: string | null;
|
|
owner_user_id: string;
|
|
all_channels: boolean;
|
|
channels: string[];
|
|
token?: string;
|
|
permissions: string;
|
|
messages_sent: number;
|
|
}
|
|
|
|
export interface KeyTokenPreview {
|
|
keytoken_id: string;
|
|
name: string;
|
|
}
|
|
|
|
export type TokenPermission = 'A' | 'CR' | 'CS' | 'UR';
|
|
|
|
export interface CreateKeyRequest {
|
|
name: string;
|
|
permissions: string;
|
|
all_channels?: boolean;
|
|
channels?: string[];
|
|
}
|
|
|
|
export interface UpdateKeyRequest {
|
|
name?: string;
|
|
permissions?: string;
|
|
all_channels?: boolean;
|
|
channels?: string[];
|
|
}
|
|
|
|
export interface KeyListResponse {
|
|
keys: KeyToken[];
|
|
}
|
|
|
|
export function parsePermissions(permissions: string): TokenPermission[] {
|
|
if (!permissions) return [];
|
|
return permissions.split(';').filter(p => p) as TokenPermission[];
|
|
}
|
|
|
|
export function hasPermission(permissions: string, required: TokenPermission): boolean {
|
|
const perms = parsePermissions(permissions);
|
|
return perms.includes(required) || perms.includes('A');
|
|
}
|
|
|
|
export function isAdminKey(key: KeyToken): boolean {
|
|
return hasPermission(key.permissions, 'A');
|
|
}
|