194 lines
6.4 KiB
TypeScript
194 lines
6.4 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
|
|
);
|
|
`;
|
|
|
|
// Removed API Keys table definition
|
|
// 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
|
|
// );
|
|
// `;
|
|
|
|
// Removed Passkeys table definition (lines 31-44 from original)
|
|
|
|
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 为空
|
|
type TEXT NOT NULL CHECK(type IN ('SSH', 'RDP')) DEFAULT 'SSH',
|
|
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,
|
|
ssh_key_id INTEGER NULL, -- 新增 ssh_key_id 列
|
|
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,
|
|
FOREIGN KEY (ssh_key_id) REFERENCES ssh_keys(id) ON DELETE SET NULL -- 新增外键约束
|
|
);
|
|
`;
|
|
|
|
export const createSshKeysTableSQL = `
|
|
CREATE TABLE IF NOT EXISTS ssh_keys (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name TEXT NOT NULL UNIQUE,
|
|
encrypted_private_key TEXT NOT NULL,
|
|
encrypted_passphrase TEXT NULL,
|
|
created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
|
|
updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
|
|
);
|
|
`;
|
|
|
|
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'))
|
|
);
|
|
`; |