From 8cc61e0cf70ab40f6af47574615563177a426283 Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Tue, 13 Mar 2018 14:00:51 +0000 Subject: [PATCH] Changed the meeting materials uploads to use the upload file encoding found by file-magic when decoding the upload content, and also return errors to the user if decoding the upload fails. Fixes issue #2469. This will also have the benefit (since we're saving with utf-8 encoding after decoding) of having meeting materials consistently stored with a consistent encoding on the server. - Legacy-Id: 14781 --- ietf/meeting/views.py | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/ietf/meeting/views.py b/ietf/meeting/views.py index 81b54c459..7f23be594 100644 --- a/ietf/meeting/views.py +++ b/ietf/meeting/views.py @@ -1178,9 +1178,12 @@ def upload_session_bluesheets(request, session_id, num): filename = '%s-%s%s'% ( doc.name, doc.rev, ext) doc.external_url = filename e = NewRevisionDocEvent.objects.create(doc=doc, rev=doc.rev, by=request.user.person, type='new_revision', desc='New revision available: %s'%doc.rev) - doc.save_with_history([e]) - handle_upload_file(file, filename, session.meeting, 'bluesheets') - return redirect('ietf.meeting.views.session_details',num=num,acronym=session.group.acronym) + save_error = handle_upload_file(file, filename, session.meeting, 'bluesheets', request=request, encoding=form.file_encoding[file.name]) + if save_error: + form.add_error(None, save_error) + else: + doc.save_with_history([e]) + return redirect('ietf.meeting.views.session_details',num=num,acronym=session.group.acronym) else: form = UploadBlueSheetForm() @@ -1277,8 +1280,12 @@ def upload_session_minutes(request, session_id, num): e = NewRevisionDocEvent.objects.create(doc=doc, by=request.user.person, type='new_revision', desc='New revision available: %s'%doc.rev, rev=doc.rev) doc.save_with_history([e]) # The way this function builds the filename it will never trigger the file delete in handle_file_upload. - handle_upload_file(file, filename, session.meeting, 'minutes') - return redirect('ietf.meeting.views.session_details',num=num,acronym=session.group.acronym) + save_error = handle_upload_file(file, filename, session.meeting, 'minutes', request=request, encoding=form.file_encoding[file.name]) + if save_error: + form.add_error(None, save_error) + else: + doc.save_with_history([e]) + return redirect('ietf.meeting.views.session_details',num=num,acronym=session.group.acronym) else: form = UploadMinutesForm(show_apply_to_all_checkbox) @@ -1377,8 +1384,12 @@ def upload_session_agenda(request, session_id, num): e = NewRevisionDocEvent.objects.create(doc=doc,by=request.user.person,type='new_revision',desc='New revision available: %s'%doc.rev,rev=doc.rev) doc.save_with_history([e]) # The way this function builds the filename it will never trigger the file delete in handle_file_upload. - handle_upload_file(file, filename, session.meeting, 'agenda', request) - return redirect('ietf.meeting.views.session_details',num=num,acronym=session.group.acronym) + save_error = handle_upload_file(file, filename, session.meeting, 'agenda', request=request, encoding=form.file_encoding[file.name]) + if save_error: + form.add_error(None, save_error) + else: + doc.save_with_history([e]) + return redirect('ietf.meeting.views.session_details',num=num,acronym=session.group.acronym) else: form = UploadAgendaForm(show_apply_to_all_checkbox, initial={'apply_to_all':session.type_id=='session'}) @@ -1479,9 +1490,13 @@ def upload_session_slides(request, session_id, num, name): e = NewRevisionDocEvent.objects.create(doc=doc,by=request.user.person,type='new_revision',desc='New revision available: %s'%doc.rev,rev=doc.rev) doc.save_with_history([e]) # The way this function builds the filename it will never trigger the file delete in handle_file_upload. - handle_upload_file(file, filename, session.meeting, 'slides') - post_process(doc) - return redirect('ietf.meeting.views.session_details',num=num,acronym=session.group.acronym) + save_error = handle_upload_file(file, filename, session.meeting, 'slides', request=request, encoding=form.file_encoding[file.name]) + if save_error: + form.add_error(None, save_error) + else: + doc.save_with_history([e]) + post_process(doc) + return redirect('ietf.meeting.views.session_details',num=num,acronym=session.group.acronym) else: initial = {} if slides: