A simple tool for checking domain & TLS certificate expiration dates
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.
$ 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
$ 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>
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 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
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.
- Move to GitHub Actions
- User-definable output,
printfstyle?- Y'all like writing parsers? Because this will probably require a small parser.
spiry is licensed under the terms of the MIT License.