ipreg/superglue.git
7 months agosuperglue-mythic-beasts: find current DS records correctly master
Tony Finch [Wed, 5 Feb 2020 17:38:17 +0000 (17:38 +0000)]
superglue-mythic-beasts: find current DS records correctly

There used to be a bug in their HTML form layout, which has now been
fixed, but it broke our xpath selector.

8 months agoupdate README
Tony Finch [Fri, 17 Jan 2020 13:52:35 +0000 (13:52 +0000)]
update README

8 months agosuperglue-janet: fixes for reverse DNS zones
Tony Finch [Tue, 14 Jan 2020 16:55:19 +0000 (16:55 +0000)]
superglue-janet: fixes for reverse DNS zones

We need to do something a bit more complicated for zones that use
JANET secondary name servers.

The JANET secondaries need to be set up using their special-purpose
ticky boxes rather than in the main server list, so that they are
configured correctly.

We also need to provide a primary server IP address so that the
secondary server configuration knows where to get the zone from.
The zone itself doesn't have this information, so we need to get it
from somewhere else. I've used the login file to contain this
information, but it is not clear whether that is a sensible idea.

Avoid spurious DS record mismatches by clearing the new DS before
comparing delegations.

When resizing the name server list, we need to check that it is not
too big as well as not too small. Before, when we reduced the list
size we continued before the browser had finished, so we got spurious
errors when filling in the name server list.

8 months agosuperglue-janet: ensure we log out before an early exit
Tony Finch [Tue, 14 Jan 2020 16:54:45 +0000 (16:54 +0000)]
superglue-janet: ensure we log out before an early exit

8 months agoSuperglue: better error reporting for missing --zone option
Tony Finch [Tue, 14 Jan 2020 16:40:06 +0000 (16:40 +0000)]
Superglue: better error reporting for missing --zone option

The BUILDARGS wrapper runs before the constructor proper, so it has
not yet checked that `required` members (such as the zone name) are
present. A missing zone name causes Superglue::Delegation to die with
an unhelpful error message.

Instead of adding extra error checking, just skip building the
delegation if there is no zone, so the error is caught later in the
usual way.

8 months agoSuperglue: expose the old and new delegation objects
Tony Finch [Tue, 14 Jan 2020 16:39:36 +0000 (16:39 +0000)]
Superglue: expose the old and new delegation objects

8 months agoSuperglue::Delegation: methods for clearing the NS and DS lists
Tony Finch [Tue, 14 Jan 2020 16:37:37 +0000 (16:37 +0000)]
Superglue::Delegation: methods for clearing the NS and DS lists

This is (mainly) for cases when the user provided DS recrods
(because a zone is signed and they gave us the whole thing)
but the registry doesn't support signed delegations. So we want to
delete the new DS lists before comparing delegations.

9 months agosuperglue-janet: log out before exiting
Tony Finch [Fri, 20 Dec 2019 13:20:05 +0000 (13:20 +0000)]
superglue-janet: log out before exiting

9 months agosuperglue-janet: enable reverse DNS correctly
Tony Finch [Wed, 18 Dec 2019 18:10:32 +0000 (18:10 +0000)]
superglue-janet: enable reverse DNS correctly

Another case where we need to click an element, not type at it.
This time it's a ticky box rather than a menu.

9 months agosuperglue: use --login file to invoke the right script
Tony Finch [Tue, 17 Dec 2019 20:19:16 +0000 (20:19 +0000)]
superglue: use --login file to invoke the right script

9 months agosuperglue-janet: easier bulk updates
Tony Finch [Tue, 17 Dec 2019 18:58:13 +0000 (18:58 +0000)]
superglue-janet: easier bulk updates

If a domain already has an update scheduled, skip it without raising
an error, so that a multi-domain `superglue-janet` wrapper script can
be re-run if there is some other problem.

9 months agosuperglue-janet: reverse DNS is insecure
Tony Finch [Tue, 17 Dec 2019 18:56:57 +0000 (18:56 +0000)]
superglue-janet: reverse DNS is insecure

9 months agosuperglue: add missing login_check calls
Tony Finch [Tue, 17 Dec 2019 18:56:21 +0000 (18:56 +0000)]
superglue: add missing login_check calls

