Connections → Your own email: the form answers 500 for everybody, because a secret field's help is lazy text #359
Labels
No labels
accessibility
authentication
breaking change
bug
documentation
enhancement
interface
internationalisation
observability
performance
security
tier
1
tier
2
tier
3
tier/4
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
Postulo/postulo#359
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Found on 2026-09-29 in a read-only review of postulo at
95348908d, rendering the connection form of each built-in connected plugin with the Django test client.Checked again on 2026-10-01 against
mainat0a5cad587: still present.form_field_forbuilds a secret field's help withstr.join, which accepts onlystr. The Your own email outbox gives itspasswordfield lazy help text, so building its form raisesTypeErroron every GET and POST. Nobody can set up the outbox that #149 and #151 built, including the XOAUTH2 path Microsoft 365 will require.plugins/forms.py:125(form_field_for, the secret branch:help_text=" ".join(part for part in (spec.help, hint) if part));plugins/own_mail/__init__.py:109-119(thepasswordFieldSpec,help=_lazy(...)).GET /settings/connections/add/outbox/own-mail/raisesTypeError: sequence item 0: expected str instance, __proxy__ foundatplugins/forms.py:125. The webhook and browser forms answer 200, because their plugins passstr(_(...)); the non-secret branches hand lazy text to Django, which accepts it. The help text has been lazy since the plugin arrived in9d34da0eb(2026-09-09), so no own-mail connection has ever been saved through the interface.FieldSpeclazy help, as the built-in does, gets the same 500. No test renders the own-mail form (tests/test_outbox.pymakes no client request), which is how it went unnoticed." ".join(str(part) for part in (spec.help, hint) if part). Do not land this before the issue about the outbox reaching private addresses whenPOSTULO_EMAIL_HOSTis set, because this fix is what makes that one reachable.Done when
tests/test_connections.pyhas a parametrised test that renders the create form (GET, and a POST with empty values) for every registered connected plugin and expects no 500; it fails today onown-mail.