UI - init work on admin account
This commit is contained in:
parent
4947796c99
commit
6be082e0a9
@ -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
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
flask
|
flask
|
||||||
requests
|
requests
|
||||||
docker
|
docker
|
||||||
|
flask-login
|
||||||
|
bcrypt
|
||||||
16
ui/src/User.py
Normal file
16
ui/src/User.py
Normal 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)
|
||||||
@ -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]
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user