Projet

Général

Profil

0001-iparapheur-don-t-pass-explicit-parameters-to-transpo.patch

Nicolas Roche, 11 mars 2019 10:55

Télécharger (6,8 ko)

Voir les différences:

Subject: [PATCH] iparapheur: don't pass explicit parameters to transport
 (#31226)

 .../migrations/0006_use_http_resource.py      | 60 +++++++++++++++++++
 passerelle/contrib/iparapheur/models.py       | 14 +----
 passerelle/contrib/iparapheur/soap.py         | 15 +----
 tests/test_iparapheur.py                      |  4 +-
 4 files changed, 66 insertions(+), 27 deletions(-)
 create mode 100644 passerelle/contrib/iparapheur/migrations/0006_use_http_resource.py
passerelle/contrib/iparapheur/migrations/0006_use_http_resource.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.18 on 2019-03-07 17:05
3
from __future__ import unicode_literals
4

  
5
from django.db import migrations, models
6

  
7

  
8
class Migration(migrations.Migration):
9

  
10
    dependencies = [
11
        ('iparapheur', '0005_remove_iparapheur_log_level'),
12
    ]
13

  
14
    operations = [
15
        migrations.RenameField(
16
            model_name='iparapheur',
17
            old_name='username',
18
            new_name='basic_auth_username',
19
        ),
20
        migrations.AlterField(
21
            model_name='iparapheur',
22
            name='basic_auth_username',
23
            field=models.CharField(blank=True, max_length=128, verbose_name='Basic authentication username'),
24
        ),
25
        migrations.RenameField(
26
            model_name='iparapheur',
27
            old_name='password',
28
            new_name='basic_auth_password',
29
        ),
30
        migrations.AlterField(
31
            model_name='iparapheur',
32
            name='basic_auth_password',
33
            field=models.CharField(blank=True, max_length=128, verbose_name='Basic authentication password'),
34
        ),
35
        migrations.RenameField(
36
            model_name='iparapheur',
37
            old_name='keystore',
38
            new_name='client_certificate',
39
        ),
40
        migrations.AlterField(
41
            model_name='iparapheur',
42
            name='client_certificate',
43
            field=models.FileField(blank=True, null=True, upload_to=b'', verbose_name='TLS client certificate'),
44
        ),
45
        migrations.AddField(
46
            model_name='iparapheur',
47
            name='trusted_certificate_authorities',
48
            field=models.FileField(blank=True, null=True, upload_to=b'', verbose_name='TLS trusted CAs'),
49
        ),
50
        migrations.AlterField(
51
            model_name='iparapheur',
52
            name='verify_cert',
53
            field=models.BooleanField(default=True, verbose_name='TLS verify certificates'),
54
        ),
55
        migrations.AddField(
56
            model_name='iparapheur',
57
            name='http_proxy',
58
            field=models.CharField(blank=True, max_length=128, verbose_name='HTTP and HTTPS proxy'),
59
        ),
60
    ]
passerelle/contrib/iparapheur/models.py
26 26

  
27 27
from suds import WebFault
28 28

  
29
from passerelle.base.models import BaseResource
29
from passerelle.base.models import BaseResource, HTTPResource
30 30
from passerelle.utils.api import endpoint
31 31
from passerelle.utils.jsonresponse import APIError
32 32

  
......
66 66
    http_status = 404
67 67

  
68 68

  
69
class IParapheur(BaseResource):
69
class IParapheur(BaseResource, HTTPResource):
70 70
    wsdl_url = models.CharField(max_length=128, blank=False,
71 71
            verbose_name=_('WSDL URL'),
72 72
            help_text=_('WSDL URL'))
73
    verify_cert = models.BooleanField(default=True,
74
            verbose_name=_('Check HTTPS Certificate validity'))
75
    username = models.CharField(max_length=128, blank=True,
76
            verbose_name=_('Username'))
77
    password = models.CharField(max_length=128, blank=True,
78
            verbose_name=_('Password'))
79
    keystore = models.FileField(upload_to='iparapheur', null=True, blank=True,
80
            verbose_name=_('Keystore'),
81
            help_text=_('Certificate and private key in PEM format'))
82

  
83 73
    category = _('Business Process Connectors')
84 74

  
85 75
    class Meta:
passerelle/contrib/iparapheur/soap.py
50 50
        self.model = model
51 51
        HttpAuthenticated.__init__(self, **kwargs)
52 52

  
53
    def get_requests_kwargs(self):
54
        kwargs = {}
55
        if self.model.username:
56
            kwargs['auth'] = (self.model.username, self.model.password)
57
        if self.model.keystore:
58
            kwargs['cert'] = (self.model.keystore.path, self.model.keystore.path)
59
        if not self.model.verify_cert:
60
            kwargs['verify'] = False
61
        return kwargs
62

  
63 53
    def open(self, request):
64 54
        # only use our custom handler to fetch service resources, not schemas
65 55
        # from other namespaces
66 56
        if 'www.w3.org' in request.url:
67 57
            return HttpAuthenticated.open(self, request)
68
        resp = self.model.requests.get(request.url, headers=request.headers,
69
                **self.get_requests_kwargs())
58
        resp = self.model.requests.get(request.url, headers=request.headers)
70 59
        return StringIO.StringIO(resp.content)
71 60

  
72 61
    def send(self, request):
......
74 63
        self.addcredentials(request)
75 64
        try:
76 65
            resp = self.model.requests.post(request.url, data=request.message,
77
                headers=request.headers, **self.get_requests_kwargs())
66
                headers=request.headers)
78 67
        except(RequestException,) as e:
79 68
            raise TransportError(e.message.message, None)
80 69

  
tests/test_iparapheur.py
32 32
                    keytype='API',
33 33
                    key=API_KEY)
34 34
    conn = IParapheur.objects.create(title='parapheur', slug='parapheur',
35
                                     wsdl_url=WSDL_URL, username='test',
36
                                     password='secret')
35
                                     wsdl_url=WSDL_URL, basic_auth_username='test',
36
                                     basic_auth_password='secret')
37 37
    obj_type = ContentType.objects.get_for_model(IParapheur)
38 38
    AccessRight.objects.create(codename='can_access',
39 39
                    apiuser=api, resource_type=obj_type,
40
-