From ca8da4ed380b308abdc894145c7e1a102bfd6cf0 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Thu, 13 Oct 2022 15:24:47 +0200 Subject: wallet-core: only allow enabling dev mode via separate request --- .vscode/settings.json | 5 ---- packages/taler-util/src/walletTypes.ts | 9 ++++++ packages/taler-wallet-cli/src/index.ts | 24 +++++++++++++++ packages/taler-wallet-core/src/dev-experiments.ts | 33 ++++++++++---------- packages/taler-wallet-core/src/wallet-api-types.ts | 9 ++++++ packages/taler-wallet-core/src/wallet.ts | 8 ++++- pnpm-lock.yaml | 35 ---------------------- 7 files changed, 67 insertions(+), 56 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 803c58a07..465ffb3f3 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -20,11 +20,6 @@ "typescript.format.placeOpenBraceOnNewLineForFunctions": false, // Defines whether an open brace is put onto a new line for control blocks or not "typescript.format.placeOpenBraceOnNewLineForControlBlocks": false, - "typescript.preferences.autoImportFileExcludePatterns": [ - "index.*.js", - "index.ts", - "index.*.ts" - ], // Files hidden in the explorer "files.exclude": { // include the defaults from VS Code diff --git a/packages/taler-util/src/walletTypes.ts b/packages/taler-util/src/walletTypes.ts index a1fa9b439..d0765ae31 100644 --- a/packages/taler-util/src/walletTypes.ts +++ b/packages/taler-util/src/walletTypes.ts @@ -1684,6 +1684,15 @@ export interface AcceptPeerPullPaymentRequest { peerPullPaymentIncomingId: string; } +export interface SetDevModeRequest { + devModeEnabled: boolean; +} + +export const codecForSetDevModeRequest = (): Codec => + buildCodecForObject() + .property("devModeEnabled", codecForBoolean()) + .build("SetDevModeRequest"); + export interface ApplyDevExperimentRequest { devExperimentUri: string; } diff --git a/packages/taler-wallet-cli/src/index.ts b/packages/taler-wallet-cli/src/index.ts index 6ae78bd47..941a2f28f 100644 --- a/packages/taler-wallet-cli/src/index.ts +++ b/packages/taler-wallet-cli/src/index.ts @@ -1018,6 +1018,30 @@ advancedCli }); }); +advancedCli + .subcommand("enableDevMode", "enable-dev-mode", { + help: "Enable developer mode (dangerous!)", + }) + .action(async (args) => { + await withWallet(args, async (wallet) => { + await wallet.client.call(WalletApiOperation.SetDevMode, { + devModeEnabled: true, + }); + }); + }); + +advancedCli + .subcommand("disableDevMode", "disable-dev-mode", { + help: "Disable developer mode", + }) + .action(async (args) => { + await withWallet(args, async (wallet) => { + await wallet.client.call(WalletApiOperation.SetDevMode, { + devModeEnabled: false, + }); + }); + }); + const coinPubListCodec = codecForList(codecForString()); advancedCli diff --git a/packages/taler-wallet-core/src/dev-experiments.ts b/packages/taler-wallet-core/src/dev-experiments.ts index c3167b3e4..6516db929 100644 --- a/packages/taler-wallet-core/src/dev-experiments.ts +++ b/packages/taler-wallet-core/src/dev-experiments.ts @@ -36,20 +36,11 @@ import { const logger = new Logger("dev-experiments.ts"); -/** - * Apply a dev experiment to the wallet database / state. - */ -export async function applyDevExperiment( +export async function setDevMode( ws: InternalWalletState, - uri: string, + enabled: boolean, ): Promise { - logger.info(`applying dev experiment ${uri}`); - const parsedUri = parseDevExperimentUri(uri); - if (!parsedUri) { - logger.info("unable to parse dev experiment URI"); - return; - } - if (parsedUri.devExperimentId == "enable-devmode") { + if (enabled) { logger.info("enabling devmode"); await ws.db .mktx((x) => [x.config]) @@ -60,9 +51,7 @@ export async function applyDevExperiment( }); }); await maybeInitDevMode(ws); - return; - } - if (parsedUri.devExperimentId === "disable-devmode") { + } else { logger.info("disabling devmode"); await ws.db .mktx((x) => [x.config]) @@ -73,6 +62,20 @@ export async function applyDevExperiment( }); }); await leaveDevMode(ws); + } +} + +/** + * Apply a dev experiment to the wallet database / state. + */ +export async function applyDevExperiment( + ws: InternalWalletState, + uri: string, +): Promise { + logger.info(`applying dev experiment ${uri}`); + const parsedUri = parseDevExperimentUri(uri); + if (!parsedUri) { + logger.info("unable to parse dev experiment URI"); return; } if (!ws.devModeActive) { diff --git a/packages/taler-wallet-core/src/wallet-api-types.ts b/packages/taler-wallet-core/src/wallet-api-types.ts index cecdd1281..63d960f81 100644 --- a/packages/taler-wallet-core/src/wallet-api-types.ts +++ b/packages/taler-wallet-core/src/wallet-api-types.ts @@ -67,6 +67,7 @@ import { RecoveryLoadRequest, RetryTransactionRequest, SetCoinSuspendedRequest, + SetDevModeRequest, SetWalletDeviceIdRequest, TestPayArgs, TestPayResult, @@ -140,6 +141,7 @@ export enum WalletApiOperation { AcceptPeerPullPayment = "acceptPeerPullPayment", ClearDb = "clearDb", Recycle = "recycle", + SetDevMode = "setDevMode", ApplyDevExperiment = "applyDevExperiment", } @@ -529,6 +531,12 @@ export type ApplyDevExperimentOp = { response: {}; }; +export type SetDevModeOp = { + op: WalletApiOperation.SetDevMode; + request: SetDevModeRequest; + response: {}; +}; + /** * Run a simple integration test on a test deployment * of the exchange and merchant. @@ -676,6 +684,7 @@ export type WalletOperations = { [WalletApiOperation.ClearDb]: ClearDbOp; [WalletApiOperation.Recycle]: RecycleOp; [WalletApiOperation.ApplyDevExperiment]: ApplyDevExperimentOp; + [WalletApiOperation.SetDevMode]: SetDevModeOp; }; export type RequestType< diff --git a/packages/taler-wallet-core/src/wallet.ts b/packages/taler-wallet-core/src/wallet.ts index 48d379931..254648064 100644 --- a/packages/taler-wallet-core/src/wallet.ts +++ b/packages/taler-wallet-core/src/wallet.ts @@ -94,6 +94,7 @@ import { URL, WalletCoreVersion, WalletNotification, + codecForSetDevModeRequest, } from "@gnu-taler/taler-util"; import { TalerCryptoInterface } from "./crypto/cryptoImplementation.js"; import { @@ -111,7 +112,7 @@ import { importDb, WalletStoresV1, } from "./db.js"; -import { applyDevExperiment, maybeInitDevMode } from "./dev-experiments.js"; +import { applyDevExperiment, maybeInitDevMode, setDevMode } from "./dev-experiments.js"; import { getErrorDetailFromException, TalerError } from "./errors.js"; import { ActiveLongpollInfo, @@ -1334,6 +1335,11 @@ async function dispatchRequestInternal( await applyDevExperiment(ws, req.devExperimentUri); return {}; } + case "setDevMode": { + const req = codecForSetDevModeRequest().decode(payload); + await setDevMode(ws, req.devModeEnabled); + return {}; + } case "getVersion": { const version: WalletCoreVersion = { hash: GIT_HASH, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 23ec58a94..8e506d65f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -92,29 +92,21 @@ importers: packages/idb-bridge: specifiers: - '@rollup/plugin-commonjs': ^22.0.2 - '@rollup/plugin-json': ^4.1.0 - '@rollup/plugin-node-resolve': ^13.3.0 '@types/node': ^18.8.5 ava: ^4.3.3 esm: ^3.2.25 prettier: ^2.5.1 rimraf: ^3.0.2 - rollup: ^2.79.0 tslib: ^2.4.0 typescript: ^4.8.4 dependencies: tslib: 2.4.0 devDependencies: - '@rollup/plugin-commonjs': 22.0.2_rollup@2.79.0 - '@rollup/plugin-json': 4.1.0_rollup@2.79.0 - '@rollup/plugin-node-resolve': 13.3.0_rollup@2.79.0 '@types/node': 18.8.5 ava: 4.3.3 esm: 3.2.25 prettier: 2.5.1 rimraf: 3.0.2 - rollup: 2.79.0 typescript: 4.8.4 packages/pogen: @@ -130,29 +122,6 @@ importers: po2json: 0.4.5 typescript: 4.8.4 - packages/taler-config-lib: - specifiers: - '@types/node': ^18.8.5 - ava: ^4.3.3 - big-integer: ^1.6.51 - esbuild: ^0.14.21 - jed: ^1.1.1 - prettier: ^2.5.1 - rimraf: ^3.0.2 - tslib: ^2.4.0 - typescript: ^4.8.4 - dependencies: - big-integer: 1.6.51 - jed: 1.1.1 - tslib: 2.4.0 - devDependencies: - '@types/node': 18.8.5 - ava: 4.3.3 - esbuild: 0.14.21 - prettier: 2.5.1 - rimraf: 3.0.2 - typescript: 4.8.4 - packages/taler-util: specifiers: '@types/node': ^18.8.5 @@ -241,8 +210,6 @@ importers: po2json: ^0.4.5 prettier: ^2.5.1 rimraf: ^3.0.2 - rollup: ^2.79.0 - rollup-plugin-sourcemaps: ^0.6.3 source-map-resolve: ^0.6.0 source-map-support: ^0.5.21 tslib: ^2.4.0 @@ -274,8 +241,6 @@ importers: po2json: 0.4.5 prettier: 2.5.1 rimraf: 3.0.2 - rollup: 2.79.0 - rollup-plugin-sourcemaps: 0.6.3_n3h7ooyjwm4phuvjpg4pqirc4i source-map-resolve: 0.6.0 typedoc: 0.23.16_typescript@4.8.4 typescript: 4.8.4 -- cgit v1.2.3