summaryrefslogtreecommitdiff
path: root/packages
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2022-10-13 15:24:47 +0200
committerFlorian Dold <florian@dold.me>2022-10-13 15:24:47 +0200
commitca8da4ed380b308abdc894145c7e1a102bfd6cf0 (patch)
tree876ed35c7bd5f4c75967885d36eb3a3eecd06307 /packages
parent83d4a1addc313f71a71463f7811f1fcc622b51b6 (diff)
downloadwallet-core-ca8da4ed380b308abdc894145c7e1a102bfd6cf0.tar.gz
wallet-core-ca8da4ed380b308abdc894145c7e1a102bfd6cf0.tar.bz2
wallet-core-ca8da4ed380b308abdc894145c7e1a102bfd6cf0.zip
wallet-core: only allow enabling dev mode via separate request
Diffstat (limited to 'packages')
-rw-r--r--packages/taler-util/src/walletTypes.ts9
-rw-r--r--packages/taler-wallet-cli/src/index.ts24
-rw-r--r--packages/taler-wallet-core/src/dev-experiments.ts33
-rw-r--r--packages/taler-wallet-core/src/wallet-api-types.ts9
-rw-r--r--packages/taler-wallet-core/src/wallet.ts8
5 files changed, 67 insertions, 16 deletions
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<SetDevModeRequest> =>
+ buildCodecForObject<SetDevModeRequest>()
+ .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<void> {
- 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<void> {
+ 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,