nscli

A quickly hacked together CLI Client for the NameSilo API.

Letsencrypt allows for wildcard and certificates for servers that are not accessible on the web, through a DNS Challenge. This tool makes automation possible for domains on the NameSilo registrar. It does not cover the entirety of the NameSilo API.

Getting startedLetsEncryptRoadmap

## Getting Started ### Build ``` # compile cargo build --package nscli --release # run ./target/release/nscli --help # development cargo run --package nscli --bin nscli -- help ``` ### Command Line Interface The command line interface of `nscli` is build with [clap](https://docs.rs/clap/latest/clap/): ``` Usage: nscli [OPTIONS] Commands: listdomains A list of all active domains within your account getdomaininfo Get essential information on a domain within your account dnslistrecords View all DNS records associated with your domain dnsaddrecord Add a new DNS resource record or update existing dnsupdaterecord Update an existing DNS resource record dnsdeleterecord Delete an existing DNS resource record dnsrecordid [Custom] Get DNS record id if it exists help Print this message or the help of the given subcommand(s) Options: -a, --api-key [default: .api_key] -h, --help Print help information Process finished with exit code 0 ``` > **Note:** As duplicate resource records are out of scope for this tool, the following commands deviate from their NameSilo API counterpart: > - `dnsaddrecord`: does not create duplicate entries, but instead updates a matching record if it already exists > - `dnsdeleterecord`: takes a subdomain and record type as parameter and will delete the first matching one > - `dnsrecordid`: is not part of the NameSilo API ## LetsEncrypt The [pre and post validation hook](https://eff-certbot.readthedocs.io/en/stable/using.html#hooks) of `certbot` can be used to add `nscli` to the certification process. ```bash certbot certonly --manual --preferred-challenges=dns --manual-auth-hook /path/to/pre.sh --manual-cleanup-hook /path/to/post.sh -d example.com ``` ```bash #!/bin/bash # pre hook example ./nscli dnsaddrecord --domain $CERTBOT_DOMAIN \ --rrtype txt \ --rrhost _acme-challenge \ --rrvalue $CERTBOT_VALIDATION # wait for the change to propagate sleep 60 ``` ```bash #!/bin/bash # post hook example ./nscli dnsdeleterecord --domain $CERTBOT_DOMAIN \ --rrtype txt \ --rrhost _acme-challenge ``` ## Roadmap * Add optional `rrid` param to `dnsdeleterecord` * Properly parse response `xml` and make output available in digestible form on `stdout` * Add more API calls