0001-add-option-add_user_identifier-to-wscall-10806.patch
help/fr/wf-wscall.page | ||
---|---|---|
38 | 38 |
</p> |
39 | 39 | |
40 | 40 |
<p> |
41 |
La case à cocher « Identifier l'utilisateur appelant » indique que l'identifiant |
|
42 |
de fédération ou l'email si le premier est absent, doivent être ajoutés comme |
|
43 |
paramètre d'URL. Le paramètre s'appelle <code>NameID</code> dans le premier cas |
|
44 |
et <code>email</code> dans le second. |
|
45 |
</p> |
|
46 | ||
47 |
<p> |
|
41 | 48 |
La case à cocher « Envoyer le formulaire (POST, en JSON) » indique que |
42 | 49 |
l'ensemble des données du formulaire doivent être transmises, avec un appel de |
43 | 50 |
type <code>POST</code>, dont le contenu correspondra au formulaire encodé au |
tests/test_workflows.py | ||
---|---|---|
632 | 632 |
formdef.fields = [] |
633 | 633 |
formdef.store() |
634 | 634 | |
635 |
user = pub.user_class() |
|
636 |
user.name_identifiers = ['xxx'] |
|
637 |
user.store() |
|
638 | ||
635 | 639 |
formdata = formdef.data_class()() |
640 |
formdata.user = user |
|
636 | 641 |
formdata.just_created() |
637 | 642 |
formdata.store() |
638 | 643 | |
... | ... | |
871 | 876 |
assert qs['evalme'] == [formdata.get_display_id()] |
872 | 877 |
assert qs['str'] == ['abcd'] |
873 | 878 | |
879 |
item = WebserviceCallStatusItem() |
|
880 |
item.method = 'GET' |
|
881 |
item.post = False |
|
882 |
item.url = 'http://remote.example.net?in_url=1' |
|
883 |
item.add_user_identifier = True |
|
884 |
item.perform(formdata) |
|
885 |
assert http_requests.get_last('method') == 'GET' |
|
886 |
qs = urlparse.parse_qs(http_requests.get_last('url').split('?')[1]) |
|
887 |
assert set(qs.keys()) == set(['in_url', 'NameID']) |
|
888 |
assert qs['in_url'] == ['1'] |
|
889 |
assert qs['NameID'] == ['xxx'] |
|
890 | ||
891 |
user.name_identifiers = [] |
|
892 |
user.email = 'john.doe@example.com' |
|
893 |
user.store() |
|
894 |
item = WebserviceCallStatusItem() |
|
895 |
item.method = 'GET' |
|
896 |
item.post = False |
|
897 |
item.url = 'http://remote.example.net?in_url=1' |
|
898 |
item.add_user_identifier = True |
|
899 |
item.perform(formdata) |
|
900 |
assert http_requests.get_last('method') == 'GET' |
|
901 |
qs = urlparse.parse_qs(http_requests.get_last('url').split('?')[1]) |
|
902 |
assert set(qs.keys()) == set(['in_url', 'email']) |
|
903 |
assert qs['in_url'] == ['1'] |
|
904 |
assert qs['email'] == ['john.doe@example.com'] |
|
905 | ||
874 | 906 | |
875 | 907 |
def test_timeout(pub): |
876 | 908 |
workflow = Workflow(name='timeout') |
wcs/wf/wscall.py | ||
---|---|---|
109 | 109 |
qs_data = None |
110 | 110 |
_method = None |
111 | 111 |
response_type = 'json' |
112 |
add_user_identifier = False |
|
112 | 113 | |
113 | 114 |
action_on_4xx = ':stop' |
114 | 115 |
action_on_5xx = ':stop' |
... | ... | |
140 | 141 |
'action_on_4xx', 'action_on_5xx', 'action_on_bad_data', |
141 | 142 |
'action_on_network_errors', 'notify_on_errors', |
142 | 143 |
'record_errors', 'label', 'method', 'response_type', |
143 |
'qs_data') |
|
144 |
'qs_data', 'add_user_identifier')
|
|
144 | 145 | |
145 | 146 |
def add_parameters_widgets(self, form, parameters, prefix='', formdef=None): |
146 | 147 |
if 'label' in parameters: |
... | ... | |
160 | 161 |
title=_('Query string data'), |
161 | 162 |
value=self.qs_data or {}, |
162 | 163 |
element_value_type=ComputedExpressionWidget) |
164 |
if 'add_user_identifier' in parameters: |
|
165 |
form.add(CheckboxWidget, '%sadd_user_identifier' % prefix, |
|
166 |
title=_('Add user identifier'), |
|
167 |
value=self.add_user_identifier) |
|
163 | 168 |
methods = collections.OrderedDict( |
164 | 169 |
[('GET', _('GET')), ('POST', _('POST (JSON)'))]) |
165 | 170 |
if 'method' in parameters: |
... | ... | |
244 | 249 |
variables = get_publisher().substitutions.get_context_variables() |
245 | 250 |
url = get_variadic_url(url, variables) |
246 | 251 | |
247 |
if self.qs_data: # merge qs_data into url |
|
252 |
qs_data = self.qs_data or {} |
|
253 |
if self.add_user_identifier: |
|
254 |
user = formdata.get_user() |
|
255 |
if user: # FIXME: what to I do if there is no user ? fail ? log ? |
|
256 |
if user.name_identifiers: |
|
257 |
qs_data['NameID'] = user.name_identifiers[0] |
|
258 |
elif user.email: |
|
259 |
qs_data['email'] = user.email |
|
260 |
# FIXME: what do I do if there is no identifier ? fail ? log ? |
|
261 |
if qs_data: # merge qs_data into url |
|
248 | 262 |
publisher = get_publisher() |
249 | 263 |
parsed = urlparse.urlparse(url) |
250 | 264 |
qs = list(urlparse.parse_qsl(parsed.query)) |
251 |
for key, value in self.qs_data.iteritems():
|
|
265 |
for key, value in qs_data.iteritems(): |
|
252 | 266 |
try: |
253 | 267 |
value = self.compute(value, raises=True) |
254 | 268 |
value = str(value) |
255 |
- |