🐛 (refresh) refresh correct token
This commit is contained in:
@@ -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}`,
|
||||||
|
|||||||
37
src/modules/repo/services/octo.ts
Normal file
37
src/modules/repo/services/octo.ts
Normal 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
|
||||||
|
}
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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')
|
||||||
|
|||||||
Reference in New Issue
Block a user