taler-rust

GNU Taler code in Rust. Largely core banking integrations.
Log | Files | Refs | Submodules | README | LICENSE

commit 94528d206492f18ac502155996d7bf7dee28747b
parent f6376f3429c2a9cdc9042edea71ace0ec9142bc1
Author: Antoine A <>
Date:   Wed,  8 Apr 2026 18:09:36 +0200

common: fix APIs

Diffstat:
Mcommon/taler-api/src/api/transfer.rs | 9++++++---
Mcommon/taler-test-utils/src/routine.rs | 8++++----
Mtaler-apns-relay/src/api.rs | 32+++++++++++---------------------
3 files changed, 21 insertions(+), 28 deletions(-)

diff --git a/common/taler-api/src/api/transfer.rs b/common/taler-api/src/api/transfer.rs @@ -21,7 +21,7 @@ use axum::{ extract::State, http::StatusCode, response::IntoResponse as _, - routing::{get, post}, + routing::{delete, get, post}, }; use jiff::{SignedDuration, Timestamp}; use taler_common::{ @@ -69,8 +69,11 @@ pub fn router<I: PreparedTransfer>(state: Arc<I>) -> Router { let res = state.registration(req).await?; ApiResult::Ok(Json(res)) }, - ) - .delete( + ), + ) + .route( + "/unregistration", + post( async |State(state): State<Arc<I>>, Req(req): Req<Unregistration>| { let timestamp = Timestamp::from_str(&req.timestamp).map_err(|e| { failure(ErrorCode::GENERIC_JSON_INVALID, e.to_string()) diff --git a/common/taler-test-utils/src/routine.rs b/common/taler-test-utils/src/routine.rs @@ -1284,7 +1284,7 @@ pub async fn registration_routine<F1: Future<Output = Vec<Status>>>( // Delete server - .delete("/taler-prepared-transfer/registration") + .post("/taler-prepared-transfer/unregistration") .json(&un_req) .await .assert_no_content(); @@ -1313,14 +1313,14 @@ pub async fn registration_routine<F1: Future<Output = Vec<Status>>>( // Idempotent server - .delete("/taler-prepared-transfer/registration") + .post("/taler-prepared-transfer/unregistration") .json(&un_req) .await .assert_error(ErrorCode::BANK_TRANSACTION_NOT_FOUND); // Bad signature server - .delete("/taler-prepared-transfer/registration") + .post("/taler-prepared-transfer/unregistration") .json(&json!(un_req + { "authorization_sig": eddsa_sign(&auth_pair, b"lol"), })) @@ -1330,7 +1330,7 @@ pub async fn registration_routine<F1: Future<Output = Vec<Status>>>( // Old timestamp let now = (Timestamp::now() - SignedDuration::from_mins(10)).to_string(); server - .delete("/taler-prepared-transfer/registration") + .post("/taler-prepared-transfer/unregistration") .json(&json!({ "timestamp": now, "authorization_pub": auth_pub2, diff --git a/taler-apns-relay/src/api.rs b/taler-apns-relay/src/api.rs @@ -18,9 +18,9 @@ use std::sync::Arc; use axum::{ Json, Router, - extract::State, + extract::{Path, State}, response::{IntoResponse as _, NoContent}, - routing::{get, post}, + routing::{delete, get, post}, }; use jiff::Timestamp; use serde::{Deserialize, Serialize}; @@ -66,11 +66,13 @@ pub fn router(state: Arc<RelayApi>) -> Router { db::register(&state.db, &req.token, &Timestamp::now()).await?; ApiResult::Ok(NoContent) }, - ) - .delete( - async |State(state): State<Arc<RelayApi>>, - Req(req): Req<DeviceRegistrationRequest>| { - db::unregister(&state.db, &req.token, &Timestamp::now()).await?; + ), + ) + .route( + "/devices/{token}", + delete( + async |State(state): State<Arc<RelayApi>>, Path(token): Path<String>| { + db::unregister(&state.db, &token, &Timestamp::now()).await?; ApiResult::Ok(NoContent) }, ), @@ -141,20 +143,8 @@ mod test { &["device1", "device2"] ); - server - .delete("/devices") - .json(&json!({ - "token": "device1" - })) - .await - .assert_no_content(); - server - .delete("/devices") - .json(&json!({ - "token": "device3" - })) - .await - .assert_no_content(); + server.delete("/devices/device1").await.assert_no_content(); + server.delete("/devices/device3").await.assert_no_content(); assert_eq!(all_registrations(&pool).await.unwrap(), &["device2"]); } }