From 4d9680e79734c38cbc0343053523fbdccb002f6e Mon Sep 17 00:00:00 2001 From: Roger Braun Date: Tue, 6 Nov 2018 21:48:05 +0100 Subject: [PATCH] Re-activate registration, use oauth password flow to fetch token. --- src/components/login_form/login_form.vue | 5 ++++- src/components/registration/registration.js | 21 ++++++++++++++++++--- src/services/new_api/oauth.js | 20 +++++++++++++++++++- 3 files changed, 41 insertions(+), 5 deletions(-) diff --git a/src/components/login_form/login_form.vue b/src/components/login_form/login_form.vue index aaaca777..db389716 100644 --- a/src/components/login_form/login_form.vue +++ b/src/components/login_form/login_form.vue @@ -7,7 +7,10 @@
diff --git a/src/components/registration/registration.js b/src/components/registration/registration.js index 8f59878d..cdcc33c9 100644 --- a/src/components/registration/registration.js +++ b/src/components/registration/registration.js @@ -1,3 +1,5 @@ +import oauthApi from '../../services/new_api/oauth.js' + const registration = { data: () => ({ user: {}, @@ -25,9 +27,22 @@ const registration = { this.$store.state.api.backendInteractor.register(this.user).then( (response) => { if (response.ok) { - this.$store.dispatch('loginUser', this.user) - this.$router.push('/main/all') - this.registering = false + const data = { + oauth: this.$store.state.oauth, + instance: this.$store.state.instance.server + } + oauthApi.getOrCreateApp(data).then((app) => { + oauthApi.getTokenWithCredentials( + {app, + instance: data.instance, + username: this.user.username, + password: this.user.password}) + .then((result) => { + this.$store.commit('setToken', result.access_token) + this.$store.dispatch('loginUser', result.access_token) + this.$router.push('/main/friends') + }) + }) } else { this.registering = false response.json().then((data) => { diff --git a/src/services/new_api/oauth.js b/src/services/new_api/oauth.js index becee3d0..9e656507 100644 --- a/src/services/new_api/oauth.js +++ b/src/services/new_api/oauth.js @@ -40,6 +40,22 @@ const login = (args) => { }) } +const getTokenWithCredentials = ({app, instance, username, password}) => { + const url = `${instance}/oauth/token` + const form = new window.FormData() + + form.append('client_id', app.client_id) + form.append('client_secret', app.client_secret) + form.append('grant_type', 'password') + form.append('username', username) + form.append('password', password) + + return window.fetch(url, { + method: 'POST', + body: form + }).then((data) => data.json()) +} + const getToken = ({app, instance, code}) => { const url = `${instance}/oauth/token` const form = new window.FormData() @@ -58,7 +74,9 @@ const getToken = ({app, instance, code}) => { const oauth = { login, - getToken + getToken, + getTokenWithCredentials, + getOrCreateApp } export default oauth