commit 0624533db0378f450a9f9a7393961bf20ade02e7
parent e6b2cfced44902718938762c8f052d8537a3688b
Author: Florian Dold <dold@taler.net>
Date: Tue, 21 Jul 2026 03:15:36 +0200
util: handle the challenger solve redirect and fix token status codes
Diffstat:
1 file changed, 17 insertions(+), 2 deletions(-)
diff --git a/packages/taler-util/src/http-client/challenger.ts b/packages/taler-util/src/http-client/challenger.ts
@@ -27,6 +27,7 @@ import {
FailCasesByMethod,
ResultByMethod,
carefullyParseConfig,
+ opFixedSuccess,
opKnownAlternativeHttpFailure,
opKnownHttpFailure,
opSuccessFromHttp,
@@ -34,6 +35,7 @@ import {
opUnknownHttpFailure,
} from "../operation.js";
import {
+ ChallengeSolveResponse,
codecForChallengeInvalidPinResponse,
codecForChallengeResponse,
codecForChallengeSetupResponse,
@@ -225,6 +227,17 @@ export class ChallengerHttpClient {
);
return opSuccessFromHttp(resp, codecForChallengeSolveResponse());
}
+ case HttpStatusCode.Found: {
+ // The documented success: a redirect back to the OAuth client. There is
+ // no body, so build the completed result from the Location header.
+ await this.cacheEvictor.notifySuccess(
+ ChallengerCacheEviction.SOLVE_CHALLENGE,
+ );
+ return opFixedSuccess<ChallengeSolveResponse>(resp, {
+ type: "completed",
+ redirect_url: resp.headers.get("location") ?? "",
+ });
+ }
case HttpStatusCode.BadRequest:
return opKnownHttpFailure(resp.status, resp);
case HttpStatusCode.Forbidden:
@@ -277,9 +290,11 @@ export class ChallengerHttpClient {
switch (resp.status) {
case HttpStatusCode.Ok:
return opSuccessFromHttp(resp, codecForChallengerAuthResponse());
- case HttpStatusCode.Forbidden:
+ case HttpStatusCode.BadRequest:
return opKnownHttpFailure(resp.status, resp);
- case HttpStatusCode.NotFound:
+ case HttpStatusCode.Unauthorized:
+ return opKnownHttpFailure(resp.status, resp);
+ case HttpStatusCode.Conflict:
return opKnownHttpFailure(resp.status, resp);
default:
return opUnknownHttpFailure(resp);