1
0
Fork 0

Compare commits

...

3 Commits

Author SHA1 Message Date
Ruben Meyer a3e626a274
web - form usability 2020-08-14 23:45:29 +02:00
Ruben Meyer e288966cfe
web - use app name from config 2020-08-14 23:44:12 +02:00
Ruben Meyer 7e77b8d0f9
web - quick fix 2020-08-14 23:40:19 +02:00
14 changed files with 58 additions and 36 deletions

View File

@ -27,6 +27,7 @@ module.exports = {
}, },
app: { app: {
locale: 'de-DE', // default locale (de-DE & en-EN should be available) locale: 'de-DE', // default locale (de-DE & en-EN should be available)
name: 'authRXBN',
passhashDelimiter: '|' passhashDelimiter: '|'
}, },
mongoose: { mongoose: {

View File

@ -162,8 +162,8 @@ getRoutes = async () => {
}); });
// database error // database error
if(authCode.err) { if(typeof authCode.err !== "undefined") {
global['logs'].debug(authCode[1]); global['logs'].debug(authCode.err);
return res.type('json').status(500).end(JSON.stringify({ return res.type('json').status(500).end(JSON.stringify({
status: 500, status: 500,
message: [ message: [
@ -171,11 +171,11 @@ getRoutes = async () => {
] ]
})); }));
} }
else if(rep) { else if(typeof authCode.reply !== "undefined") {
// retrieve apps // retrieve apps
apps = await db.getApps(); apps = await db.getApps();
// database error // database error
if(apps.reply) { if(typeof apps.err !== "undefined") {
global['logs'].debug(apps.err); global['logs'].debug(apps.err);
return res.type('json').status(500).end(JSON.stringify({ return res.type('json').status(500).end(JSON.stringify({
status: 500, status: 500,
@ -189,7 +189,7 @@ getRoutes = async () => {
// if app.id is equal to queried app // if app.id is equal to queried app
if(app.id == req.query.id) { if(app.id == req.query.id) {
// redirect to app // redirect to app
return res.redirect(app.access+"?uid="+req.session.user.id+"&token="+rep.token); return res.redirect(app.access+"?uid="+req.session.user.id+"&token="+authCode.reply.token);
} }
}); });
} else { } else {

View File

@ -11,7 +11,7 @@ asyncer = require('express-async-handler');
fs = require('fs'); fs = require('fs');
path = require('path'); path = require('path');
var cfg = require(global['__dirname']+'/bin/config');
// reduce IO file checks - save file state in cache // reduce IO file checks - save file state in cache
var fileCheck = (file) => { var fileCheck = (file) => {
@ -48,7 +48,8 @@ let getRoutes = async () => {
apps = await db.getApps(); apps = await db.getApps();
res.render('index', { res.render('index', {
session: req.session, session: req.session,
apps: apps.reply apps: apps.reply,
cfg: cfg
}); });
})); }));
@ -85,7 +86,8 @@ let getRoutes = async () => {
res.render('request', { res.render('request', {
session: req.session, session: req.session,
appRequest: req.session.appRequest, appRequest: req.session.appRequest,
apps: apps.reply apps: apps.reply,
cfg: cfg
}); });
// if user isnt logged in, show login page // if user isnt logged in, show login page
} else { } else {
@ -110,7 +112,7 @@ let getRoutes = async () => {
* @method all * @method all
* @TODO comments * @TODO comments
*/ */
route.all('/*', (req, res, next) => { route.all('/*', asyncer(async (req, res, next) => {
// passthrough to next route // passthrough to next route
if(req.path.startsWith('/api')) if(req.path.startsWith('/api'))
return next(); return next();
@ -135,22 +137,26 @@ let getRoutes = async () => {
return res.status(404).render('error/404', { return res.status(404).render('error/404', {
error_code: 404, error_code: 404,
error_msg: 'msg.request.file.not_found', error_msg: 'msg.request.file.not_found',
session: req.session session: req.session,
cfg: cfg
}); });
} else if(rule.type == "missing_permission") { } else if(rule.type == "missing_permission") {
return res.status(401).render('error/permission', { return res.status(401).render('error/permission', {
error_code: 401, error_code: 401,
session: req.session session: req.session,
cfg: cfg
}); });
} else if(rule.type == "login") { } else if(rule.type == "login") {
return res.status(401).render('error/login', { return res.status(401).render('error/login', {
error_code: 401, error_code: 401,
session: req.session session: req.session,
cfg: cfg
}); });
} else { } else {
return res.status(401).render('error/error', { return res.status(401).render('error/error', {
error_code: 401, error_code: 401,
session: req.session session: req.session,
cfg: cfg
}); });
} }
} }
@ -159,23 +165,28 @@ let getRoutes = async () => {
}); });
if(fileCheck(req.path)) { if(fileCheck(req.path)) {
// query apps
apps = await db.getApps();
return res.render(req.path.replace(/^\//, ''), { return res.render(req.path.replace(/^\//, ''), {
session: req.session, session: req.session,
cfg: global['gds'].cfg apps: apps.reply,
cfg: cfg
}); });
} else { } else {
global['logs'].info("[web] (404) path not found: "+req.path); global['logs'].info("[web] (404) path not found: "+req.path);
return res.status(404).render('error/404', { return res.status(404).render('error/404', {
error_code: 404, error_code: 404,
error_msg: 'msg.request.file.not_found', error_msg: 'msg.request.file.not_found',
session: req.session session: req.session,
cfg: cfg
}); });
} }
// TODO: try to login // TODO: try to login
// TODO: role-based authorization // TODO: role-based authorization
// TODO: show login page or page // TODO: show login page or page
}); }));
return route; return route;
}; };

