Skip to content

Repository files navigation

Spiry

A simple tool for checking domain & TLS certificate expiration dates

Usage

Top-Level Usage

These options are common to all spiry subcommands:

$ spiry -h
Usage: spiry <command>
TLS & WHOIS expiration date lookup
Commands:
domain look up domain expiration date
certificate look up TLS certificate expiration date
Flags:
-h, --help Show context-sensitive help.
-D, --debug Enable debug mode
-v, --version display version information and exit
-b, --bare only display expiration date
-j, --json display output as JSON
-u, --unix display expiration date as UNIX timestamp
-r, --rfc1123z display expiration date as RFC1123Z timestamp
-R, --rfc3339 display expiration date as RFC3339 timestamp
Run "spiry <command> --help" for more information on a command.

Domain Lookup Usage

$ spiry domain -h
Usage: spiry domain <domain>
look up domain expiration date
Arguments:
<domain> top-level domain name to look up
Flags:
-h, --help Show context-sensitive help.
-D, --debug Enable debug mode
-v, --version display version information and exit
-b, --bare only display expiration date
-j, --json display output as JSON
-u, --unix display expiration date as UNIX timestamp
-r, --rfc1123z display expiration date as RFC1123Z timestamp
-R, --rfc3339 display expiration date as RFC3339 timestamp
-s, --server=STRING use <server> as specific whois server

Certificate Lookup Usage

$ spiry certificate -h
Usage: spiry certificate <address>
look up TLS certificate expiration date
Arguments:
<address> address to retrieve TLS certificate from
Flags:
-h, --help Show context-sensitive help.
-D, --debug Enable debug mode
-v, --version display version information and exit
-b, --bare only display expiration date
-j, --json display output as JSON
-u, --unix display expiration date as UNIX timestamp
-r, --rfc1123z display expiration date as RFC1123Z timestamp
-R, --rfc3339 display expiration date as RFC3339 timestamp
-n, --name=STRING request TLS certificate for domain <name> instead of <address>

Outputs & Examples

Command output is straightforward:

$ spiry domain --bare --unix example.it
1696896000
$ spiry domain --bare example.it
2023-10-10T00:00:00+0000
$ spiry domain --json example.com
{
"domainName": "example.com",
"expiry": "2023-08-13T04:00:00+0000"
}
$ spiry domain --json --rfc3339 example.net
{
"domainName": "example.net",
"expiry": "2023-08-30T04:00:00Z"
}
$ spiry domain example.net
example.net	2023-08-30T04:00:00+0000
$ spiry domain "example.shh"
spiry: error: unable to find eTLD for domain example.shh: eTLD root "example.shh" is not publicly managed and cannot be looked up using `whois`
$ spiry domain "example.horse"
spiry: error: reserved domain record "example.horse" cannot be looked up

Error handling

Error messages are emitted in plaintext format to standard error. If the errors are generated during flag parsing, the help text will be emitted to standard error. WHOIS lookup errors will be emitted to standard error, without the help text.

$ ./build/spiry -j -b -u -r domain example.com 1>/dev/null
spiry: error: --bare and --json can't be used together
spiry: look up domain name expiration
usage: spiry [-b|-j] [-u|-r|-R] [-h|-v] [-s <server>] <domain>
-s, --server string use <server> as specific whois server
-b, --bare only display expiration date
-j, --json display output as JSON
-u, --unix display expiration date as UNIX time
-r, --rfc1123z display expiration date as RFC1123Z timestamp
-R, --rfc3339 display expiration date as RFC3339 timestamp
-v, --version display version information and exit
-h, --help display this help and exit
environment variables:
SPIRY_DEBUG: print debug messages
$ ./build/spiry no-such-example.com 1>/dev/null
ERROR: domain record "no-such-example.com" not found

Caveats

spiry is provided as-is, with no assertions to correctness or completeness at this time.

Functionally, spiry is "fine" but it's a work in progress and like all moving targets, some of the interfaces and options may change as it grows. Once a proper versioned release is cut, this warning will likely be removed.

TO DO

  • Move to GitHub Actions
  • User-definable output, printf style?
    • Y'all like writing parsers? Because this will probably require a small parser.

License

spiry is licensed under the terms of the MIT License.

About

A (trivially) simple tool for checking domain expiration dates

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages