From 8769fc4dc19447f67a42eb941fb43ba7223772eb Mon Sep 17 00:00:00 2001
From: Arne Schauf <git@asw.io>
Date: Sat, 3 Mar 2018 01:06:44 +0100
Subject: upgrade quasar to latest version

---
 src/components/ApiAuth.vue | 113 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 113 insertions(+)
 create mode 100644 src/components/ApiAuth.vue

(limited to 'src/components/ApiAuth.vue')

diff --git a/src/components/ApiAuth.vue b/src/components/ApiAuth.vue
new file mode 100644
index 0000000..d2771c7
--- /dev/null
+++ b/src/components/ApiAuth.vue
@@ -0,0 +1,113 @@
+<template>
+  <div>
+    <div v-if="!$store.getters['user/loggedIn']">
+      <div v-if="useLarryLogin" class="group">
+        <h5>Larry Login</h5>
+        <p v-if="authError" class="text-negative">
+          <span v-if="typeof authError === 'object'">Email or password {{ authError['email or password'] }}</span>
+          <span v-else>{{ authError }}</span>
+        </p>
+        <div class="group">
+          <q-input @keyup.enter="larryLogin" :error="authError !== undefined" v-model="email" name="user" float-label="Email" />
+          <q-input @keyup.enter="larryLogin" :error="authError !== undefined" v-model="password" name="pass" type="password" float-label="Password" />
+          <q-btn color="positive" @click="larryLogin" icon="fa-sign-in">Larry login</q-btn>
+        </div>
+        <div class="text-right">
+          <q-btn color="tertiary" small outline @click="useLarryLogin = false">Log in via Clonkspot</q-btn>
+        </div>
+      </div>
+      <div v-else class="group">
+        <q-btn color="positive" @click="clonkspotLogin">Log in via Clonkspot</q-btn>
+        <p class="text-negative" v-if="authFailed">Oups, something went wrong. Please try again</p>
+        <div class="text-right">
+          <q-btn color="tertiary" small outline @click="useLarryLogin = true">Log in via Larry</q-btn>
+        </div>
+      </div>
+    </div>
+    <div v-else>
+      <q-card>
+        <q-card-title class="bg-positive text-white">
+          Hi {{ $store.state.user.decodedToken.username }}
+        </q-card-title>
+        <q-card-separator />
+        <q-card-main>
+          <p>You have successfully logged in!</p>
+          <q-btn color="negative" outline small icon="fa-sign-out" @click="$store.commit('user/logout')">Logout</q-btn>
+        </q-card-main>
+      </q-card>
+    </div>
+  </div>
+</template>
+
+<script>
+  import {
+    openURL,
+    LocalStorage,
+  } from 'quasar'
+
+  export default {
+    data () {
+      return {
+        email: '',
+        password: '',
+        authError: undefined,
+        token: null,
+        useLarryLogin: false,
+        authWindow: null,
+        authFailed: false,
+      }
+    },
+    mounted () {
+      let token = LocalStorage.get.item('authToken')
+      if (token) {
+        this.$store.commit('user/setAuthToken', { authToken: token })
+      }
+    },
+    methods: {
+      clonkspotLogin () {
+        this.authWindow = openURL(`${this.$http.defaults.baseURL}/auth/clonkspot`)
+        this.checkTokenLoop()
+      },
+      larryLogin () {
+        let that = this
+        let params = {
+          user: {
+            email: this.email,
+            password: this.password,
+          }
+        }
+        this.authError = undefined
+        this.$http.post('/auth/login', params).then((response) => {
+          that.$store.commit('user/setAuthToken', { authToken: response.data.user.token })
+          that.email = ''
+          that.password = ''
+        }).catch((error) => {
+          if (error.response && error.response.data) {
+            that.authError = error.response.data.errors
+          }
+          else if (error.message) {
+            that.authError = error.message
+          }
+          else {
+            that.authError = 'Failed to log in'
+            console.error({error})
+          }
+        })
+      },
+      checkTokenLoop (retryCount) {
+        let token = LocalStorage.get.item('authToken')
+        if (token) {
+          this.$store.commit('user/setAuthToken', { authToken: token })
+          this.authWindow.close()
+          this.authWindow = null
+        }
+        else {
+          setTimeout(this.checkTokenLoop, 500)
+        }
+      },
+    },
+  }
+</script>
+
+<style lang="styl" type="text/stylus" scoped>
+</style>
-- 
cgit v1.2.3-54-g00ecf

