- setup js tooling (node modules and Makefile)
- setup prettier so js code can be standardized
- move js and scss source dirs around
- setup react and react-router, making them take control of
/forms, /dashboard and /forms/<hashid> and so on
- remove all forms dashboard templates, moving their markup and logic to jsx
- remove unnecessary js code and rename submissions.scss to settings.scss
- create formspree/forms/api.py and move all actions created from the
dashboard into there
- remove some bloat
- url_for(request_unconfirm_form) link on emails we send.
- clicking on that link shows a page that says a confirmation was sent.
- clicking on the confirmation link unconfirms the form.
- after unconfirming the form, a list of still confirmed forms for
the given email address is shown, so the user can choose if he wants
to unsubscribe from other forms.
for the final unconfirmation url, a <digest> is generated deterministically
from the form id (so form unconfirmation urls are secret, but can be reused).
for the unconfirm_multiple endpoint (after the first form is already
unconfirmed we use a flask.session, which lasts only for the given session.)
no recaptcha is employed anywhere.
submission
+-----------+
| |
| |
| |
| | +
| | | +-----------------+
+-----------+ |disable | |
+------> | |
| |
| confirmation |
| sent to your |
+---------------+ | email |
| | | |
| | + +-----------------+
| disable form| |
| at x for | <-----+
| address y? |
| |
| | +--------------------+
+---------------+ | |
| |
+ | disabled form x |
| | for address y |
| | |
| | do you want to |
| | disable these |
| | other forms? |
+------> | |
| a |
| |
| b |
| |
| c |
| |
| all |
| |
+--------------------+