UI - admin authentication and bootstrap update

This commit is contained in:
bunkerity 2021-07-09 14:17:50 +02:00
parent 6be082e0a9
commit 0d3f7d3925
No known key found for this signature in database
GPG Key ID: 3D80806F12602A7C
9 changed files with 68 additions and 22 deletions

View File

@ -30,12 +30,13 @@ app.jinja_env.globals.update(form_service_gen_multiple_values=utils.form_service
# Login management
login_manager = LoginManager()
login_manager.init_app(app)
user = User(vars["ADMIN_USERNAME"], vars["ADMIN_PASSWRD"])
login_manager.login_view = "login"
user = User(vars["ADMIN_USERNAME"], vars["ADMIN_PASSWORD"])
app.config["USER"] = user
@login_manager.user_loader
def load_user(user_id):
return User.get(user_id)
return User(user_id, vars["ADMIN_PASSWORD"])
@app.route('/login', methods=["GET", "POST"])
def login() :

View File

@ -2,4 +2,5 @@ flask
requests
docker
flask-login
bcrypt
bcrypt
gunicorn

View File

@ -3,14 +3,11 @@ 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())
self.__password = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt())
def get_id(self) :
return self.__id
def check_password(self, password) :
return bcrypt.checkpw(password, self.__password)
return bcrypt.checkpw(password.encode("utf-8"), self.__password)

File diff suppressed because one or more lines are too long

View File

@ -15,3 +15,26 @@
main > .container {
padding: 100px 15px 0;
}
.form-signin {
width: 100%;
max-width: 330px;
padding: 15px;
margin: auto;
}
.form-signin .form-floating:focus-within {
z-index: 2;
}
.form-signin input[name="username"] {
margin-bottom: -1px;
border-bottom-right-radius: 0;
border-bottom-left-radius: 0;
}
.form-signin input[name="password"] {
margin-bottom: 10px;
border-top-left-radius: 0;
border-top-right-radius: 0;
}

File diff suppressed because one or more lines are too long

View File

@ -9,13 +9,9 @@
{% include "menu.html" %}
<main class="flex-shrink-0">
<div class="container">
{% block content %}{% endblock %}
</div>
</main>
<div class="container d-flex justify-content-center align-items-center" style="height: 100%;">
{% block content %}{% endblock %}
</div>
{% include "footer.html" %}

26
ui/templates/login.html Normal file
View File

@ -0,0 +1,26 @@
{% extends "base.html" %}
{% block content %}
<div class="form-signin">
<div class="text-center">
<img src="img/logo.png" class="mb-4" style="max-width: 200px;">
</div>
<h1 class="h3 mb-3 fw-normal">Authentication required</h1>
<form action="login" method="POST">
<div class="form-floating">
<input type="text" id="username" class="form-control" name="username" placeholder="user">
<label for="username">Username</label>
</div>
<div class="form-floating">
<input type="password" id="password" class="form-control" name="password" placeholder="p@ssw0rd">
<label for="password">Password</label>
</div>
<button class="w-100 btn btn-lg btn-primary" type="submit">Sign in</button>
</form>
</div>
{% endblock %}

View File

@ -2,6 +2,7 @@
<nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark">
<div class="container-fluid">
<a class="navbar-brand" href="#">bunkerized-nginx-ui</a>
{% if current_user.is_authenticated %}
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
@ -18,6 +19,7 @@
</li>
</ul>
</div>
{% endif %}
</div>
</nav>
</header>