add branch v1
This commit is contained in:
parent
5d370e1077
commit
01b8951dd5
53 changed files with 1079 additions and 6481 deletions
51
init/postgresql/init.sql
Normal file
51
init/postgresql/init.sql
Normal file
|
@ -0,0 +1,51 @@
|
|||
-- 创建tokens表
|
||||
CREATE TABLE IF NOT EXISTS tokens (
|
||||
id VARCHAR(255) NOT NULL, -- token的唯一标识符
|
||||
user_id VARCHAR(255) NOT NULL, -- 用户ID
|
||||
issuer VARCHAR(255) NOT NULL, -- 令牌发行者
|
||||
account VARCHAR(255) NOT NULL, -- 账户名称
|
||||
secret TEXT NOT NULL, -- 密钥
|
||||
type VARCHAR(10) NOT NULL, -- 令牌类型(totp/hotp)
|
||||
counter INTEGER, -- HOTP计数器(可选)
|
||||
period INTEGER NOT NULL, -- TOTP周期(秒)
|
||||
digits INTEGER NOT NULL, -- 验证码位数
|
||||
algo VARCHAR(10) NOT NULL, -- 使用的哈希算法
|
||||
timestamp BIGINT NOT NULL, -- 最后更新时间戳
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (id, user_id)
|
||||
);
|
||||
|
||||
-- 创建更新时间戳的触发器
|
||||
CREATE OR REPLACE FUNCTION update_updated_at_column()
|
||||
RETURNS TRIGGER AS $$
|
||||
BEGIN
|
||||
NEW.updated_at = CURRENT_TIMESTAMP;
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$ language 'plpgsql';
|
||||
|
||||
CREATE TRIGGER update_tokens_updated_at
|
||||
BEFORE UPDATE ON tokens
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION update_updated_at_column();
|
||||
|
||||
-- 创建索引
|
||||
CREATE INDEX IF NOT EXISTS idx_tokens_user_id ON tokens(user_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_tokens_timestamp ON tokens(timestamp);
|
||||
|
||||
-- 添加注释
|
||||
COMMENT ON TABLE tokens IS 'OTP令牌数据表';
|
||||
COMMENT ON COLUMN tokens.id IS '令牌的唯一标识符';
|
||||
COMMENT ON COLUMN tokens.user_id IS '用户ID';
|
||||
COMMENT ON COLUMN tokens.issuer IS '令牌发行者';
|
||||
COMMENT ON COLUMN tokens.account IS '账户名称';
|
||||
COMMENT ON COLUMN tokens.secret IS '密钥';
|
||||
COMMENT ON COLUMN tokens.type IS '令牌类型(totp/hotp)';
|
||||
COMMENT ON COLUMN tokens.counter IS 'HOTP计数器(可选)';
|
||||
COMMENT ON COLUMN tokens.period IS 'TOTP周期(秒)';
|
||||
COMMENT ON COLUMN tokens.digits IS '验证码位数';
|
||||
COMMENT ON COLUMN tokens.algo IS '使用的哈希算法';
|
||||
COMMENT ON COLUMN tokens.timestamp IS '最后更新时间戳';
|
||||
COMMENT ON COLUMN tokens.created_at IS '创建时间';
|
||||
COMMENT ON COLUMN tokens.updated_at IS '最后更新时间';
|
50
init/sqlite3/init.sql
Normal file
50
init/sqlite3/init.sql
Normal file
|
@ -0,0 +1,50 @@
|
|||
-- SQLite3 initialization SQL
|
||||
|
||||
-- Enable WAL mode for better concurrency (simple performance boost)
|
||||
PRAGMA journal_mode = WAL;
|
||||
PRAGMA synchronous = NORMAL;
|
||||
|
||||
-- Enable foreign key support
|
||||
PRAGMA foreign_keys = ON;
|
||||
|
||||
-- 创建tokens表
|
||||
CREATE TABLE IF NOT EXISTS tokens (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_id TEXT NOT NULL,
|
||||
issuer TEXT NOT NULL,
|
||||
account TEXT NOT NULL,
|
||||
secret TEXT NOT NULL CHECK (length(secret) >= 16 AND secret REGEXP '^[A-Z2-7]+=*$'),
|
||||
type TEXT NOT NULL CHECK (type IN ('HOTP', 'TOTP')),
|
||||
counter INTEGER CHECK (
|
||||
(type = 'HOTP' AND counter >= 0) OR
|
||||
(type = 'TOTP' AND counter IS NULL)
|
||||
),
|
||||
period INTEGER DEFAULT 30 CHECK (
|
||||
(type = 'TOTP' AND period >= 30) OR
|
||||
(type = 'HOTP' AND period IS NULL)
|
||||
),
|
||||
digits INTEGER NOT NULL DEFAULT 6 CHECK (digits IN (6, 8)),
|
||||
algo TEXT NOT NULL DEFAULT 'SHA1' CHECK (algo IN ('SHA1', 'SHA256', 'SHA512')),
|
||||
created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
|
||||
updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
|
||||
UNIQUE(user_id, issuer, account)
|
||||
);
|
||||
|
||||
-- 基本索引
|
||||
CREATE INDEX IF NOT EXISTS idx_tokens_user_id ON tokens(user_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_tokens_lookup ON tokens(user_id, issuer, account);
|
||||
CREATE INDEX IF NOT EXISTS idx_tokens_hotp ON tokens(user_id) WHERE type = 'HOTP';
|
||||
CREATE INDEX IF NOT EXISTS idx_tokens_totp ON tokens(user_id) WHERE type = 'TOTP';
|
||||
|
||||
-- 简化统计视图
|
||||
CREATE VIEW IF NOT EXISTS v_token_stats AS
|
||||
SELECT
|
||||
user_id,
|
||||
COUNT(*) as total_tokens,
|
||||
SUM(type = 'HOTP') as hotp_count,
|
||||
SUM(type = 'TOTP') as totp_count
|
||||
FROM tokens
|
||||
GROUP BY user_id;
|
||||
|
||||
-- 设置版本号
|
||||
PRAGMA user_version = 1;
|
Loading…
Add table
Add a link
Reference in a new issue