From 983b787bbbdd2fb69f60b57d0f6d380c938fb09b Mon Sep 17 00:00:00 2001 From: Marcin-Ramotowski Date: Sun, 16 Mar 2025 07:38:59 +0000 Subject: [PATCH] Added default admin account creation if database is empty --- api/app.py | 3 ++- api/models.py | 13 ++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/api/app.py b/api/app.py index ce77389..753751e 100644 --- a/api/app.py +++ b/api/app.py @@ -1,6 +1,6 @@ from flask import Flask from flask_jwt_extended import JWTManager -from models import db +from models import db, init_db from user_views import user_bp from task_views import task_bp from dotenv import load_dotenv @@ -18,4 +18,5 @@ if __name__ == "__main__": jwt = JWTManager(app) with app.app_context(): db.create_all() + init_db() app.run(debug=True, host='0.0.0.0') diff --git a/api/models.py b/api/models.py index 87e6492..a44cb26 100644 --- a/api/models.py +++ b/api/models.py @@ -1,14 +1,25 @@ from flask_sqlalchemy import SQLAlchemy +from werkzeug.security import generate_password_hash +import os db = SQLAlchemy() +def init_db(): + """Create default admin account if database is empty""" + with db.session.begin(): + if not User.query.first(): # Check if user table is empty + admin_password = os.getenv("TODOLIST_ADMIN_PASSWORD", "admin") + hashed_password = generate_password_hash(admin_password) + admin = User(username='admin', email='admin@example.pl', password=hashed_password, role='Administrator') + db.session.add(admin) + db.session.commit() class User(db.Model): id = db.Column(db.Integer, primary_key=True, autoincrement=True) username = db.Column(db.String(20), unique=True, nullable=False) email = db.Column(db.String(120), unique=True, nullable=False) role = db.Column(db.Enum('Administrator', 'User'), default='User') - password = db.Column(db.String(60), nullable=False) + password = db.Column(db.String(162), nullable=False) def to_dict(self): return {"id": self.id, "username": self.username, "email": self.email, "role": self.role}