blob: 7d6ccd2d11807d91762ba332b40fc96c0568b007 [file] [log] [blame]
TRM-coding286e6782025-06-13 21:00:11 +08001from ..models.users import User as users
2from ..models.post import Post as post
TRM-coding78aa9662025-06-17 23:40:10 +08003import secrets
4import hashlib
5from datetime import datetime, timedelta
TRM-coding286e6782025-06-13 21:00:11 +08006from sqlalchemy.orm import Session
7class Fpost:
8 def __init__(self,session:Session):
9 self.session=session
10 return
11
12
13 def getlist(self):
TRM-codingc2b517b2025-06-13 21:13:49 +080014 results = self.session.query(post.id, post.title,post.status)
TRM-coding286e6782025-06-13 21:00:11 +080015 return results
TRM-codingd1cbf672025-06-18 15:15:08 +080016
17 def getuserlist(self):
18 results= self.session.query(users.id, users.username, users.role)
19 return results
20
21 def giveadmin(self,userid):
22 res=self.session.query(users).filter(users.id==userid).first()
23 if not res:
24 return False
25 res.role='admin'
26 self.session.commit()
27 return True
28
29 def giveuser(self,userid):
30 res=self.session.query(users).filter(users.id==userid).first()
31 if not res:
32 return False
33 res.role='user'
34 self.session.commit()
35 return True
36
37 def givesuperadmin(self,userid):
38 res=self.session.query(users).filter(users.id==userid).first()
39 if not res:
40 return False
41 res.role='superadmin'
42 self.session.commit()
43 return True
44
45
TRM-coding286e6782025-06-13 21:00:11 +080046 def getpost(self,postid):
47 res=self.session.query(post).filter(post.id==postid).first()
48 return res
TRM-codingd1cbf672025-06-18 15:15:08 +080049 def checkid(self,userid,status=''):
TRM-coding286e6782025-06-13 21:00:11 +080050 res=self.session.query(users).filter(users.id==userid).first()
51 if(not res):
52 return False
TRM-codingd1cbf672025-06-18 15:15:08 +080053 if res.role !=status:
TRM-coding286e6782025-06-13 21:00:11 +080054 return False
TRM-coding130f05c2025-06-15 16:05:28 +080055 return True
56
57 def review(self,postid,status):
TRM-coding78aa9662025-06-17 23:40:10 +080058 print(status)
TRM-coding130f05c2025-06-15 16:05:28 +080059 res=self.session.query(post).filter(post.id==postid).first()
60 if not res:
61 return False
62 res.status=status
63 self.session.commit()
TRM-coding78aa9662025-06-17 23:40:10 +080064 return True
65
66 def createtoken(self, userid):
67 """
68 根据userid创建token并插入到数据库
69 :param userid: 用户ID
70 :return: 生成的token字符串
71 """
72 # 生成随机盐值
73 salt = secrets.token_hex(16)
74
75 # 创建哈希值:userid + 当前时间戳 + 随机盐值
76 current_time = str(datetime.now().timestamp())
77 hash_input = f"{userid}_{current_time}_{salt}"
78
79 # 生成SHA256哈希值作为token
80 token = hashlib.sha256(hash_input.encode()).hexdigest()
81
82 # 设置时间
83 created_time = datetime.now()
84 expires_time = created_time + timedelta(days=1) # 一天后过期
85
86 try:
87 # 创建新的token记录
88 new_token = Token(
89 token=token,
90 expires_at=expires_time,
91 created_at=created_time
92 )
93
94 # 假设self.session是数据库会话对象
95 self.session.add(new_token)
96 self.session.commit()
97
98 return token
99
100 except Exception as e:
101 self.session.rollback()
102 raise Exception(f"创建token失败: {str(e)}")