From ecc110641baff4fdb191e367d49c652dea47ae59 Mon Sep 17 00:00:00 2001 From: wiktr Date: Mon, 24 Aug 2026 23:11:35 +0200 Subject: [PATCH] hotfix --- Dockerfile | 2 +- app/auth.py | 19 +++++++++++++++---- app/main.py | 12 ++++++------ docker-compose.yml | 8 +++++++- run.sh | 4 +++- 5 files changed, 32 insertions(+), 13 deletions(-) diff --git a/Dockerfile b/Dockerfile index a2c9da8..9af6afe 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,6 +11,6 @@ RUN pip3 install -r /requirements.txt COPY ./run.sh /run.sh COPY ./app/ /app -RUN mkdir /app/hosts.d/ +WORKDIR /app CMD ["/run.sh"] diff --git a/app/auth.py b/app/auth.py index e017f79..b3e4584 100644 --- a/app/auth.py +++ b/app/auth.py @@ -26,13 +26,22 @@ def init_db(path: str) -> None: USERNAME TEXT NOT NULL UNIQUE, PWHASH TEXT NOT NULL, PWSALT TEXT NOT NULL, - EMAIL TEXT + EMAIL TEXT, IS_ADMIN INTEGER NOT NULL DEFAULT 0 ) ''') - connection.commit() - cursor.close() + cursor.execute(''' + SELECT COUNT(*) FROM Users + ''') + + if cursor.fetchone()[0] == 0: + username = "root" + password = urandom(8).hex() + + create_user(path, username, password, is_admin=True) + + print(f"No users detected, created new admin\nUser: {username}\nPass: {password}", flush=True) def check_token_domain(db_path: str, token: str, domain: str) -> bool: with sqlite3.connect(db_path) as connection: @@ -287,7 +296,9 @@ def create_user(db_path: str, username: str, password: str, domains: list = [], cursor = connection.cursor() username.strip() - email.strip() + + if email is not None: + email.strip() cursor.execute(''' SELECT COUNT(*) FROM Users diff --git a/app/main.py b/app/main.py index 6384cfb..d348f6d 100644 --- a/app/main.py +++ b/app/main.py @@ -1,11 +1,12 @@ from flask import Flask, jsonify, request, render_template, redirect, session, flash import auth import re +from os import environ, urandom -HOSTS_PATH = "/app/hosts.d/izbi" -DB_PATH = "/app/sqlite.db" +HOSTS_PATH = ( environ["HOSTS"] if "HOSTS" in environ else"/app/data/hosts.d/" ) + "/izbi" +DB_PATH = environ["DB_PATH"] if "DB_PATH" in environ else "/app/data/sqlite.db" @@ -14,12 +15,11 @@ app.config["SESSION_PERMANENT"] = True app.config["SESSION_TYPE"] = "memcached" app.config["PERMANENT_SESSION_LIFETIME"] = 3600 -app.config["SECRET_KEY"] = "dsadasda" +app.config["SECRET_KEY"] = environ["SECRET_KEY"] if "SECRET_KEY" in environ else urandom(32).hex() hosts = {} - def update_hosts(path: str, hosts: dict = {}) -> bool: try: hosts_str = "" @@ -216,7 +216,7 @@ def change_password(): if "pass" not in request.form or "pass-new" not in request.form or "pass-rep" not in request.form: flash("password change failed") - return reidrect("/dashboard") + return redirect("/dashboard") if request.form["pass"] == "" or request.form["pass-new"] == "" or request.form["pass-rep"] == "": flash("password change failed") return redirect("/dashboard") @@ -281,4 +281,4 @@ def update_addr(): if __name__ == '__main__': auth.init_db(DB_PATH) - app.run(host="0.0.0.0", port=8080, debug=True) + app.run(host="0.0.0.0", port=8080, debug=False) diff --git a/docker-compose.yml b/docker-compose.yml index 6c0544d..95ebff8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,6 +3,12 @@ services: image: izbi-dns build: . restart: unless-stopped + environment: + - HOSTS_PATH=/app/data/hosts.d/ + - DB_PATH=/app/data/sqlite.db + - SECRET_KEY=CHANGEME ports: - "127.0.0.1:8080:8080" - - "127.0.0.1:55:5353/udp" + - "127.0.0.1:5353:5353/udp" + volumes: + - "./data/:/app/data/" diff --git a/run.sh b/run.sh index 5b9c8d8..5116f7c 100755 --- a/run.sh +++ b/run.sh @@ -1,6 +1,8 @@ #!/bin/sh -/usr/sbin/dnsmasq -d --hostsdir /app/hosts.d/ -p 5353 & +mkdir -p "$HOSTS_PATH" + +/usr/sbin/dnsmasq -d --hostsdir "$HOSTS_PATH" -p 5353 & /usr/local/bin/python3 /app/main.py &