widgets: harden map widget (#73960)

This commit is contained in:
Frédéric Péters 2023-01-30 18:23:11 +01:00 committed by Gitea
parent d4ad7c4d75
commit a7995ceee9
2 changed files with 11 additions and 3 deletions

View File

@ -1274,6 +1274,10 @@ def test_map_widget():
assert '<label' in str(widget.render())
assert '<label ' not in str(widget.render_widget_content())
widget = MapWidget('test', title='Map')
mock_form_submission(req, widget, hidden_html_vars={'test$latlng': 'blah'})
assert widget.has_error()
pub.load_site_options()
pub.site_options.set('options', 'map-bounds-top-left', '1.23;2.34')
pub.site_options.set('options', 'map-bounds-bottom-right', '2.34;3.45')

View File

@ -3272,9 +3272,13 @@ class MapWidget(CompositeWidget):
CompositeWidget._parse(self, request)
self.value = self.get('latlng')
if self.value:
lat, lon = self.value.split(';')
lat_lon = misc.normalize_geolocation({'lat': lat, 'lon': lon})
self.value = '%s;%s' % (lat_lon['lat'], lat_lon['lon']) if lat_lon else None
try:
lat, lon = self.value.split(';')
except ValueError:
self.set_error(_('Invalid value'))
else:
lat_lon = misc.normalize_geolocation({'lat': lat, 'lon': lon})
self.value = '%s;%s' % (lat_lon['lat'], lat_lon['lon']) if lat_lon else None
def set_value(self, value):
super().set_value(value)