From e7a2a7267dbd8a4ee3d266d22249459d028569d6 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Wed, 22 May 2019 19:13:41 +0300 Subject: Proper clientId/secret/token caching, MastoAPI registration --- src/modules/oauth.js | 21 +++++++++++++++------ src/modules/users.js | 37 +++++++++++++------------------------ 2 files changed, 28 insertions(+), 30 deletions(-) (limited to 'src/modules') diff --git a/src/modules/oauth.js b/src/modules/oauth.js index 144ff830..242e29c3 100644 --- a/src/modules/oauth.js +++ b/src/modules/oauth.js @@ -1,17 +1,26 @@ const oauth = { state: { - client_id: false, - client_secret: false, - token: false + clientId: false, + clientSecret: false, + token: false, + clientToken: false }, mutations: { - setClientData (state, data) { - state.client_id = data.client_id - state.client_secret = data.client_secret + setClientData (state, { clientId, clientSecret }) { + state.clientId = clientId + state.clientSecret = clientSecret + }, + setClientToken (state, token) { + state.clientToken = token }, setToken (state, token) { state.token = token } + }, + getters: { + getToken: state => () => { + return state.token || state.clientToken + } } } diff --git a/src/modules/users.js b/src/modules/users.js index e72a657c..739b8b92 100644 --- a/src/modules/users.js +++ b/src/modules/users.js @@ -3,7 +3,6 @@ import userSearchApi from '../services/new_api/user_search.js' import { compact, map, each, merge, last, concat, uniq } from 'lodash' import { set } from 'vue' import { registerPushNotifications, unregisterPushNotifications } from '../services/push/push.js' -import oauthApi from '../services/new_api/oauth' import { humanizeErrors } from './errors' // TODO: Unify with mergeOrAdd in statuses.js @@ -368,31 +367,21 @@ const users = { let rootState = store.rootState - let response = await rootState.api.backendInteractor.register(userInfo) - if (response.ok) { - const data = { - oauth: rootState.oauth, - instance: rootState.instance.server - } - let app = await oauthApi.getOrCreateApp(data) - let result = await oauthApi.getTokenWithCredentials({ - app, - instance: data.instance, - username: userInfo.username, - password: userInfo.password - }) + try { + let data = await rootState.api.backendInteractor.register(userInfo) store.commit('signUpSuccess') - store.commit('setToken', result.access_token) - store.dispatch('loginUser', result.access_token) - } else { - const data = await response.json() - let errors = JSON.parse(data.error) + store.commit('setToken', data.access_token) + store.dispatch('loginUser', data.access_token) + } catch (e) { + let errors = e.message // replace ap_id with username - if (errors.ap_id) { - errors.username = errors.ap_id - delete errors.ap_id + if (typeof errors === 'object') { + if (errors.ap_id) { + errors.username = errors.ap_id + delete errors.ap_id + } + errors = humanizeErrors(errors) } - errors = humanizeErrors(errors) store.commit('signUpFailure', errors) throw Error(errors) } @@ -406,7 +395,7 @@ const users = { store.dispatch('disconnectFromChat') store.commit('setToken', false) store.dispatch('stopFetching', 'friends') - store.commit('setBackendInteractor', backendInteractorService()) + store.commit('setBackendInteractor', backendInteractorService(store.getters.getToken())) store.dispatch('stopFetching', 'notifications') store.commit('clearNotifications') store.commit('resetStatuses') -- cgit v1.2.3-70-g09d2 From af75c6d1ea392477c647708dcd0e712c514a1b60 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Thu, 13 Jun 2019 00:39:51 +0300 Subject: No longer sending extra data, renamed some properties --- src/boot/after_store.js | 4 ++-- src/components/login_form/login_form.js | 6 ++++-- src/components/oauth_callback/oauth_callback.js | 4 +++- src/modules/oauth.js | 10 +++++----- 4 files changed, 14 insertions(+), 10 deletions(-) (limited to 'src/modules') diff --git a/src/boot/after_store.js b/src/boot/after_store.js index caaede59..4bcd1fb5 100644 --- a/src/boot/after_store.js +++ b/src/boot/after_store.js @@ -246,9 +246,9 @@ const setConfig = async ({ store }) => { const checkOAuthToken = async ({ store }) => { return new Promise(async (resolve, reject) => { - if (store.state.oauth.token) { + if (store.state.oauth.userToken) { try { - await store.dispatch('loginUser', store.state.oauth.token) + await store.dispatch('loginUser', store.state.oauth.userToken) } catch (e) { console.log(e) } diff --git a/src/components/login_form/login_form.js b/src/components/login_form/login_form.js index 0097e18a..7d49fade 100644 --- a/src/components/login_form/login_form.js +++ b/src/components/login_form/login_form.js @@ -11,8 +11,9 @@ const LoginForm = { }, methods: { oAuthLogin () { + const { clientId } = this.$store.state.oauth const data = { - ...this.$store.state.oauth, + clientId, instance: this.$store.state.instance.server, commit: this.$store.commit } @@ -21,8 +22,9 @@ const LoginForm = { .then((app) => { oauthApi.login({ ...app, ...data }) }) }, submit () { + const { clientId } = this.$store.state.oauth const data = { - ...this.$store.state.oauth, + clientId, instance: this.$store.state.instance.server, commit: this.$store.commit } diff --git a/src/components/oauth_callback/oauth_callback.js b/src/components/oauth_callback/oauth_callback.js index 48ddd10d..2c6ca235 100644 --- a/src/components/oauth_callback/oauth_callback.js +++ b/src/components/oauth_callback/oauth_callback.js @@ -4,8 +4,10 @@ const oac = { props: ['code'], mounted () { if (this.code) { + const { clientId } = this.$store.state.oauth + oauth.getToken({ - ...this.$store.state.oauth, + clientId, instance: this.$store.state.instance.server, code: this.code }).then((result) => { diff --git a/src/modules/oauth.js b/src/modules/oauth.js index 242e29c3..4b233b21 100644 --- a/src/modules/oauth.js +++ b/src/modules/oauth.js @@ -2,8 +2,8 @@ const oauth = { state: { clientId: false, clientSecret: false, - token: false, - clientToken: false + appToken: false, + userToken: false }, mutations: { setClientData (state, { clientId, clientSecret }) { @@ -11,15 +11,15 @@ const oauth = { state.clientSecret = clientSecret }, setClientToken (state, token) { - state.clientToken = token + state.appToken = token }, setToken (state, token) { - state.token = token + state.userToken = token } }, getters: { getToken: state => () => { - return state.token || state.clientToken + return state.userToken || state.appToken } } } -- cgit v1.2.3-70-g09d2 From 6cd454687390947ccc7be02d03d5da008ab2607b Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Thu, 13 Jun 2019 00:44:25 +0300 Subject: comments --- src/modules/oauth.js | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'src/modules') diff --git a/src/modules/oauth.js b/src/modules/oauth.js index 4b233b21..332b8db2 100644 --- a/src/modules/oauth.js +++ b/src/modules/oauth.js @@ -2,7 +2,14 @@ const oauth = { state: { clientId: false, clientSecret: false, + /* App token is authentication for app without any user, used mostly for + * MastoAPI's registration of new users, stored so that we can fall back to + * it on logout + */ appToken: false, + /* User token is authentication for app with user, this is for every calls + * that need authorized user to be successful (i.e. posting, liking etc) + */ userToken: false }, mutations: { -- cgit v1.2.3-70-g09d2 From d551b398597b419e579fd90c2750efb4ed3c9593 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Thu, 13 Jun 2019 09:48:43 +0300 Subject: fix logged out post-update --- src/modules/oauth.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/modules') diff --git a/src/modules/oauth.js b/src/modules/oauth.js index 332b8db2..77ad2fa8 100644 --- a/src/modules/oauth.js +++ b/src/modules/oauth.js @@ -26,7 +26,9 @@ const oauth = { }, getters: { getToken: state => () => { - return state.userToken || state.appToken + // state.token is userToken with older name, coming from persistent state + // added here for smoother transition, otherwise user will be logged out + return state.userToken || state.token || state.appToken } } } -- cgit v1.2.3-70-g09d2 From dba8d8910cd390d059dfa0827156fa350ed1108c Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Thu, 13 Jun 2019 10:00:06 +0300 Subject: fix --- src/boot/after_store.js | 2 +- src/modules/oauth.js | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) (limited to 'src/modules') diff --git a/src/boot/after_store.js b/src/boot/after_store.js index 3530c3a9..77a5e976 100644 --- a/src/boot/after_store.js +++ b/src/boot/after_store.js @@ -248,7 +248,7 @@ const checkOAuthToken = async ({ store }) => { return new Promise(async (resolve, reject) => { if (store.state.oauth.userToken) { try { - await store.dispatch('loginUser', store.state.oauth.userToken) + await store.dispatch('loginUser', store.getters.getUserToken()) } catch (e) { console.log(e) } diff --git a/src/modules/oauth.js b/src/modules/oauth.js index 77ad2fa8..c87e4777 100644 --- a/src/modules/oauth.js +++ b/src/modules/oauth.js @@ -29,6 +29,11 @@ const oauth = { // state.token is userToken with older name, coming from persistent state // added here for smoother transition, otherwise user will be logged out return state.userToken || state.token || state.appToken + }, + getUserToken: state => () => { + // state.token is userToken with older name, coming from persistent state + // added here for smoother transition, otherwise user will be logged out + return state.userToken || state.token } } } -- cgit v1.2.3-70-g09d2 From acbeea59ff196c16e7992c80e56a638ce3a623b6 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Thu, 13 Jun 2019 10:11:17 +0300 Subject: rename mutations according to actual property names --- src/boot/after_store.js | 2 +- src/modules/oauth.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'src/modules') diff --git a/src/boot/after_store.js b/src/boot/after_store.js index 7661dbe6..c271d413 100644 --- a/src/boot/after_store.js +++ b/src/boot/after_store.js @@ -196,7 +196,7 @@ const getAppSecret = async ({ store }) => { return getOrCreateApp({ ...oauth, instance: instance.server, commit }) .then((app) => getClientToken({ ...app, instance: instance.server })) .then((token) => { - commit('setClientToken', token.access_token) + commit('setAppToken', token.access_token) commit('setBackendInteractor', backendInteractorService(store.getters.getToken())) }) } diff --git a/src/modules/oauth.js b/src/modules/oauth.js index c87e4777..11cb10fe 100644 --- a/src/modules/oauth.js +++ b/src/modules/oauth.js @@ -17,7 +17,7 @@ const oauth = { state.clientId = clientId state.clientSecret = clientSecret }, - setClientToken (state, token) { + setAppToken (state, token) { state.appToken = token }, setToken (state, token) { -- cgit v1.2.3-70-g09d2