From 4d9680e79734c38cbc0343053523fbdccb002f6e Mon Sep 17 00:00:00 2001 From: Roger Braun <roger@rogerbraun.net> 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 @@ <div class="panel-body"> <form v-on:submit.prevent='oAuthLogin' class="login-form"> <div class='form-group'> - <button class="btn btn-default">Login with OAuth</button> + <div class='login-bottom'> + <div><router-link :to="{name: 'registration'}" v-if='registrationOpen' class='register'>{{$t('login.register')}}</router-link></div> + <button :disabled="loggingIn" type='submit' class='btn btn-default'>{{$t('login.login')}}</button> + </div> </div> </form> </div> 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