Projet

Général

Profil

0001-backoffice-add-validity-check-for-datasource-URLs-55.patch

Frédéric Péters, 12 juillet 2022 17:32

Télécharger (2,86 ko)

Voir les différences:

Subject: [PATCH] backoffice: add validity check for datasource URLs (#55871)

 tests/admin_pages/test_form.py | 34 ++++++++++++++++++++++++++++++++++
 wcs/data_sources.py            |  8 ++++++++
 2 files changed, 42 insertions(+)
tests/admin_pages/test_form.py
2357 2357
    assert FormDef.get(1).fields[0].items == ['XXX']
2358 2358

  
2359 2359

  
2360
def test_form_edit_items_datasource(pub):
2361
    create_superuser(pub)
2362
    create_role(pub)
2363

  
2364
    FormDef.wipe()
2365
    formdef = FormDef()
2366
    formdef.name = 'form title'
2367
    formdef.fields = [fields.ItemsField(id='1', label='1st field', type='items')]
2368
    formdef.store()
2369

  
2370
    app = login(get_app(pub))
2371
    resp = app.get('/backoffice/forms/1/')
2372
    resp = resp.click(href='fields/')
2373
    assert '1st field' in resp.text
2374

  
2375
    resp = app.get('/backoffice/forms/1/fields/1/')
2376
    resp.form['data_mode'].value = 'data-source'
2377
    resp.form['data_source$type'].value = 'json'
2378
    resp.form['data_source$value'].value = 'random string'
2379
    resp = resp.form.submit('submit')
2380
    assert 'Value must be a full URL.' in resp.text
2381
    resp.form['data_source$value'].value = 'http://whatever'
2382
    resp = resp.form.submit('submit').follow()
2383
    assert FormDef.get(1).fields[0].data_source == {'type': 'json', 'value': 'http://whatever'}
2384

  
2385
    # check template strings are ok
2386
    resp = app.get('/backoffice/forms/1/fields/1/')
2387
    resp.form['data_mode'].value = 'data-source'
2388
    resp.form['data_source$type'].value = 'json'
2389
    resp.form['data_source$value'].value = '{{url}}'
2390
    resp = resp.form.submit('submit').follow()
2391
    assert FormDef.get(1).fields[0].data_source == {'type': 'json', 'value': '{{url}}'}
2392

  
2393

  
2360 2394
def test_form_edit_page_field(pub):
2361 2395
    create_superuser(pub)
2362 2396
    create_role(pub)
wcs/data_sources.py
179 179
            value = self.get(name)
180 180
            if value:
181 181
                values[name] = value
182

  
183
        if values.get('type') in ('json', 'jsonp', 'geojson'):
184
            url = values.get('value') or ''
185
            if url and not Template.is_template_string(url):
186
                parsed = urllib.parse.urlparse(url)
187
                if not (parsed.scheme and parsed.netloc):
188
                    self.error = _('Value must be a full URL.')
189

  
182 190
        if values.get('type', '') in ('none', ''):
183 191
            values = None
184 192
        self.value = values or None
185
-