user.js 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  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. };