diff --git a/packages/taler-wallet-cli/src/lint.ts b/packages/taler-wallet-cli/src/lint.ts
index 662571907..61b6d622f 100644
--- a/packages/taler-wallet-cli/src/lint.ts
+++ b/packages/taler-wallet-cli/src/lint.ts
@@ -14,19 +14,27 @@
GNU Taler; see the file COPYING. If not, see
*/
+/**
+ * The deployment linter implements checks for a deployment
+ * of the GNU Taler exchange. It is meant to help sysadmins
+ * when setting up an exchange.
+ *
+ * The linter does checks in the configuration and uses
+ * various tools of the exchange in test mode (-t).
+ *
+ * To be able to run the tools as the right user, the linter should be
+ * run as root.
+ *
+ * @author Florian Dold
+ */
+
/**
* Imports.
*/
import {
- buildCodecForObject,
- Codec,
- codecForAny,
codecForExchangeKeysJson,
codecForKeysManagementResponse,
- codecForList,
- codecForString,
Configuration,
- durationFromSpec,
} from "@gnu-taler/taler-util";
import {
decodeCrock,
@@ -382,6 +390,7 @@ export async function checkExchangeHttpd(
}
}
+ // Check if we can use /keys already
{
const keysUrl = new URL("keys", baseUrl);
@@ -393,18 +402,47 @@ export async function checkExchangeHttpd(
"Make sure to sign and upload denomination and signing keys " +
"with taler-exchange-offline.",
);
- process.exit(1);
- }
-
- const keys = await readSuccessResponseJsonOrThrow(
- resp,
- codecForExchangeKeysJson(),
- );
-
- if (keys.master_public_key !== pubConf.masterPublicKey) {
- console.log(
- "error: master public key of exchange does not match public key of live exchange",
+ if (!context.cont) {
+ console.log("Aborting further checks.");
+ process.exit(1);
+ }
+ } else {
+ const keys = await readSuccessResponseJsonOrThrow(
+ resp,
+ codecForExchangeKeysJson(),
);
+
+ if (keys.master_public_key !== pubConf.masterPublicKey) {
+ console.log(
+ "error: master public key of exchange does not match public key of live exchange",
+ );
+ }
+ }
+ }
+
+ // Check /wire
+ {
+ const keysUrl = new URL("wire", baseUrl);
+
+ const resp = await Promise.race([httpLib.get(keysUrl.href), delayMs(2000)]);
+
+ if (!resp) {
+ console.log(
+ "error: request to /wire timed out. " +
+ "Make sure to sign and upload accounts and wire fees " +
+ "using the taler-exchange-offline tool.",
+ );
+ if (!context.cont) {
+ console.log("Aborting further checks.");
+ process.exit(1);
+ }
+ } else {
+ if (resp.status !== 200) {
+ console.log(
+ "error: Can't access exchange /wire. Please check " +
+ "the logs of taler-exchange-httpd for further information.",
+ );
+ }
}
}
}