view 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 source

/*
 * 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;