misc: add support for lazy password fields (#38882)

This commit is contained in:
Frédéric Péters 2020-01-11 09:45:38 +01:00
parent f07937dfc3
commit 4b86a73ab2
2 changed files with 18 additions and 0 deletions

View File

@ -564,6 +564,7 @@ def variable_test_data(pub):
fields.StringField(id='10', label='number1', varname='term1'),
fields.StringField(id='11', label='number2', varname='term2'),
fields.StringField(id='12', label='float1', varname='value'),
fields.PasswordField(id='13', label='pwd', varname='pwd'),
]
formdef.workflow_roles = {'_receiver': role.id}
formdef.geolocations = {'base': 'Base'}
@ -587,6 +588,11 @@ def variable_test_data(pub):
'10': '3',
'11': '4',
'12': '3.14',
'13': {
'cleartext': 'a',
'md5': '0cc175b9c0f1b6a831c399e269772661',
'sha1': '86f7e437faa5a7fce15d1ddcb9eaeaea377667b8'
},
}
formdata.data['5'].receive([b'hello world'])
formdata.geolocations = {'base': {'lat': 1, 'lon': 2}}
@ -833,6 +839,7 @@ def test_lazy_variables(pub, variable_test_data):
for item in enumerate(context['form_var_foo_foo']):
assert item in [(0, 'b'), (1, 'a'), (2, 'r')]
assert context['form_var_foo_foo_baz_baz'] == 'other'
assert context['form_var_pwd_cleartext'] == 'a'
def test_lazy_variables_missing(pub, variable_test_data):
formdef = FormDef.select()[0]

View File

@ -480,6 +480,8 @@ class LazyFormDataVar(object):
return LazyFieldVarDate(self._data, field, self._formdata)
if field.key == 'map':
return LazyFieldVarMap(self._data, field, self._formdata)
if field.key == 'password':
return LazyFieldVarPassword(self._data, field, self._formdata)
return LazyFieldVar(self._data, field, self._formdata)
@ -683,6 +685,15 @@ class LazyFieldVarMap(LazyFieldVar):
return self._data.get(self._field.id).split(*args, **kwargs)
class LazyFieldVarPassword(LazyFieldVar):
def __getitem__(self, key):
# get subpart (cleartext, md5, sha1) if it exists
field_value = self._data.get(self._field.id)
if key in field_value:
return field_value[key]
return super(LazyFieldVarPassword, self)._getitem__(key)
class LazyUser(object):
def __init__(self, user):
self._user = user