Gerüst mit Form-Auth
This commit is contained in:
20
src/main/resources/META-INF/resources/error.html
Normal file
20
src/main/resources/META-INF/resources/error.html
Normal file
@@ -0,0 +1,20 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="stylesheet" href="/webjars/bootstrap/5.0.0/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="/webjars/bootstrap-icons/1.5.0/font/bootstrap-icons.css">
|
||||
<title>Bürokalender</title>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container-lg fs-5">
|
||||
<div class="alert alert-danger" role="alert">
|
||||
Ups, da klappt etwas nicht!
|
||||
</div>
|
||||
<div>
|
||||
<a class="btn btn-primary" href="/" role="button">Home</a>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
10
src/main/resources/META-INF/resources/index.html
Normal file
10
src/main/resources/META-INF/resources/index.html
Normal file
@@ -0,0 +1,10 @@
|
||||
<!doctype html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="Refresh" content="0; url=/kalender"/>
|
||||
<title>Bürokalender</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>Weiterleitung auf die <a href="/kalender">Startseite</a></p></body>
|
||||
</html>
|
||||
33
src/main/resources/META-INF/resources/login.html
Normal file
33
src/main/resources/META-INF/resources/login.html
Normal file
@@ -0,0 +1,33 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="stylesheet" href="/webjars/bootstrap/5.0.0/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="/webjars/bootstrap-icons/1.5.0/font/bootstrap-icons.css">
|
||||
<title>Bürokalender</title>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container col-xl-10 p-3">
|
||||
<nav class="navbar navbar-expand-lg navbar-light bg-light mb-3">
|
||||
<div class="navbar-brand"><i class="bi-puzzle"></i> Bürokalender</div>
|
||||
</nav>
|
||||
<div class="row align-items-center g-lg-5 py-5">
|
||||
<div class="col-md-10 mx-auto col-lg-5">
|
||||
<form class="p-4 p-md-5 border rounded-3 bg-light" action="j_security_check" method="post">
|
||||
<div class="form-floating mb-3">
|
||||
<input type="text" name="j_username" class="form-control" id="floatingInput" placeholder="name@example.com">
|
||||
<label for="floatingInput">Benutzername</label>
|
||||
</div>
|
||||
<div class="form-floating mb-3">
|
||||
<input type="password" name="j_password" class="form-control" id="floatingPassword" placeholder="Password">
|
||||
<label for="floatingPassword">Passwort</label>
|
||||
</div>
|
||||
<button class="w-100 btn btn-lg btn-primary" type="submit">Login</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="/webjars/bootstrap/5.0.0/js/bootstrap.min.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
16
src/main/resources/application.properties
Normal file
16
src/main/resources/application.properties
Normal file
@@ -0,0 +1,16 @@
|
||||
# Database
|
||||
%prod.quarkus.datasource.jdbc.url = jdbc:postgresql://db:5432/buerokalender
|
||||
%prod.quarkus.datasource.username = buerokalender
|
||||
%prod.quarkus.datasource.password = buerokalender
|
||||
%prod.quarkus.datasource.jdbc.max-size=16
|
||||
quarkus.datasource.db-kind=postgresql
|
||||
|
||||
quarkus.hibernate-orm.dialect=org.hibernate.dialect.PostgreSQL95Dialect
|
||||
|
||||
quarkus.flyway.migrate-at-start=true
|
||||
|
||||
# Security
|
||||
quarkus.http.auth.form.enabled=true
|
||||
quarkus.http.auth.session.encryption-key=zHId14V+uiyxmbzhEPCyi7VvbaI80UeEO5yu0H/hVLs=
|
||||
# 24h
|
||||
quarkus.http.auth.form.timeout=86400
|
||||
14
src/main/resources/db/migration/V0001__initial.sql
Normal file
14
src/main/resources/db/migration/V0001__initial.sql
Normal file
@@ -0,0 +1,14 @@
|
||||
create sequence hibernate_sequence start 1;
|
||||
|
||||
create table users (
|
||||
id bigint not null primary key,
|
||||
username varchar not null unique,
|
||||
password varchar not null,
|
||||
role varchar not null
|
||||
);
|
||||
|
||||
create table kalendertag (
|
||||
id bigint not null primary key,
|
||||
date date not null unique,
|
||||
inoffice_id bigint not null references users
|
||||
);
|
||||
33
src/main/resources/templates/base.html
Normal file
33
src/main/resources/templates/base.html
Normal file
@@ -0,0 +1,33 @@
|
||||
<!doctype html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="UTF-8"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="stylesheet" href="/webjars/bootstrap/5.0.0/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="/webjars/bootstrap-icons/1.5.0/font/bootstrap-icons.css">
|
||||
|
||||
<title>Bürokalender</title>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container col-xl-10 p-3">
|
||||
<nav class="navbar navbar-expand-lg navbar-light bg-light mb-3">
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent"
|
||||
aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="navbar-brand ml-2"><i class="bi-puzzle"></i> Bürokalender</div>
|
||||
<div class="collapse navbar-collapse" id="navbarSupportedContent">
|
||||
<div class="navbar-nav mr-auto">
|
||||
<a class="nav-item nav-link {#insert kalender_active}{/}" href="/kalender">Kalender</a>
|
||||
<a class="nav-item nav-link {#insert user_active}{/}" href="/user">Benutzer</a>
|
||||
</div>
|
||||
</div>
|
||||
<a class="btn btn-outline-primary me-2" href="/user/logout">Logout</a>
|
||||
</nav>
|
||||
{#if error}<div class="alert alert-danger" role="alert">{error}</div>{/if}
|
||||
{#if info}<div class="alert alert-primary" role="alert">{info}</div>{/if}
|
||||
{#insert contents}No contents!{/}
|
||||
</div>
|
||||
<script src="/webjars/bootstrap/5.0.0/js/bootstrap.min.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
12
src/main/resources/templates/kalender.html
Normal file
12
src/main/resources/templates/kalender.html
Normal file
@@ -0,0 +1,12 @@
|
||||
{#include base.html}
|
||||
{#kalender_active}active{/}
|
||||
{#contents}
|
||||
|
||||
<div class="mt-2">
|
||||
aktuelle Woche<br>
|
||||
nächste Woche<br>
|
||||
übernächste Woche<br>
|
||||
</div>
|
||||
|
||||
{/contents}
|
||||
{/include}
|
||||
29
src/main/resources/templates/password-modal.html
Normal file
29
src/main/resources/templates/password-modal.html
Normal file
@@ -0,0 +1,29 @@
|
||||
<div class="modal fade" id="passwordModal" tabindex="-1" aria-labelledby="passwordModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="userModalLabel">Passwort ändern</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
|
||||
<form action="/user/password" method="POST" name="userForm" enctype="multipart/form-data">
|
||||
<div class="modal-body row mb-3">
|
||||
<div class="align-items-center col-md-10 mx-auto col-lg-11">
|
||||
<div class="form-floating mb-3">
|
||||
<input type="password" name="password" class="form-control" id="pwd" placeholder="Password" required>
|
||||
<label for="pwd">Passwort</label>
|
||||
</div>
|
||||
<div class="form-floating mb-3">
|
||||
<input type="password" name="passwordVerify" class="form-control" id="pwdv" placeholder="Passwort wiederholen" required>
|
||||
<label for="pwd">Passwort wiederholen</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Abbrechen</button>
|
||||
<button type="submit" class="btn btn-primary">Speichern</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
40
src/main/resources/templates/user-modal.html
Normal file
40
src/main/resources/templates/user-modal.html
Normal file
@@ -0,0 +1,40 @@
|
||||
<div class="modal fade" id="userModal" tabindex="-1" aria-labelledby="userModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="userModalLabel">Benutzer anlegen</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
|
||||
<form action="/user/new" method="POST" name="userForm" enctype="multipart/form-data">
|
||||
<div class="modal-body row mb-3">
|
||||
<div class="align-items-center col-md-10 mx-auto col-lg-11">
|
||||
<div class="form-floating mb-3">
|
||||
<input type="text" name="username" class="form-control" id="name" placeholder="Benutzername" required>
|
||||
<label for="name">Benutzername</label>
|
||||
</div>
|
||||
<div class="form-floating mb-3">
|
||||
<input type="password" name="password" class="form-control" id="pwd" placeholder="Password" required>
|
||||
<label for="pwd">Passwort</label>
|
||||
</div>
|
||||
<div class="form-floating mb-3">
|
||||
<input type="password" name="passwordVerify" class="form-control" id="pwdv" placeholder="Passwort wiederholen" required>
|
||||
<label for="pwd">Passwort wiederholen</label>
|
||||
</div>
|
||||
<div class="form-floating mb-3">
|
||||
<select id="role" name="role" class="form-select" required>
|
||||
<option selected>USER</option>
|
||||
<option>ADMIN</option>
|
||||
</select>
|
||||
<label class="col-sm-3 col-form-label1" for="role">Rolle</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Abbrechen</button>
|
||||
<button type="submit" class="btn btn-primary">Speichern</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
21
src/main/resources/templates/user.html
Normal file
21
src/main/resources/templates/user.html
Normal file
@@ -0,0 +1,21 @@
|
||||
{#include base.html}
|
||||
{#user_active}active{/}
|
||||
{#contents}
|
||||
|
||||
<div class="mt-2">
|
||||
<h2>Hallo {current_username}</h2>
|
||||
{#if is_admin}User: {user_count}{/if}
|
||||
</div>
|
||||
|
||||
<div class="mt-2" >
|
||||
{#if is_admin}
|
||||
<a class="btn btn-primary btn" data-bs-toggle="modal" data-bs-target="#userModal" role="button">neuer Benutzer</a>
|
||||
{/if}
|
||||
<a class="btn btn-primary btn" data-bs-toggle="modal" data-bs-target="#passwordModal" role="button">Passwort ändern</a>
|
||||
{#if is_admin}
|
||||
{#include user-modal.html}{/include}
|
||||
{/if}
|
||||
{#include password-modal.html}{/include}
|
||||
</div>
|
||||
{/contents}
|
||||
{/include}
|
||||
30
src/main/resources/templates/userinit.html
Normal file
30
src/main/resources/templates/userinit.html
Normal file
@@ -0,0 +1,30 @@
|
||||
{#include base.html}
|
||||
{#contents}
|
||||
|
||||
<div class="container mt-2">
|
||||
<p>Die Anwendung kennt noch keinen Benutzer.</p>
|
||||
<p><b>Bitte lege einen Admin-Benutzer an.</b></p>
|
||||
|
||||
<form action="/user/init" method="POST" name="userForm" enctype="multipart/form-data">
|
||||
<div class="form-row align-items-center">
|
||||
<div class="col-sm-3 my-1">
|
||||
<label class="sr-only" for="name">Name</label>
|
||||
<input type="text" name="username" class="form-control" id="name" placeholder="Benutzername" required autofocus>
|
||||
</div>
|
||||
<div class="col-sm-3 my-1">
|
||||
<label class="sr-only" for="pwd">Passwort</label>
|
||||
<input type="password" name="password" class="form-control" id="pwd" placeholder="Passwort" required>
|
||||
</div>
|
||||
<div class="col-sm-3 my-1">
|
||||
<label class="sr-only" for="pwd">Rolle</label>
|
||||
<input type="text" name="role" class="form-control" id="role" value="ADMIN" readonly>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<button type="submit" class="btn btn-primary">Speichern</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
{/contents}
|
||||
{/include}
|
||||
Reference in New Issue
Block a user