123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- import { defineStore } from 'pinia'
- import { ConcernementsStore as concrnmtStore } from '@/stores/concernements'
- import REST from '@api/rest-axios'
- import JSONAPI from '@api/json-axios'
- import qs from 'querystring-es3'
- import { print } from 'graphql/language/printer'
- import gql from 'graphql-tag'
- import GQL from '@api/graphql-axios'
- export const UserStore = defineStore({
- id: 'user',
- state: () => ({
- isloggedin: false,
- csrf_token: null,
- logout_token: null,
- uid: 0,
- uuid: 0,
- mail: '',
- name: null,
- roles: [],
- isAdmin: false,
- logginMessage: null
- }),
- getters: {
-
- },
- actions: {
- checkUser () {
- JSONAPI.get('').then(({ data }) => {
- console.log('checkuser jsonapi', data)
- if (data.meta && data.meta.links.me) {
- JSONAPI.get(data.meta.links.me.href).then(({ data : { data } }) => {
- console.log('checkuser jsonapi get user', data)
- this.uid = data.attributes.drupal_internal__uid
- this.mail = data.attributes.mail
- this.name = data.attributes.name
- this.isloggedin = true //data.attributes.status
- console.log('user store checkuser isloggedin', this.isloggedin);
-
- this.getUser(); // necessery to get the csrf-token
-
- // this.userGetRoles()
- // .then(({ data : { data : { user } } }) => {
- // console.log('graphql user loaded', user)
- // this.roles = user.roles
- // this.checkIsAdmin()
- // })
- // .catch(error => {
- // console.warn('Issue with graphql user loading', error)
- // Promise.reject(error)
- // })
- })
- }
- })
- },
- getSessionToken(){
- },
- userLogin (credentials) {
- console.log('user store userLogin', credentials);
- return new Promise((resolve, reject) => {
- this.postCredentials(credentials)
- .then((response) => {
- console.log('userLogin postCredentials response', response)
- if (response.status === 200) {
- this.uid = response.data.current_user.uid
- // state.username = data.username;
- this.mail = response.data.current_user.mail
- this.csrf_token = response.data.csrf_token
- // this.isloggedin = true
- this.logout_token = response.data.logout_token
- this.getUser().then(userdata => {
- console.log('User Loggedin')
- // todo reload concernements
- // concrnmtStore().reloadConcernements(); // INFO would be good but to much complicated for now, just reload the page
- window.location.reload();
- resolve()
- })
- } else {
- this.loginMessage = response.data.message
- console.warn('Issue with postCredentials', response)
- console.log('user loggein failed', this.loginMessage)
- Promise.reject(new Error('user loggin failed'))
- }
- })
- .catch(error => {
- console.warn('Issue with Dispatch postCredentials', error)
- Promise.reject(error)
- })
- })
- },
- postCredentials (credentials) {
- console.log('userStore postCredentials', credentials)
- return REST.post('/user/login?_format=json',
- credentials,
- {
- validateStatus: function (status) {
- return status >= 200 && status < 500
- }
- })
- },
- getUser () {
- console.log('user store getUser');
- return new Promise((resolve, reject) => {
- REST.get('/session/token').then(({ data }) => {
- console.log('csrf_token', data)
- this.csrf_token = data
- console.log('state csrf_token', this.csrf_token)
- const params = {
- token: this.csrf_token
- }
- REST.get(`/user/${this.uid}?_format=json`, params)
- .then(({ data }) => {
- console.log('user REST getUser data', data)
- console.log('roles', data.roles)
- // with session_limit, only here we are certain that the user is logged
- // this.user = data
- // this.mail = data.mail[0].value
- this.uuid = data.uuid[0].value
- this.name = data.name[0].value
- // with session_limit, only here we are certain that the user is logged
- this.isloggedin = true
-
- // console.log('customer_profiles', data.customer_profiles.length)
- // if (data.customer_profiles.length) {
- // dispatch('getUserProfiles', data.customer_profiles[data.customer_profiles.length - 1].target_id)
- // }
- this.userGetRoles()
- .then(({ data : { data : { user } } }) => {
- console.log('graphql user loaded', user)
- this.roles = user.roles
- this.checkIsAdmin()
- resolve()
- })
- .catch(error => {
- console.warn('Issue with graphql user loading', error)
- Promise.reject(error)
- })
- })
- .catch(error => {
- console.warn('Issue with getUser', error)
- Promise.reject(error)
- })
- })
- })
- },
- userGetRoles () {
- // GRAPHQL USER QUERY (needed to get roles)
- // https://stackoverflow.com/a/55401805
- const body = {
- query: `
- query User($id: Int!){
- user(id: $id) {
- id
- roles
- username
- }
- }`,
- variables: { id: parseInt(this.uid) }
- }
- return GQL.post('', body)
- },
- checkIsAdmin () {
- const adminroles = ['root', 'admin', 'group_admin']
- for (let r = 0; r < this.roles.length; r++) {
- if (adminroles.indexOf(this.roles[r]) !== -1) {
- this.isAdmin = true;
- break;
- }
- }
- },
- userLogout () {
- const credentials = qs.stringify({
- token: this.csrf_token
- })
- return new Promise((resolve, reject) => {
- REST.post('/user/logout', credentials)
- .then(resp => {
- console.log('userStore userLogout resp', resp)
- this.isloggedin = false
- this.roles = []
- // window.location.reload(true) ???
- // todo reload concernements
- // concrnmtStore().reloadConcernements(); // INFO would be good but to much complicated for now, just reload the page
- window.location.reload();
- resolve()
- })
- .catch(error => {
- console.warn('Issue with logout', error)
- Promise.reject(error)
- })
- })
- }
- }
- })
|