fix: say the true thing when Gmail, AI or mail is not set up
Two bugs with one shape: the interface confidently told you something that was not so. Connecting Gmail without a registered OAuth client said "Det er der allerede." Thirteen different situations answered a plain `conflict`, and the frontend renders that as "that already exists" — which for four of them is not vague but wrong. An unconfigured Gmail is not a Gmail that is already connected; a second factor that is off is not one that is on; the Inbox is not a project that already exists somewhere else. Those four have their own codes now, and their own sentences. The mail-to-task address came out as todo+…@localhost. VERDANDE_SMTP_FROM defaults to verdande@localhost and the domain was taken from it unconditionally, so an instance with no mail server handed out an address that looks real, can never receive anything, and gives no hint which of the two it is. The default no longer wins over the public hostname, and the response now carries whether a mail server exists at all — because even with the right domain, nothing routes to it until one does. errors.go has always claimed the code list is kept in one place "so the frontend's mapping can be checked against it". Nothing checked it, and the mapping was missing bad_request. Now a test reads both files and fails on a code with no message. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
committed by
Kristian Wind
co-authored by
Claude Opus 5
parent
7e28d8bb92
commit
78ec9b08a1
@@ -52,6 +52,10 @@ what a person reads is decided by the client, which knows what language they are
|
||||
| `forbidden` | 403 | Cross-site request, or admin needed. |
|
||||
| `not_found` | 404 | Does not exist, or you cannot see it. |
|
||||
| `conflict` | 409 | Already exists, or the state does not allow it. |
|
||||
| `gmail_not_configured` | 409 | No Google OAuth client is registered on this server. |
|
||||
| `ai_not_configured` | 409 | No AI provider has been set up. |
|
||||
| `totp_not_enabled` | 409 | Two-factor is off, and the request needs it on. |
|
||||
| `inbox_protected` | 409 | The Inbox cannot be deleted. |
|
||||
| `validation_failed` | 422 | Check `fields`. |
|
||||
| `rate_limited` | 429 | Too many attempts. |
|
||||
| `internal_error` | 500 | Our fault. |
|
||||
|
||||
@@ -1946,6 +1946,13 @@ components:
|
||||
type: object
|
||||
properties:
|
||||
address: { type: string, example: todo+abc123@example.dk }
|
||||
configured:
|
||||
type: boolean
|
||||
description: |
|
||||
Whether a mail server is set up at all. The address is real
|
||||
either way, but with no mail server nothing on the internet
|
||||
routes to it — and an interface that does not say so is
|
||||
promising something that will not happen.
|
||||
Gmail:
|
||||
description: OK
|
||||
content:
|
||||
@@ -1995,6 +2002,10 @@ components:
|
||||
- rate_limited
|
||||
- internal_error
|
||||
- payload_too_large
|
||||
- gmail_not_configured
|
||||
- ai_not_configured
|
||||
- totp_not_enabled
|
||||
- inbox_protected
|
||||
error: { type: string }
|
||||
fields:
|
||||
type: object
|
||||
|
||||
Reference in New Issue
Block a user