9 months agoSuperglue: ensure consistency of login credentials and client script
Tony Finch [Tue, 17 Dec 2019 18:52:53 +0000 (18:52 +0000)]
Superglue: ensure consistency of login credentials and client script

I made a mistake earlier, invoking one client script with credentials
for a different service. Fortunately a sanity check failed before any
secrets were leaked. This consistency check will protect against
similar errors.

It will also allow the bare `superglue` script to invoke the correct
client script based on the login credentials. So as well as being
safer it will be easier to use.

9 months agosuperglue-mythic-beasts: avoid infinite loop deleting DS records
Tony Finch [Tue, 17 Dec 2019 15:19:39 +0000 (15:19 +0000)]
superglue-mythic-beasts: avoid infinite loop deleting DS records

9 months agosuperglue-mythic-beasts: log out when no changes are needed
Tony Finch [Tue, 17 Dec 2019 15:19:21 +0000 (15:19 +0000)]
superglue-mythic-beasts: log out when no changes are needed

9 months agosuperglue-janet: support insecure to secure transitions
Tony Finch [Mon, 16 Dec 2019 12:12:19 +0000 (12:12 +0000)]
superglue-janet: support insecure to secure transitions

When a domain is insecure, the DS record box says "No DS Key
associated with this domain" which causes superglue to explode in a
mess when treated as a DS record.

9 months agoSuperglue::Delegation: CDS/CDNSKEY support
Tony Finch [Fri, 13 Dec 2019 20:18:03 +0000 (20:18 +0000)]
Superglue::Delegation: CDS/CDNSKEY support

Instead of shelling out to `dnssec-dsfromkey`, implement the login
inside Superglue. This means we don't need t rely on some future
version of `dnssec-dsfromkey` that has CDS/CDNSKEY support. It also
makes it possible to read the zone file from /dev/stdin since we no
longer need to read it twice.

9 months agosuperglue-mythic-beasts: delete DS records without crashing
Tony Finch [Fri, 13 Dec 2019 18:29:52 +0000 (18:29 +0000)]
superglue-mythic-beasts: delete DS records without crashing

When a DS record is deleted, the table of DS records is updated, so we
need to re-fetch the element references.

9 months agoSuperglue::Delegation: fix comparison of DS records
Tony Finch [Thu, 12 Dec 2019 13:48:16 +0000 (13:48 +0000)]
Superglue::Delegation: fix comparison of DS records

We were using a hash with undef values to represent a set of DS
records. However, Data::Compare treats { foo => undef } the same
as { bar => undef }, so DS switch-overs were invisible to it. We
now use empty hash place-holders instead of undef as the values
of the hash containing a set of DS records.

9 months agosuperglue-janet: stop looking when we have found the domain
Tony Finch [Thu, 12 Dec 2019 13:18:48 +0000 (13:18 +0000)]
superglue-janet: stop looking when we have found the domain

When updating cambridge.ac.uk, the filtered list of domains also
contains university-of-cambridge.ac.uk, so the code used to click on
cambridge.ac.uk then (after the page had gone away) go on to check
that university-of-cambridge.ac.uk is not cambridge.ac.uk, which
caused it to bomb out failing to find the element it was looking for.

9 months agosuperglue-mythic-beasts: warn once about Nominet owner changes
Tony Finch [Thu, 12 Dec 2019 13:11:27 +0000 (13:11 +0000)]
superglue-mythic-beasts: warn once about Nominet owner changes

9 months agosuperglue-janet: neater way to select the update time
Tony Finch [Thu, 12 Dec 2019 13:10:12 +0000 (13:10 +0000)]
superglue-janet: neater way to select the update time

9 months agoSuperglue::WebDriver: more accurate wait_for timeouts
Tony Finch [Wed, 11 Dec 2019 18:20:31 +0000 (18:20 +0000)]
Superglue::WebDriver: more accurate wait_for timeouts

When the RTT between superglue and the browser was high, the wait_for
timeout got stretched. Now we use the wall clock to limit the wait
time.

Ironically, right after I made this change I tried to update a .ms
domain which took longer than 30 seconds...

