mirror of
https://github.com/omnivore-app/omnivore.git
synced 2026-03-11 08:54:26 +00:00
Add list/delete api key resolver
This commit is contained in:
parent
fd4fc8a4e7
commit
0f2a55d274
3 changed files with 92 additions and 1 deletions
|
|
@ -1,7 +1,14 @@
|
|||
import {
|
||||
ApiKeysError,
|
||||
ApiKeysErrorCode,
|
||||
ApiKeysSuccess,
|
||||
DeleteApiKeyError,
|
||||
DeleteApiKeyErrorCode,
|
||||
DeleteApiKeySuccess,
|
||||
GenerateApiKeyError,
|
||||
GenerateApiKeyErrorCode,
|
||||
GenerateApiKeySuccess,
|
||||
MutationDeleteApiKeyArgs,
|
||||
MutationGenerateApiKeyArgs,
|
||||
} from '../../generated/graphql'
|
||||
import { analytics } from '../../utils/analytics'
|
||||
|
|
@ -12,6 +19,36 @@ import { User } from '../../entity/user'
|
|||
import { ApiKey } from '../../entity/api_key'
|
||||
import { generateApiKey, hashApiKey } from '../../utils/auth'
|
||||
|
||||
export const apiKeysResolver = authorized<ApiKeysSuccess, ApiKeysError>(
|
||||
async (_, __, { claims: { uid }, log }) => {
|
||||
log.info('apiKeysResolver')
|
||||
|
||||
try {
|
||||
const user = await getRepository(User).findOneBy({ id: uid })
|
||||
if (!user) {
|
||||
return {
|
||||
errorCodes: [ApiKeysErrorCode.Unauthorized],
|
||||
}
|
||||
}
|
||||
|
||||
const apiKeys = await getRepository(ApiKey).find({
|
||||
where: { user: { id: uid } },
|
||||
order: { usedAt: 'DESC', createdAt: 'DESC' },
|
||||
})
|
||||
|
||||
return {
|
||||
apiKeys,
|
||||
}
|
||||
} catch (e) {
|
||||
log.error(e)
|
||||
|
||||
return {
|
||||
errorCodes: [ApiKeysErrorCode.BadRequest],
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
export const generateApiKeyResolver = authorized<
|
||||
GenerateApiKeySuccess,
|
||||
GenerateApiKeyError,
|
||||
|
|
@ -62,3 +99,49 @@ export const generateApiKeyResolver = authorized<
|
|||
return { errorCodes: [GenerateApiKeyErrorCode.BadRequest] }
|
||||
}
|
||||
})
|
||||
|
||||
export const deleteApiKeyResolver = authorized<
|
||||
DeleteApiKeySuccess,
|
||||
DeleteApiKeyError,
|
||||
MutationDeleteApiKeyArgs
|
||||
>(async (_, { id }, { claims: { uid }, log }) => {
|
||||
log.info('deleteApiKeyResolver')
|
||||
|
||||
try {
|
||||
const user = await getRepository(User).findOneBy({ id: uid })
|
||||
if (!user) {
|
||||
return {
|
||||
errorCodes: [DeleteApiKeyErrorCode.Unauthorized],
|
||||
}
|
||||
}
|
||||
|
||||
const apiKey = await getRepository(ApiKey).findOne({
|
||||
where: { id },
|
||||
relations: ['user'],
|
||||
})
|
||||
if (!apiKey) {
|
||||
return {
|
||||
errorCodes: [DeleteApiKeyErrorCode.NotFound],
|
||||
}
|
||||
}
|
||||
|
||||
if (apiKey.user.id !== uid) {
|
||||
return {
|
||||
errorCodes: [DeleteApiKeyErrorCode.Unauthorized],
|
||||
}
|
||||
}
|
||||
|
||||
const deletedApiKey = await getRepository(ApiKey).remove(apiKey)
|
||||
deletedApiKey.id = id
|
||||
|
||||
return {
|
||||
apiKey: deletedApiKey,
|
||||
}
|
||||
} catch (e) {
|
||||
log.error(e)
|
||||
|
||||
return {
|
||||
errorCodes: [DeleteApiKeyErrorCode.BadRequest],
|
||||
}
|
||||
}
|
||||
})
|
||||
|
|
|
|||
|
|
@ -21,6 +21,8 @@ import {
|
|||
} from './../generated/graphql'
|
||||
|
||||
import {
|
||||
addPopularReadResolver,
|
||||
apiKeysResolver,
|
||||
articleSavingRequestResolver,
|
||||
createArticleResolver,
|
||||
createArticleSavingRequestResolver,
|
||||
|
|
@ -28,11 +30,13 @@ import {
|
|||
createLabelResolver,
|
||||
createNewsletterEmailResolver,
|
||||
createReminderResolver,
|
||||
deleteApiKeyResolver,
|
||||
deleteHighlightResolver,
|
||||
deleteLabelResolver,
|
||||
deleteNewsletterEmailResolver,
|
||||
deleteReminderResolver,
|
||||
deleteWebhookResolver,
|
||||
generateApiKeyResolver,
|
||||
getAllUsersResolver,
|
||||
getArticleResolver,
|
||||
getArticlesResolver,
|
||||
|
|
@ -90,7 +94,6 @@ import {
|
|||
generateUploadFilePathName,
|
||||
} from '../utils/uploads'
|
||||
import { getPageByParam } from '../elastic/pages'
|
||||
import { generateApiKeyResolver } from './api_key'
|
||||
|
||||
/* eslint-disable @typescript-eslint/naming-convention */
|
||||
type ResultResolveType = {
|
||||
|
|
@ -157,6 +160,7 @@ export const functionResolvers = {
|
|||
addPopularRead: addPopularReadResolver,
|
||||
setWebhook: setWebhookResolver,
|
||||
deleteWebhook: deleteWebhookResolver,
|
||||
deleteApiKey: deleteApiKeyResolver,
|
||||
},
|
||||
Query: {
|
||||
me: getMeUserResolver,
|
||||
|
|
@ -178,6 +182,7 @@ export const functionResolvers = {
|
|||
subscriptions: subscriptionsResolver,
|
||||
webhooks: webhooksResolver,
|
||||
webhook: webhookResolver,
|
||||
apiKeys: apiKeysResolver,
|
||||
},
|
||||
User: {
|
||||
async sharedArticles(
|
||||
|
|
@ -575,4 +580,6 @@ export const functionResolvers = {
|
|||
...resultResolveTypeResolver('Webhooks'),
|
||||
...resultResolveTypeResolver('DeleteWebhook'),
|
||||
...resultResolveTypeResolver('Webhook'),
|
||||
...resultResolveTypeResolver('ApiKeys'),
|
||||
...resultResolveTypeResolver('DeleteApiKey'),
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,3 +18,4 @@ export * from './subscriptions'
|
|||
export * from './update'
|
||||
export * from './popular_reads'
|
||||
export * from './webhooks'
|
||||
export * from './api_key'
|
||||
|
|
|
|||
Loading…
Reference in a new issue