SCLP
This commit is contained in:
113
SCLP/models/sessions.py
Normal file
113
SCLP/models/sessions.py
Normal file
@@ -0,0 +1,113 @@
|
||||
# -*- 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
|
||||
Reference in New Issue
Block a user