iparapheur: don't pass explicit parameters to transport (#31226)

This commit is contained in:
Nicolas Roche 2019-03-08 18:37:51 +01:00
parent 7e8e9cc38b
commit cc0cc0767d
4 changed files with 66 additions and 27 deletions

View File

@ -0,0 +1,60 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.18 on 2019-03-07 17:05
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('iparapheur', '0005_remove_iparapheur_log_level'),
]
operations = [
migrations.RenameField(
model_name='iparapheur',
old_name='username',
new_name='basic_auth_username',
),
migrations.AlterField(
model_name='iparapheur',
name='basic_auth_username',
field=models.CharField(blank=True, max_length=128, verbose_name='Basic authentication username'),
),
migrations.RenameField(
model_name='iparapheur',
old_name='password',
new_name='basic_auth_password',
),
migrations.AlterField(
model_name='iparapheur',
name='basic_auth_password',
field=models.CharField(blank=True, max_length=128, verbose_name='Basic authentication password'),
),
migrations.RenameField(
model_name='iparapheur',
old_name='keystore',
new_name='client_certificate',
),
migrations.AlterField(
model_name='iparapheur',
name='client_certificate',
field=models.FileField(blank=True, null=True, upload_to=b'', verbose_name='TLS client certificate'),
),
migrations.AddField(
model_name='iparapheur',
name='trusted_certificate_authorities',
field=models.FileField(blank=True, null=True, upload_to=b'', verbose_name='TLS trusted CAs'),
),
migrations.AlterField(
model_name='iparapheur',
name='verify_cert',
field=models.BooleanField(default=True, verbose_name='TLS verify certificates'),
),
migrations.AddField(
model_name='iparapheur',
name='http_proxy',
field=models.CharField(blank=True, max_length=128, verbose_name='HTTP and HTTPS proxy'),
),
]

View File

@ -26,7 +26,7 @@ from django.http import HttpResponse, Http404
from suds import WebFault
from passerelle.base.models import BaseResource
from passerelle.base.models import BaseResource, HTTPResource
from passerelle.utils.api import endpoint
from passerelle.utils.jsonresponse import APIError
@ -66,20 +66,10 @@ class FileNotFoundError(Exception):
http_status = 404
class IParapheur(BaseResource):
class IParapheur(BaseResource, HTTPResource):
wsdl_url = models.CharField(max_length=128, blank=False,
verbose_name=_('WSDL URL'),
help_text=_('WSDL URL'))
verify_cert = models.BooleanField(default=True,
verbose_name=_('Check HTTPS Certificate validity'))
username = models.CharField(max_length=128, blank=True,
verbose_name=_('Username'))
password = models.CharField(max_length=128, blank=True,
verbose_name=_('Password'))
keystore = models.FileField(upload_to='iparapheur', null=True, blank=True,
verbose_name=_('Keystore'),
help_text=_('Certificate and private key in PEM format'))
category = _('Business Process Connectors')
class Meta:

View File

@ -50,23 +50,12 @@ class Transport(HttpAuthenticated):
self.model = model
HttpAuthenticated.__init__(self, **kwargs)
def get_requests_kwargs(self):
kwargs = {}
if self.model.username:
kwargs['auth'] = (self.model.username, self.model.password)
if self.model.keystore:
kwargs['cert'] = (self.model.keystore.path, self.model.keystore.path)
if not self.model.verify_cert:
kwargs['verify'] = False
return kwargs
def open(self, request):
# only use our custom handler to fetch service resources, not schemas
# from other namespaces
if 'www.w3.org' in request.url:
return HttpAuthenticated.open(self, request)
resp = self.model.requests.get(request.url, headers=request.headers,
**self.get_requests_kwargs())
resp = self.model.requests.get(request.url, headers=request.headers)
return StringIO.StringIO(resp.content)
def send(self, request):
@ -74,7 +63,7 @@ class Transport(HttpAuthenticated):
self.addcredentials(request)
try:
resp = self.model.requests.post(request.url, data=request.message,
headers=request.headers, **self.get_requests_kwargs())
headers=request.headers)
except(RequestException,) as e:
raise TransportError(e.message.message, None)

View File

@ -32,8 +32,8 @@ def conn():
keytype='API',
key=API_KEY)
conn = IParapheur.objects.create(title='parapheur', slug='parapheur',
wsdl_url=WSDL_URL, username='test',
password='secret')
wsdl_url=WSDL_URL, basic_auth_username='test',
basic_auth_password='secret')
obj_type = ContentType.objects.get_for_model(IParapheur)
AccessRight.objects.create(codename='can_access',
apiuser=api, resource_type=obj_type,