46 lines
1.3 KiB
Python
46 lines
1.3 KiB
Python
"""Container startup helper.
|
|
|
|
When the app is started via gunicorn, the `if __name__ == '__main__'` block in
|
|
app.py is not executed, so the SQLite DB/tables/admin user may not be created.
|
|
|
|
This script makes startup idempotent by ensuring tables exist and creating a
|
|
default admin user if missing.
|
|
"""
|
|
|
|
import os
|
|
|
|
from werkzeug.security import generate_password_hash
|
|
|
|
from app import app, db, User, Church, get_smtp_settings
|
|
|
|
|
|
def main() -> None:
|
|
admin_username = os.environ.get("ADMIN_USERNAME", "admin")
|
|
admin_password = os.environ.get("ADMIN_PASSWORD", "admin")
|
|
|
|
with app.app_context():
|
|
db.create_all()
|
|
|
|
# Ensure singleton SMTP settings row exists
|
|
get_smtp_settings()
|
|
|
|
if not User.query.filter_by(username=admin_username).first():
|
|
admin_church = Church.query.filter_by(name="Admin").first()
|
|
if not admin_church:
|
|
admin_church = Church(name="Admin")
|
|
db.session.add(admin_church)
|
|
db.session.commit()
|
|
|
|
admin_user = User(
|
|
username=admin_username,
|
|
password=generate_password_hash(admin_password),
|
|
church_id=admin_church.id,
|
|
is_admin=True,
|
|
)
|
|
db.session.add(admin_user)
|
|
db.session.commit()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|