Skip to content
Snippets Groups Projects
Commit 79ba6674 authored by Sandro Lutz's avatar Sandro Lutz
Browse files

Merge branch 'auth-es6' into 'master'

Rewrite auth.js using es6

See merge request amiv-website!17
parents db9d0806 fe397e9d
No related branches found
No related tags found
1 merge request!17Rewrite auth.js using es6
......@@ -3,105 +3,113 @@ import { log } from './log';
const m = require('mithril');
const auth = {
const APISession = {
username: '',
token: '',
etag: '',
error: '',
id: '',
authenticated: false,
lastChecked: 0,
login(username, password) {
this.reloadLocalStorage();
};
export function getUsername() {
return APISession.username;
}
export function getToken() {
return APISession.token;
}
export function isLoggedIn() {
return APISession.authenticated;
}
function reloadLocalStorage() {
log('checking stored session');
if (localStorage.getItem('token') !== null) {
APISession.token = localStorage.token;
APISession.id = localStorage.id;
APISession.username = localStorage.username;
APISession.etag = localStorage.etag;
APISession.authenticated = true;
}
}
export function login(username, password) {
reloadLocalStorage();
return m.request({
method: 'POST',
url: `${apiUrl}/sessions`,
data: { username, password },
}).then((result) => {
const dt = new Date();
log('logged in!');
APISession.token = result.token;
APISession.etag = result._etag;
APISession.id = result._id;
APISession.authenticated = true;
APISession.username = username;
localStorage.setItem('token', result.token);
localStorage.setItem('username', username);
localStorage.setItem('id', result._id);
localStorage.setItem('etag', result._etag);
APISession.lastChecked = dt.getTime();
});
}
export function logout() {
reloadLocalStorage();
APISession.authenticated = false;
return m.request({
method: 'DELETE',
url: `${apiUrl}/sessions/${APISession.id}`,
headers: {
Authorization: `Token ${APISession.token}`,
'If-Match': APISession.etag,
},
}).then(() => {
log('logged out!');
APISession.token = '';
APISession.authenticated = false;
localStorage.removeItem('token');
localStorage.removeItem('username');
localStorage.removeItem('id');
localStorage.removeItem('etag');
// m.route.set('/login');
}).catch(() => {
APISession.authenticated = false;
// m.route.set('/login');
});
}
export function checkLogin() {
const dt = new Date();
reloadLocalStorage();
if (this.authenticated === true) {
log('no session found');
m.route.set('/login');
return new Promise(() => { });
}
if (dt.getTime() > this.lastChecked + 5000) {
return m.request({
method: 'POST',
url: `${apiUrl}/sessions`,
data: { username, password },
method: 'GET',
url: `${apiUrl}/sessions/${this.token}`,
}).then((result) => {
const dt = new Date();
log('logged in!');
this.token = result.token;
this.etag = result._etag;
this.id = result._id;
const dt2 = new Date();
log('session is still valid!');
this.authenticated = true;
this.username = username;
localStorage.setItem('token', result.token);
localStorage.setItem('username', username);
localStorage.setItem('id', result._id);
localStorage.setItem('etag', result._etag);
this.lastChecked = dt.getTime();
m.route.set('/');
this.etag = result._etag;
this.lastChecked = dt2.getTime();
}).catch((e) => {
this.error = e.message;
});
},
logout() {
this.reloadLocalStorage();
this.authenticated = false;
return m.request({
method: 'DELETE',
url: `${apiUrl}/sessions/${this.id}`,
headers: {
Authorization: `Token ${this.token}`,
'If-Match': this.etag,
},
}).then(() => {
log('logged out!');
this.token = '';
log('token is not valid');
log(e);
this.authenticated = false;
this.error = '';
localStorage.removeItem('token');
localStorage.removeItem('session');
localStorage.removeItem('username');
localStorage.removeItem('id');
localStorage.removeItem('etag');
m.route.set('/login');
}).catch((e) => {
this.error = e.message;
this.authenticated = false;
m.route.set('/login');
});
},
checkLogin() {
const dt = new Date();
auth.reloadLocalStorage();
if (this.authenticated === true) {
log('no session found');
m.route.set('/login');
return new Promise(() => { });
}
if (dt.getTime() > this.lastChecked + 5000) {
return m.request({
method: 'GET',
url: `${apiUrl}/sessions/${this.token}`,
}).then((result) => {
const dt2 = new Date();
log('session is still valid!');
this.authenticated = true;
this.etag = result._etag;
this.lastChecked = dt2.getTime();
}).catch((e) => {
log('token is not valid');
log(e);
this.authenticated = false;
localStorage.removeItem('session');
localStorage.removeItem('username');
localStorage.removeItem('id');
localStorage.removeItem('etag');
m.route.set('/login');
});
}
return new Promise(() => { });
},
reloadLocalStorage() {
log('checking stored session');
if (localStorage.getItem('token') !== null) {
this.token = localStorage.token;
this.id = localStorage.id;
this.username = localStorage.username;
this.etag = localStorage.etag;
this.authenticated = true;
}
},
};
module.exports = auth;
}
return new Promise(() => { });
}
import * as auth from '../models/auth';
import { checkLogin, isLoggedIn, logout } from '../models/auth';
const m = require('mithril');
module.exports = {
oninit: auth.checkLogin,
oninit: checkLogin,
view(vnode) {
if (auth.authenticated === false) {
if (isLoggedIn() === false) {
return m('div', [
m('nav', [
m('a', { href: '/', oncreate: m.route.link }, 'AMIV'),
......@@ -27,7 +27,7 @@ module.exports = {
m('a', {
href: '/',
onclick: () => {
auth.logout();
logout().then(() => { m.route.set('/'); });
return false;
},
oncreate: m.route.link,
......
import * as auth from '../models/auth';
import { login } from '../models/auth';
const m = require('mithril');
module.exports = {
username: '',
password: '',
error: '',
view() {
return m('div', [
m(
'form', {
onsubmit: (e) => {
e.preventDefault();
auth.login(this.username, this.password);
login(this.username, this.password)
.then(() => { m.route.set('/'); })
.catch((err) => { this.error = err; });
},
},
m('h3', 'Login'), [
m('p', auth.error),
m('p', this.error),
m('input.input[type=text][placeholder=Username]', {
oninput: m.withAttr('value', (value) => { this.username = value; }),
value: this.username,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment