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
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.User import User
from Docker import Docker
from Config import Config
import utils
import os, json, re, copy, traceback
# Flask app
app = Flask(__name__, static_url_path="/", static_folder="static", template_folder="templates")
# Set variables and instantiate objects
vars = utils.get_variables()
app.secret_key = vars["FLASK_SECRET"]
app.config["ABSOLUTE_URI"] = vars["ABSOLUTE_URI"]
app.config["INSTANCES"] = Instances(vars["DOCKER_HOST"], vars["API_URI"])
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(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_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('/home')
@login_required
def home() :
try :
instances_number = len(app.config["INSTANCES"].get_instances())
@ -31,6 +68,7 @@ def home() :
return render_template("error.html", title="Error", error=e)
@app.route('/instances', methods=["GET", "POST"])
@login_required
def instances() :
try :
# Manage instances
@ -64,6 +102,7 @@ def instances() :
@app.route('/services', methods=["GET", "POST"])
@login_required
def services():
try :
# Manage services

View File

@ -1,3 +1,5 @@
flask
requests
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["API_URI"] = ""
vars["ABSOLUTE_URI"] = ""
vars["FLASK_SECRET"] = os.urandom(32)
vars["ADMIN_USERNAME"] = "admin"
vars["ADMIN_PASSWORD"] = "changeme"
for k in vars :
if k in os.environ :
vars[k] = os.environ[k]