9 months agosuperglue-mythic-beasts: more special cases for .eu
Tony Finch [Wed, 11 Dec 2019 18:04:55 +0000 (18:04 +0000)]
superglue-mythic-beasts: more special cases for .eu

DNSSEC and registration locks aren't supported for .eu

9 months agosuperglue-mythic-beasts: .eu only has owner and tech contacts
Tony Finch [Wed, 11 Dec 2019 17:41:38 +0000 (17:41 +0000)]
superglue-mythic-beasts: .eu only has owner and tech contacts

Maybe this kind of knowledge should be in Superglue::Contact rather
than in the individual scripts...

9 months agosuperglue-mythic-beasts: work around locked domain DS records
Tony Finch [Wed, 11 Dec 2019 16:19:43 +0000 (16:19 +0000)]
superglue-mythic-beasts: work around locked domain DS records

When a domain is locked, the web site does not list the current DS
records. This is expected to be fixed, so I have annotated this
workaround with lots of TODO comments.

When the current DS records are missing and the desired delegation
includes DS records, we always think that the delegation differs, and
proceed to the update stage. This can fail, especially in not-really
mode.

There are two aspects to the workaround:

* When we actually get to the point of updating the DS records,
  re-read the list of current DS records so that the update works
  correctly - we can't re-add an existing record.

* In not-really mode, we need to unlock the domain so that the
  not-really update works correctly. Without this superglue fails to
  find the update form and bombs out.

9 months agosuperglue-mythic-beasts: update DS records
Tony Finch [Wed, 11 Dec 2019 13:52:43 +0000 (13:52 +0000)]
superglue-mythic-beasts: update DS records

This does not work very well because the current DS records are not
available in the web UI when the domain is locked. I have suggested
that this should be changed, but we'll need something better in the
interim.

9 months agoSuperglue::WebDriver: increase wait_for timeout to 30s
Tony Finch [Wed, 11 Dec 2019 13:51:16 +0000 (13:51 +0000)]
Superglue::WebDriver: increase wait_for timeout to 30s

Back-end registry API calls can be slow, causing the response from the
web server to be slow.

9 months agoSuperglue::WebDriver: return an array from `elems`
Tony Finch [Wed, 11 Dec 2019 13:50:03 +0000 (13:50 +0000)]
Superglue::WebDriver: return an array from `elems`

A ref to an array is usually less convenient.

9 months agoSuperglue: separate match status for NS and DS records
Tony Finch [Wed, 11 Dec 2019 13:45:50 +0000 (13:45 +0000)]
Superglue: separate match status for NS and DS records

When we need to update NS and DS separately, we want to be able to
skip unnecessary updates. So when in list context, make
compare_delegeations return separate NS and DS results instead of a
unified result.

9 months agosuperglue-mythic-beasts: simplify and rewrite
Tony Finch [Tue, 10 Dec 2019 20:34:58 +0000 (20:34 +0000)]
superglue-mythic-beasts: simplify and rewrite

The loop turned out to be awkward rather than simplifying.

The main problem was dealing with NS records. The order of records is
not preserved, so it's much easier to use the Superglue::Delegation
object to handle the comparison. But the loop made this rather awkward.

The other awkwardness was doing the NS and DS records separately,
whereas Superglue::Delegation wants to handle them as a unit. This
problem occurred in cases when we only went through the loop once, for
.uk domains and domains that were already unlocked.

Although we lose the optimization of looking at each page only once,
it is a lot simpler to make the script work in the usual way, with
clearly separate phases of looking at things to see if there are
differences, then if necessary changing things to be correct.

9 months agosuperglue-janet: use new improved methods
Tony Finch [Tue, 10 Dec 2019 20:34:32 +0000 (20:34 +0000)]
superglue-janet: use new improved methods

9 months agoSuperglue::Delegation: better DS record error checking
Tony Finch [Tue, 10 Dec 2019 20:33:27 +0000 (20:33 +0000)]
Superglue::Delegation: better DS record error checking

Don't require callers to do the checking.

9 months agoSuperglue::WebDriver: an elem_value method
Tony Finch [Tue, 10 Dec 2019 20:33:04 +0000 (20:33 +0000)]
Superglue::WebDriver: an elem_value method

