gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-wallet-core] branch master updated: taler-util: node http fixes


From: gnunet
Subject: [taler-wallet-core] branch master updated: taler-util: node http fixes
Date: Thu, 16 Feb 2023 13:54:31 +0100

This is an automated email from the git hooks/post-receive script.

dold pushed a commit to branch master
in repository wallet-core.

The following commit(s) were added to refs/heads/master by this push:
     new eca3819bc taler-util: node http fixes
eca3819bc is described below

commit eca3819bcdf8f2a715c1f5e212ab4d81e3bbfd45
Author: Florian Dold <florian@dold.me>
AuthorDate: Thu Feb 16 13:54:19 2023 +0100

    taler-util: node http fixes
---
 packages/taler-harness/src/harness/harness.ts      | 19 +++++++++++--
 .../taler-harness/src/integrationtests/test-kyc.ts | 12 ++++----
 packages/taler-util/src/http-impl.node.ts          | 33 ++++++++++++++++++----
 3 files changed, 51 insertions(+), 13 deletions(-)

diff --git a/packages/taler-harness/src/harness/harness.ts 
b/packages/taler-harness/src/harness/harness.ts
index 518b98d82..81dabf348 100644
--- a/packages/taler-harness/src/harness/harness.ts
+++ b/packages/taler-harness/src/harness/harness.ts
@@ -1895,8 +1895,23 @@ export async function runTestWithState(
 
   process.on("SIGINT", handleSignal);
   process.on("SIGTERM", handleSignal);
-  process.on("unhandledRejection", handleSignal);
-  process.on("uncaughtException", handleSignal);
+
+  process.on("unhandledRejection", (reason: unknown, promise: any) => {
+    logger.warn(
+      `**** received unhandled rejection (${reason}), terminating test 
${testName}`,
+    );
+    logger.warn(`reason type: ${typeof reason}`);
+    gc.shutdownSync();
+    process.exit(1);
+  });
+  process.on("uncaughtException", (error, origin) => {
+    logger.warn(
+      `**** received uncaught exception (${error}), terminating test 
${testName}`,
+    );
+    console.warn("stack", error.stack);
+    gc.shutdownSync();
+    process.exit(1);
+  });
 
   try {
     logger.info("running test in directory", gc.testDir);
diff --git a/packages/taler-harness/src/integrationtests/test-kyc.ts 
b/packages/taler-harness/src/integrationtests/test-kyc.ts
index 915c3d470..bb40d9274 100644
--- a/packages/taler-harness/src/integrationtests/test-kyc.ts
+++ b/packages/taler-harness/src/integrationtests/test-kyc.ts
@@ -17,11 +17,7 @@
 /**
  * Imports.
  */
-import {
-  Duration,
-  j2s,
-  NotificationType,
-} from "@gnu-taler/taler-util";
+import { Duration, j2s, NotificationType } from "@gnu-taler/taler-util";
 import {
   BankAccessApi,
   BankApi,
@@ -232,7 +228,11 @@ async function runTestfakeKycService(): 
Promise<TestfakeKycService> {
     if (path === "/oauth/v2/login") {
       // Usually this would render some HTML page for the user to log in,
       // but we return JSON here.
-      const redirUri = new URL(qp.get("redirect_uri")!);
+      const redirUriUnparsed = qp.get("redirect_uri");
+      if (!redirUriUnparsed) {
+        throw Error("missing redirect_url");
+      }
+      const redirUri = new URL(redirUriUnparsed);
       redirUri.searchParams.set("code", "code_is_ok");
       res.writeHead(200, { "Content-Type": "application/json" });
       res.end(
diff --git a/packages/taler-util/src/http-impl.node.ts 
b/packages/taler-util/src/http-impl.node.ts
index da7a759aa..8f215e596 100644
--- a/packages/taler-util/src/http-impl.node.ts
+++ b/packages/taler-util/src/http-impl.node.ts
@@ -20,6 +20,7 @@
  * Imports.
  */
 import * as http from "node:http";
+import * as https from "node:https";
 import { RequestOptions } from "node:http";
 import { TalerError } from "./errors.js";
 import { encodeBody, HttpLibArgs } from "./http-common.js";
@@ -62,7 +63,6 @@ export class HttpLibImpl implements HttpRequestLibrary {
 
   async fetch(url: string, opt?: HttpRequestOptions): Promise<HttpResponse> {
     const method = opt?.method?.toUpperCase() ?? "GET";
-    let body = opt?.body;
 
     logger.trace(`Requesting ${method} ${url}`);
 
@@ -94,19 +94,33 @@ export class HttpLibImpl implements HttpRequestLibrary {
       reqBody = encodeBody(opt.body);
     }
 
+    let path = parsedUrl.pathname;
+    if (parsedUrl.search != null) {
+      path += parsedUrl.search;
+    }
+
+    let protocol: string;
+    if (parsedUrl.protocol === "https:") {
+      protocol = "https:";
+    } else if (parsedUrl.protocol === "http:") {
+      protocol = "http:";
+    } else {
+      throw Error(`unsupported protocol (${parsedUrl.protocol})`);
+    }
+
     const options: RequestOptions = {
-      protocol: parsedUrl.protocol,
+      protocol,
       port: parsedUrl.port,
       host: parsedUrl.hostname,
       method: method,
-      path: parsedUrl.pathname,
+      path,
       headers: opt?.headers,
     };
 
     const chunks: Uint8Array[] = [];
 
     return new Promise((resolve, reject) => {
-      const req = http.request(options, (res) => {
+      const handler = (res: http.IncomingMessage) => {
         res.on("data", (d) => {
           chunks.push(d);
         });
@@ -145,7 +159,16 @@ export class HttpLibImpl implements HttpRequestLibrary {
         res.on("error", (e) => {
           reject(e);
         });
-      });
+      };
+
+      let req: http.ClientRequest;
+      if (options.protocol === "http:") {
+        req = http.request(options, handler);
+      } else if (options.protocol === "https:") {
+        req = https.request(options, handler);
+      } else {
+        throw new Error(`unsupported protocol ${options.protocol}`);
+      }
 
       if (reqBody) {
         req.write(new Uint8Array(reqBody));

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]