Crate epp_client[][src]

Expand description

EPP (Extensible Provisioning Protocol) Client Library for Domain Registration and Management.

Description

epp-client is a client library for Internet domain registration and management for domain registrars.

It supports the following basic Domain, Contact, Host, and Message management calls, with plans to add more calls and other EPP extensions in the future, and to eventually be RFC compliant with the EPP protocol.

Prerequisites

To use the library, you must have an epp-client/epp-client.toml config file with the relevant registry credentials in your default user configuration directory on your OS. For Linux, this is the XDG user directory, usually located at $HOME/.config or defined by the XDG_CONFIG_HOME environment variable.

An example config looks like this:

[registry.verisign]
host = 'epp.verisign-grs.com'
port = 700
username = 'username'
password = 'password'
ext_uris = []

[registry.verisign.tls_files]
cert_chain = '/path/to/certificate/chain/pemfile'
key = '/path/to/private/key/pemfile'

Operation

Once the config is set correctly, you can create a mut variable of type EppClient to transact with the domain registry

use epp_client::EppClient;
use epp_client::epp::{EppDomainCheck, EppDomainCheckResponse};
use epp_client::epp::generate_client_tr_id;

#[tokio::main]
async fn main() {
    // Create an instance of EppClient, specifying the name of the registry as in
    // the config file
    let mut client = match EppClient::new("verisign").await {
        Ok(client) => client,
        Err(e) => panic!("Failed to create EppClient: {}",  e)
    };

    // Make a domain check call, which returns an object of type EppDomainCheckResponse
    // that contains the result of the call
    let domain_check = EppDomainCheck::new(
        vec!["eppdev.com", "eppdev.net"],
        generate_client_tr_id(&client).as_str()
    );

    let response = client.transact::<_, EppDomainCheckResponse>(&domain_check).await.unwrap();

    // print the availability results
    response.data.res_data.unwrap().check_data.domain_list
        .iter()
        .for_each(|chk| println!("Domain: {}, Available: {}", chk.domain.name, chk.domain.available));
}

The output would look similar to the following

Domain: eppdev.com, Available: 1
Domain: eppdev.net, Available: 1

Re-exports

pub use connection::client::EppClient;

Modules

Config load module

Manages registry connections and reading/writing to them and connects the EppClient instances to them

Types for EPP requests and responses

Error types to wrap internal errors and make EPP errors easier to read