api/graph: add sshKeyByFingerprintInternal query

Allow anonymous internal auth to query a SSH key (with username)
from a fingerprint. To be used by gitsrht-keys.
apply PGP key box changes to registration page

placeholder changes and make command copyable. the command always uses
an example email address as the email address, because the email address
is unknown unless you fill in the email address field and mess up the
PGP key field.
api: fix handling of NULL confirmation hash
Add admin feature to re-send confirmation email

Signed-off-by: Drew DeVault <sir@cmpwn.com>
api: check abused only for successful registration

Currently, the abused check (and with it, the counter increase for rate
limits) for registration happens before the check if a username is
already taken. This causes legitimate users who are trying to find an
available username to run into the rate limit.

Instead, do the check last thing before commiting the transaction, and
rollback if it fails.
.builds/alpine.yml: add -a to apk upgrade
.builds/alpine: upgrade to alpine 3.19
Makefile: update python path
Fix leap day bug on user admin interface

go.*: update sums
go.*: rollback go shit
API: consult with abused on user registration
.builds: drop debian, arch
Fix typo in 2FA recovery code handling

This lead to an internal server error when attempting to use recovery
makefile: add loaders to gqlgen deps

Without the loaders, gqlgen fails with:

    validation failed: packages.Load: /home/simon/src/todo.sr.ht/api/loaders/middleware.go:34:26: undefined: EntitiesByParticipantIDLoader
makefile: use grouped target for loaders

That way make will only run it once for the whole group.
makefile: don't re-generate if unchanged

Use make targets to skip "go generate" invocations when unnecessary.

Contrary to the prior iteration in d95f4641286e ("makefile: don't
re-generate if unchanged"), this version uses api/graph/api/generated.go
instead of api/graph/schema.resolvers.go to track the freshness of
the GraphQL codegen. This fixes the situation where the GraphQL codegen
is skipped because api/graph/schema.resolvers.go exists and is newer
than its dependencies.
Upgrade chi to v5
api: log error on /query/invoice