diff options
Diffstat (limited to 'packages/taler-util/src/http-client/bank-core.ts')
-rw-r--r-- | packages/taler-util/src/http-client/bank-core.ts | 66 |
1 files changed, 59 insertions, 7 deletions
diff --git a/packages/taler-util/src/http-client/bank-core.ts b/packages/taler-util/src/http-client/bank-core.ts index 51d6d7c96..b7e0292bd 100644 --- a/packages/taler-util/src/http-client/bank-core.ts +++ b/packages/taler-util/src/http-client/bank-core.ts @@ -18,7 +18,9 @@ import { HttpStatusCode, LibtoolVersion, TalerErrorCode, - codecForTalerErrorDetail + codecForChallenge, + codecForTalerErrorDetail, + codecForTanTransmission } from "@gnu-taler/taler-util"; import { HttpRequestLibrary, @@ -123,6 +125,7 @@ export class TalerCoreBankHttpClient { }, }); switch (resp.status) { + case HttpStatusCode.Accepted: return opSuccess(resp, codecForChallenge()) case HttpStatusCode.NoContent: return opEmptySuccess() case HttpStatusCode.NotFound: return opKnownFailure("not-found", resp); case HttpStatusCode.Unauthorized: return opKnownFailure("unauthorized", resp); @@ -153,6 +156,7 @@ export class TalerCoreBankHttpClient { }, }); switch (resp.status) { + case HttpStatusCode.Accepted: return opSuccess(resp, codecForChallenge()) case HttpStatusCode.NoContent: return opEmptySuccess() case HttpStatusCode.NotFound: return opKnownFailure("not-found", resp); case HttpStatusCode.Unauthorized: return opKnownFailure("unauthorized", resp); @@ -163,7 +167,7 @@ export class TalerCoreBankHttpClient { case TalerErrorCode.BANK_NON_ADMIN_PATCH_LEGAL_NAME: return opKnownFailure("user-cant-change-name", resp); case TalerErrorCode.BANK_NON_ADMIN_PATCH_DEBT_LIMIT: return opKnownFailure("user-cant-change-debt", resp); case TalerErrorCode.BANK_NON_ADMIN_PATCH_CASHOUT: return opKnownFailure("user-cant-change-cashout", resp); - case TalerErrorCode.BANK_NON_ADMIN_PATCH_CONTACT: return opKnownFailure("user-cant-change-contact", resp); + case TalerErrorCode.BANK_MISSING_TAN_INFO: return opKnownFailure("missing-contact-data", resp); default: return opUnknownFailure(resp, body) } } @@ -185,6 +189,7 @@ export class TalerCoreBankHttpClient { }, }); switch (resp.status) { + case HttpStatusCode.Accepted: return opSuccess(resp, codecForChallenge()) case HttpStatusCode.NoContent: return opEmptySuccess() case HttpStatusCode.NotFound: return opKnownFailure("not-found", resp); case HttpStatusCode.Unauthorized: return opKnownFailure("unauthorized", resp); @@ -326,6 +331,7 @@ export class TalerCoreBankHttpClient { body, }); switch (resp.status) { + case HttpStatusCode.Accepted: return opSuccess(resp, codecForChallenge()) case HttpStatusCode.Ok: return opSuccess(resp, codecForCreateTransactionResponse()) case HttpStatusCode.BadRequest: return opKnownFailure("invalid-input", resp); case HttpStatusCode.Unauthorized: return opKnownFailure("unauthorized", resp); @@ -405,6 +411,7 @@ export class TalerCoreBankHttpClient { }, }); switch (resp.status) { + case HttpStatusCode.Accepted: return opSuccess(resp, codecForChallenge()) case HttpStatusCode.NoContent: return opEmptySuccess() //FIXME: missing in docs case HttpStatusCode.BadRequest: return opKnownFailure("invalid-id", resp) @@ -466,6 +473,7 @@ export class TalerCoreBankHttpClient { body, }); switch (resp.status) { + case HttpStatusCode.Accepted: return opSuccess(resp, codecForChallenge()) case HttpStatusCode.Ok: return opSuccess(resp, codecForCashoutPending()) case HttpStatusCode.NotFound: return opKnownFailure("account-not-found", resp) case HttpStatusCode.Conflict: { @@ -474,20 +482,19 @@ export class TalerCoreBankHttpClient { switch (details.code) { case TalerErrorCode.BANK_TRANSFER_REQUEST_UID_REUSED: return opKnownFailure("request-already-used", resp); case TalerErrorCode.BANK_BAD_CONVERSION: return opKnownFailure("incorrect-exchange-rate", resp); - case TalerErrorCode.BANK_MISSING_TAN_INFO: return opKnownFailure("no-contact-info", resp); case TalerErrorCode.BANK_UNALLOWED_DEBIT: return opKnownFailure("no-enough-balance", resp); + case TalerErrorCode.BANK_CONFIRM_INCOMPLETE: return opKnownFailure("no-cashout-uri", resp); default: return opUnknownFailure(resp, body) } } case HttpStatusCode.NotImplemented: return opKnownFailure("cashout-not-supported", resp); - case HttpStatusCode.BadGateway: return opKnownFailure("tan-failed", resp); default: return opUnknownFailure(resp, await resp.text()) } } /** * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-cashouts-$CASHOUT_ID-abort - * + * @deprecated since 4 */ async abortCashoutById(auth: UserAndToken, cid: number) { const url = new URL(`accounts/${auth.username}/cashouts/${cid}/abort`, this.baseUrl); @@ -508,7 +515,7 @@ export class TalerCoreBankHttpClient { /** * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-cashouts-$CASHOUT_ID-confirm - * + * @deprecated since 4 */ async confirmCashoutById(auth: UserAndToken, cid: number, body: TalerCorebankApi.CashoutConfirmRequest) { const url = new URL(`accounts/${auth.username}/cashouts/${cid}/confirm`, this.baseUrl); @@ -522,7 +529,6 @@ export class TalerCoreBankHttpClient { switch (resp.status) { case HttpStatusCode.NoContent: return opEmptySuccess() case HttpStatusCode.NotFound: return opKnownFailure("not-found", resp); - // case HttpStatusCode.Forbidden: return opKnownFailure("wrong-tan-or-credential", resp); case HttpStatusCode.Conflict: { const body = await resp.json() const details = codecForTalerErrorDetail().decode(body) @@ -638,6 +644,52 @@ export class TalerCoreBankHttpClient { } // + // 2FA + // + async sendChallenge(auth: UserAndToken, cid: string) { + const url = new URL(`accounts/${auth.username}/challenge/${cid}`, this.baseUrl); + const resp = await this.httpLib.fetch(url.href, { + method: "POST", + headers: { + Authorization: makeBearerTokenAuthHeader(auth.token) + }, + }); + switch (resp.status) { + case HttpStatusCode.Ok: return opSuccess(resp, codecForTanTransmission()) + case HttpStatusCode.Unauthorized: return opKnownFailure("unauthorized", resp); + case HttpStatusCode.NotFound: return opKnownFailure("invalid-challenge", resp); + case HttpStatusCode.BadGateway: { + const body = await resp.json() + const details = codecForTalerErrorDetail().decode(body) + switch (details.code) { + case TalerErrorCode.BANK_TAN_CHANNEL_SCRIPT_FAILED: return opKnownFailure("tan-failed", resp); + default: return opUnknownFailure(resp, body) + } + } + default: return opUnknownFailure(resp, await resp.text()) + } + } + + async confirmChallenge(auth: UserAndToken, cid: string) { + const url = new URL(`accounts/${auth.username}/challenge/${cid}/confirm`, this.baseUrl); + const resp = await this.httpLib.fetch(url.href, { + method: "POST", + headers: { + Authorization: makeBearerTokenAuthHeader(auth.token) + }, + }); + switch (resp.status) { + case HttpStatusCode.Ok: return opEmptySuccess() + case HttpStatusCode.Unauthorized: return opKnownFailure("unauthorized", resp); + case HttpStatusCode.NotFound: return opKnownFailure("invalid-challenge", resp); + case HttpStatusCode.Conflict: return opKnownFailure("wrong-code", resp); + case HttpStatusCode.TooManyRequests: return opKnownFailure("too-many-errors", resp); + default: return opUnknownFailure(resp, await resp.text()) + } + } + + + // // Others API // |