valid: Add Errorf function
Add an Errorf function to create GraphQL errors without a validation
context.
database: always include table name in SELECT
When JOINs are performed on the auto-generated SELECT query,
multiple tables may have the same field names. For instance, in
lists.sr.ht the "list" and "subscription" tables both have an "id"
column. When performing a "mailingLists" GraphQL query this results
in this error:
pq: column reference "id" is ambiguous
The old query looks like this:
SELECT "description", "name", "id", "owner_id", "updated", COALESCE(
access.permissions,
CASE WHEN list.owner_id = $1
THEN $2
ELSE CASE WHEN sub.id IS NOT NULL
THEN list.subscriber_permissions
ELSE null END
END,
list.nonsubscriber_permissions | list.account_permissions), access.id AS access_id, sub.id AS subscription_id FROM list LEFT JOIN access ON
access.list_id = list.id AND
access.user_id = $3 LEFT JOIN subscription sub ON
sub.list_id = list.id AND
sub.user_id = $4 WHERE list.owner_id = $5 ORDER BY "updated" DESC LIMIT 26
The new query looks like this:
SELECT "description", "name", "list"."id", "list"."owner_id", "list"."updated", COALESCE(
access.permissions,
CASE WHEN list.owner_id = $1
THEN $2
ELSE CASE WHEN sub.id IS NOT NULL
THEN list.subscriber_permissions
ELSE null END
END,
list.nonsubscriber_permissions | list.account_permissions), access.id AS access_id, sub.id AS subscription_id FROM list LEFT JOIN access ON
access.list_id = list.id AND
access.user_id = $3 LEFT JOIN subscription sub ON
sub.list_id = list.id AND
sub.user_id = $4 WHERE list.owner_id = $5 ORDER BY "updated" DESC LIMIT 26
webhooks: Add FilterWebhooks function
Bugfix, mail config placed in wrong setting.
Replace x/crypto package by ProtonMail/go-crypto to support ed25519 OpenPGP keys
Add support for mail setups that don't support TLS or Auth
Allow AUTH_COOKIE to access @private fields
auth: fix nil reference in auth method check
Add @anoninternal support code
This is a slightly better approach to the previous commit.
webhooks: fix failing test
auth: implement internal anonymous authentication
This is used for meta.sr.ht's GraphQL user registration resolver, which
needs to run prior to the user's information being added to the database.
server/email: handle errors out of GQL context
webhooks/legacy: fetch subscriptions upfront
This fixes a race condition when delivering webhooks for resource
deletion events, in which the subscriptions would be removed from the
delete cascade before the task to fetch them executes. This requires the
downstream code to call Queue before committing the delete transaction,
and updates the API to include a context argument for the connection
pool.
server/email: include variables
server: move auth middlware ahead of RealIP
So that @internal auth can correctly test against internal-ipnet.
valid: fix nil values in OptionalString
valid: add generic optional interface