2024-10-24 09:23:39 +08:00

114 lines
3.1 KiB
Python

# -*- coding:utf-8 -*-
"""
@Author : xuxingchen
@Contact : xuxingchen@sinochem.com
@Desc : 记录一些会话数据
"""
import time
from utils.database import BaseTable
class SessionsTable(BaseTable):
@staticmethod
def check(table_handler: BaseTable):
"""检测是否存在当前表"""
table_handler.query("SELECT name FROM sqlite_master WHERE type='table' AND name='sessions'")
if table_handler.cursor.fetchone() is None:
table_handler.execute(
f"""
CREATE TABLE sessions (
session_id TEXT,
username TEXT,
token TEXT,
captcha TEXT,
last_timestamp TEXT,
PRIMARY KEY (session_id)
)
"""
)
table_handler.execute(
f"""
CREATE INDEX idx_sessions_token ON sessions(token);
"""
)
# 去除冗余的验证会话信息
table_handler.execute(
f"""
DELETE FROM sessions WHERE last_timestamp < {int(time.time() * 1000) - 3 * 24 * 60 * 60 * 1000}
"""
)
@staticmethod
def get_captcha(table_handler: BaseTable, session_id: str):
table_handler.query(
"""
SELECT captcha
FROM sessions
WHERE session_id = ?
""",
(session_id,),
)
res = table_handler.cursor.fetchall()
if res:
return res[0][0]
else:
return None
@staticmethod
def insert(table_handler: BaseTable, session_id, captcha):
timestamp = str(int(time.time() * 1000))
table_handler.execute(
"""
INSERT INTO sessions
(session_id, captcha, last_timestamp)
VALUES (?, ?, ?)
ON CONFLICT (session_id)
DO UPDATE SET captcha=?, last_timestamp=?
""",
(
session_id,
captcha,
timestamp,
captcha,
timestamp,
),
)
return True
@staticmethod
def update(table_handler: BaseTable, session_id: str, username: str, token: str):
timestamp = str(int(time.time() * 1000))
table_handler.execute(
"""
UPDATE sessions SET
username=?,
token=?,
last_timestamp=?
WHERE session_id=?
""",
(
username,
token,
timestamp,
session_id
),
)
return True
@staticmethod
def check_token(table_handler: BaseTable, timestamp: str, token: str):
table_handler.query(
"""
SELECT captcha
FROM sessions
WHERE last_timestamp > ? and token = ?
""",
(timestamp, token),
)
res = table_handler.cursor.fetchall()
if res:
return True
else:
return False