View File

@ -1,6 +1,6 @@
footer footer
.uk-text-center .uk-text-center
small Copyright &copy; <a href="https://www.rxbn.de/">Ruben Meyer</a> 2019 small Copyright &copy; <a href="https://www.rxbn.de/">Ruben Meyer</a> 2019-2020
.modals .modals
//- Logout Modal //- Logout Modal
@ -21,5 +21,5 @@ block scripts
script(src="https://cdnjs.cloudflare.com/ajax/libs/uikit/3.1.5/js/uikit-icons.min.js") script(src="https://cdnjs.cloudflare.com/ajax/libs/uikit/3.1.5/js/uikit-icons.min.js")
//- Custom scripts for this template //- Custom scripts for this template
script(src="/public/js/locales.js") //script(src="/public/js/locales.js")
script(src="/res/js/custom.js") script(src="/res/js/custom.js")

View File

@ -6,9 +6,9 @@ head
meta(name="author", content="Ruben Meyer") meta(name="author", content="Ruben Meyer")
meta(name="description" content="auth.rxbn.de") meta(name="description" content="auth.rxbn.de")
if(title) if(title)
title="authRXBN - "+title title=cfg.app.name+" - "+title
else else
title authRXBN title=cfg.app.name
block css block css
//- UIkit CSS //- UIkit CSS

View File

@ -1,5 +1,5 @@
append var append var
- if(!session || !session.user) var breadcrumb = {0: {"name": "authRXBN", "href": "/"}, 1: {"name": "ERROR - Please login", "active": true}}; - if(!session || !session.user) var breadcrumb = {0: {"name": cfg.app.name, "href": "/"}, 1: {"name": "ERROR - Please login", "active": true}};
- if(!session || !session.user) var title = "Please login"; - if(!session || !session.user) var title = "Please login";
.uk-flex.uk-margin-medium-top.uk-margin-medium-bottom .uk-flex.uk-margin-medium-top.uk-margin-medium-bottom
div(class="uk-width-auto uk-width-1-4@s") div(class="uk-width-auto uk-width-1-4@s")

View File

@ -8,14 +8,14 @@ mixin navItem(name, id, symbol, href)
nav(uk-navbar).uk-navbar-container nav(uk-navbar).uk-navbar-container
.uk-navbar-left.uk-margin-left .uk-navbar-left.uk-margin-left
ul.uk-navbar-nav ul.uk-navbar-nav
li(title="authRXBN") li(title=cfg.app.name)
a(href="/", style="text-transform: unset") a(href="/", style="text-transform: unset")
span authRXBN span authRXBN
.uk-navbar-right.uk-margin-right .uk-navbar-right.uk-margin-right
ul.uk-navbar-nav ul.uk-navbar-nav
if(session && session.user) if(session && session.user)
+navItem("Apps", "apps", "fas fa-tachometer-alt", "/") +navItem("Apps", "apps", "fas fa-tachometer-alt", "/")
+navItem("Configs", "configs", "fas fa-wrench", "/configs") +navItem("Settings", "settings", "fas fa-wrench", "/settings")
+navItem("Logout", "logout", "fas fa-sign-out-alt", "/logout") +navItem("Logout", "logout", "fas fa-sign-out-alt", "/logout")
else else
+navItem("Register", "register", "fas fa-user-plus", "/register") +navItem("Register", "register", "fas fa-user-plus", "/register")

View File

@ -1,8 +1,8 @@
extends blocks/layout.pug extends blocks/layout.pug
append var append var
if(session && session.user) if(session && session.user)
- var breadcrumb = {0: {"name": "authRXBN", "href": "/"}, 1: {"name": "Dashboard", "active": true}}; - var breadcrumb = {0: {"name": cfg.app.name, "href": "/"}, 1: {"name": "Apps", "active": true}};
- var title = "Dashboard"; - var title = "Apps";
mixin item(name, id, description) mixin item(name, id, description)
div div

View File

