Mercurial > gemma
diff client/src/store/user.js @ 1096:aa1f5daf6fc9
refac: centralized stores
author | Thomas Junk <thomas.junk@intevation.de> |
---|---|
date | Tue, 30 Oct 2018 16:55:29 +0100 |
parents | client/src/application/stores/user.js@ca628dce90dd |
children | 8d12056d602a |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/client/src/store/user.js Tue Oct 30 16:55:29 2018 +0100 @@ -0,0 +1,96 @@ +/* + * This is Free Software under GNU Affero General Public License v >= 3.0 + * without warranty, see README.md and license for details. + * + * SPDX-License-Identifier: AGPL-3.0-or-later + * License-Filename: LICENSES/AGPL-3.0.txt + * + * Copyright (C) 2018 by via donau + * – Österreichische Wasserstraßen-Gesellschaft mbH + * Software engineering by Intevation GmbH + * + * Author(s): + * Thomas Junk <thomas.junk@intevation.de> + */ + +import { HTTP } from "../application/lib/http"; + +const User = { + namespaced: true, + state: { + authenticated: false, + expires: null, + roles: [], + user: "" + }, + getters: { + isAuthenticated: state => { + return state.authenticated; + }, + userinfo: state => { + return state.user; + }, + roles: state => { + return state.roles; + }, + expires: state => { + return state.expires; + }, + isWaterwayAdmin: state => { + return state.roles.includes("waterway_admin"); + }, + isSysAdmin: state => { + return state.roles.includes("sys_admin"); + } + }, + mutations: { + auth_success: (state, data) => { + const { token, user, expires, roles } = data; + localStorage.setItem("expires", expires); + localStorage.setItem("roles", roles); + localStorage.setItem("token", token); + localStorage.setItem("user", user); + state.expires = expires; + state.roles = roles; + state.user = user; + state.authenticated = true; + }, + clear_auth: state => { + state.authenticated = false; + state.expires = null; + state.roles = []; + state.user = ""; + localStorage.clear(); + }, + set_user: (state, name) => { + state.user = name; + }, + set_roles: (state, roles) => { + state.roles = roles; + }, + set_expires: (state, expires) => { + state.expires = expires; + }, + set_authenticate: state => { + state.authenticated = true; + } + }, + actions: { + login({ commit }, user) { + // using POST is a bit more secure than GET + return new Promise((resolve, reject) => { + HTTP.post("/login", user) + .then(response => { + commit("auth_success", response.data); + resolve(response); + }) + .catch(error => { + commit("clear_auth"); + reject(error); + }); + }); + } + } +}; + +export default User;