190 lines
6.3 KiB
TypeScript
190 lines
6.3 KiB
TypeScript
// packages/backend/src/schema.ts
|
|
|
|
export const createSettingsTableSQL = `
|
|
CREATE TABLE IF NOT EXISTS settings (
|
|
key TEXT PRIMARY KEY NOT NULL,
|
|
value TEXT NOT NULL,
|
|
created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
|
|
updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
|
|
);
|
|
`;
|
|
|
|
export const createAuditLogsTableSQL = `
|
|
CREATE TABLE IF NOT EXISTS audit_logs (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
timestamp INTEGER NOT NULL,
|
|
action_type TEXT NOT NULL,
|
|
details TEXT NULL
|
|
);
|
|
`;
|
|
|
|
export const createApiKeysTableSQL = `
|
|
CREATE TABLE IF NOT EXISTS api_keys (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name TEXT NOT NULL,
|
|
hashed_key TEXT UNIQUE NOT NULL,
|
|
created_at INTEGER NOT NULL
|
|
);
|
|
`;
|
|
|
|
export const createPasskeysTableSQL = `
|
|
CREATE TABLE IF NOT EXISTS passkeys (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
credential_id TEXT UNIQUE NOT NULL, -- Base64URL encoded
|
|
public_key TEXT NOT NULL, -- Base64URL encoded
|
|
counter INTEGER NOT NULL,
|
|
transports TEXT, -- JSON array as string, e.g., '["internal", "usb"]'
|
|
name TEXT, -- User-provided name for the key
|
|
created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
|
|
updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
|
|
);
|
|
`;
|
|
|
|
export const createNotificationSettingsTableSQL = `
|
|
CREATE TABLE IF NOT EXISTS notification_settings (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
channel_type TEXT NOT NULL CHECK(channel_type IN ('webhook', 'email', 'telegram')),
|
|
name TEXT NOT NULL DEFAULT '',
|
|
enabled BOOLEAN NOT NULL DEFAULT false,
|
|
config TEXT NOT NULL DEFAULT '{}', -- JSON string for channel-specific config
|
|
enabled_events TEXT NOT NULL DEFAULT '[]', -- JSON array of event names
|
|
created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
|
|
updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
|
|
);
|
|
`;
|
|
|
|
export const createUsersTableSQL = `
|
|
CREATE TABLE IF NOT EXISTS users (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
username TEXT UNIQUE NOT NULL,
|
|
hashed_password TEXT NOT NULL,
|
|
two_factor_secret TEXT NULL, -- 添加 2FA 密钥列,允许为空
|
|
created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
|
|
updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
|
|
);
|
|
`;
|
|
|
|
export const createProxiesTableSQL = `
|
|
CREATE TABLE IF NOT EXISTS proxies (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name TEXT NOT NULL,
|
|
type TEXT NOT NULL CHECK(type IN ('SOCKS5', 'HTTP')),
|
|
host TEXT NOT NULL,
|
|
port INTEGER NOT NULL,
|
|
username TEXT NULL,
|
|
auth_method TEXT NOT NULL DEFAULT 'none' CHECK(auth_method IN ('none', 'password', 'key')),
|
|
encrypted_password TEXT NULL,
|
|
encrypted_private_key TEXT NULL,
|
|
encrypted_passphrase TEXT NULL,
|
|
created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
|
|
updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
|
|
UNIQUE(name, type, host, port)
|
|
);
|
|
`;
|
|
|
|
export const createConnectionsTableSQL = `
|
|
CREATE TABLE IF NOT EXISTS connections (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name TEXT NULL, -- 允许 name 为空
|
|
host TEXT NOT NULL,
|
|
port INTEGER NOT NULL,
|
|
username TEXT NOT NULL,
|
|
auth_method TEXT NOT NULL CHECK(auth_method IN ('password', 'key')),
|
|
encrypted_password TEXT NULL,
|
|
encrypted_private_key TEXT NULL,
|
|
encrypted_passphrase TEXT NULL,
|
|
proxy_id INTEGER NULL,
|
|
created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
|
|
updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
|
|
last_connected_at INTEGER NULL,
|
|
FOREIGN KEY (proxy_id) REFERENCES proxies(id) ON DELETE SET NULL
|
|
);
|
|
`;
|
|
|
|
export const createTagsTableSQL = `
|
|
CREATE TABLE IF NOT EXISTS tags (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name TEXT UNIQUE NOT NULL,
|
|
created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
|
|
updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
|
|
);
|
|
`;
|
|
|
|
export const createConnectionTagsTableSQL = `
|
|
CREATE TABLE IF NOT EXISTS connection_tags (
|
|
connection_id INTEGER NOT NULL,
|
|
tag_id INTEGER NOT NULL,
|
|
PRIMARY KEY (connection_id, tag_id),
|
|
FOREIGN KEY (connection_id) REFERENCES connections(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
|
|
);
|
|
`;
|
|
|
|
export const createIpBlacklistTableSQL = `
|
|
CREATE TABLE IF NOT EXISTS ip_blacklist (
|
|
ip TEXT PRIMARY KEY NOT NULL,
|
|
attempts INTEGER NOT NULL DEFAULT 1,
|
|
last_attempt_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
|
|
blocked_until INTEGER NULL -- 封禁截止时间戳 (秒),NULL 表示未封禁或永久封禁 (根据逻辑决定)
|
|
);
|
|
`;
|
|
|
|
export const createCommandHistoryTableSQL = `
|
|
CREATE TABLE IF NOT EXISTS command_history (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
command TEXT NOT NULL,
|
|
timestamp INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
|
|
);
|
|
`;
|
|
|
|
export const createQuickCommandsTableSQL = `
|
|
CREATE TABLE IF NOT EXISTS quick_commands (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name TEXT NULL, -- 名称可选
|
|
command TEXT NOT NULL, -- 指令必选
|
|
usage_count INTEGER NOT NULL DEFAULT 0, -- 使用频率
|
|
created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
|
|
updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
|
|
);
|
|
`;
|
|
|
|
// 从 database.ts 移动过来的,保持一致性
|
|
export const createTerminalThemesTableSQL = `
|
|
CREATE TABLE IF NOT EXISTS terminal_themes (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name TEXT UNIQUE NOT NULL,
|
|
theme_type TEXT NOT NULL CHECK(theme_type IN ('preset', 'user')),
|
|
foreground TEXT,
|
|
background TEXT,
|
|
cursor TEXT,
|
|
cursor_accent TEXT,
|
|
selection_background TEXT,
|
|
black TEXT,
|
|
red TEXT,
|
|
green TEXT,
|
|
yellow TEXT,
|
|
blue TEXT,
|
|
magenta TEXT,
|
|
cyan TEXT,
|
|
white TEXT,
|
|
bright_black TEXT,
|
|
bright_red TEXT,
|
|
bright_green TEXT,
|
|
bright_yellow TEXT,
|
|
bright_blue TEXT,
|
|
bright_magenta TEXT,
|
|
bright_cyan TEXT,
|
|
bright_white TEXT,
|
|
created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
|
|
updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
|
|
);
|
|
`;
|
|
|
|
export const createAppearanceSettingsTableSQL = `
|
|
CREATE TABLE IF NOT EXISTS appearance_settings (
|
|
key TEXT PRIMARY KEY NOT NULL,
|
|
value TEXT NOT NULL,
|
|
created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
|
|
updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
|
|
);
|
|
`; |