TRM-coding | d1cbf67 | 2025-06-18 15:15:08 +0800 | [diff] [blame] | 1 | from ..models.users import User as users |
| 2 | from ..models.post import Post as post |
| 3 | import secrets |
| 4 | import hashlib |
| 5 | from datetime import datetime, timedelta |
| 6 | from sqlalchemy.orm import Session |
| 7 | class Fpost: |
| 8 | def __init__(self,session:Session): |
| 9 | self.session=session |
| 10 | return |
| 11 | |
| 12 | |
| 13 | def getlist(self): |
| 14 | results = self.session.query(post.id, post.title,post.status) |
| 15 | return results |
| 16 | |
| 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 | |
| 46 | def getpost(self,postid): |
| 47 | res=self.session.query(post).filter(post.id==postid).first() |
| 48 | return res |
| 49 | def checkid(self,userid,status=''): |
| 50 | res=self.session.query(users).filter(users.id==userid).first() |
| 51 | if(not res): |
| 52 | return False |
| 53 | if res.role !=status: |
| 54 | return False |
| 55 | return True |
| 56 | |
| 57 | def review(self,postid,status): |
| 58 | print(status) |
| 59 | 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() |
| 64 | 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)}") |