diff options
| author | Zephyrrus <[email protected]> | 2020-07-10 01:17:00 +0300 |
|---|---|---|
| committer | GitHub <[email protected]> | 2020-07-10 01:17:00 +0300 |
| commit | a721681944e9eb06742e5b3f71c71aed9c1c117d (patch) | |
| tree | 93ff9fd13a0434d91fb1ae7ca0da48d6929c4d00 /src/site/store/auth.js | |
| parent | feat: backend pagination for albums (diff) | |
| parent | refactor: finish refactoring all the components to use vuex (diff) | |
| download | host.fuwn.me-a721681944e9eb06742e5b3f71c71aed9c1c117d.tar.xz host.fuwn.me-a721681944e9eb06742e5b3f71c71aed9c1c117d.zip | |
Merge pull request #1 from Zephyrrus/feature/store_refactor
Feature/store refactor
Diffstat (limited to 'src/site/store/auth.js')
| -rw-r--r-- | src/site/store/auth.js | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/src/site/store/auth.js b/src/site/store/auth.js new file mode 100644 index 0000000..96631e2 --- /dev/null +++ b/src/site/store/auth.js @@ -0,0 +1,106 @@ +const getDefaultState = () => ({ + loggedIn: false, + user: { + id: null, + isAdmin: false, + username: null, + }, + token: null, +}); + +export const state = getDefaultState; + +export const getters = { + isLoggedIn: (state) => state.loggedIn, + getApiKey: (state) => state.user?.apiKey, + getToken: (state) => state.token, +}; + +export const actions = { + async verify({ commit, dispatch }) { + try { + const response = await this.$axios.$get('verify'); + commit('loginSuccess', response); + } catch (e) { + dispatch('alert/set', { text: e.message, error: true }, { root: true }); + } + }, + async login({ commit }, { username, password }) { + commit('loginRequest'); + + const data = await this.$axios.$post('auth/login', { username, password }); + this.$axios.setToken(data.token, 'Bearer'); + + commit('setToken', data.token); + commit('loginSuccess', { token: data.token, user: data.user }); + }, + async register(_, { username, password }) { + return this.$axios.$post('auth/register', { + username, + password, + }); + }, + async fetchCurrentUser({ commit, dispatch }) { + try { + const data = await this.$axios.$get('users/me'); + commit('setUser', data.user); + } catch (e) { + dispatch('alert/set', { text: e.message, error: true }, { root: true }); + } + }, + async changePassword({ dispatch }, { password, newPassword }) { + try { + const response = await this.$axios.$post('user/password/change', { + password, + newPassword, + }); + + return response; + } catch (e) { + dispatch('alert/set', { text: e.message, error: true }, { root: true }); + } + + return null; + }, + async requestAPIKey({ commit, dispatch }) { + try { + const response = await this.$axios.$post('user/apikey/change'); + commit('setApiKey', response.apiKey); + + return response; + } catch (e) { + dispatch('alert/set', { text: e.message, error: true }, { root: true }); + } + + return null; + }, + logout({ commit }) { + commit('logout'); + }, +}; + +export const mutations = { + setToken(state, token) { + state.token = token; + }, + setApiKey(state, apiKey) { + state.user.apiKey = apiKey; + }, + setUser(state, user) { + state.user = user; + }, + loginRequest(state) { + state.isLoading = true; + }, + loginSuccess(state, { user }) { + this.$cookies.set('token', state.token, { path: '/' }); + state.user = user; + state.loggedIn = true; + state.isLoading = false; + }, + logout(state) { + this.$cookies.remove('token', { path: '/' }); + // reset state to default + Object.assign(state, getDefaultState()); + }, +}; |