Make attached subscription links compatible with FEP-0ea0
This commit is contained in:
parent
201d90756c
commit
dbe5550075
2 changed files with 26 additions and 9 deletions
|
@ -19,6 +19,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||||
- Return error if specified Monero account doesn't exist.
|
- Return error if specified Monero account doesn't exist.
|
||||||
- Updated actix to latest version. MSRV changed to 1.57.
|
- Updated actix to latest version. MSRV changed to 1.57.
|
||||||
- Make `/api/v1/accounts` endpoint accept optional `authentication_method` parameter.
|
- Make `/api/v1/accounts` endpoint accept optional `authentication_method` parameter.
|
||||||
|
- Make attached subscription links compatible with FEP-0ea0.
|
||||||
|
|
||||||
### Deprecated
|
### Deprecated
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
|
use serde::Serialize;
|
||||||
|
|
||||||
use mitra_models::profiles::types::{
|
use mitra_models::profiles::types::{
|
||||||
ExtraField,
|
ExtraField,
|
||||||
IdentityProof,
|
IdentityProof,
|
||||||
IdentityProofType,
|
IdentityProofType,
|
||||||
PaymentLink,
|
PaymentLink as DbPaymentLink,
|
||||||
PaymentOption,
|
PaymentOption,
|
||||||
};
|
};
|
||||||
use mitra_utils::did::Did;
|
use mitra_utils::did::Did;
|
||||||
|
@ -98,11 +100,23 @@ pub fn parse_identity_proof(
|
||||||
Ok(proof)
|
Ok(proof)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// https://codeberg.org/fediverse/fep/src/branch/main/feps/fep-0ea0.md
|
||||||
|
#[derive(Serialize)]
|
||||||
|
pub struct PaymentLink {
|
||||||
|
#[serde(rename = "type")]
|
||||||
|
object_type: String,
|
||||||
|
|
||||||
|
pub name: String,
|
||||||
|
pub href: String,
|
||||||
|
pub rel: Vec<String>,
|
||||||
|
}
|
||||||
|
|
||||||
pub fn attach_payment_option(
|
pub fn attach_payment_option(
|
||||||
instance_url: &str,
|
instance_url: &str,
|
||||||
username: &str,
|
username: &str,
|
||||||
payment_option: PaymentOption,
|
payment_option: PaymentOption,
|
||||||
) -> ActorAttachment {
|
) -> PaymentLink {
|
||||||
|
const RELATION_TYPE: &str = "payment";
|
||||||
let (name, href) = match payment_option {
|
let (name, href) = match payment_option {
|
||||||
// Local actors can't have payment links
|
// Local actors can't have payment links
|
||||||
PaymentOption::Link(_) => unimplemented!(),
|
PaymentOption::Link(_) => unimplemented!(),
|
||||||
|
@ -117,13 +131,11 @@ pub fn attach_payment_option(
|
||||||
(name, href)
|
(name, href)
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
ActorAttachment {
|
PaymentLink {
|
||||||
object_type: LINK.to_string(),
|
object_type: LINK.to_string(),
|
||||||
name: name,
|
name: name,
|
||||||
value: None,
|
href: href,
|
||||||
href: Some(href),
|
rel: vec![RELATION_TYPE.to_string()],
|
||||||
signature_algorithm: None,
|
|
||||||
signature_value: None,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -136,7 +148,7 @@ pub fn parse_payment_option(
|
||||||
let href = attachment.href.as_ref()
|
let href = attachment.href.as_ref()
|
||||||
.ok_or(ValidationError("href attribute is required"))?
|
.ok_or(ValidationError("href attribute is required"))?
|
||||||
.to_string();
|
.to_string();
|
||||||
let payment_option = PaymentOption::Link(PaymentLink {
|
let payment_option = PaymentOption::Link(DbPaymentLink {
|
||||||
name: attachment.name.clone(),
|
name: attachment.name.clone(),
|
||||||
href: href,
|
href: href,
|
||||||
});
|
});
|
||||||
|
@ -210,8 +222,12 @@ mod tests {
|
||||||
);
|
);
|
||||||
assert_eq!(attachment.object_type, LINK);
|
assert_eq!(attachment.object_type, LINK);
|
||||||
assert_eq!(attachment.name, "EthereumSubscription");
|
assert_eq!(attachment.name, "EthereumSubscription");
|
||||||
assert_eq!(attachment.href.as_deref().unwrap(), subscription_page_url);
|
assert_eq!(attachment.href, subscription_page_url);
|
||||||
|
assert_eq!(attachment.rel[0], "payment");
|
||||||
|
|
||||||
|
let attachment_value = serde_json::to_value(attachment).unwrap();
|
||||||
|
let attachment: ActorAttachment =
|
||||||
|
serde_json::from_value(attachment_value).unwrap();
|
||||||
let parsed_option = parse_payment_option(&attachment).unwrap();
|
let parsed_option = parse_payment_option(&attachment).unwrap();
|
||||||
let link = match parsed_option {
|
let link = match parsed_option {
|
||||||
PaymentOption::Link(link) => link,
|
PaymentOption::Link(link) => link,
|
||||||
|
|
Loading…
Reference in a new issue