user.js 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. import { defineStore } from 'pinia'
  2. import { ConcernementsStore as concrnmtStore } from '@/stores/concernements'
  3. import REST from '@api/rest-axios'
  4. import JSONAPI from '@api/json-axios'
  5. import qs from 'querystring-es3'
  6. import { print } from 'graphql/language/printer'
  7. import gql from 'graphql-tag'
  8. import GQL from '@api/graphql-axios'
  9. export const UserStore = defineStore({
  10. id: 'user',
  11. state: () => ({
  12. isloggedin: false,
  13. csrf_token: null,
  14. logout_token: null,
  15. uid: 0,
  16. uuid: 0,
  17. mail: '',
  18. name: null,
  19. roles: [],
  20. isAdmin: false,
  21. logginMessage: null
  22. }),
  23. getters: {
  24. },
  25. actions: {
  26. checkUser () {
  27. JSONAPI.get('').then(({ data }) => {
  28. console.log('checkuser jsonapi', data)
  29. if (data.meta && data.meta.links.me) {
  30. JSONAPI.get(data.meta.links.me.href).then(({ data : { data } }) => {
  31. console.log('checkuser jsonapi get user', data)
  32. this.uid = data.attributes.drupal_internal__uid
  33. this.mail = data.attributes.mail
  34. this.name = data.attributes.name
  35. this.isloggedin = true //data.attributes.status
  36. console.log('user store checkuser isloggedin', this.isloggedin);
  37. this.getUser(); // necessery to get the csrf-token
  38. // this.userGetRoles()
  39. // .then(({ data : { data : { user } } }) => {
  40. // console.log('graphql user loaded', user)
  41. // this.roles = user.roles
  42. // this.checkIsAdmin()
  43. // })
  44. // .catch(error => {
  45. // console.warn('Issue with graphql user loading', error)
  46. // Promise.reject(error)
  47. // })
  48. })
  49. }
  50. })
  51. },
  52. getSessionToken(){
  53. },
  54. userLogin (credentials) {
  55. console.log('user store userLogin', credentials);
  56. return new Promise((resolve, reject) => {
  57. this.postCredentials(credentials)
  58. .then((response) => {
  59. console.log('userLogin postCredentials response', response)
  60. if (response.status === 200) {
  61. this.uid = response.data.current_user.uid
  62. // state.username = data.username;
  63. this.mail = response.data.current_user.mail
  64. this.csrf_token = response.data.csrf_token
  65. // this.isloggedin = true
  66. this.logout_token = response.data.logout_token
  67. this.getUser().then(userdata => {
  68. console.log('User Loggedin')
  69. // todo reload concernements
  70. // concrnmtStore().reloadConcernements(); // INFO would be good but to much complicated for now, just reload the page
  71. window.location.reload();
  72. resolve()
  73. })
  74. } else {
  75. this.loginMessage = response.data.message
  76. console.warn('Issue with postCredentials', response)
  77. console.log('user loggein failed', this.loginMessage)
  78. Promise.reject(new Error('user loggin failed'))
  79. }
  80. })
  81. .catch(error => {
  82. console.warn('Issue with Dispatch postCredentials', error)
  83. Promise.reject(error)
  84. })
  85. })
  86. },
  87. postCredentials (credentials) {
  88. console.log('userStore postCredentials', credentials)
  89. return REST.post('/user/login?_format=json',
  90. credentials,
  91. {
  92. validateStatus: function (status) {
  93. return status >= 200 && status < 500
  94. }
  95. })
  96. },
  97. getUser () {
  98. console.log('user store getUser');
  99. return new Promise((resolve, reject) => {
  100. REST.get('/session/token').then(({ data }) => {
  101. console.log('csrf_token', data)
  102. this.csrf_token = data
  103. console.log('state csrf_token', this.csrf_token)
  104. const params = {
  105. token: this.csrf_token
  106. }
  107. REST.get(`/user/${this.uid}?_format=json`, params)
  108. .then(({ data }) => {
  109. console.log('user REST getUser data', data)
  110. console.log('roles', data.roles)
  111. // with session_limit, only here we are certain that the user is logged
  112. // this.user = data
  113. // this.mail = data.mail[0].value
  114. this.uuid = data.uuid[0].value
  115. this.name = data.name[0].value
  116. // with session_limit, only here we are certain that the user is logged
  117. this.isloggedin = true
  118. // console.log('customer_profiles', data.customer_profiles.length)
  119. // if (data.customer_profiles.length) {
  120. // dispatch('getUserProfiles', data.customer_profiles[data.customer_profiles.length - 1].target_id)
  121. // }
  122. this.userGetRoles()
  123. .then(({ data : { data : { user } } }) => {
  124. console.log('graphql user loaded', user)
  125. this.roles = user.roles
  126. this.checkIsAdmin()
  127. resolve()
  128. })
  129. .catch(error => {
  130. console.warn('Issue with graphql user loading', error)
  131. Promise.reject(error)
  132. })
  133. })
  134. .catch(error => {
  135. console.warn('Issue with getUser', error)
  136. Promise.reject(error)
  137. })
  138. })
  139. })
  140. },
  141. userGetRoles () {
  142. // GRAPHQL USER QUERY (needed to get roles)
  143. // https://stackoverflow.com/a/55401805
  144. const body = {
  145. query: `
  146. query User($id: Int!){
  147. user(id: $id) {
  148. id
  149. roles
  150. username
  151. }
  152. }`,
  153. variables: { id: parseInt(this.uid) }
  154. }
  155. return GQL.post('', body)
  156. },
  157. checkIsAdmin () {
  158. const adminroles = ['root', 'admin', 'group_admin']
  159. for (let r = 0; r < this.roles.length; r++) {
  160. if (adminroles.indexOf(this.roles[r]) !== -1) {
  161. this.isAdmin = true;
  162. break;
  163. }
  164. }
  165. },
  166. userLogout () {
  167. const credentials = qs.stringify({
  168. token: this.csrf_token
  169. })
  170. return new Promise((resolve, reject) => {
  171. REST.post('/user/logout', credentials)
  172. .then(resp => {
  173. console.log('userStore userLogout resp', resp)
  174. this.isloggedin = false
  175. this.roles = []
  176. // window.location.reload(true) ???
  177. // todo reload concernements
  178. // concrnmtStore().reloadConcernements(); // INFO would be good but to much complicated for now, just reload the page
  179. window.location.reload();
  180. resolve()
  181. })
  182. .catch(error => {
  183. console.warn('Issue with logout', error)
  184. Promise.reject(error)
  185. })
  186. })
  187. }
  188. }
  189. })