user.js 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. import { REST } from 'vuejs/api/rest-axios'
  2. // import { JSONAPI } from 'vuejs/api/json-axios';
  3. import { MA } from 'vuejs/api/ma-axios'
  4. import qs from 'querystring-es3'
  5. export default {
  6. namespaced: true,
  7. // initial state
  8. state: {
  9. uid: null,
  10. // username: '',
  11. mail: '',
  12. csrf_token: null,
  13. logout_token: null,
  14. isloggedin: false,
  15. isAdmin: false,
  16. isAdherent: false,
  17. canSearch: false,
  18. roles: [],
  19. flagcolls: false
  20. },
  21. // getters
  22. getters: {},
  23. // mutations
  24. mutations: {
  25. SetCsrftoken (state, token) {
  26. console.log('SetCsrftoken', token)
  27. state.csrf_token = token
  28. },
  29. setToken (state, data) {
  30. state.uid = data.current_user.uid
  31. // state.username = data.username;
  32. state.mail = data.current_user.mail
  33. state.csrf_token = data.csrf_token
  34. state.isloggedin = true
  35. state.logout_token = data.logout_token
  36. },
  37. setUid (state, uid) {
  38. state.uid = uid
  39. state.isloggedin = true
  40. },
  41. setUser (state, data) {
  42. state.mail = data.mail[0].value
  43. state.uuid = data.uuid[0].value
  44. },
  45. setRoles (state, roles) {
  46. console.log('User setRoles', roles)
  47. state.roles = []
  48. for (let i = 0; i < roles.length; i++) {
  49. state.roles.push(roles[i].target_id)
  50. }
  51. // check if admin
  52. if (
  53. state.roles.indexOf('admin') !== -1 ||
  54. state.roles.indexOf('root') !== -1
  55. ) {
  56. // console.log('is admin');
  57. state.isAdmin = true
  58. }
  59. // check if has access to search
  60. if (state.roles.indexOf('adherent') !== -1) {
  61. // console.log('is admin');
  62. state.canSearch = true
  63. state.isAdherent = true
  64. }
  65. },
  66. setLoggedOut (state) {
  67. console.log('setLoggedOut state', state)
  68. state.uid = null
  69. state.mail = ''
  70. state.csrf_token = null
  71. state.isloggedin = false
  72. state.logout_token = null
  73. if (state.isAdmin) {
  74. // TODO: what if on a page where login is needed (as commerce checkout and cart)
  75. window.location.reload(true)
  76. }
  77. state.asAdmin = false
  78. state.canSearch = false
  79. },
  80. setFlagColls (state, flagcolls) {
  81. console.log('User setFlagColls', flagcolls)
  82. state.flagcolls = flagcolls
  83. }
  84. },
  85. // actions
  86. actions: {
  87. userRegister ({ dispatch, commit, state }, credentials) {
  88. return new Promise((resolve) => {
  89. REST.get('/session/token').then(({ token }) => {
  90. commit('SetCsrftoken', token)
  91. REST.post('/user/register?_format=json', credentials, {
  92. 'X-CSRF-Token': state.csrftoken
  93. })
  94. .then(({ data }) => {
  95. console.log('user REST registered', data)
  96. dispatch('userLogin', credentials).then(() => {
  97. resolve()
  98. })
  99. })
  100. .catch(error => {
  101. console.warn('Issue with register', error)
  102. Promise.reject(error)
  103. })
  104. })
  105. })
  106. },
  107. userLogin ({ dispatch, state }, credentials) {
  108. return new Promise((resolve, reject) => {
  109. dispatch('getToken', credentials).then(() => {
  110. dispatch('getUser').then(userdata => {
  111. console.log('User Loggedin')
  112. if (state.isAdmin) {
  113. window.location.reload(true)
  114. }
  115. resolve()
  116. })
  117. })
  118. })
  119. },
  120. getToken ({ dispatch, commit, state }, credentials) {
  121. return REST.post('/user/login?_format=json', credentials)
  122. .then(({ data }) => {
  123. console.log('user REST getToken data', data)
  124. commit('setToken', data)
  125. })
  126. .catch(error => {
  127. console.warn('Issue with getToken', error)
  128. Promise.reject(error)
  129. })
  130. },
  131. getUser ({ dispatch, commit, state }) {
  132. return new Promise((resolve, reject) => {
  133. REST.get('/session/token').then(({ data }) => {
  134. console.log('csrftoken', data)
  135. commit('SetCsrftoken', data)
  136. console.log('state.csrf_token', state.csrf_token)
  137. const params = {
  138. token: state.csrf_token
  139. }
  140. REST.get(`/user/${state.uid}?_format=json`, params)
  141. .then(({ data }) => {
  142. console.log('user REST getUser data', data)
  143. console.log('roles', data.roles)
  144. commit('setUser', data)
  145. if (data.roles) {
  146. commit('setRoles', data.roles)
  147. }
  148. dispatch('getUserFlagColls')
  149. resolve()
  150. })
  151. .catch(error => {
  152. console.warn('Issue with getUser', error)
  153. Promise.reject(error)
  154. })
  155. })
  156. })
  157. },
  158. getUserFlagColls ({ dispatch, commit, state }) {
  159. // flags
  160. // REST.get('/flagging_collection/1?_format=json')
  161. // .then(( data ) => {
  162. // console.log('TEST FLAG REST data', data)
  163. // })
  164. // .catch(error => {
  165. // console.warn('Issue USER TEST FLAG REST', error)
  166. // Promise.reject(error)
  167. // })
  168. return MA.get('materio_flag/user_flagging_collections')
  169. .then(({ data }) => {
  170. console.log('user MA getFlags data', data)
  171. commit('setFlagColls', data)
  172. })
  173. .catch(error => {
  174. console.warn('Issue USER MA getFlags', error)
  175. Promise.reject(error)
  176. })
  177. },
  178. // https://drupal.stackexchange.com/questions/248539/cant-get-flagging-api-to-accept-post-request
  179. createFlagColl ({ dispatch, commit, state }, new_collection_name) {
  180. console.log('user createFlagColl', new_collection_name)
  181. return new Promise((resolve, reject) => {
  182. const params = {
  183. name: new_collection_name
  184. }
  185. MA.post('materio_flag/create_user_flagging_collection', params)
  186. .then(({ data }) => {
  187. console.log('user MA createFlagColl data', data)
  188. if (data.status) {
  189. dispatch('getUserFlagColls').then(() => {
  190. resolve()
  191. })
  192. }
  193. })
  194. .catch(error => {
  195. console.warn('Issue USER MA createFlag', error)
  196. reject(error)
  197. })
  198. })
  199. },
  200. deleteFlagColl ({ dispatch, commit, state }, flagcollid) {
  201. console.log('user deleteFlagColl', flagcollid)
  202. return new Promise((resolve, reject) => {
  203. const params = {
  204. flagcollid: flagcollid
  205. }
  206. MA.post('materio_flag/delete_user_flagging_collection', params)
  207. .then(({ data }) => {
  208. console.log('user MA deleteFlagColl data', data)
  209. dispatch('getUserFlagColls').then(() => {
  210. resolve()
  211. })
  212. })
  213. .catch(error => {
  214. console.warn('Issue USER MA createFlag', error)
  215. reject(error)
  216. })
  217. })
  218. },
  219. flag ({ dispatch, commit, state }, args) {
  220. console.log('user flag', args.uuid, args.collid)
  221. return new Promise((resolve, reject) => {
  222. const params = {
  223. flagid: state.flagcolls[args.collid].flag_id,
  224. uuid: args.uuid,
  225. flagcollid: args.collid
  226. }
  227. return MA.post('materio_flag/flag', params)
  228. .then(({ data }) => {
  229. console.log('user MA flag', data)
  230. dispatch('getUserFlagColls').then(() => {
  231. resolve()
  232. })
  233. })
  234. .catch(error => {
  235. console.warn('Issue USER MA flag', error)
  236. })
  237. })
  238. },
  239. unFlag ({ dispatch, commit, state }, args) {
  240. console.log('user unFlag', args.uuid, args.collid)
  241. return new Promise((resolve, reject) => {
  242. const params = {
  243. flagid: state.flagcolls[args.collid].flag_id,
  244. uuid: args.uuid,
  245. flagcollid: args.collid
  246. }
  247. return MA.post('materio_flag/unflag', params)
  248. .then(({ data }) => {
  249. console.log('user MA unFlag', data)
  250. dispatch('getUserFlagColls').then(() => {
  251. resolve()
  252. })
  253. })
  254. .catch(error => {
  255. console.warn('Issue USER MA unFlag', error)
  256. })
  257. })
  258. },
  259. userLogout ({ commit, state }) {
  260. const credentials = qs.stringify({
  261. token: state.csrf_token
  262. })
  263. REST.post('/user/logout', credentials)
  264. .then(resp => {
  265. console.log('userLogout resp', resp)
  266. commit('setLoggedOut')
  267. })
  268. .catch(error => {
  269. console.warn('Issue with logout', error)
  270. Promise.reject(error)
  271. })
  272. }
  273. }
  274. }