mirror of
https://github.com/Xevion/v1.xevion.dev.git
synced 2025-12-10 22:09:02 -06:00
api
This commit is contained in:
@@ -9,11 +9,15 @@ class User(UserMixin, db.Model):
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
username = db.Column(db.String(64), index=True, unique=True)
|
||||
email = db.Column(db.String(120), index=True, unique=True)
|
||||
register_timestamp = db.Column(db.DateTime, default=datetime.utcnow)
|
||||
password_hash = db.Column(db.String(64))
|
||||
posts = db.relationship('Post', backref='author', lazy='dynamic')
|
||||
search_history = db.relationship('Search', backref='user', lazy='dynamic')
|
||||
uroles = db.Column(db.String(80), default='')
|
||||
|
||||
about_me = db.Column(db.String(320))
|
||||
last_seen = db.Column(db.DateTime, default=datetime.utcnow)
|
||||
show_email = db.Column
|
||||
|
||||
def set_password(self, password):
|
||||
self.password_hash = generate_password_hash(password)
|
||||
|
||||
@@ -22,10 +26,36 @@ class User(UserMixin, db.Model):
|
||||
raise "{} has no password_hash set!".format(self.__repr__())
|
||||
return check_password_hash(self.password_hash, password)
|
||||
|
||||
# Retains order while making sure that there are no duplicate role values and they are capitalized
|
||||
def post_role_processing(self):
|
||||
user_roles = self.uroles.split(' ')
|
||||
user_roles = list(dict.fromkeys(user_roles))
|
||||
self.uroles = ' '.join([role.title() for role in user_roles])
|
||||
|
||||
def delete_role(self, role):
|
||||
return self.delete_roles([role])
|
||||
|
||||
# Will return True if successful, else False if a role didn't exist
|
||||
def delete_roles(self, roles, ignore=True):
|
||||
user_roles = self.uroles.split(' ')
|
||||
success = True
|
||||
for role in roles:
|
||||
try:
|
||||
user_roles.remove(role)
|
||||
except ValueError as e:
|
||||
if not ignore:
|
||||
raise e
|
||||
success = False
|
||||
return success
|
||||
|
||||
|
||||
def get_roles(self):
|
||||
return self.uroles.split(' ')
|
||||
|
||||
def add_roles(self, roles):
|
||||
def add_role(self, role):
|
||||
self.add_roles([role])
|
||||
|
||||
def add_roles(self, roles, postprocess=True):
|
||||
user_roles = self.uroles.split(' ')
|
||||
if type(roles) == str:
|
||||
user_roles.append(roles)
|
||||
@@ -33,6 +63,11 @@ class User(UserMixin, db.Model):
|
||||
user_roles.extend(roles)
|
||||
user_roles = ' '.join(user_roles)
|
||||
self.uroles = user_roles
|
||||
if postprocess:
|
||||
self.post_role_processing()
|
||||
|
||||
def has_role(self, role):
|
||||
return self.has_roles([role])
|
||||
|
||||
# Input: ['Insane', ['Fortunate', 'Blessed']]
|
||||
# Meaning: Must have 'Insane' role, as well as 'Fortunate' or 'Blessed' roles.
|
||||
|
||||
Reference in New Issue
Block a user