✨ (login) save login
This commit is contained in:
52
src/hooks/useGitHubLogin.hook.ts
Normal file
52
src/hooks/useGitHubLogin.hook.ts
Normal file
@@ -0,0 +1,52 @@
|
||||
import { computed, ref } from 'vue'
|
||||
|
||||
import { DataType } from '@/data/DataType.enum'
|
||||
import { GithubAccessToken } from '@/data/models/GithubAccessToken'
|
||||
import { data } from '@/data/data'
|
||||
|
||||
const personalAccessTokenId = 'PAT'
|
||||
const username = ref<string | null>(null)
|
||||
const accessToken = ref<string | null>(null)
|
||||
|
||||
let init = true
|
||||
|
||||
export const useGitHubLogin = () => {
|
||||
const getAccessToken = async () => {
|
||||
const response = await data.get<
|
||||
DataType.GithubAccessToken,
|
||||
GithubAccessToken
|
||||
>(data.generateId(DataType.GithubAccessToken, personalAccessTokenId))
|
||||
username.value = response?.username || ''
|
||||
accessToken.value = response?.personalAccessToken || ''
|
||||
|
||||
return response
|
||||
}
|
||||
|
||||
if (init) {
|
||||
init = false
|
||||
getAccessToken()
|
||||
}
|
||||
|
||||
const saveCredentials = async (username: string, token: string) => {
|
||||
const actualPAT = await getAccessToken()
|
||||
|
||||
const personalAccessToken: GithubAccessToken = {
|
||||
...actualPAT,
|
||||
_id: data.generateId(DataType.GithubAccessToken, personalAccessTokenId),
|
||||
$type: DataType.GithubAccessToken,
|
||||
username,
|
||||
personalAccessToken: token
|
||||
}
|
||||
|
||||
await data.add(personalAccessToken)
|
||||
getAccessToken()
|
||||
}
|
||||
|
||||
return {
|
||||
isLogged: !!username.value && !!accessToken.value,
|
||||
isReady: computed(() => accessToken.value !== null),
|
||||
username,
|
||||
accessToken,
|
||||
saveCredentials
|
||||
}
|
||||
}
|
||||
@@ -10,13 +10,12 @@ export const useQueryStackedNotes = () => {
|
||||
const { query } = useRoute()
|
||||
if (initial) {
|
||||
initial = false
|
||||
stackedNotes.value = Array.isArray(query.stackedNotes)
|
||||
? (query.stackedNotes
|
||||
.map((n) => n?.toString())
|
||||
.filter((n) => !!n) as string[])
|
||||
: ([query.stackedNotes]
|
||||
.map((n) => n?.toString())
|
||||
.filter((n) => !!n) as string[])
|
||||
stackedNotes.value = (Array.isArray(query.stackedNotes)
|
||||
? query.stackedNotes
|
||||
: [query.stackedNotes]
|
||||
)
|
||||
.map((n) => n?.toString())
|
||||
.filter((n) => !!n) as string[]
|
||||
}
|
||||
|
||||
return {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { Ref, onMounted, ref, watch } from '@vue/runtime-core'
|
||||
|
||||
import { request } from '@octokit/request'
|
||||
import { Octokit } from '@octokit/rest'
|
||||
import { useGitHubLogin } from '@/hooks/useGitHubLogin.hook'
|
||||
import { useMarkdown } from '@/hooks/useMarkdown.hook'
|
||||
|
||||
interface Tree {
|
||||
@@ -13,6 +14,12 @@ interface Tree {
|
||||
}
|
||||
|
||||
export const useRepo = (owner: Ref<string>, repo: Ref<string>) => {
|
||||
const { accessToken } = useGitHubLogin()
|
||||
|
||||
const octokit = new Octokit({
|
||||
auth: accessToken.value
|
||||
})
|
||||
|
||||
const { render } = useMarkdown()
|
||||
const readme = ref<string | null>(null)
|
||||
const notFound = ref(false)
|
||||
@@ -24,19 +31,22 @@ export const useRepo = (owner: Ref<string>, repo: Ref<string>) => {
|
||||
}
|
||||
|
||||
try {
|
||||
const README = await request('GET /repos/{owner}/{repo}/readme', {
|
||||
repo: repo.value,
|
||||
owner: owner.value
|
||||
const README = await octokit.repos.getReadme({
|
||||
owner: owner.value,
|
||||
repo: repo.value
|
||||
})
|
||||
|
||||
if (README) {
|
||||
readme.value = render(README.data.content)
|
||||
}
|
||||
|
||||
const commits = await request('GET /repos/{owner}/{repo}/commits', {
|
||||
repo: repo.value,
|
||||
owner: owner.value
|
||||
})
|
||||
const commits = await octokit.request(
|
||||
'GET /repos/{owner}/{repo}/commits',
|
||||
{
|
||||
repo: repo.value,
|
||||
owner: owner.value
|
||||
}
|
||||
)
|
||||
|
||||
const lastCommit = commits.data.shift()
|
||||
|
||||
@@ -44,7 +54,7 @@ export const useRepo = (owner: Ref<string>, repo: Ref<string>) => {
|
||||
return
|
||||
}
|
||||
|
||||
const treeResponse = await request(
|
||||
const treeResponse = await octokit.request(
|
||||
'GET /repos/{owner}/{repo}/git/trees/{tree_sha}',
|
||||
{
|
||||
repo: repo.value,
|
||||
|
||||
28
src/hooks/useRepos.hook.ts
Normal file
28
src/hooks/useRepos.hook.ts
Normal file
@@ -0,0 +1,28 @@
|
||||
import { Octokit } from '@octokit/rest'
|
||||
import { useAsyncState } from '@vueuse/core'
|
||||
import { useGitHubLogin } from '@/hooks/useGitHubLogin.hook'
|
||||
|
||||
export const useRepos = () => {
|
||||
const { username, accessToken } = useGitHubLogin()
|
||||
const repos = useAsyncState(async () => {
|
||||
if (!accessToken.value || !username.value) {
|
||||
return []
|
||||
}
|
||||
|
||||
const octokit = new Octokit({
|
||||
auth: accessToken.value
|
||||
})
|
||||
|
||||
const repoList = await octokit.request('GET /search/repositories', {
|
||||
q: `user:${username.value}`,
|
||||
per_page: 100
|
||||
})
|
||||
|
||||
return repoList.data.items.map((item) => item.name)
|
||||
}, [])
|
||||
|
||||
return {
|
||||
repos: repos.state,
|
||||
isReady: repos.isReady
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user