From fb5c4bac27b08e9920b62aab5cb666dc3c64d067 Mon Sep 17 00:00:00 2001 From: crunk Date: Sun, 20 Mar 2022 10:46:23 +0100 Subject: [PATCH] admintool cli to make a user into an admin --- verse/adminpage.py | 0 verse/admintool.py | 41 +++++++++++++++++++++++++++++++++++++ verse/forms/registerform.py | 2 +- verse/usermodel.py | 5 +++-- 4 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 verse/adminpage.py create mode 100644 verse/admintool.py diff --git a/verse/adminpage.py b/verse/adminpage.py new file mode 100644 index 0000000..e69de29 diff --git a/verse/admintool.py b/verse/admintool.py new file mode 100644 index 0000000..0d644a3 --- /dev/null +++ b/verse/admintool.py @@ -0,0 +1,41 @@ +import sys +from app import create_app, db +from sqlalchemy.exc import ( + InvalidRequestError, + InterfaceError, + DataError, + DatabaseError, +) +from usermodel import User # noqa: F401 +from distribusimodel import Distribusis # noqa: F401 + +def admintool(): + """Admin CLI tool. To elevate a user to admin""" + app = create_app() + app.app_context().push() + elevateusertoadmin() + + +def elevateusertoadmin(): + """To elevates user of first command line argument to admin""" + user = User.query.filter_by(email=sys.argv[1]).first() + print(f"user {user.username} found with email {user.email}") + try: + user.admin = True + db.session.commit() + print(f"Account {user.email} succesfully made into an admin") + except InvalidRequestError: + db.session.rollback() + print("Something went wrong!") + except InterfaceError: + db.session.rollback() + print("Error connecting to the database") + except DataError: + db.session.rollback() + print("Invalid Entry") + except DatabaseError: + db.session.rollback() + print("Error connecting to the database") + + +admintool() diff --git a/verse/forms/registerform.py b/verse/forms/registerform.py index abe3530..cfedac9 100644 --- a/verse/forms/registerform.py +++ b/verse/forms/registerform.py @@ -14,7 +14,7 @@ class RegisterForm(FlaskForm): """Register for distribusi-verse form class""" username = StringField( "Username:", - validators=[validators.InputRequired(), Length(6, 150)], + validators=[validators.InputRequired(), Length(3, 150)], ) email = StringField( diff --git a/verse/usermodel.py b/verse/usermodel.py index 6d20cd4..1506a7c 100644 --- a/verse/usermodel.py +++ b/verse/usermodel.py @@ -12,8 +12,9 @@ class User(UserMixin, db.Model): email = db.Column(db.String(150), unique=True, nullable=False) password = db.Column(db.String(300), nullable=False, unique=False) currentdistribusi = db.Column(db.String(300), nullable=True, unique=False) - admin = db.Column(db.Boolean, server_default="false") - tutor = db.Column(db.Boolean, server_default="false") + tutor = db.Column(db.Boolean, default=False) + admin = db.Column(db.Boolean, default=False) + def __repr__(self): return "" % self.email