To receive notifications about scheduled maintenance, please subscribe to the mailing-list gitlab-operations@sympa.ethz.ch. You can subscribe to the mailing-list at https://sympa.ethz.ch

Commit 25c4d437 authored by Sandro Lutz's avatar Sandro Lutz Committed by Hermann
Browse files

Implement proper logout

parent 988ecae3
......@@ -11,9 +11,14 @@ const APISession = {
token: '',
// user admins are a very special case as the permissions on the resource can only
// be seen by requesting users and check whether you see their membership
isUserAdmin: false
isUserAdmin: false,
};
const amivapi = axios.create({
baseURL: apiUrl,
headers: { 'Content-Type': 'application/json' },
});
// OAuth Handler
const oauth = new ClientOAuth2({
clientId: oAuthID,
......@@ -21,18 +26,13 @@ const oauth = new ClientOAuth2({
redirectUri: `${ownUrl}/oauthcallback`,
});
export function resetSession() {
function resetSession() {
APISession.authenticated = false;
APISession.token = '';
localStorage.remove('token');
window.location.replace(oauth.token.getUri());
}
const amivapi = axios.create({
baseURL: apiUrl,
headers: { 'Content-Type': 'application/json' },
});
function checkToken(token) {
// check if a token is still valid
return new Promise((resolve, reject) => {
......@@ -88,6 +88,26 @@ export function getSession() {
});
}
export function deleteSession() {
return new Promise((resolve, reject) => {
getSession().then((api) => {
api.get(`sessions/${APISession.token}`).then((response) => {
if (response.status === 200) {
api.delete(
`sessions/${response.data._id}`,
{ headers: { 'If-Match': response.data._etag } },
).then((deleteResponse) => {
if (deleteResponse.status === 204) {
resetSession();
resolve(deleteResponse.data);
} else reject();
}).catch(reject);
} else reject();
}).catch(reject);
});
});
}
export class ResourceHandler {
/* Handler to get and manipulate resource items
*
......
......@@ -42,5 +42,3 @@ m.route(root, '/events', {
'/newjoboffer': layoutWith(JobItem),
'/joboffers/:id': layoutWith(JobItem),
});
m.route.prefix('');
......@@ -9,11 +9,12 @@ import {
ToolbarTitle,
Dialog,
SVG,
Button,
IconButton,
} from 'polythene-mithril';
import { styler } from 'polythene-core-css';
import { icons } from './views/elements';
import { resetSession } from './auth';
import { deleteSession } from './auth';
import { colors } from './style';
const layoutStyle = [
......@@ -109,7 +110,11 @@ export class Layout {
style: { color: '#ffffff' },
})),
m(ToolbarTitle, { text: 'AMIV Admintools' }),
m('a', { onclick: resetSession }, 'Logout'),
m(Button, {
className: 'red-row-button',
label: 'logout',
events: { onclick: deleteSession },
}),
]),
m(
'div.mdc-typography.wrapper-sidebar',
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment