UI - init work on admin account

This commit is contained in:
bunkerity 2021-07-09 12:18:42 +02:00
parent 4947796c99
commit 6be082e0a9
No known key found for this signature in database
GPG Key ID: 3D80806F12602A7C
4 changed files with 61 additions and 1 deletions

View File

@ -1,27 +1,64 @@
#!/usr/bin/python3 #!/usr/bin/python3
from flask import Flask, render_template, current_app, request from flask import Flask, render_template, current_app, request, redirect
from flask_login import LoginManager, login_required, login_user, logout_user
from src.Instances import Instances from src.Instances import Instances
from src.User import User
from Docker import Docker from Docker import Docker
from Config import Config from Config import Config
import utils import utils
import os, json, re, copy, traceback import os, json, re, copy, traceback
# Flask app
app = Flask(__name__, static_url_path="/", static_folder="static", template_folder="templates") app = Flask(__name__, static_url_path="/", static_folder="static", template_folder="templates")
# Set variables and instantiate objects
vars = utils.get_variables() vars = utils.get_variables()
app.secret_key = vars["FLASK_SECRET"]
app.config["ABSOLUTE_URI"] = vars["ABSOLUTE_URI"] app.config["ABSOLUTE_URI"] = vars["ABSOLUTE_URI"]
app.config["INSTANCES"] = Instances(vars["DOCKER_HOST"], vars["API_URI"]) app.config["INSTANCES"] = Instances(vars["DOCKER_HOST"], vars["API_URI"])
app.config["CONFIG"] = Config() app.config["CONFIG"] = Config()
# Declare functions for jinja2
app.jinja_env.globals.update(env_to_summary_class=utils.env_to_summary_class) app.jinja_env.globals.update(env_to_summary_class=utils.env_to_summary_class)
app.jinja_env.globals.update(form_service_gen=utils.form_service_gen) app.jinja_env.globals.update(form_service_gen=utils.form_service_gen)
app.jinja_env.globals.update(form_service_gen_multiple=utils.form_service_gen_multiple) app.jinja_env.globals.update(form_service_gen_multiple=utils.form_service_gen_multiple)
app.jinja_env.globals.update(form_service_gen_multiple_values=utils.form_service_gen_multiple_values) app.jinja_env.globals.update(form_service_gen_multiple_values=utils.form_service_gen_multiple_values)
# Login management
login_manager = LoginManager()
login_manager.init_app(app)
user = User(vars["ADMIN_USERNAME"], vars["ADMIN_PASSWRD"])
app.config["USER"] = user
@login_manager.user_loader
def load_user(user_id):
return User.get(user_id)
@app.route('/login', methods=["GET", "POST"])
def login() :
fail = False
if request.method == "POST" and "username" in request.form and "password" in request.form :
if app.config["USER"].get_id() == request.form["username"] and app.config["USER"].check_password(request.form["password"]) :
login_user(app.config["USER"])
return redirect("/")
else :
fail = True
if fail :
return render_template("login.html", title="Login", fail=True), 401
return render_template("login.html", title="Login", fail=False)
@app.route("/logout")
@login_required
def logout() :
logout_user()
return redirect("/login")
@app.route('/') @app.route('/')
@app.route('/home') @app.route('/home')
@login_required
def home() : def home() :
try : try :
instances_number = len(app.config["INSTANCES"].get_instances()) instances_number = len(app.config["INSTANCES"].get_instances())
@ -31,6 +68,7 @@ def home() :
return render_template("error.html", title="Error", error=e) return render_template("error.html", title="Error", error=e)
@app.route('/instances', methods=["GET", "POST"]) @app.route('/instances', methods=["GET", "POST"])
@login_required
def instances() : def instances() :
try : try :
# Manage instances # Manage instances
@ -64,6 +102,7 @@ def instances() :
@app.route('/services', methods=["GET", "POST"]) @app.route('/services', methods=["GET", "POST"])
@login_required
def services(): def services():
try : try :
# Manage services # Manage services

View File

@ -1,3 +1,5 @@
flask flask
requests requests
docker docker
flask-login
bcrypt

16
ui/src/User.py Normal file
View File

@ -0,0 +1,16 @@
import flask_login, bcrypt
class User(flask_login.UserMixin) :
def __init__(self, id, password) :
self.is_authenticated = True
self.is_active = True
self.is_anonymous = False
self.__id = id
self.__password = bcrypt.hashpw(password, bcrypt.gensalt())
def get_id(self) :
return self.__id
def check_password(self, password) :
return bcrypt.checkpw(password, self.__password)

View File

@ -7,6 +7,9 @@ def get_variables() :
vars["DOCKER_HOST"] = "unix:///var/run/docker.sock" vars["DOCKER_HOST"] = "unix:///var/run/docker.sock"
vars["API_URI"] = "" vars["API_URI"] = ""
vars["ABSOLUTE_URI"] = "" vars["ABSOLUTE_URI"] = ""
vars["FLASK_SECRET"] = os.urandom(32)
vars["ADMIN_USERNAME"] = "admin"
vars["ADMIN_PASSWORD"] = "changeme"
for k in vars : for k in vars :
if k in os.environ : if k in os.environ :
vars[k] = os.environ[k] vars[k] = os.environ[k]