beta 2.0
This commit is contained in:
@@ -1,7 +1,11 @@
|
||||
from flask_sqlalchemy import SQLAlchemy
|
||||
from datetime import datetime
|
||||
import secrets
|
||||
from argon2 import PasswordHasher
|
||||
from argon2.exceptions import VerifyMismatchError
|
||||
|
||||
db = SQLAlchemy()
|
||||
ph = PasswordHasher()
|
||||
|
||||
|
||||
class MedodsAPI(db.Model):
|
||||
@@ -67,6 +71,66 @@ class VkAPI(db.Model):
|
||||
}
|
||||
|
||||
|
||||
class UsersBirthdate(db.Model):
|
||||
__tablename__ = "users_birthdate"
|
||||
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
enabled = db.Column(db.Boolean, default=True)
|
||||
name = db.Column(db.Text)
|
||||
short_name = db.Column(db.Text)
|
||||
sex = db.Column(db.Text)
|
||||
birthdate = db.Column(db.Date)
|
||||
photo_link = db.Column(db.Text, nullable=True)
|
||||
congratulations = db.Column(db.Text, nullable=True)
|
||||
specialties = db.Column(db.JSON)
|
||||
post_link = db.Column(db.Text, nullable=True)
|
||||
publish_at = db.Column(db.DateTime, nullable=True)
|
||||
created_at = db.Column(db.DateTime, default=datetime.now)
|
||||
updated_at = db.Column(db.DateTime, default=datetime.now, onupdate=datetime.now)
|
||||
|
||||
def toDict(self):
|
||||
return {
|
||||
"id": self.id,
|
||||
"enabled": self.enabled,
|
||||
"name": self.name,
|
||||
"shortName": self.short_name,
|
||||
"sex": self.sex,
|
||||
"birthdate": self.birthdate.strftime("%Y-%m-%d"),
|
||||
"photoLink": self.photo_link,
|
||||
"congratulations": self.congratulations,
|
||||
"specialties": self.specialties,
|
||||
"postLink": self.post_link,
|
||||
"publishAt": (
|
||||
self.publish_at.strftime("%Y-%m-%d %H:%M:%S")
|
||||
if self.publish_at
|
||||
else None
|
||||
),
|
||||
"created_at": self.created_at.strftime("%Y-%m-%d %H:%M:%S"),
|
||||
"updated_at": self.updated_at.strftime("%Y-%m-%d %H:%M:%S"),
|
||||
}
|
||||
|
||||
|
||||
class BirthdateScheduler(db.Model):
|
||||
__tablename__ = "birthdate_scheduler"
|
||||
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
hour = db.Column(db.Integer)
|
||||
minute = db.Column(db.Integer)
|
||||
enabled = db.Column(db.Boolean)
|
||||
created_at = db.Column(db.DateTime, default=datetime.now)
|
||||
updated_at = db.Column(db.DateTime, default=datetime.now, onupdate=datetime.now)
|
||||
|
||||
def toDict(self):
|
||||
return {
|
||||
"id": self.id,
|
||||
"hour": self.hour,
|
||||
"minute": self.minute,
|
||||
"enabled": self.enabled,
|
||||
"created_at": self.created_at.strftime("%Y-%m-%d %H:%M:%S"),
|
||||
"updated_at": self.updated_at.strftime("%Y-%m-%d %H:%M:%S"),
|
||||
}
|
||||
|
||||
|
||||
class UsersMedods(db.Model):
|
||||
__tablename__ = "users_medods"
|
||||
|
||||
@@ -138,3 +202,47 @@ class PostScheduler(db.Model):
|
||||
"created_at": self.created_at.strftime("%Y-%m-%d %H:%M:%S"),
|
||||
"updated_at": self.updated_at.strftime("%Y-%m-%d %H:%M:%S"),
|
||||
}
|
||||
|
||||
|
||||
class Protection(db.Model):
|
||||
__tablename__ = "protection"
|
||||
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
password = db.Column(db.Text, nullable=False) # hash
|
||||
token = db.Column(db.Text, nullable=False)
|
||||
|
||||
# =========================
|
||||
# Пароль
|
||||
# =========================
|
||||
|
||||
def set_password(self, raw_password: str) -> None:
|
||||
"""
|
||||
Хэширует и сохраняет пароль (Argon2)
|
||||
"""
|
||||
self.password = ph.hash(raw_password)
|
||||
|
||||
def verify_password(self, raw_password: str) -> bool:
|
||||
"""
|
||||
Проверяет пароль
|
||||
"""
|
||||
try:
|
||||
return ph.verify(self.password, raw_password)
|
||||
except VerifyMismatchError:
|
||||
return False
|
||||
|
||||
# =========================
|
||||
# Token
|
||||
# =========================
|
||||
|
||||
def generate_token(self) -> str:
|
||||
"""
|
||||
Генерирует новый token и сохраняет его
|
||||
"""
|
||||
self.token = secrets.token_urlsafe(32)
|
||||
return self.token
|
||||
|
||||
def verify_token(self, token: str) -> bool:
|
||||
"""
|
||||
Проверяет token
|
||||
"""
|
||||
return bool(token) and secrets.compare_digest(self.token, token)
|
||||
|
||||
Reference in New Issue
Block a user