Projet

Général

Profil

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

Nicolas Roche, 08 mars 2019 16:32

Télécharger (5,12 ko)

Voir les différences:

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

 .../migrations/0006_auto_20190307_1805.py     | 30 +++++++++++++++++++
 passerelle/contrib/iparapheur/models.py       |  6 ++--
 passerelle/contrib/iparapheur/soap.py         | 15 ++--------
 tests/test_iparapheur.py                      |  4 +--
 4 files changed, 37 insertions(+), 18 deletions(-)
 create mode 100644 passerelle/contrib/iparapheur/migrations/0006_auto_20190307_1805.py
passerelle/contrib/iparapheur/migrations/0006_auto_20190307_1805.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
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='password',
18
            new_name='basic_auth_password',
19
        ),
20
        migrations.RenameField(
21
            model_name='iparapheur',
22
            old_name='username',
23
            new_name='basic_auth_username',
24
        ),
25
        migrations.RenameField(
26
            model_name='iparapheur',
27
            old_name='keystore',
28
            new_name='client_certificate',
29
        ),
30
    ]
passerelle/contrib/iparapheur/models.py
72 72
            help_text=_('WSDL URL'))
73 73
    verify_cert = models.BooleanField(default=True,
74 74
            verbose_name=_('Check HTTPS Certificate validity'))
75
    username = models.CharField(max_length=128, blank=True,
75
    basic_auth_username = models.CharField(max_length=128, blank=True,
76 76
            verbose_name=_('Username'))
77
    password = models.CharField(max_length=128, blank=True,
77
    basic_auth_password = models.CharField(max_length=128, blank=True,
78 78
            verbose_name=_('Password'))
79
    keystore = models.FileField(upload_to='iparapheur', null=True, blank=True,
79
    client_certificate = models.FileField(upload_to='iparapheur', null=True, blank=True,
80 80
            verbose_name=_('Keystore'),
81 81
            help_text=_('Certificate and private key in PEM format'))
82 82

  
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
-