Check local access token and redirect to timeline

This commit is contained in:
AkiraFukushima 2018-03-08 18:36:09 +09:00
parent 77d50b1923
commit c2a982b503
10 changed files with 88 additions and 1 deletions

5
package-lock.json generated
View File

@ -8068,6 +8068,11 @@
"integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
"dev": true
},
"is-empty": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/is-empty/-/is-empty-1.2.0.tgz",
"integrity": "sha1-3pu1snhzigWgsJpX4ftNSjQan2s="
},
"is-equal-shallow": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",

View File

@ -59,6 +59,7 @@
"axios": "^0.16.1",
"electron-json-storage": "^4.0.2",
"element-ui": "^2.2.1",
"is-empty": "^1.2.0",
"mastodon-api": "^1.3.0",
"vue": "^2.3.3",
"vue-electron": "^1.0.6",

View File

@ -1,5 +1,6 @@
import Mastodon from 'mastodon-api'
import storage from 'electron-json-storage'
import empty from 'is-empty'
const appName = 'whalebird'
const scope = 'read write follow'
@ -46,5 +47,20 @@ export default class Authentication {
})
}
loadTokenFromLocal () {
return new Promise((resolve, reject) => {
storage.get('token', (err, json) => {
if (err) return reject(err)
if (empty(json)) return reject(new EmptyTokenError())
return resolve(json.accessToken)
})
})
}
// TODO: Refresh access token when expired
}
class EmptyTokenError {
constructor (message) {
this.message = message
}
}

View File

@ -67,6 +67,17 @@ ipcMain.on('get-access-token', (event, code) => {
.then(token => console.log(token))
})
ipcMain.on('load-access-token', (event, _) => {
auth.loadTokenFromLocal()
.catch((err) => {
console.errror(err)
event.sender.send('error-access-token', err)
})
.then((token) => {
event.sender.send('local-access-token', token)
})
})
/**
* Auto Updater
*

View File

@ -7,6 +7,20 @@
<script>
export default {
name: 'login',
created () {
this.$store.dispatch('Login/checkToken')
.catch(() => {
this.$message({
message: 'Please login',
type: 'error'
})
})
.then(() => {
// TODO: redirect to home timeline
console.log('ok')
this.$router.push({ path: '/timelinespace' })
})
},
methods: {
login () {
this.$store.dispatch('Login/fetchLogin')

View File

@ -0,0 +1,14 @@
<template>
<div id="timeline_space">
timeline
</div>
</template>
<script>
export default {
name: 'timeline-space'
}
</script>
<style lang="scss" scoped>
</style>

View File

@ -20,6 +20,11 @@ export default new Router({
name: 'authorize',
component: require('@/components/Authorize').default
},
{
path: '/timelinespace',
name: 'timeline-space',
component: require('@/components/TimelineSpace').default
},
{
path: '*',
redirect: '/'

View File

@ -5,6 +5,17 @@ const Login = {
state: {},
mutations: {},
actions: {
checkToken ({ commit }) {
return new Promise((resolve, reject) => {
ipcRenderer.send('load-access-token', 'load')
ipcRenderer.on('error-access-token', (event, err) => {
reject(err)
})
ipcRenderer.on('local-access-token', (event, _) => {
resolve()
})
})
},
fetchLogin ({ commit }) {
return new Promise((resolve, reject) => {
ipcRenderer.send('get-auth-link', 'get')

View File

@ -0,0 +1,8 @@
const TimelineSpace = {
namespaced: true,
state: {},
mutations: {},
actions: {}
}
export default TimelineSpace

View File

@ -4,6 +4,7 @@ import createLogger from 'vuex/dist/logger'
import Login from './Login'
import Authorize from './Authorize'
import TimelineSpace from './TimelineSpace'
Vue.use(Vuex)
@ -14,6 +15,7 @@ export default new Vuex.Store({
: [],
modules: {
Login,
Authorize
Authorize,
TimelineSpace
}
})