added group functionality

This commit is contained in:
2026-05-14 14:13:41 +02:00
parent 23631c6d24
commit a8554905ce
3 changed files with 56 additions and 21 deletions
+11 -11
View File
@@ -11,11 +11,10 @@ import datetime
auth_bp = Blueprint("auth", __name__) auth_bp = Blueprint("auth", __name__)
# ===================================================== # =====================================================
# SECRET KEY (only your program has this) # SECRET KEY (only for this program)
# ===================================================== # =====================================================
# Generate once using: Fernet.generate_key() # Generate once using: Fernet.generate_key()
_SECRET_KEY = b'YFK7QCyTzhyLO4vqrnRxvDAI5uu8mXEYrInEjbRoQgs=' _SECRET_KEY = b'YFK7QCyTzhyLO4vqrnRxvDAI5uu8mXEYrInEjbRoQgs='
fernet = Fernet(_SECRET_KEY) fernet = Fernet(_SECRET_KEY)
# ===================================================== # =====================================================
@@ -62,9 +61,6 @@ def is_cookie_ok_to_autologin(cookie_content):
return user return user
return 0 return 0
#. @auth_bp.route("/", methods=["GET", "POST"]) #. @auth_bp.route("/", methods=["GET", "POST"])
@auth_bp.route("/login", methods=["GET", "POST"]) @auth_bp.route("/login", methods=["GET", "POST"])
def login(): def login():
@@ -73,7 +69,7 @@ def login():
userid = is_cookie_ok_to_autologin(username) userid = is_cookie_ok_to_autologin(username)
if userid>0: if userid>0:
user = User.query.filter_by(id=userid).first() user = User.query.filter_by(id=userid).first()
if user and user.is_approved: if user and user.is_approved and user.group_id>0:
login_user(user) login_user(user)
return redirect(url_for("lists.home")) return redirect(url_for("lists.home"))
@@ -82,9 +78,10 @@ def login():
if user and user.check_password(request.form["password"]): if user and user.check_password(request.form["password"]):
if not user.is_approved: if not user.is_approved:
return render_template("pending.html") return render_template("pending.html")
login_user(user) if user.group_id>0:
return redirect(url_for("lists.home")) login_user(user)
flash("Invalid credentials") return redirect(url_for("lists.home"))
flash("Invalid key credentials.")
Log.info(f"Authorization failure for user '{request.form["name"]}' ") Log.info(f"Authorization failure for user '{request.form["name"]}' ")
@@ -98,8 +95,11 @@ def register():
if request.method == "POST": if request.method == "POST":
user = User(name=request.form["name"]) user = User(name=request.form["name"])
user.set_password(request.form["password"]) user.set_password(request.form["password"])
db.session.add(user) group_id = user.get_group_id(request.form["password"])
db.session.commit() if group_id > 0:
user.group_id = group_id
db.session.add(user)
db.session.commit()
return render_template("pending.html") return render_template("pending.html")
return render_template("register.html") return render_template("register.html")
+13 -1
View File
@@ -8,6 +8,7 @@ db = SQLAlchemy() # Create the extension object
class User(UserMixin, db.Model): class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
updated_at = db.Column(db.TIMESTAMP, default=datetime.now(), onupdate=datetime.now(), nullable=False) updated_at = db.Column(db.TIMESTAMP, default=datetime.now(), onupdate=datetime.now(), nullable=False)
group_id = db.Column(db.Integer, default=0, nullable=False)
name = db.Column(db.String(40), unique=True, nullable=False) name = db.Column(db.String(40), unique=True, nullable=False)
password_hash = db.Column(db.String(256)) password_hash = db.Column(db.String(256))
is_admin = db.Column(db.Boolean, default=False) is_admin = db.Column(db.Boolean, default=False)
@@ -51,7 +52,12 @@ class User(UserMixin, db.Model):
shared = Shared.query.filter_by(user_id=self.id, listofitem_id=listofitem_id).first() shared = Shared.query.filter_by(user_id=self.id, listofitem_id=listofitem_id).first()
return True if shared else False return True if shared else False
def set_group_id(self, secret):
group = Group.query.filter_by(secret=secret).first()
if group:
return group.id
else:
return 0
class ListOfItems(db.Model): class ListOfItems(db.Model):
id = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
@@ -97,3 +103,9 @@ class Item(db.Model):
class Shared(db.Model): class Shared(db.Model):
user_id = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.Integer, primary_key=True)
listofitem_id = db.Column(db.Integer, primary_key=True) listofitem_id = db.Column(db.Integer, primary_key=True)
class Group(db.Model):
id = db.Column(db.Integer, primary_key=True)
updated_at = db.Column(db.TIMESTAMP, default=datetime.now(), onupdate=datetime.now(), nullable=False)
secret = db.Column(db.String(128))
+32 -9
View File
@@ -1,16 +1,39 @@
from lapp import create_app from lapp import create_app
import sqlalchemy as sa import sqlalchemy as sa
from models import db, Item from models import db, Item, Group, User
app = create_app() app = create_app()
app.app_context().push() app.app_context().push()
query = sa.select(Item).where(Item.quantity == 0) # query = sa.select(Item).where(Item.quantity == 0)
items = db.session.scalars(query).all() # items = db.session.scalars(query).all()
# items=Item.query.filter_by(quantity='').all() # # items=Item.query.filter_by(quantity='').all()
for i in items: # for i in items:
print(f"{i.label} {i.quantity} {i.unit}") # print(f"{i.label} {i.quantity} {i.unit}")
i.quantity = 1 # i.quantity = 1
i.unit = 'x' # i.unit = 'x'
# add column
# result1 = db.session.execute(sa.text('ALTER TABLE user DROP group_id'))
# result2 = db.session.execute(sa.text('ALTER TABLE user ADD group_id INT'))
# db.session.commit()
# add the first group secret
# gr = Group(secret='102938764918372c419283764d91873246d91283746d910283746d19283764cfv')
# db.session.add(gr)
# db.session.commit()
# add the first ket to all users
# users = User.query.all()
# for u in users:
# u.group_id = 1
# db.session.commit()
# add the second group secret
# gr = Group(secret='9999')
# db.session.add(gr)
# db.session.commit()
db.session.commit()