9 months agosuperglue-mythic-beasts: more error checking and log fettling
Tony Finch [Tue, 10 Dec 2019 17:35:37 +0000 (17:35 +0000)]
superglue-mythic-beasts: more error checking and log fettling

9 months agoSuperglue::WebDriver: a wait_for_elem method
Tony Finch [Tue, 10 Dec 2019 17:09:45 +0000 (17:09 +0000)]
Superglue::WebDriver: a wait_for_elem method

Because there's a lot of wait_for sub { has_elem ... };

10 months agosuperglue-mythic-beasts: update nameservers
Tony Finch [Thu, 21 Nov 2019 19:17:02 +0000 (19:17 +0000)]
superglue-mythic-beasts: update nameservers

10 months agosuperglue-mythic-beasts: eliminate code duplication
Tony Finch [Thu, 21 Nov 2019 18:43:29 +0000 (18:43 +0000)]
superglue-mythic-beasts: eliminate code duplication

Much easier to see the commonality this way.

10 months agosuperglue-mythic-beasts: contact updates are getting there
Tony Finch [Thu, 21 Nov 2019 18:33:07 +0000 (18:33 +0000)]
superglue-mythic-beasts: contact updates are getting there

10 months agosuperglue-janet: generally working OK again
Tony Finch [Wed, 20 Nov 2019 21:41:40 +0000 (21:41 +0000)]
superglue-janet: generally working OK again

* Delegationa and contact details no longer hardcoded horribly

* Various API tweaks for new Superglue(3pm)

Still needs documentation

10 months agosuperglue-ripe: preen AUTHORS section
Tony Finch [Wed, 20 Nov 2019 21:41:22 +0000 (21:41 +0000)]
superglue-ripe: preen AUTHORS section

10 months agoSuperglue::Contact: correct name for export list
Tony Finch [Wed, 20 Nov 2019 21:41:02 +0000 (21:41 +0000)]
Superglue::Contact: correct name for export list

10 months agoSuperglue::WebDriver: minor fixes
Tony Finch [Wed, 20 Nov 2019 21:39:39 +0000 (21:39 +0000)]
Superglue::WebDriver: minor fixes

* Revert DEL / DELETE change

* Do not run destructors after exec() failed, just stop.

* Print the session ID if the user wants to retain it.

10 months agoSuperglue::Restful: better fix for the DELETE problem
Tony Finch [Wed, 20 Nov 2019 21:18:03 +0000 (21:18 +0000)]
Superglue::Restful: better fix for the DELETE problem

DELETE was a red herring, I was thinking of DESTROY, sigh.

It looks like Moo is destroying all the members before calling any
`before DEMOLISH` method. So, re-populate $sg->{user_agent} manually
rather than using `has user_agent => ( default => ...)`.

