dispatch::request recognises Twt-Register, Twt-Help, Twt-Admit, Twt-Block and Twt-Registration, validating values but deciding nothing: whether the sender may do what they asked is the caller's business, as with the rest of this module. One command per mail. Two requests have no sensible order, and a request mixed with a feed command would make the reply ambiguous about what took effect. Twt-Register takes an optional nick, validated against the nick rule rather than the path rule, since the value lands in feed metadata. dispatch::claimed is follow_rotation's Reply-To extraction, lifted out and documented for what it actually proves: the sender signed this URI. It does not prove they hold the mailbox it names. follow_rotation is safe on that alone only because it additionally demands a feed already bound to the address and a signed chain from the key on file; a registration path has neither and must resolve the address itself. Twt-Help ignores any value rather than refusing one — failing a request for help on a typo would be perverse. Also narrows i18n's id list back to the ids looked up by name: generating it from the catalogue made that test assert the catalogue against itself. The reason-* ids are covered by walking the enum instead, which cannot drift.
82 lines
3.3 KiB
Text
82 lines
3.3 KiB
Text
## Loaded once by `src/i18n.rs`; every string the daemon mails to an author
|
|
## lives here, grouped by the mail it belongs to. Operator-facing CLI output is
|
|
## deliberately not here — see the module header.
|
|
##
|
|
## Keep the `-32` style placeables out: these bodies are read in plain-text
|
|
## mail clients and on phones, so they stay short lines and no markup.
|
|
|
|
## Error replies — a mail the daemon could not apply
|
|
|
|
reply-subject = twtxt: { $reason }
|
|
reply-body =
|
|
Your mail could not be applied.
|
|
|
|
Reason: { $reason }
|
|
|
|
Quoted mail:
|
|
{ $quoted }
|
|
|
|
## Retention — the one-time warning as a feed approaches its size cap
|
|
|
|
cap-warning-subject = twtxt: feed at 90% of its size cap
|
|
cap-warning-body =
|
|
Your feed has reached 90% of the { $cap }-byte cap.
|
|
|
|
In hard-limit mode (the default) a full feed rejects new records; delete
|
|
some with Twt-Delete, or choose FIFO pruning with Twt-Prune: fifo, which
|
|
drops the oldest records to make room.
|
|
|
|
## Admission — the mail that hands over the accept token
|
|
|
|
welcome-subject = twtxt: your feed is ready
|
|
welcome-body =
|
|
Your smolboid feed is live: { $url }
|
|
|
|
Post by sending mail to this address with the twt as the body. Manage it
|
|
with Twt-Nick, Twt-Delete, Twt-Repost and Twt-Prune frontmatter fields
|
|
(PLAN.md).
|
|
|
|
## Rejection reasons — one per `reason::Reason` variant, rendered into the
|
|
## reply subject and body above. Each is a sentence fragment completing
|
|
## "your mail could not be applied because …", so they start lowercase and
|
|
## carry the fix where there is one.
|
|
|
|
reason-body-not-utf8 = body is not UTF-8
|
|
reason-post-not-canonical = post mail is not in canonical form
|
|
reason-repost-not-canonical = repost mail is not in canonical form
|
|
reason-fields-beyond-reply-to =
|
|
post mail carries fields beyond Reply-To (Subject, headers or an Accept
|
|
token); resend the bare text
|
|
reason-nick-invalid = nick must be 1-30 bytes of a-z, 0-9 or hyphen
|
|
reason-delete-needs-timestamp = Twt-Delete needs an RFC 3339 UTC timestamp
|
|
reason-prune-mode-unknown = unknown prune mode `{ $got }`, want fifo or off
|
|
|
|
## Post rules, from core::rules::RuleError
|
|
|
|
reason-too-many-codepoints = more than 160 Unicode code points
|
|
reason-too-many-bytes = more than 640 bytes
|
|
reason-forbidden-char = contains TAB, LF, CR or U+2028
|
|
reason-bad-timestamp = not an RFC 3339 UTC timestamp at second precision
|
|
reason-duplicate-timestamp = timestamp already exists in this feed
|
|
|
|
## Retention and quota, from the apply step
|
|
|
|
reason-over-quota-post = daily post quota exceeded; try tomorrow
|
|
reason-over-quota-repost = daily repost quota exceeded; try tomorrow
|
|
reason-collision = timestamp { $timestamp } already exists; wait a second and resend
|
|
reason-feed-full =
|
|
feed is at its size cap; delete records with Twt-Delete or choose
|
|
Twt-Prune: fifo
|
|
reason-reply-to-changed =
|
|
your Reply-To does not match the feed's bound author { $author }; send from
|
|
that address or mail the operator
|
|
reason-no-record-at = no record at { $timestamp }
|
|
|
|
## Mailbox requests — register, help and the admin commands
|
|
|
|
reason-one-command-per-mail =
|
|
one command per mail: send Twt-Register, Twt-Help, Twt-Admit, Twt-Block or
|
|
Twt-Registration on its own, and feed commands in a separate mail
|
|
reason-bad-address = `{ $got }` is not a smolmail address
|
|
reason-registration-mode-unknown =
|
|
unknown registration mode `{ $got }`, want open, closed or silent
|