user_import: make sure legacy utf-8 encoding doesn't crash (#55008)

This commit is contained in:
Paul Marillonnet 2021-06-23 15:41:02 +02:00
parent dec65efacc
commit e4504ac358
2 changed files with 34 additions and 0 deletions

View File

@ -842,6 +842,9 @@ class UserImportView(MediaMixin, PermissionMixin, TemplateView):
self.user_import = UserImport(uuid)
if not self.user_import.exists():
raise Http404
if self.user_import.encoding == 'utf-8':
with self.user_import.meta_update as meta:
meta['encoding'] = 'utf-8-sig'
return super(UserImportView, self).dispatch(request, uuid, **kwargs)
def get(self, request, uuid, filename=None):

View File

@ -584,6 +584,37 @@ x,x,x,x'''.encode(
app.get('/manage/users/import/%s/%s/' % (_import.uuid, execute.uuid), status=403)
def test_user_import_legacy_encoding(transactional_db, app, admin, ou1, admin_ou1):
response = login(app, admin, '/manage/users/')
response = response.click('Import users')
response.form.set(
'import_file',
Upload(
'users.csv',
'''email key verified,first_name,last_name,phone
tnoel@entrouvert.com,Thomas,Noël,1234
fpeters@entrouvert.com,Frédéric,Péters,5678
john.doe@entrouvert.com,John,Doe,9101112
x,x,x,x'''.encode(
'utf-8'
),
'application/octet-stream',
),
)
response.form.set('encoding', 'utf-8-sig')
response.form.set('ou', str(get_default_ou().pk))
response = response.form.submit()
imports = [i for i in user_import.UserImport.all()]
# oops, utf-8 used to be supported. now it's utf-8-sig but imports may have
# been created with utf-8 encoding and not executed yet
with imports[0].meta_update as meta:
meta['encoding'] = 'utf-8' # not supported anymore
response = response.follow()
response = response.forms['action-form'].submit(name='simulate')
def test_su_permission(app, admin, simple_user):
resp = login(app, admin, '/manage/users/%s/' % simple_user.pk)
assert len(resp.pyquery('button[name="su"]')) == 0