🐛 (refresh) refresh correct token

This commit is contained in:
Julien Calixte
2021-05-02 18:33:46 +02:00
parent 56432d81c8
commit d33fa18b9c
5 changed files with 64 additions and 37 deletions

View File

@@ -1,7 +1,7 @@
import { Octokit } from '@octokit/rest'
import { RepoBase } from '@/modules/repo/interfaces/RepoBase'
import { useAsyncState } from '@vueuse/core'
import { useGitHubLogin } from '@/hooks/useGitHubLogin.hook'
import { getOctokit } from '@/modules/repo/services/octo'
export const useRepos = () => {
const { username, accessToken } = useGitHubLogin()
@@ -10,9 +10,7 @@ export const useRepos = () => {
return []
}
const octokit = new Octokit({
auth: accessToken.value
})
const octokit = await getOctokit()
const repoList = await octokit.request('GET /search/repositories', {
q: `user:${username.value}`,

View File

@@ -0,0 +1,37 @@
import { useGitHubLogin } from '@/hooks/useGitHubLogin.hook'
import { needToRefreshToken, refreshToken } from '@/modules/user/service/signIn'
import { Octokit } from '@octokit/rest'
let refreshingToken = false
let octokit = new Octokit()
const sleep = async (ms: number) => {
return new Promise((resolve) => setTimeout(resolve, ms))
}
export const getOctokit = async (): Promise<Octokit> => {
const { accessToken } = useGitHubLogin()
octokit = new Octokit({
auth: accessToken.value
})
if (refreshingToken) {
await sleep(100)
return getOctokit()
}
if (!refreshingToken) {
refreshingToken = true
if (await needToRefreshToken()) {
const accessToken = await refreshToken()
if (accessToken) {
octokit = new Octokit({
auth: accessToken?.token
})
}
}
refreshingToken = false
}
return octokit
}

View File

@@ -1,10 +1,8 @@
import { useGitHubLogin } from '@/hooks/useGitHubLogin.hook'
import { useMarkdown } from '@/hooks/useMarkdown.hook'
import { useNoteCache } from '@/modules/note/hooks/useNoteCache'
import { RepoFile } from '@/modules/repo/interfaces/RepoFile'
import { UserSettings } from '@/modules/repo/interfaces/UserSettings'
import { refreshToken } from '@/modules/user/service/signIn'
import { Octokit } from '@octokit/rest'
import { getOctokit } from '@/modules/repo/services/octo'
export const getFiles = async (
owner: string,
@@ -13,13 +11,7 @@ export const getFiles = async (
if (!owner || !repo) {
return []
}
await refreshToken()
const { accessToken } = useGitHubLogin()
const octokit = new Octokit({
auth: accessToken.value
})
const octokit = await getOctokit()
const commits = await octokit.request('GET /repos/{owner}/{repo}/commits', {
owner,
@@ -56,11 +48,7 @@ export const getMainReadme = async (owner: string, repo: string) => {
const cachedReadme = await getCachedNote()
try {
await refreshToken()
const { accessToken } = useGitHubLogin()
const octokit = new Octokit({
auth: accessToken.value
})
const octokit = await getOctokit()
const README = await octokit.repos.getReadme({
owner,
@@ -105,12 +93,7 @@ export const getFileContent = async (
repo: string,
sha: string
) => {
await refreshToken()
const { accessToken } = useGitHubLogin()
const octokit = new Octokit({
auth: accessToken.value
})
const octokit = await getOctokit()
if (!user || !repo) {
null

View File

@@ -28,10 +28,8 @@ export const useUserRepoStore = defineStore({
async setUserRepo(newUser: string, newRepo: string) {
this.user = newUser
this.repo = newRepo
const [readme, files] = await Promise.all([
getMainReadme(newUser, newRepo),
getFiles(newUser, newRepo)
])
const readme = await getMainReadme(newUser, newRepo)
const files = await getFiles(newUser, newRepo)
this.userSettings = await getUserSettingsContent(newUser, newRepo, files)
this.readme = readme

View File

@@ -21,6 +21,19 @@ export const signIn = async (
return body
}
export const needToRefreshToken = async () => {
const accessToken = await data.get<
DataType.GithubAccessToken,
GithubAccessToken
>(data.generateId(DataType.GithubAccessToken, personalTokenId))
if (!accessToken) {
return false
}
return new Date(accessToken.expirationDate) <= new Date()
}
export const refreshToken = async () => {
const accessToken = await data.get<
DataType.GithubAccessToken,
@@ -31,13 +44,9 @@ export const refreshToken = async () => {
return null
}
console.log(
new Date(accessToken.expirationDate) >= new Date(),
accessToken.expirationDate,
accessToken
)
console.log(accessToken.refreshToken)
if (new Date(accessToken.expirationDate) >= new Date()) {
if (await needToRefreshToken()) {
const authenticationServerURL = new URL(AUTHENTICATION_SERVER)
authenticationServerURL.searchParams.set('type', 'refresh')
authenticationServerURL.searchParams.set('code', accessToken.refreshToken)
@@ -47,7 +56,7 @@ export const refreshToken = async () => {
| GithubToken
| GithubTokenError
console.log(response)
console.log(githubToken)
if ('error' in githubToken) {
return null
@@ -94,8 +103,10 @@ export const saveAccessToken = async (githubToken: GithubToken) => {
username: ''
}
console.log(accessToken)
const octokit = new Octokit({
auth: accessToken.token
auth: accessToken?.token
})
const user = await octokit.request('GET /user')