web - login and logout
This commit is contained in:
parent
08200451e3
commit
538e7b0a60
@ -28,7 +28,7 @@ models.user = new Schema({
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
passhash: String, // hashed password (String + separator + Salt)
|
passhash: String, // hashed password (String + separator + Salt)
|
||||||
token: { // last remember me cookie
|
token: { // last remember me cookie; removed feature
|
||||||
type: String,
|
type: String,
|
||||||
default: ""
|
default: ""
|
||||||
},
|
},
|
||||||
|
@ -15,7 +15,67 @@ route.post('/register', (req, res) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
route.post('/login', (req, res) => {
|
route.post('/login', (req, res) => {
|
||||||
// TODO: login
|
/*
|
||||||
|
* done - check body vars -> else ERR 401 'msg.auth.login.failed'
|
||||||
|
* done - get users by mail / nickname -> else ERR 401 'msg.auth.login.failed' OR ERR 500 'msg.database.error'
|
||||||
|
* done - validate password hash -> else ERR 401 'msg.auth.login.failed'
|
||||||
|
* TODO - add new activity 'action.user.login'
|
||||||
|
*/
|
||||||
|
|
||||||
|
if(req.session.user) {
|
||||||
|
return res.type('json').end(JSON.stringify({
|
||||||
|
status: 401,
|
||||||
|
message: 'msg.auth.logout.required'
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
// check body variables
|
||||||
|
if(!req.body.email && !req.body.password) {
|
||||||
|
return res.type('json').status(401).end(JSON.stringify({
|
||||||
|
status: 401,
|
||||||
|
message: [
|
||||||
|
'msg.request.data.missing',
|
||||||
|
'msg.auth.login.failed'
|
||||||
|
]
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
let email = req.body.email;
|
||||||
|
let pass = req.body.password;
|
||||||
|
|
||||||
|
global['modules'].database.getUser(email, (err, rep) => {
|
||||||
|
console.log(err, rep);
|
||||||
|
if(err) {
|
||||||
|
global['logs'].debug(err);
|
||||||
|
return res.type('json').status(500).end(JSON.stringify({
|
||||||
|
status: 500,
|
||||||
|
message: [
|
||||||
|
'msg.database.error',
|
||||||
|
'msg.auth.login.failed'
|
||||||
|
]
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
if(!rep || rep === null || rep.length == 0 || rep.length > 1 || !global['modules'].auth.validateHash(rep[0].passhash, pass)) {
|
||||||
|
return res.type('json').status(401).end(JSON.stringify({
|
||||||
|
status: 401,
|
||||||
|
message: 'msg.auth.login.failed'
|
||||||
|
}));
|
||||||
|
} else {
|
||||||
|
// add cookies; login
|
||||||
|
// new activity 'action.user.login'
|
||||||
|
|
||||||
|
// add session data
|
||||||
|
req.session.user = {
|
||||||
|
'id': rep[0]._id,
|
||||||
|
'group': rep[0].group
|
||||||
|
};
|
||||||
|
|
||||||
|
return res.type('json').end(JSON.stringify({
|
||||||
|
status: 200,
|
||||||
|
message: 'msg.auth.login.successful',
|
||||||
|
type: 'form' // TODO: types - { form, access_app}
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
route.post('/authenticate', (req, res) => {
|
route.post('/authenticate', (req, res) => {
|
||||||
|
@ -32,7 +32,12 @@ var fileCheck = (file) => {
|
|||||||
route.all('/', function(req, res, next) {
|
route.all('/', function(req, res, next) {
|
||||||
// TODO: show login page or dashboard
|
// TODO: show login page or dashboard
|
||||||
// res.end('login or dashboard');
|
// res.end('login or dashboard');
|
||||||
res.render('index');
|
global['modules'].database.getApps((err, rep) => {
|
||||||
|
res.render('index', {
|
||||||
|
session: req.session,
|
||||||
|
apps: rep
|
||||||
|
});
|
||||||
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
// login page or app request
|
// login page or app request
|
||||||
|
@ -22,4 +22,4 @@ block scripts
|
|||||||
|
|
||||||
//- Custom scripts for this template
|
//- Custom scripts for this template
|
||||||
script(src="/public/js/locales.js")
|
script(src="/public/js/locales.js")
|
||||||
script(src="/public/js/custom.js")
|
script(src="/res/js/custom.js")
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
append var
|
append var
|
||||||
- var breadcrumb = {0: {"name": "authRXBN", "href": "/"}, 1: {"name": "ERROR - Please login", "active": true}};
|
- if(!session.user) var breadcrumb = {0: {"name": "authRXBN", "href": "/"}, 1: {"name": "ERROR - Please login", "active": true}};
|
||||||
- var title = "Please login";
|
- if(!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")
|
||||||
.uk-flex.uk-flex-auto.uk-flex-column.uk-flex-center.uk-margin-left.uk-margin-right
|
.uk-flex.uk-flex-auto.uk-flex-column.uk-flex-center.uk-margin-left.uk-margin-right
|
||||||
|
@ -13,12 +13,13 @@ nav(uk-navbar).uk-navbar-container
|
|||||||
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(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("Configs", "configs", "fas fa-wrench", "/configs")
|
||||||
|
+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")
|
||||||
+navItem("Login", "login", "far fa-arrow-alt-circle-right", "/login")
|
+navItem("Login", "login", "fas fa-sign-in-alt", "/login")
|
||||||
+navItem("Forgot your password?", "reset", "fas fa-key", "/reset")
|
+navItem("Forgot your password?", "reset", "fas fa-key", "/reset")
|
||||||
div
|
div
|
||||||
- var breadcrumb_isSet = typeof breadcrumb !== 'undefined';
|
- var breadcrumb_isSet = typeof breadcrumb !== 'undefined';
|
||||||
|
@ -1,26 +1,29 @@
|
|||||||
extends blocks/layout.pug
|
extends blocks/layout.pug
|
||||||
append var
|
append var
|
||||||
if(user)
|
if(session && session.user)
|
||||||
- var breadcrumb = {0: {"name": "authRXBN", "href": "/"}, 1: {"name": "Dashboard", "active": true}};
|
- var breadcrumb = {0: {"name": "authRXBN", "href": "/"}, 1: {"name": "Dashboard", "active": true}};
|
||||||
- var title = "Dashboard";
|
- var title = "Dashboard";
|
||||||
|
|
||||||
mixin item(name, url, description)
|
mixin item(name, id, description)
|
||||||
.card.mb-5
|
div
|
||||||
.card-body
|
.uk-card.uk-card-default
|
||||||
h5.font-weight-bold.card-title=name
|
.uk-card-header.uk-card-primary
|
||||||
p.card-text=description
|
h3.uk-card-title=name
|
||||||
a(href=url) Login
|
.uk-card-body
|
||||||
|
p=description
|
||||||
|
.uk-card-footer.uk-flex.uk-flex-right
|
||||||
|
a.uk-button.uk-button-default.uk-button-primary(href="/api/redirect?id="+id) Login
|
||||||
|
|
||||||
mixin items()
|
mixin items()
|
||||||
.flex
|
div(class="uk-child-width-1-2@m uk-margin-bottom", uk-grid)
|
||||||
if(apps)
|
if(apps)
|
||||||
each app in apps
|
each app in apps
|
||||||
+item(app.name, app.access, app.description)
|
+item(app.name, app.id, app.description)
|
||||||
else
|
else
|
||||||
p.text-center No applications were found.
|
p.text-center No applications were found.
|
||||||
|
|
||||||
append content
|
append content
|
||||||
if(user)
|
if(session && session.user)
|
||||||
.uk-container
|
.uk-container
|
||||||
h1 Apps
|
h1 Apps
|
||||||
+items()
|
+items()
|
||||||
|
@ -1,14 +1,15 @@
|
|||||||
extends blocks/layout.pug
|
extends blocks/layout.pug
|
||||||
append var
|
append var
|
||||||
if(user)
|
if(session && !session.user)
|
||||||
- var breadcrumb = {0: {"name": "authRXBN", "href": "/"}, 1: {"name": "Login", "active": true}};
|
- var breadcrumb = {0: {"name": "authRXBN", "href": "/"}, 1: {"name": "Login", "active": true}};
|
||||||
- var title = "Login";
|
- var title = "Login";
|
||||||
|
|
||||||
append content
|
append content
|
||||||
|
if(session && !session.user)
|
||||||
.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")
|
||||||
.uk-flex.uk-flex-auto.uk-flex-column.uk-flex-center.uk-margin-left.uk-margin-right
|
.uk-flex.uk-flex-auto.uk-flex-column.uk-flex-center.uk-margin-left.uk-margin-right
|
||||||
h1= login_title|| "Please login"
|
h1= login_title || "Please login"
|
||||||
form.uk-form-horizontal
|
form.uk-form-horizontal
|
||||||
.uk-margin
|
.uk-margin
|
||||||
label.uk-form-label(for="login_user") Username / Email
|
label.uk-form-label(for="login_user") Username / Email
|
||||||
@ -18,5 +19,9 @@ 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")
|
||||||
a(href="/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
|
||||||
|
append var
|
||||||
|
- overwrite_vars = (session && session.user) ? true : false;
|
||||||
|
include blocks/error/permission.pug
|
||||||
|
18
bin/web/views/logout.pug
Normal file
18
bin/web/views/logout.pug
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
extends blocks/layout.pug
|
||||||
|
append var
|
||||||
|
if(session && session.user)
|
||||||
|
- var breadcrumb = {0: {"name": "authRXBN", "href": "/"}, 1: {"name": "Logout", "active": true}};
|
||||||
|
- var title = "Logout";
|
||||||
|
|
||||||
|
append content
|
||||||
|
if(session && session.user)
|
||||||
|
.uk-flex.uk-margin-medium-top.uk-margin-medium-bottom
|
||||||
|
div(class="uk-width-auto uk-width-1-4@s")
|
||||||
|
.uk-flex.uk-flex-auto.uk-flex-column.uk-flex-center.uk-margin-left.uk-margin-right
|
||||||
|
h1 You will be redirected
|
||||||
|
#listener_logout
|
||||||
|
div(class="uk-width-auto uk-width-1-4@s")
|
||||||
|
else
|
||||||
|
append var
|
||||||
|
- overwrite_vars = (session && session.user) ? true : false;
|
||||||
|
include blocks/error/permission.pug
|
35
res/web/js/custom.js
Normal file
35
res/web/js/custom.js
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
function login() {
|
||||||
|
let user = document.getElementById("login_user").value;
|
||||||
|
let pass = document.getElementById("login_pass").value;
|
||||||
|
|
||||||
|
let data = {
|
||||||
|
"email": user,
|
||||||
|
"password": pass
|
||||||
|
};
|
||||||
|
|
||||||
|
let ajax = new XMLHttpRequest();
|
||||||
|
ajax.open("POST", "/api/login", true);
|
||||||
|
ajax.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
|
||||||
|
ajax.send(JSON.stringify(data));
|
||||||
|
ajax.onload = () => {
|
||||||
|
let json = JSON.parse(ajax.responseText);
|
||||||
|
if(json.message && json.message == "msg.auth.login.successful") window.location.href= "/";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
function logout() {
|
||||||
|
let ajax = new XMLHttpRequest();
|
||||||
|
ajax.open("GET", "/api/logout", true);
|
||||||
|
ajax.setRequestHeader('Content-Type', 'charset=UTF-8');
|
||||||
|
ajax.send("");
|
||||||
|
ajax.onload = () => {
|
||||||
|
let json = JSON.parse(ajax.responseText);
|
||||||
|
if(json.message && json.message == "msg.auth.logout.successful") window.location.href= "/";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
setTimeout(function () {
|
||||||
|
if(document.getElementById("listener_logout")) {
|
||||||
|
console.log("logout");
|
||||||
|
logout();
|
||||||
|
}
|
||||||
|
}, 100);
|
Loading…
x
Reference in New Issue
Block a user