Validate range of geo_lat/geo_lon values

This commit is contained in:
Raphael Michel
2021-01-04 10:34:47 +01:00
parent 6cf1074b8d
commit be413693ce
4 changed files with 34 additions and 4 deletions

View File

@@ -10,7 +10,9 @@ from django.conf import settings
from django.core.exceptions import ValidationError
from django.core.files.storage import default_storage
from django.core.mail import get_connection
from django.core.validators import RegexValidator
from django.core.validators import (
MaxValueValidator, MinValueValidator, RegexValidator,
)
from django.db import models
from django.db.models import Exists, OuterRef, Prefetch, Q, Subquery, Value
from django.template.defaultfilters import date as _date
@@ -393,10 +395,18 @@ class Event(EventMixin, LoggedModel):
geo_lat = models.FloatField(
verbose_name=_("Latitude"),
null=True, blank=True,
validators=[
MinValueValidator(-90),
MaxValueValidator(90),
]
)
geo_lon = models.FloatField(
verbose_name=_("Longitude"),
null=True, blank=True,
validators=[
MinValueValidator(-180),
MaxValueValidator(180),
]
)
plugins = models.TextField(
null=False, blank=True,
@@ -1121,10 +1131,18 @@ class SubEvent(EventMixin, LoggedModel):
geo_lat = models.FloatField(
verbose_name=_("Latitude"),
null=True, blank=True,
validators=[
MinValueValidator(-90),
MaxValueValidator(90),
]
)
geo_lon = models.FloatField(
verbose_name=_("Longitude"),
null=True, blank=True
null=True, blank=True,
validators=[
MinValueValidator(-180),
MaxValueValidator(180),
]
)
frontpage_text = I18nTextField(
null=True, blank=True,

View File

@@ -134,6 +134,8 @@ class EventWizardBasicsForm(I18nModelForm):
'presale_start': SplitDateTimePickerWidget(),
'presale_end': SplitDateTimePickerWidget(attrs={'data-date-after': '#id_basics-presale_start_0'}),
'slug': SlugWidget,
'geo_lat': forms.NumberInput(attrs={'min': '-90', 'max': '90'}),
'geo_lon': forms.NumberInput(attrs={'min': '-180', 'max': '180'}),
}
def __init__(self, *args, **kwargs):
@@ -392,7 +394,9 @@ class EventUpdateForm(I18nModelForm):
'date_admission': SplitDateTimePickerWidget(attrs={'data-date-default': '#id_date_from_0'}),
'presale_start': SplitDateTimePickerWidget(),
'presale_end': SplitDateTimePickerWidget(attrs={'data-date-after': '#id_presale_start_0'}),
'sales_channels': CheckboxSelectMultiple()
'sales_channels': CheckboxSelectMultiple(),
'geo_lat': forms.NumberInput(attrs={'min': '-90', 'max': '90'}),
'geo_lon': forms.NumberInput(attrs={'min': '-180', 'max': '180'}),
}

View File

@@ -55,6 +55,8 @@ class SubEventForm(I18nModelForm):
'date_admission': SplitDateTimePickerWidget(attrs={'data-date-after': '#id_date_from_0'}),
'presale_start': SplitDateTimePickerWidget(),
'presale_end': SplitDateTimePickerWidget(attrs={'data-date-after': '#id_presale_start_0'}),
'geo_lat': forms.NumberInput(attrs={'min': '-90', 'max': '90'}),
'geo_lon': forms.NumberInput(attrs={'min': '-180', 'max': '180'}),
}

View File

@@ -68,7 +68,13 @@ $(function () {
function getpoint() {
if ($lat.val() !== "" && $lon.val() !== "") {
return [parseFloat($lat.val().replace(",", ".")), parseFloat($lon.val().replace(",", "."))];
var p = [parseFloat($lat.val().replace(",", ".")), parseFloat($lon.val().replace(",", "."))];
// Clip to valid ranges. Very invalid lon/lat values can even lead to browser crashes in leaflet apparently
if (p[0] < -90) p[0] = -90
if (p[0] > 90) p[0] = 90
if (p[1] < -180) p[1] = -180
if (p[1] > 180) p[1] = 180
return p
} else {
return [0.0, 0.0];
}