From e0ac3842d5ca3e03dc1d14d51b14a89b94902cc9 Mon Sep 17 00:00:00 2001
From: "robinwilliam.hundt" <robinwilliam.hundt@stud.uni-goettingen.de>
Date: Thu, 5 Apr 2018 12:24:31 +0200
Subject: [PATCH] Added registration option on login page

---
 frontend/src/api.js                        | 14 ++++-
 frontend/src/components/RegisterDialog.vue | 59 ++++++++++++++++++++++
 frontend/src/pages/Login.vue               | 14 +++++
 3 files changed, 85 insertions(+), 2 deletions(-)
 create mode 100644 frontend/src/components/RegisterDialog.vue

diff --git a/frontend/src/api.js b/frontend/src/api.js
index b35bce86..b35d6811 100644
--- a/frontend/src/api.js
+++ b/frontend/src/api.js
@@ -13,9 +13,19 @@ function getInstanceBaseUrl () {
 }
 
 let ax = axios.create({
-  baseURL: getInstanceBaseUrl(),
-  headers: {'Authorization': 'JWT ' + sessionStorage.getItem('token')}
+  baseURL: getInstanceBaseUrl()
+  // headers: {'Authorization': 'JWT ' + sessionStorage.getItem('token')}
 })
+{
+  let token = sessionStorage.getItem('token')
+  if (token) {
+    ax.defaults.headers['Authorization'] = `JWT ${token}`
+  }
+}
+
+export async function registerTutor (credentials) {
+  return ax.post('/api/tutor/register/', credentials)
+}
 
 export async function fetchJWT (credentials) {
   const token = (await ax.post('/api/get-token/', credentials)).data.token
diff --git a/frontend/src/components/RegisterDialog.vue b/frontend/src/components/RegisterDialog.vue
new file mode 100644
index 00000000..8c2425da
--- /dev/null
+++ b/frontend/src/components/RegisterDialog.vue
@@ -0,0 +1,59 @@
+<template>
+  <v-card>
+    <v-card-title class="title">
+      Register
+    </v-card-title>
+    <v-card-text>
+      <v-text-field
+        label="Username"
+        required
+        autofocus
+        v-model="credentials.username"
+      />
+      <v-text-field
+        label="Password"
+        required
+        type="password"
+        v-model="credentials.password"
+      />
+    </v-card-text>
+    <v-card-actions class="justify-center">
+      <v-btn flat :loading="loading" @click="register">submit</v-btn>
+    </v-card-actions>
+  </v-card>
+</template>
+
+<script>
+  import { registerTutor } from '@/api'
+
+  export default {
+    name: 'register-dialog',
+    data () {
+      return {
+        credentials: {
+          username: '',
+          password: ''
+        },
+        loading: false
+      }
+    },
+    methods: {
+      register () {
+        this.loading = true
+        registerTutor(this.credentials).then(() => {
+          this.$emit('registered', this.credentials)
+        }).catch(() => {
+          this.$notify({
+            title: 'Unable to register',
+            text: "Couldn't register a tutor account.",
+            type: 'error'
+          })
+        }).finally(() => { this.loading = false })
+      }
+    }
+  }
+</script>
+
+<style scoped>
+
+</style>
diff --git a/frontend/src/pages/Login.vue b/frontend/src/pages/Login.vue
index 5ae6b8e2..13fd519f 100644
--- a/frontend/src/pages/Login.vue
+++ b/frontend/src/pages/Login.vue
@@ -1,6 +1,9 @@
 <template>
   <v-container fill-height>
     <v-layout align-center justify-center>
+      <v-dialog v-model="registerDialog" max-width="fit-content" class="pa-4">
+        <register-dialog @registered="registered($event)"/>
+      </v-dialog>
       <v-flex text-xs-center xs8 sm6 md4 lg2>
         <img v-if="production" :src="productionBrandUrl"/>
         <img v-else src="../assets/brand.png"/>
@@ -27,6 +30,7 @@
             type="password"
             required
           />
+          <v-btn @click="registerDialog = true">register</v-btn>
           <v-btn :loading="loading" type="submit" color="primary">Access</v-btn>
         </v-form>
       </v-flex>
@@ -37,8 +41,11 @@
 
 <script>
   import {mapActions, mapState} from 'vuex'
+  import RegisterDialog from '@/components/RegisterDialog'
+  import { authMut } from '@/store/modules/authentication'
 
   export default {
+    components: {RegisterDialog},
     name: 'grady-login',
     data () {
       return {
@@ -46,6 +53,7 @@
           username: '',
           password: ''
         },
+        registerDialog: false,
         loading: false
       }
     },
@@ -76,6 +84,12 @@
           this.getJWTTimeDelta()
           this.loading = false
         }).catch(() => { this.loading = false })
+      },
+      registered (credentials) {
+        this.registerDialog = false
+        this.credentials.username = credentials.username
+        this.credentials.password = credentials.password
+        this.$store.commit(authMut.SET_MESSAGE, 'Your account is being activated. Please wait.')
       }
     }
   }
-- 
GitLab