Feat/GitHub auth (#6)

*  (sign in) create sign in to github button

*  (github login) login via github button

* 💄 (homepage)

*  (date fns)

*  (github login) refresh token when token expired
This commit is contained in:
Julien Calixte
2021-05-01 23:35:38 +02:00
committed by GitHub
parent f934562834
commit 0e52b16b1b
12 changed files with 259 additions and 34 deletions

View File

@@ -1,11 +1,14 @@
import { computed, ref } from 'vue'
import { DataType } from '@/data/DataType.enum'
import { GithubAccessToken } from '@/data/models/GithubAccessToken'
import { data } from '@/data/data'
import { confirmMessage } from '@/utils/notif'
import { GithubAccessToken } from '@/data/models/GithubAccessToken'
import { Octokit } from '@octokit/rest'
import { GithubToken } from '@/modules/user/interfaces/GithubToken'
import { addMilliseconds } from 'date-fns'
const personalAccessTokenId = 'PAT'
const personalTokenId = 'token'
const username = ref<string | null>(null)
const accessToken = ref<string | null>(null)
@@ -16,9 +19,9 @@ export const useGitHubLogin = () => {
const response = await data.get<
DataType.GithubAccessToken,
GithubAccessToken
>(data.generateId(DataType.GithubAccessToken, personalAccessTokenId))
>(data.generateId(DataType.GithubAccessToken, personalTokenId))
username.value = response?.username || ''
accessToken.value = response?.personalAccessToken || ''
accessToken.value = response?.token || ''
return response
}
@@ -28,24 +31,45 @@ export const useGitHubLogin = () => {
getAccessToken()
}
const saveCredentials = async (username: string, token: string) => {
const saveCredentials = async (githubToken: GithubToken) => {
const actualPAT = await getAccessToken()
const personalAccessToken: GithubAccessToken = {
const accessToken: GithubAccessToken = {
...actualPAT,
_id: data.generateId(DataType.GithubAccessToken, personalAccessTokenId),
_id: data.generateId(DataType.GithubAccessToken, personalTokenId),
$type: DataType.GithubAccessToken,
username,
personalAccessToken: token
token: githubToken.access_token,
expiresIn: githubToken.expires_in,
expirationDate: addMilliseconds(
new Date(),
githubToken.expires_in
).toISOString(),
refreshToken: githubToken.refresh_token,
refreshTokenExpiresIn: githubToken.refresh_token_expires_in,
refreshTokenExpirationDate: addMilliseconds(
new Date(),
githubToken.refresh_token_expires_in
).toISOString(),
username: ''
}
await data.add(personalAccessToken)
console.log(accessToken)
const octokit = new Octokit({
auth: accessToken.token
})
const user = await octokit.request('GET /user')
accessToken.username = user.data.login
username.value = accessToken.username
await data.add(accessToken)
getAccessToken()
confirmMessage('token saved!')
confirmMessage(`${accessToken.username} is logged in!`)
}
return {
isLogged: !!username.value && !!accessToken.value,
isLogged: !!accessToken.value,
isReady: computed(() => accessToken.value !== null),
username,
accessToken,