Fix problems with invalid OAuth application form and ListEditField
Review Request #12468 — Created July 13, 2022 and submitted — Latest diff uploaded
A validation error can occur when submitting the OAuth app form (such as when
redirect URIs are invalid URLs). When these validation errors occur, it messes
up the flow between ListEditField and ListEditWidget (which are the field and
widget for the redirect URIs field) and causing a value error.On a normal basis, when submitting the form, the
ListEditWidget.value_from_datadict
method is called, which extracts the
redirect URIs data from the form and returns a list of redirect URIs. Then this
list is passed toListEditField.to_python
, which takes the list and transforms
it into a string of comma separated redirect URIs, and this gets stored in the
database. When the page reloads after the form is submitted,
ListEditField.prepare_value
is called to take the string from the database and
turn it into a list to pass to the widget for when it renders. This is good.When a validation error occurs, the list is never passed to
ListEditField.to_python
because we're not storing in the database since
there's an error. So instead when the page reloads, the list from
ListEditWidget.value_from_datadict
is passed to
ListEditField.prepare_value
, which only accepts strings orNone
, and this
is why we're getting the value error.To fix this, we allow
ListEditField.prepare_value
to handle lists. We make
this change toListEditDictionaryField.prepare_value
as well, so that it
can also handle cases where a form that contains the field errors out.
- Ran tests in
djblets/forms/tests
- Ran tests in
/reviewboard/webapi/tests/testauth_app.py
- Ran tests in
./reviewboard/admin/tests/test_lexers_mapping_widget.py
- Manually tested the OAuth Application form with combinations of valid and
invalid redirect URIs and blank URIs