10 months agoSuperglue/*: preen documentation
Tony Finch [Wed, 20 Nov 2019 19:27:10 +0000 (19:27 +0000)]
Superglue/*: preen documentation

10 months agoSuperglue::WebDriver: overhaul mostly now done
Tony Finch [Wed, 20 Nov 2019 19:19:00 +0000 (19:19 +0000)]
Superglue::WebDriver: overhaul mostly now done

A lot of the methods are shorter now because I combined `elemurl` and
the HTTP request into one method, which turns out to be neater on the
calling side.

Otherwise this change is mostly mechanical.

More work on the documentation is probably needed.

10 months agoSuperglue::Restul: utility method for pretty-printing JSON
Tony Finch [Wed, 20 Nov 2019 19:18:18 +0000 (19:18 +0000)]
Superglue::Restul: utility method for pretty-printing JSON

10 months agoSuperglue::Restful: un-break destructor
Tony Finch [Wed, 20 Nov 2019 19:13:37 +0000 (19:13 +0000)]
Superglue::Restful: un-break destructor

There was a strange error when `superglue-janet` was exiting:

    (in cleanup) Can't call method "request" on an undefined value

This seemed to be something to do with the call to ~$self->DELETE` in
the Superglue::Webdriver->DEMOLISH method. But that was a red herring:
the DEMOLISH method was never called!

The problem turned out to be that the DELETE method was overriding
Moo's destructor. So we need to rename it to something else.

10 months agoSuperglue: neater access to login fields
Tony Finch [Wed, 20 Nov 2019 17:39:17 +0000 (17:39 +0000)]
Superglue: neater access to login fields

In script mode, an accessor becomes a subroutine without parameters.
When that returns a ref to a hash we end up wanting to use it like
`login->{field}` but Perl parses `login` as a bareword rather than a
subroutine name.

Fix this for `login` by making a login accessor which takes a field
name argument so it can be called as `login qw(field)` and rename the
accesor for the bare hash to `regpg_login`.

10 months agoSuperglue::WebDriver: starting to Moo::Roleify
Tony Finch [Fri, 15 Nov 2019 22:08:45 +0000 (22:08 +0000)]
Superglue::WebDriver: starting to Moo::Roleify

10 months agosuperglue-ripe: document login credentials
Tony Finch [Fri, 15 Nov 2019 22:07:37 +0000 (22:07 +0000)]
superglue-ripe: document login credentials

10 months agosuperglue: fix webdriver command line option synopsis
Tony Finch [Fri, 15 Nov 2019 21:52:04 +0000 (21:52 +0000)]
superglue: fix webdriver command line option synopsis

10 months agoSuperglue::Restful: documentation
Tony Finch [Fri, 15 Nov 2019 19:26:21 +0000 (19:26 +0000)]
Superglue::Restful: documentation

10 months agoSuperglue: improve documentation
Tony Finch [Fri, 15 Nov 2019 18:32:18 +0000 (18:32 +0000)]
Superglue: improve documentation

The generic command line documentation is now in superglue(1) and the
extra command line options (which have ended up being only for
WebDriver) are now described there instead of in the module
documentation.

The general idea is that people using the scripts will mostly refer to
the section 1 pages. They will also need to read the file format
documentation in ReGPG::Login and Superglue::Contact. The other
Superglue man pages are for people writing scripts or modules.

I've updated the method and attribute docs so I think they are correct
again.

10 months agoUpdate licence links, author blurbs, SEE ALSO sections
Tony Finch [Fri, 15 Nov 2019 17:24:57 +0000 (17:24 +0000)]
Update licence links, author blurbs, SEE ALSO sections

10 months agosuperglue-ripe: ensure records have a stable order
Tony Finch [Fri, 15 Nov 2019 15:55:32 +0000 (15:55 +0000)]
superglue-ripe: ensure records have a stable order

We don't want a spurious re-ordering of the NS records when the DS
records change (for example).

10 months agoSuperglue: better verbosity levels when comparing delegations
Tony Finch [Fri, 15 Nov 2019 15:20:25 +0000 (15:20 +0000)]
Superglue: better verbosity levels when comparing delegations

When delegations match, be relatively quiet, but be more
noisy when they differ.

10 months agosuperglue-ripe: documentation
Tony Finch [Tue, 12 Nov 2019 19:50:05 +0000 (19:50 +0000)]
superglue-ripe: documentation

10 months agoSuperglue::Restful: censor passwords in URLs
Tony Finch [Tue, 12 Nov 2019 17:53:55 +0000 (17:53 +0000)]
Superglue::Restful: censor passwords in URLs

The RIPE REST API puts authentication credentials in the a `password`
query parameter in the URL, which is an appallingly bad idea.
(The RIPE syncupdates API puts authentication credentials in-band in
the objects being modified, which is also a terrible idea.)

To avoid leaking secrets, censor `password` query parameters in URLs
before logging or reporting errors.

10 months agosuperglue-ripe: a bit more informative in not-really mode
Tony Finch [Tue, 12 Nov 2019 17:53:22 +0000 (17:53 +0000)]
superglue-ripe: a bit more informative in not-really mode

10 months agosuperglue-ripe: uae a loop for retries instead of goto
Tony Finch [Tue, 12 Nov 2019 17:35:03 +0000 (17:35 +0000)]
superglue-ripe: uae a loop for retries instead of goto

10 months agosuperglue-ripe: improve reporting in timeout -> success case
Tony Finch [Mon, 11 Nov 2019 21:58:21 +0000 (21:58 +0000)]
superglue-ripe: improve reporting in timeout -> success case

10 months agosuperglue-ripe: a retry loop for timeout errors
Tony Finch [Mon, 11 Nov 2019 21:41:22 +0000 (21:41 +0000)]
superglue-ripe: a retry loop for timeout errors

Most requests to the RIPE REST API time out, and hide the status of
the update request. So, bodge it by re-trying the request.

Each time around the loop we re-fetch the current state of the object,
hoping that if the update request succeeded quietly, we will notice
that it matches and finish successfully.

Turn the code for massaging RIPE JSON objects into a general debugging
and sanity-checking routine.

10 months agoSuperglue::Restful: more sophisticated error handling
Tony Finch [Mon, 11 Nov 2019 21:37:02 +0000 (21:37 +0000)]
Superglue::Restful: more sophisticated error handling

Add an http_error hook so that scripts can intercept cases when the
response is not JSON.

Allow both http_error and json_error to either return an error
message (which is reported) or nothing (to eat the error).

Both these are needed for superglue-ripe, which needs to spot
timeout errors from RIPE's front-end proxy and re-try the request.

10 months agosuperglue-ripe: do not use API dry-run mode
Tony Finch [Mon, 11 Nov 2019 20:28:56 +0000 (20:28 +0000)]
superglue-ripe: do not use API dry-run mode

Because the API times out for basically all calls, the dry-run mode is
no use for testing an update. Instead, just print the new data that
the object would have been updated to.

10 months agoSuperglue::Restful: flexible URIs and a post_form method
Tony Finch [Mon, 11 Nov 2019 20:18:53 +0000 (20:18 +0000)]
Superglue::Restful: flexible URIs and a post_form method

This was for experimenting with the RIPE syncupdates API, but that
turned out not to be an effective way to work around the problems.
But this code might be useful in other cases.

10 months agosuperglue-ripe: some complaining in the comments
Tony Finch [Mon, 11 Nov 2019 18:33:04 +0000 (18:33 +0000)]
superglue-ripe: some complaining in the comments

10 months agosuperglue-ripe: URI-escape password
Tony Finch [Mon, 11 Nov 2019 18:24:49 +0000 (18:24 +0000)]
superglue-ripe: URI-escape password

And link to API docs.

Having some problems with timeouts of PUT requests.

10 months agoSuperglue::Restful: export user_agent and DELETE
Tony Finch [Mon, 11 Nov 2019 18:21:26 +0000 (18:21 +0000)]
Superglue::Restful: export user_agent and DELETE

It's useful to be able to get at the LWP::UserAgent object, but `ua`
as a name was too short.

DELETE is needed for WebDriver.

Other minor cleaning.

10 months agosuperglue-ripe: PUT updated delegation
Tony Finch [Fri, 8 Nov 2019 16:15:38 +0000 (16:15 +0000)]
superglue-ripe: PUT updated delegation

This ought to work, but now is probably not a sensible time to try it
out for real!

10 months agoSuperglue: handle delegation comparisons in the main framework
Tony Finch [Fri, 8 Nov 2019 16:13:44 +0000 (16:13 +0000)]
Superglue: handle delegation comparisons in the main framework

This seems to be more convenient than making scripts wrangle old and
new delegations explicitly. It also fits better with where the logging
is implemented (which might actually mean the logging needs to move,
if this turns out not to be OK).

Might need to do something similar with contact details...

10 months agosuperglue-ripe: WIP: compare old and new delegations
Tony Finch [Fri, 8 Nov 2019 14:45:27 +0000 (14:45 +0000)]
superglue-ripe: WIP: compare old and new delegations

10 months agoSuperglue::Delegation: support for comparing delegations
Tony Finch [Fri, 8 Nov 2019 14:43:11 +0000 (14:43 +0000)]
Superglue::Delegation: support for comparing delegations

10 months agoSuperglue: fixed command line parsing for -C -D -L
Tony Finch [Fri, 8 Nov 2019 14:41:48 +0000 (14:41 +0000)]
Superglue: fixed command line parsing for -C -D -L

aka --contact --delegation --login

10 months agoSuperglue: fix calling delegated methods in script mode
Tony Finch [Fri, 8 Nov 2019 12:29:44 +0000 (12:29 +0000)]
Superglue: fix calling delegated methods in script mode

The `goto` hack was bypassing method resolution. Fix it by making the
script mode subroutines less clever-hacky-evil.

10 months agoSuperglue: fix calls to sprintf()
Tony Finch [Fri, 8 Nov 2019 12:04:21 +0000 (12:04 +0000)]
Superglue: fix calls to sprintf()

Apparently the first argument to sprintf is in scalar context, so I
can't just pass @_, I need to pass the first element and the rest
separately.

10 months agosuperglue-ripe: WIP refactoring
Tony Finch [Thu, 7 Nov 2019 19:36:24 +0000 (19:36 +0000)]
superglue-ripe: WIP refactoring

Using the Superglue library to get rid of code.

This works as far as getting the current state of a zone's delegation.

Tested with:

    superglue-ripe --debug --login ripe-hostmaster.yml \
            --zone 111.131.in-addr.arpa

10 months agoSuperglue::Delegation: a require_glueless method
Tony Finch [Thu, 7 Nov 2019 19:34:47 +0000 (19:34 +0000)]
Superglue::Delegation: a require_glueless method

For some cases the name servers cannot be in the delegated zone.
This happens with the RIPE's reverse DNS.

10 months agoSuperglue::Restful: convert to a Superglue mixin
Tony Finch [Thu, 7 Nov 2019 19:28:50 +0000 (19:28 +0000)]
Superglue::Restful: convert to a Superglue mixin

Use Superglue->debug(). (Dunno if we should do the same for error
handling?)

Upper-case HTTP verbs.

Drop the user-agent flexibility.

Add a json_error hook for extracting error messages from JSON
responses, because every REST API does this differently.

Get the authorization header from the login sub-object.

10 months agoSuperglue: export `zone` and other small fixes
Tony Finch [Thu, 7 Nov 2019 19:28:27 +0000 (19:28 +0000)]
Superglue: export `zone` and other small fixes

10 months agoSuperglue: more featureful logging
Tony Finch [Thu, 7 Nov 2019 18:08:34 +0000 (18:08 +0000)]
Superglue: more featureful logging

Incorporate (and abolish) ScriptDie, and bring in the trace() function
that I originally wrote for Supeglue::WebDriver.

10 months agoSuperglue: adapt to OOified ReGPG::Login
Tony Finch [Thu, 7 Nov 2019 17:22:27 +0000 (17:22 +0000)]
Superglue: adapt to OOified ReGPG::Login

Instead of trying to do the credential validity checks at construction
time, leave it to the $sg->login_check() and $sg->auth_basic()
methods. This is much cleaner than magic global variables.

10 months agoSuperglue: print options synopsis
Tony Finch [Wed, 6 Nov 2019 20:04:34 +0000 (20:04 +0000)]
Superglue: print options synopsis

Dunno how this was mislaid!

10 months agoSuperglue: documentation and general preening
Tony Finch [Tue, 5 Nov 2019 20:51:13 +0000 (20:51 +0000)]
Superglue: documentation and general preening

The optional module handling is a bit neater.

The LOGIN_FIELDS check list is not so good: in a script it needs to be
initialized in BEGIN{} before `use Superglue qw(:script);` otherwise
the variable is empty at the crucial time and no checking occurs.

I'm not entirely sure how the `restful => 1` flag is going to actually
check that the necessary attributes have been set, or if it is the
right approach.

10 months agoSuperglue: lots of infrastructure
Tony Finch [Thu, 31 Oct 2019 19:25:24 +0000 (19:25 +0000)]
Superglue: lots of infrastructure

There is now a master list of optional modules used for script mode
subroutine exports, and for command line handling.

Command line option specification is extracted from the relevant
modules @SUPERGLUE_GETOPT variables. The usage synopsis is combined
from bits of embedded POD in the script and the modules.

The constructor is becoming useful. The general idea is that
the (canonical) version of the command line options will match the
relevant attribute names, so that the result of GetOptions can be
almost directly passed to new().

10 months agoSuperglue: putting in place dual oo/script support
Tony Finch [Tue, 29 Oct 2019 15:41:02 +0000 (15:41 +0000)]
Superglue: putting in place dual oo/script support

11 months agoSuperglue::Delegation: update tests
Tony Finch [Thu, 24 Oct 2019 16:27:06 +0000 (17:27 +0100)]
Superglue::Delegation: update tests

11 months agoSuperglue::Contact: update tests
Tony Finch [Thu, 24 Oct 2019 16:23:18 +0000 (17:23 +0100)]
Superglue::Contact: update tests

11 months agoSuperglue::Delegation: convert to normal class
Tony Finch [Thu, 24 Oct 2019 16:19:27 +0000 (17:19 +0100)]
Superglue::Delegation: convert to normal class

I was getting stuck on how composing the roles would work, and at
least for delegations we will usually want two objects that we can
compare, so they need to have an independent existence from the main
Superglue object.

11 months agoSuperglue::Contact: nicer constructor syntax
Tony Finch [Thu, 24 Oct 2019 16:02:19 +0000 (17:02 +0100)]
Superglue::Contact: nicer constructor syntax

We will want to compare the contact information from the command line
with the contact information from the registr* so we need a sensible
way to provide source information for error reporting.

11 months agoSuperglue::Contact: merge `get` and `set` into `whois`
Tony Finch [Thu, 24 Oct 2019 15:24:04 +0000 (16:24 +0100)]
Superglue::Contact: merge `get` and `set` into `whois`

This is more friendly for forwarding method calls with the Moo
attribute `handles` option. The @EXPORT_SUPERGLUE list is for methods
that should be forwarded by superglue objects, or exported into
superglue scripts.

11 months agoSuperglue::Delegation: turn into a Moo role
Tony Finch [Tue, 22 Oct 2019 18:13:53 +0000 (19:13 +0100)]
Superglue::Delegation: turn into a Moo role

The aim is to make all the component parts of Superglue into
roles of a single object that keeps the state of a zone's
delegation.

Superglue::Test::Delegation is an almost-trivial Moo class that works
as a test harness for using the Superglue::Delegation role in
isolation from the rest of Superglue.

11 months agot: use Test::TempFile
Tony Finch [Tue, 22 Oct 2019 17:46:17 +0000 (18:46 +0100)]
t: use Test::TempFile

11 months agoSuperglue::Delegation: simpler NS handling, and more tests
Tony Finch [Tue, 22 Oct 2019 17:36:59 +0000 (18:36 +0100)]
Superglue::Delegation: simpler NS handling, and more tests

11 months agoSuperglue::Delegation: invoke dnssec-dsfromkey
Tony Finch [Mon, 21 Oct 2019 18:45:49 +0000 (19:45 +0100)]
Superglue::Delegation: invoke dnssec-dsfromkey

After some fiddling around, this seems like a reasonably simple way to
go about things. Passing the input file directly to `dnssec-dsfromkey`
helps. I've left the DS records as Net::DS::RR objects, since that
gives the caller a reasonable amount of flexibility. Dunno if it's
worth doing something similar for nameservers.

11 months agoSuperglue::Contact: include registry lock and whois privacy
Tony Finch [Mon, 30 Sep 2019 20:38:08 +0000 (21:38 +0100)]
Superglue::Contact: include registry lock and whois privacy

They aren't strictly part of the contact details, but whois privacy is
directly related to them, and a domain's owner can't be changed
without switching off the registry lock so it is relevant too.

An argument against this is that in typical client code most of the
contact details go into one form or API call, whereas the privacy and
lock fields are separate.

From the usage point of view, the privacy flag is likely to be a
matter of consistent policy so it's helpful to keep it in the same
file as the contact details. The lock field is more likely to change
as a special case, so it probably wants its own command line option to
override the setting from the contact file.

Thanks to JP Mens for the pun.

11 months agoSuperglue::Contact: test with actual YAML
Tony Finch [Mon, 30 Sep 2019 19:31:10 +0000 (20:31 +0100)]
Superglue::Contact: test with actual YAML

11 months agoSuperglue::Contact: a few tests and bug fixes
Tony Finch [Mon, 30 Sep 2019 18:34:48 +0000 (19:34 +0100)]
Superglue::Contact: a few tests and bug fixes

11 months agotest: getting started
Tony Finch [Mon, 30 Sep 2019 18:17:53 +0000 (19:17 +0100)]
test: getting started