Skip to content

Commit b1b5101

Browse files
committed
Add authenticated endpoint to manually trigger validator db update
1 parent 768c8c2 commit b1b5101

3 files changed

Lines changed: 73 additions & 0 deletions

File tree

nuxt.config.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ export default defineNuxtConfig({
2121
runtimeConfig: {
2222
albatrossRpcNodeUrl: process.env.ALBATROSS_RPC_NODE_URL || '',
2323
slackWebhookUrl: process.env.NUXT_SLACK_WEBHOOK_URL || '',
24+
dbUpdateToken: process.env.NUXT_DB_UPDATE_TOKEN || '',
2425
public: {
2526
gitBranch: execSync('git branch --show-current', { stdio: ['ignore', 'pipe', 'ignore'] }).toString().trim(),
2627
nimiqNetwork: process.env.NUXT_PUBLIC_NIMIQ_NETWORK || '',
@@ -31,6 +32,7 @@ export default defineNuxtConfig({
3132
$schema: z.object({
3233
albatrossRpcNodeUrl: z.string().describe('Albatross RPC Node URL is required'),
3334
slackWebhookUrl: z.string().describe('Slack webhook URL must be a valid string'),
35+
dbUpdateToken: z.string().describe('DB update token must be a valid string'),
3436
public: z.object({
3537
gitBranch: z.string().describe('Git branch is required'),
3638
nimiqNetwork: z.string().describe('Nimiq network is required').refine(value => !value || ['main-albatross', 'test-albatross'].includes(value), {
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import { Buffer } from 'node:buffer'
2+
import { timingSafeEqual } from 'node:crypto'
3+
import { z } from 'zod'
4+
5+
const querySchema = z.object({
6+
token: z.string(),
7+
})
8+
9+
export default defineEventHandler(async (event) => {
10+
const { token } = await getValidatedQuery(event, querySchema.parse)
11+
12+
const { dbUpdateToken } = useSafeRuntimeConfig()
13+
14+
if (!dbUpdateToken) {
15+
throw createError({
16+
statusCode: 500,
17+
message: 'DB update token is not configured',
18+
})
19+
}
20+
21+
if (!timingSafeEqual(Buffer.from(token, 'utf8'), Buffer.from(dbUpdateToken, 'utf8'))) {
22+
throw createError({
23+
statusCode: 401,
24+
message: 'Unauthorized',
25+
})
26+
}
27+
28+
const validators = await importValidatorsBundled(useSafeRuntimeConfig().public.nimiqNetwork, { shouldStore: true })
29+
30+
if (!validators[0]) {
31+
throw createError({
32+
statusCode: 500,
33+
message: `Failed to import bundled validators: ${validators[1]}`,
34+
})
35+
}
36+
37+
return validators[2]
38+
})

server/generated/validators-bundle.generated.ts

Lines changed: 33 additions & 0 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)