@ -1,7 +1,7 @@
extends blocks/layout.pug extends blocks/layout.pug
append var append var
if(session && !session.user) if(session && !session.user)
- var breadcrumb = {0: {"name": "authRXBN", "href": "/"}, 1: {"name": "Login", "active": true}}; - var breadcrumb = {0: {"name": cfg.app.name, "href": "/"}, 1: {"name": "Login", "active": true}};
- var title = "Login"; - var title = "Login";
append content append content
@ -13,7 +13,7 @@ append content
#login_msg.uk-alert(data-uk-alert).uk-hidden #login_msg.uk-alert(data-uk-alert).uk-hidden
a.uk-close-alt.uk-alert-close(href="#") a.uk-close-alt.uk-alert-close(href="#")
p p
form.uk-form-horizontal form.uk-form-horizontal(onsubmit="return loginEvent();")
.uk-margin .uk-margin
label.uk-form-label(for="login_user") Username / Email label.uk-form-label(for="login_user") Username / Email
.uk-form-controls .uk-form-controls
@ -22,6 +22,7 @@ append content
label.uk-form-label(for="login_pass") Password label.uk-form-label(for="login_pass") Password
.uk-form-controls .uk-form-controls
input.uk-input#login_pass(type="password") input.uk-input#login_pass(type="password")
input(hidden,type="submit")
button(onclick="login()").uk-button.uk-button-default Login button(onclick="login()").uk-button.uk-button-default Login
div(class="uk-width-auto uk-width-1-4@s") div(class="uk-width-auto uk-width-1-4@s")
else else

View File

@ -1,7 +1,7 @@
extends blocks/layout.pug extends blocks/layout.pug
append var append var
if(session && session.user) if(session && session.user)
- var breadcrumb = {0: {"name": "authRXBN", "href": "/"}, 1: {"name": "Logout", "active": true}}; - var breadcrumb = {0: {"name": cfg.app.name, "href": "/"}, 1: {"name": "Logout", "active": true}};
- var title = "Logout"; - var title = "Logout";
append content append content

View File

@ -1,7 +1,7 @@
extends blocks/layout.pug extends blocks/layout.pug
append var append var
if(cfg && cfg.web.registration && session && !session.user) if(cfg && cfg.web.registration && session && !session.user)
- var breadcrumb = {0: {"name": "authRXBN", "href": "/"}, 1: {"name": "Register", "active": true}}; - var breadcrumb = {0: {"name": cfg.app.name, "href": "/"}, 1: {"name": "Register", "active": true}};
- var title = "Register"; - var title = "Register";
append content append content

View File

@ -1,7 +1,7 @@
extends blocks/layout.pug extends blocks/layout.pug
append var append var
if(session && session.user) if(session && session.user)
- var breadcrumb = {0: {"name": "authRXBN", "href": "/"}, 1: {"name": "Authorization", "active": true}}; - var breadcrumb = {0: {"name": cfg.app.name, "href": "/"}, 1: {"name": "Authorization", "active": true}};
- var title = "authorize App"; - var title = "authorize App";
append content append content

View File

@ -1,7 +1,7 @@
extends blocks/layout.pug extends blocks/layout.pug
append var append var
if(session && !session.user) if(session && !session.user)
- var breadcrumb = {0: {"name": "authRXBN", "href": "/"}, 1: {"name": "Forgot your password?", "active": true}}; - var breadcrumb = {0: {"name": cfg.app.name, "href": "/"}, 1: {"name": "Forgot your password?", "active": true}};
- var title = "Reset password"; - var title = "Reset password";
append content append content

View File

@ -1,3 +1,7 @@
function loginEvent() {
login();
return false;
}
function login() { function login() {
let user = document.getElementById("login_user").value; let user = document.getElementById("login_user").value;
let pass = document.getElementById("login_pass").value; let pass = document.getElementById("login_pass").value;
@ -14,15 +18,20 @@ function login() {
ajax.onload = () => { ajax.onload = () => {
let json = JSON.parse(ajax.responseText); let json = JSON.parse(ajax.responseText);
let box = document.getElementById("login_msg"); let box = document.getElementById("login_msg");
if(json.message && json.message == "msg.auth.login.successful") {
if(window.location.pathname == "/authenticate" && getParameterByName("appId")) window.location.href= "/authenticate";
else window.location.href= "/";
box.classList.remove("uk-hidden"); box.classList.remove("uk-hidden");
box.classList.remove("uk-alert-success");
box.classList.remove("uk-alert-danger");
if(json.message && json.message == "msg.auth.login.successful") {
setTimeout(function () {
if(window.location.pathname == "/authenticate" && getParameterByName("appId")) window.location.href= "/authenticate";
else window.location.href= "/";
}, 150);
box.classList.add("uk-alert-success"); box.classList.add("uk-alert-success");
box.getElementsByTagName("p")[0].innerHTML = "Logged in. You will be redirected"; box.getElementsByTagName("p")[0].innerHTML = "Logged in. You will be redirected";
} else if(json.message && json.message == "msg.auth.login.failed") { } else if(json.message && json.message == "msg.auth.login.failed") {
box.classList.remove("uk-hidden");
box.classList.add("uk-alert-danger"); box.classList.add("uk-alert-danger");
box.getElementsByTagName("p")[0].innerHTML = "Login failed.<br> Username or Password is wrong."; box.getElementsByTagName("p")[0].innerHTML = "Login failed.<br> Username or Password is wrong.";
} }