{"version":3,"file":"authStore.mjs","sources":["../../../lib/store/modules/authStore.ts"],"sourcesContent":["// @ts-nocheck\n/* eslint-disable no-param-reassign, no-shadow, no-console */\nimport axios from 'axios';\nimport { cloneDeep, get } from 'lodash-es';\nimport createDraftApi from '../../utils/draftApi';\nimport createIdentifiersApi from '../../utils/identifiersApi';\nimport { decode } from '../../utils/jwt';\n\n\nlet draftApi;\nlet identifiersApi;\n\nconst state = {\n  authenticated: false,\n  rtptoken: '',\n  keycloak: null,\n  userData: {\n    authToken: '',\n    rtpToken: '',\n    userName: '',\n    userId: '',\n    permissions: [],\n    drafts: [],\n    roles: [],\n  },\n  isEditMode: false,\n  isDraft: false,\n};\n\nconst getters = {\n  securityAuth: state => state.authenticated,\n  getRTPToken: state => state.rtptoken,\n  getKeycloak: state => state.keycloak,\n  getUserData: state => state.userData,\n  getUserName: state => state.userData.userName,\n  getUserId: state => state.userData.userId,\n  /**\n   * @description Get all catalogs associated to the user where they have access to.\n   * @returns {Array} Array of catalogs\n   */\n  getUserCatalogs: state => state.userData.permissions.filter(\n    // User must have CRUD authorization\n    permission => ['dataset:update', 'dataset:delete', 'dataset:create']\n      .every(scope => permission.scopes.includes(scope)),\n  ),\n  /**\n   * @description Get all catalog IDs associated to the user where they have access to.\n   */\n  getUserCatalogIds: (state, getters) => {\n    return getters.getUserCatalogs.map(catalog => catalog.rsname)\n  },\n  getUserDrafts: state => state.userData.drafts,\n  getUserDraftIds: state => state.userData.drafts.map(dataset => dataset.id),\n  getIsEditMode: state => state.isEditMode,\n  getIsDraft: state => state.isDraft,\n};\n\nconst actions = {\n  authLogin({ commit }, authenticated) {\n    commit('SECURITY_AUTH', authenticated);\n  },\n  authLogout({ commit }) {\n    commit('SECURITY_AUTH', false);\n    commit('RTP_TOKEN', '');\n  },\n  rtpToken({ commit }, rtptoken) {\n    commit('RTP_TOKEN', rtptoken);\n  },\n  setKeycloak({ commit }, keycloak) {\n    commit('SET_KEYCLOAK', keycloak);\n  },\n  /**\n   * Updates user data according to an authentication token and by supplying neccessary\n   * information to retrieve tFhe user's permissions as well as their drafts.\n   * @param {*} commit\n   * @param {Object} params\n   * @returns {Promise<Object>}\n   */\n  async updateUserData({ commit, dispatch }, { authToken, rtpToken, hubUrl }) {\n    if (!authToken || !rtpToken) {\n      console.error('Missing authToken or rtpToken');\n      commit('UPDATE_USER_DATA_ERROR');\n      return {};\n    }\n    commit('UPDATE_USER_DATA_PENDING');\n\n    try {\n      if (!rtpToken) throw new Error('Failed to retrieve RTP token');\n\n      const decodedRtpToken = decode(rtpToken);\n      const permissions = get(decodedRtpToken, 'authorization.permissions', []);\n      const roles = get(decodedRtpToken, 'realm_access.roles', []);\n\n      commit('SET_USER_DATA', {\n        authToken,\n        rtpToken,\n        userName: decodedRtpToken.preferred_username,\n        userId: decodedRtpToken.sub,\n        permissions,\n        drafts: [],\n        roles,\n      });\n\n      draftApi = createDraftApi({ baseURL: hubUrl, authToken: rtpToken });\n      identifiersApi = createIdentifiersApi({ baseURL: hubUrl, authToken: rtpToken });\n\n      dispatch('updateUserDrafts');\n\n      commit('UPDATE_USER_DATA_SUCCESS');\n    } catch (ex) {\n      console.error(ex);\n      commit('UPDATE_USER_DATA_ERROR');\n    }\n    return {};\n  },\n  async updateUserDrafts({ commit, state }) {\n    const rtpToken = state.userData.rtpToken;\n    if (!rtpToken) throw new Error('Requires RTP token');\n\n    // Get associated drafts\n    const draftsResponse = await draftApi.getAllDatasetDrafts();\n    const drafts = draftsResponse.status === 200\n      && draftsResponse.data;\n    commit('SET_USER_DATA', { drafts });\n  },\n  async createDataset({ commit }, actionParams) {\n    const requestOptions = {\n      method: 'PUT',\n      url: actionParams.url,\n      headers: {\n        'Content-Type': 'text/turtle',\n        Authorization: `Bearer ${actionParams.token}`,\n      },\n      data: actionParams.data,\n    };\n\n    const result = await axios.request(requestOptions);\n\n    if (result.status === 201 || result.status === 204) {\n      commit('CHANGE_IS_EDIT_MODE', false);\n      commit('CHANGE_IS_DRAFT', false);\n    }\n  },\n  /**\n   * Creates a draft dataset\n   * @param {*} commit\n   * @param {object} dataset - The dataset object\n   * @param {string} dataset.id - The ID of the dataset\n   * @param {string} dataset.catalog - The ID of the dataset\n   * @param {object} dataset.description - The description object of the dataset containing different locales\n   * @param {object} dataset.title - The title object of the dataset containing different locales\n   * @param {object} dataset.body - the JSON-LD representation of the dataset\n   * @returns {Promise<Object>}\n   */\n  async createUserDraft({ commit }, {\n    id, catalog, description = { en: '' }, title = { en: '' }, body = {},\n  }) {\n    if (!draftApi) return {};\n\n    commit('UPDATE_USER_DATA_PENDING');\n    let response;\n    try {\n      response = await draftApi.createDatasetDraft({ id, catalogue: catalog, body });\n      commit('CREATE_USER_DRAFT', {\n        id, catalog, description, title, body,\n      });\n      commit('UPDATE_USER_DATA_SUCCESS');\n    } catch (ex) {\n      commit('UPDATE_USER_DATA_ERROR');\n      throw ex;\n    }\n\n    return response;\n  },\n  async deleteUserDraftById({ commit, state }, { id, catalog }) {\n    if (!draftApi) return {};\n    const draftExists = state.userData.drafts.find(draft => draft.id === id);\n    if (!draftExists) return {};\n\n    commit('UPDATE_USER_DATA_PENDING');\n    let response;\n    try {\n      response = await draftApi.deleteDatasetDraft({ id, catalogue: catalog });\n\n      commit('DELETE_USER_DRAFT', id);\n      commit('UPDATE_USER_DATA_SUCCESS');\n    } catch (ex) {\n      commit('UPDATE_USER_DATA_ERROR');\n      throw ex;\n    }\n\n    return response;\n  },\n  async publishUserDraftById({ commit, state }, { id, catalog, body = {} }) {\n    if (!draftApi) return {};\n    const draftExists = state.userData.drafts.find(draft => draft.id === id);\n    if (!draftExists) return {};\n\n    commit('UPDATE_USER_DATA_PENDING');\n    let response;\n    try {\n      response = await draftApi.publishDatasetDraft({ id, catalogue: catalog, body });\n      commit('DELETE_USER_DRAFT', id);\n      commit('UPDATE_USER_DATA_SUCCESS');\n      commit('CHANGE_IS_DRAFT', false);\n      commit('CHANGE_IS_EDIT_MODE', false);\n    } catch (ex) {\n      commit('UPDATE_USER_DATA_ERROR');\n      throw ex;\n    }\n\n    return response;\n  },\n  async duplicateDataset({ commit, state }, { id, newId, catalog, url }) {\n\n    console.log(id, catalog, url);\n\n    const requestOptions = {\n      method: 'GET',\n      url: url + 'drafts/datasets/' + id + '.nt?' + 'catalogue=' + catalog,\n    };\n\n    const result = await axios.request(requestOptions);\n\n    // if (!draftApi) return {};\n    // const draftExists = state.userData.drafts.find(draft => draft.id === id);\n    // if (!draftExists) return {};\n\n    // commit('UPDATE_USER_DATA_PENDING');\n    // let response;\n    // try {\n    //   response = await draftApi.publishDatasetDraft({ id, catalogue: catalog, body });\n    //   commit('DELETE_USER_DRAFT', id);\n    //   commit('UPDATE_USER_DATA_SUCCESS');\n    //   commit('CHANGE_IS_DRAFT', false);\n    //   commit('CHANGE_IS_EDIT_MODE', false);\n    // } catch (ex) {\n    //   commit('UPDATE_USER_DATA_ERROR');\n    //   throw ex;\n    // }\n\n    // return response;\n  },\n  async publishUserDraft({ dispatch }, { id, catalog, body }) {\n    return dispatch('publishUserDraftById', { id, catalog, body });\n  },\n  async putDatasetToDraft({ commit }, {\n    id, catalog, title, description,\n  }) {\n    if (!draftApi) return {};\n\n    commit('UPDATE_USER_DATA_PENDING');\n    let response;\n    try {\n      response = await draftApi.putDatasetToDraft({ id, catalogue: catalog });\n      commit('PUT_DATASET_TO_DRAFT', {\n        id, catalog, title, description,\n      });\n      commit('UPDATE_USER_DATA_SUCCESS');\n    } catch (ex) {\n      commit('UPDATE_USER_DATA_ERROR');\n      throw ex;\n    }\n\n    return response;\n  },\n  setIsEditMode({ commit }, bool) {\n    commit('CHANGE_IS_EDIT_MODE', bool);\n  },\n  setIsDraft({ commit }, bool) {\n    commit('CHANGE_IS_DRAFT', bool);\n  },\n  async createPersistentIdentifier({ commit }, { id, catalog, type = 'mock' }) {\n    if (!identifiersApi) return {};\n\n    commit('UPDATE_USER_DATA_PENDING');\n    let response;\n    try {\n      response = await identifiersApi.createPersistentIdentifier({ id, catalogue: catalog, type });\n      commit('UPDATE_USER_DATA_SUCCESS');\n    } catch (ex) {\n      commit('UPDATE_USER_DATA_ERROR');\n      throw ex;\n    }\n    return response;\n  },\n  populateDraftAndEdit({ commit }) {\n    commit('PREDEFINE_DRAFT_AND_EDIT');\n  },\n  async createCatalogue({ commit }, actionParams) {\n    const requestOptions = {\n      method: 'PUT',\n      url: actionParams.url,\n      headers: {\n        'Content-Type': 'text/turtle',\n        Authorization: `Bearer ${actionParams.token}`,\n      },\n      data: actionParams.data,\n    };\n\n    const result = await axios.request(requestOptions);\n\n    if (result.status === 201 | result.status === 204) {\n      commit('CHANGE_IS_EDIT_MODE', false);\n      commit('CHANGE_IS_DRAFT', false); // shouldn't be necessary but for safety\n\n      const updatedUserData = cloneDeep(state.userData);\n      const catalogPermission = {\n        rsid: \"\",\n        rsname: actionParams.id,\n        scopes: ['dataset:update', 'dataset:delete', 'dataset:create'],\n      }\n      updatedUserData.permissions.push(catalogPermission);\n      commit('SET_USER_DATA', updatedUserData);\n    }\n  }\n};\n\nconst mutations = {\n  SECURITY_AUTH(state, authenticated) {\n    state.authenticated = authenticated;\n  },\n  RTP_TOKEN(state, rtpToken) {\n    state.rtptoken = rtpToken;\n  },\n  SET_KEYCLOAK(state, keycloak) {\n    state.keycloak = keycloak;\n  },\n  SET_USER_DATA(state, userData) {\n    state.userData = { ...state.userData, ...userData };\n  },\n  UPDATE_USER_DATA_PENDING(state) { state.userData.pending = true; },\n  UPDATE_USER_DATA_SUCCESS(state) { state.userData.pending = false; },\n  UPDATE_USER_DATA_ERROR(state) { state.userData.pending = false; },\n\n  CREATE_USER_DRAFT(state, {\n    id, catalog, title, description,\n  }) {\n    state.userData.drafts.push({\n      id,\n      catalog,\n      title,\n      description,\n    });\n  },\n  PUT_DATASET_TO_DRAFT(state, {\n    id, catalog, title, description,\n  }) {\n    state.userData.drafts.push({\n      id,\n      catalog,\n      title,\n      description,\n    });\n  },\n  DELETE_USER_DRAFT(state, id) {\n    const draftIndex = state.userData.drafts.findIndex(draft => draft.id === id);\n    if (draftIndex > -1) {\n      state.userData.drafts.splice(draftIndex, 1);\n    }\n  },\n  CHANGE_IS_EDIT_MODE(state, bool) {\n    state.isEditMode = bool;\n    localStorage.setItem('dpi_editmode', bool);\n  },\n  CHANGE_IS_DRAFT(state, bool) {\n    state.isDraft = bool;\n    localStorage.setItem('dpi_draftmode', bool);\n  },\n  PREDEFINE_DRAFT_AND_EDIT(state) {\n    const localStorageKeys = Object.keys(localStorage);\n    if (localStorageKeys.includes('dpi_editmode')) {\n      state.isEditMode = JSON.parse(localStorage.getItem('dpi_editmode'));\n    }\n    if (localStorageKeys.includes('dpi_draftmode')) {\n      state.isDraft = JSON.parse(localStorage.getItem('dpi_draftmode'));\n    }\n  }\n};\n\nconst module = {\n  namespaced: true,\n  state,\n  actions,\n  mutations,\n  getters,\n};\n\nexport default module;\n"],"names":["draftApi","identifiersApi","state","getters","permission","scope","catalog","dataset","actions","commit","authenticated","rtptoken","keycloak","dispatch","authToken","rtpToken","hubUrl","decodedRtpToken","decode","permissions","get","roles","createDraftApi","createIdentifiersApi","ex","draftsResponse","drafts","actionParams","requestOptions","result","axios","id","description","title","body","response","draft","newId","url","bool","type","updatedUserData","cloneDeep","catalogPermission","mutations","userData","draftIndex","localStorageKeys","module"],"mappings":"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"}