pull/715/head
Travis Fischer 2025-05-18 03:49:49 +07:00
rodzic 7bc65beba4
commit 353f0ff46a
2 zmienionych plików z 69 dodań i 0 usunięć

Wyświetl plik

@ -0,0 +1,64 @@
import { createRoute, type OpenAPIHono } from '@hono/zod-openapi'
import type { AuthenticatedEnv } from '@/lib/types'
import { db, eq, schema } from '@/db'
import { acl } from '@/lib/acl'
import { createConsumerToken } from '@/lib/create-consumer-token'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponse404,
openapiErrorResponses
} from '@/lib/openapi-utils'
import { assert, parseZodSchema } from '@/lib/utils'
import { consumerIdParamsSchema } from './schemas'
const route = createRoute({
description: "Refreshes a consumer's API token.",
tags: ['consumers'],
operationId: 'refreshConsumerToken',
method: 'post',
path: 'consumers/{consumerId}/refresh-token',
security: openapiAuthenticatedSecuritySchemas,
request: {
params: consumerIdParamsSchema
},
responses: {
200: {
description: 'A consumer object',
content: {
'application/json': {
schema: schema.consumerSelectSchema
}
}
},
...openapiErrorResponses,
...openapiErrorResponse404
}
})
export function registerV1ConsumersRefreshConsumerToken(
app: OpenAPIHono<AuthenticatedEnv>
) {
return app.openapi(route, async (c) => {
const { consumerId } = c.req.valid('param')
let consumer = await db.query.consumers.findFirst({
where: eq(schema.consumers.id, consumerId)
})
assert(consumer, 404, 'Consumer not found')
await acl(c, consumer, { label: 'Consumer' })
// Update the consumer's API token
;[consumer] = await db
.update(schema.consumers)
.set({
token: createConsumerToken()
})
.where(eq(schema.consumers.id, consumer.id))
.returning()
assert(consumer, 500, 'Error updating consumer')
return c.json(parseZodSchema(schema.consumerSelectSchema, consumer))
})
}

Wyświetl plik

@ -0,0 +1,5 @@
import { sha256 } from './utils'
export function createConsumerToken(): string {
return sha256().slice(0, 24)
}