commit 94528d206492f18ac502155996d7bf7dee28747b
parent f6376f3429c2a9cdc9042edea71ace0ec9142bc1
Author: Antoine A <>
Date: Wed, 8 Apr 2026 18:09:36 +0200
common: fix APIs
Diffstat:
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"]);
}
}