mirror of
https://github.com/pretix/pretix.git
synced 2026-05-06 15:24:02 +00:00
Validate range of geo_lat/geo_lon values
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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'}),
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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'}),
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user