Add sync namestore composite extension
This commit is contained in:
parent
17d5bd90e9
commit
6445b63c62
|
@ -9,6 +9,8 @@ use crate::common::{NoExtension, StringValue};
|
||||||
use crate::domain::update::DomainUpdate;
|
use crate::domain::update::DomainUpdate;
|
||||||
use crate::request::{Extension, Transaction};
|
use crate::request::{Extension, Transaction};
|
||||||
|
|
||||||
|
use super::namestore::{NameStore, NameStoreData};
|
||||||
|
|
||||||
pub const XMLNS: &str = "http://www.verisign.com/epp/sync-1.0";
|
pub const XMLNS: &str = "http://www.verisign.com/epp/sync-1.0";
|
||||||
|
|
||||||
impl<'a> Transaction<Update> for DomainUpdate<'a> {}
|
impl<'a> Transaction<Update> for DomainUpdate<'a> {}
|
||||||
|
@ -17,6 +19,12 @@ impl Extension for Update {
|
||||||
type Response = NoExtension;
|
type Response = NoExtension;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Transaction<UpdateWithNameStore> for DomainUpdate {}
|
||||||
|
|
||||||
|
impl Extension for UpdateWithNameStore {
|
||||||
|
type Response = NameStore;
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(PartialEq, Debug)]
|
#[derive(PartialEq, Debug)]
|
||||||
pub struct GMonthDay {
|
pub struct GMonthDay {
|
||||||
pub month: u8,
|
pub month: u8,
|
||||||
|
@ -59,7 +67,7 @@ impl fmt::Display for GMonthDay {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Update {
|
impl Update {
|
||||||
/// Create a new RGP restore report request
|
/// Create a new sync update request
|
||||||
pub fn new(expiration: GMonthDay) -> Self {
|
pub fn new(expiration: GMonthDay) -> Self {
|
||||||
Self {
|
Self {
|
||||||
data: UpdateData {
|
data: UpdateData {
|
||||||
|
@ -70,12 +78,30 @@ impl Update {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl UpdateWithNameStore {
|
||||||
|
/// Create a new sync update with namestore request
|
||||||
|
pub fn new(expiration: GMonthDay, subproduct: &str) -> Self {
|
||||||
|
Self {
|
||||||
|
sync: Update::new(expiration).data,
|
||||||
|
namestore: NameStore::new(subproduct).data,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Serialize)]
|
#[derive(Debug, Serialize)]
|
||||||
pub struct Update {
|
pub struct Update {
|
||||||
#[serde(rename = "sync:update")]
|
#[serde(rename = "sync:update")]
|
||||||
pub data: UpdateData,
|
pub data: UpdateData,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Serialize)]
|
||||||
|
pub struct UpdateWithNameStore {
|
||||||
|
#[serde(rename = "sync:update")]
|
||||||
|
pub sync: UpdateData,
|
||||||
|
#[serde(rename = "namestoreExt:namestoreExt")]
|
||||||
|
pub namestore: NameStoreData,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Debug)]
|
#[derive(Serialize, Debug)]
|
||||||
/// Type for EPP XML <consolidate> extension
|
/// Type for EPP XML <consolidate> extension
|
||||||
pub struct UpdateData {
|
pub struct UpdateData {
|
||||||
|
@ -91,6 +117,7 @@ pub struct UpdateData {
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::{GMonthDay, Update};
|
use super::{GMonthDay, Update};
|
||||||
use crate::domain::update::{DomainChangeInfo, DomainUpdate};
|
use crate::domain::update::{DomainChangeInfo, DomainUpdate};
|
||||||
|
use crate::extensions::consolidate::UpdateWithNameStore;
|
||||||
use crate::request::Transaction;
|
use crate::request::Transaction;
|
||||||
use crate::tests::{get_xml, CLTRID};
|
use crate::tests::{get_xml, CLTRID};
|
||||||
|
|
||||||
|
@ -118,4 +145,29 @@ mod tests {
|
||||||
|
|
||||||
assert_eq!(xml, serialized);
|
assert_eq!(xml, serialized);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn command_with_namestore() {
|
||||||
|
let xml = get_xml("request/extensions/consolidate_namestore.xml").unwrap();
|
||||||
|
|
||||||
|
let exp = GMonthDay::new(5, 31, None).unwrap();
|
||||||
|
|
||||||
|
let consolidate_ext = UpdateWithNameStore::new(exp, "com");
|
||||||
|
|
||||||
|
let mut object = DomainUpdate::new("eppdev.com");
|
||||||
|
|
||||||
|
object.info(DomainChangeInfo {
|
||||||
|
registrant: None,
|
||||||
|
auth_info: None,
|
||||||
|
});
|
||||||
|
|
||||||
|
let serialized = <DomainUpdate as Transaction<UpdateWithNameStore>>::serialize_request(
|
||||||
|
&object,
|
||||||
|
Some(&consolidate_ext),
|
||||||
|
CLTRID,
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
assert_eq!(xml, serialized);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
|
||||||
|
<command>
|
||||||
|
<update>
|
||||||
|
<domain:update xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
|
||||||
|
<domain:name>eppdev.com</domain:name>
|
||||||
|
<domain:chg/>
|
||||||
|
</domain:update>
|
||||||
|
</update>
|
||||||
|
<extension>
|
||||||
|
<sync:update xmlns:sync="http://www.verisign.com/epp/sync-1.0">
|
||||||
|
<sync:expMonthDay>--05-31</sync:expMonthDay>
|
||||||
|
</sync:update>
|
||||||
|
<namestoreExt:namestoreExt xmlns:namestoreExt="http://www.verisign-grs.com/epp/namestoreExt-1.1">
|
||||||
|
<namestoreExt:subProduct>com</namestoreExt:subProduct>
|
||||||
|
</namestoreExt:namestoreExt>
|
||||||
|
</extension>
|
||||||
|
<clTRID>cltrid:1626454866</clTRID>
|
||||||
|
</command>
|
||||||
|
</epp>
|
Loading…
Reference in New Issue