From 54160183f2b5df7a8928cd2fd4c5053300e01b42 Mon Sep 17 00:00:00 2001 From: Nico Flaig Date: Fri, 8 Mar 2024 18:18:05 +0100 Subject: [PATCH 1/2] feat: allow to configure keymanager token file path --- packages/cli/src/cmds/validator/handler.ts | 3 ++- packages/cli/src/cmds/validator/keymanager/server.ts | 6 +++++- packages/cli/src/cmds/validator/options.ts | 11 +++++++++-- packages/cli/test/e2e/voluntaryExitFromApi.test.ts | 2 +- .../utils/simulation/validator_clients/lodestar.ts | 2 +- 5 files changed, 18 insertions(+), 6 deletions(-) diff --git a/packages/cli/src/cmds/validator/handler.ts b/packages/cli/src/cmds/validator/handler.ts index a98eb0755ad0..f399af1e390e 100644 --- a/packages/cli/src/cmds/validator/handler.ts +++ b/packages/cli/src/cmds/validator/handler.ts @@ -200,9 +200,10 @@ export async function validatorHandler(args: IValidatorCliArgs & GlobalArgs): Pr address: args["keymanager.address"], port: args["keymanager.port"], cors: args["keymanager.cors"], - isAuthEnabled: args["keymanager.authEnabled"], + isAuthEnabled: args["keymanager.auth"], headerLimit: args["keymanager.headerLimit"], bodyLimit: args["keymanager.bodyLimit"], + tokenFile: args["keymanager.token"], tokenDir: dbPath, }, {config, logger, api: keymanagerApi, metrics: metrics ? metrics.keymanagerApiRest : null} diff --git a/packages/cli/src/cmds/validator/keymanager/server.ts b/packages/cli/src/cmds/validator/keymanager/server.ts index dacb32dd600c..6d2498dfbb2f 100644 --- a/packages/cli/src/cmds/validator/keymanager/server.ts +++ b/packages/cli/src/cmds/validator/keymanager/server.ts @@ -13,6 +13,8 @@ import {writeFile600Perm} from "../../../util/index.js"; export type KeymanagerRestApiServerOpts = RestApiServerOpts & { isAuthEnabled: boolean; tokenDir?: string; + // Takes precedence over `tokenDir` + tokenFile?: string; }; export const keymanagerRestApiServerOptsDefault: KeymanagerRestApiServerOpts = { @@ -44,7 +46,9 @@ export class KeymanagerRestApiServer extends RestApiServer { ...Object.fromEntries(Object.entries(optsArg).filter(([_, v]) => v != null)), }; - const apiTokenPath = path.join(opts.tokenDir ?? ".", apiTokenFileName); + const apiTokenPath = opts.tokenFile + ? path.resolve(opts.tokenFile) + : path.join(opts.tokenDir ?? ".", apiTokenFileName); let bearerToken: string | undefined; if (opts.isAuthEnabled) { diff --git a/packages/cli/src/cmds/validator/options.ts b/packages/cli/src/cmds/validator/options.ts index 7fdcdec59e86..23e6c9699765 100644 --- a/packages/cli/src/cmds/validator/options.ts +++ b/packages/cli/src/cmds/validator/options.ts @@ -78,7 +78,8 @@ export type IValidatorCliArgs = AccountValidatorArgs & export type KeymanagerArgs = { keymanager?: boolean; - "keymanager.authEnabled"?: boolean; + "keymanager.auth"?: boolean; + "keymanager.token"?: string; "keymanager.port"?: number; "keymanager.address"?: string; "keymanager.cors"?: string; @@ -93,12 +94,18 @@ export const keymanagerOptions: CliCommandOptions = { default: false, group: "keymanager", }, - "keymanager.authEnabled": { + "keymanager.auth": { + alias: ["keymanager.authEnabled"], type: "boolean", description: "Enable token bearer authentication for key manager API server", default: true, group: "keymanager", }, + "keymanager.token": { + type: "string", + description: "Path to file containing bearer token used for key manager API authentication", + group: "keymanager", + }, "keymanager.port": { type: "number", description: "Set port for key manager API", diff --git a/packages/cli/test/e2e/voluntaryExitFromApi.test.ts b/packages/cli/test/e2e/voluntaryExitFromApi.test.ts index ed4439d36ab2..271f3d794ca3 100644 --- a/packages/cli/test/e2e/voluntaryExitFromApi.test.ts +++ b/packages/cli/test/e2e/voluntaryExitFromApi.test.ts @@ -35,7 +35,7 @@ describe("voluntary exit from api", function () { "--keymanager", `--keymanager.port=${keymanagerPort}`, // Disable bearer token auth to simplify testing - "--keymanager.authEnabled=false", + "--keymanager.auth=false", ], {pipeStdioToParent: false, logPrefix: "dev", testContext: {beforeEach, afterEach, afterAll}} ); diff --git a/packages/cli/test/utils/simulation/validator_clients/lodestar.ts b/packages/cli/test/utils/simulation/validator_clients/lodestar.ts index 44c2763dacf4..03843796a6bb 100644 --- a/packages/cli/test/utils/simulation/validator_clients/lodestar.ts +++ b/packages/cli/test/utils/simulation/validator_clients/lodestar.ts @@ -30,7 +30,7 @@ export const generateLodestarValidatorNode: ValidatorNodeGenerator Date: Mon, 25 Mar 2024 14:09:49 +0000 Subject: [PATCH 2/2] Update CLI flag name to set path to token file --- packages/cli/src/cmds/validator/handler.ts | 2 +- packages/cli/src/cmds/validator/options.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/cli/src/cmds/validator/handler.ts b/packages/cli/src/cmds/validator/handler.ts index f399af1e390e..cb3191d07a7d 100644 --- a/packages/cli/src/cmds/validator/handler.ts +++ b/packages/cli/src/cmds/validator/handler.ts @@ -203,7 +203,7 @@ export async function validatorHandler(args: IValidatorCliArgs & GlobalArgs): Pr isAuthEnabled: args["keymanager.auth"], headerLimit: args["keymanager.headerLimit"], bodyLimit: args["keymanager.bodyLimit"], - tokenFile: args["keymanager.token"], + tokenFile: args["keymanager.tokenFile"], tokenDir: dbPath, }, {config, logger, api: keymanagerApi, metrics: metrics ? metrics.keymanagerApiRest : null} diff --git a/packages/cli/src/cmds/validator/options.ts b/packages/cli/src/cmds/validator/options.ts index 23e6c9699765..7ffc8371a999 100644 --- a/packages/cli/src/cmds/validator/options.ts +++ b/packages/cli/src/cmds/validator/options.ts @@ -79,7 +79,7 @@ export type IValidatorCliArgs = AccountValidatorArgs & export type KeymanagerArgs = { keymanager?: boolean; "keymanager.auth"?: boolean; - "keymanager.token"?: string; + "keymanager.tokenFile"?: string; "keymanager.port"?: number; "keymanager.address"?: string; "keymanager.cors"?: string; @@ -101,7 +101,7 @@ export const keymanagerOptions: CliCommandOptions = { default: true, group: "keymanager", }, - "keymanager.token": { + "keymanager.tokenFile": { type: "string", description: "Path to file containing bearer token used for key manager API authentication", group: "keymanager",