🐛 (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 { RepoBase } from '@/modules/repo/interfaces/RepoBase'
import { useAsyncState } from '@vueuse/core' import { useAsyncState } from '@vueuse/core'
import { useGitHubLogin } from '@/hooks/useGitHubLogin.hook' import { useGitHubLogin } from '@/hooks/useGitHubLogin.hook'
import { getOctokit } from '@/modules/repo/services/octo'
export const useRepos = () => { export const useRepos = () => {
const { username, accessToken } = useGitHubLogin() const { username, accessToken } = useGitHubLogin()
@@ -10,9 +10,7 @@ export const useRepos = () => {
return [] return []
} }
const octokit = new Octokit({ const octokit = await getOctokit()
auth: accessToken.value
})
const repoList = await octokit.request('GET /search/repositories', { const repoList = await octokit.request('GET /search/repositories', {
q: `user:${username.value}`, 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 { useMarkdown } from '@/hooks/useMarkdown.hook'
import { useNoteCache } from '@/modules/note/hooks/useNoteCache' import { useNoteCache } from '@/modules/note/hooks/useNoteCache'
import { RepoFile } from '@/modules/repo/interfaces/RepoFile' import { RepoFile } from '@/modules/repo/interfaces/RepoFile'
import { UserSettings } from '@/modules/repo/interfaces/UserSettings' import { UserSettings } from '@/modules/repo/interfaces/UserSettings'
import { refreshToken } from '@/modules/user/service/signIn' import { getOctokit } from '@/modules/repo/services/octo'
import { Octokit } from '@octokit/rest'
export const getFiles = async ( export const getFiles = async (
owner: string, owner: string,
@@ -13,13 +11,7 @@ export const getFiles = async (
if (!owner || !repo) { if (!owner || !repo) {
return [] return []
} }
await refreshToken() const octokit = await getOctokit()
const { accessToken } = useGitHubLogin()
const octokit = new Octokit({
auth: accessToken.value
})
const commits = await octokit.request('GET /repos/{owner}/{repo}/commits', { const commits = await octokit.request('GET /repos/{owner}/{repo}/commits', {
owner, owner,
@@ -56,11 +48,7 @@ export const getMainReadme = async (owner: string, repo: string) => {
const cachedReadme = await getCachedNote() const cachedReadme = await getCachedNote()
try { try {
await refreshToken() const octokit = await getOctokit()
const { accessToken } = useGitHubLogin()
const octokit = new Octokit({
auth: accessToken.value
})
const README = await octokit.repos.getReadme({ const README = await octokit.repos.getReadme({
owner, owner,
@@ -105,12 +93,7 @@ export const getFileContent = async (
repo: string, repo: string,
sha: string sha: string
) => { ) => {
await refreshToken() const octokit = await getOctokit()
const { accessToken } = useGitHubLogin()
const octokit = new Octokit({
auth: accessToken.value
})
if (!user || !repo) { if (!user || !repo) {
null null

View File

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

View File

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