agendas: fix import of incorrect ics file (#88090)
gitea/chrono/pipeline/head This commit looks good Details

This commit is contained in:
Lauréline Guérin 2024-03-15 14:02:57 +01:00
parent a88db00e04
commit d1c2af48c4
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
2 changed files with 11 additions and 3 deletions

View File

@ -3975,15 +3975,18 @@ class TimePeriodExceptionSource(WithInspectMixin, models.Model):
data = clean_import_data(cls, data)
if data.get('ics_file'):
data['ics_file'] = ContentFile(base64.b64decode(data['ics_file']), name=data['ics_filename'])
try:
data['ics_file'] = ContentFile(base64.b64decode(data['ics_file']), name=data['ics_filename'])
except base64.binascii.Error:
raise AgendaImportError(_('Bad ics file'))
desk = data.pop('desk')
settings_slug = data.pop('settings_slug')
ics_url = data.pop('ics_url', None)
ics_filename = data.pop('ics_filename', None)
source, _ = cls.objects.update_or_create(
source = cls.objects.update_or_create(
desk=desk, settings_slug=settings_slug, ics_filename=ics_filename, ics_url=ics_url, defaults=data
)
)[0]
if settings_slug:
if source.enabled:
source.enable()

View File

@ -899,6 +899,11 @@ def test_import_export_time_period_exception_source_ics_file(mocked_get):
assert TimePeriodExceptionSource.objects.count() == 1
assert TimePeriodException.objects.count() == 2
payload['agendas'][0]['desks'][0]['exception_sources'][0]['ics_file'] = 'garbage'
with pytest.raises(AgendaImportError) as excinfo:
import_site(payload)
assert '%s' % excinfo.value == 'Bad ics file'
@override_settings(
EXCEPTIONS_SOURCES={