17 |
17 |
import json
|
18 |
18 |
import urlparse
|
19 |
19 |
|
|
20 |
from requests import RequestException
|
|
21 |
|
20 |
22 |
from django.db import models
|
21 |
23 |
from django.utils.translation import ugettext_lazy as _
|
22 |
24 |
from django.utils.dateparse import parse_date, parse_time
|
... | ... | |
29 |
31 |
|
30 |
32 |
|
31 |
33 |
class ArpegeECP(BaseResource):
|
|
34 |
log_requests_errors = False
|
|
35 |
|
32 |
36 |
category = _('Business Process Connectors')
|
33 |
37 |
webservice_base_url = models.URLField(_('Webservice Base URL'))
|
34 |
38 |
hawk_auth_id = models.CharField(_('Hawk Authentication id'), max_length=64)
|
... | ... | |
39 |
43 |
|
40 |
44 |
def check_status(self):
|
41 |
45 |
url = urlparse.urljoin(self.webservice_base_url, 'Hello')
|
42 |
|
response = self.requests.get(url, auth=HawkAuth(self.hawk_auth_id, self.hawk_auth_key))
|
43 |
|
response.raise_for_status()
|
|
46 |
try:
|
|
47 |
response = self.requests.get(url, auth=HawkAuth(self.hawk_auth_id, self.hawk_auth_key))
|
|
48 |
response.raise_for_status()
|
|
49 |
except RequestException as e:
|
|
50 |
raise Exception('Arpege server is down: %s' % e)
|
44 |
51 |
if not response.json().get('Data'):
|
45 |
52 |
raise Exception('Invalid credentials')
|
46 |
53 |
return {'data': response.json()['Data']}
|
47 |
54 |
|
48 |
55 |
def get_access_token(self, NameID):
|
49 |
56 |
url = urlparse.urljoin(self.webservice_base_url, 'LoginParSubOIDC')
|
50 |
|
response = self.requests.post(url, auth=HawkAuth(self.hawk_auth_id, self.hawk_auth_key),
|
51 |
|
json={'subOIDC': NameID})
|
52 |
|
if response.status_code // 100 != 2:
|
53 |
|
raise APIError(u'HTTP error: %s' % response.status_code)
|
|
57 |
try:
|
|
58 |
response = self.requests.post(url, auth=HawkAuth(self.hawk_auth_id, self.hawk_auth_key),
|
|
59 |
json={'subOIDC': NameID})
|
|
60 |
response.raise_for_status()
|
|
61 |
except RequestException as e:
|
|
62 |
raise APIError(u'Arpege server is down: %s' % e)
|
54 |
63 |
try:
|
55 |
64 |
result = response.json()
|
56 |
65 |
except ValueError:
|
57 |
|
raise APIError(u'No JSON content returned: %r' % response.content[:1000])
|
|
66 |
raise APIError(u'Arpege server is down: no JSON content returned, %r' % response.content[:1000])
|
58 |
67 |
if result.get('Data'):
|
59 |
68 |
if 'AccessToken' not in result['Data']:
|
60 |
69 |
raise APIError(u'Error on LoginParSubOIDC: missing Data/AccessToken')
|
... | ... | |
69 |
78 |
url = urlparse.urljoin(self.webservice_base_url, 'DemandesUsager')
|
70 |
79 |
params = {'scope': 'data_administratives'}
|
71 |
80 |
auth = HawkAuth(self.hawk_auth_id, self.hawk_auth_key, ext=access_token)
|
72 |
|
response = self.requests.get(url, params=params, auth=auth)
|
|
81 |
try:
|
|
82 |
response = self.requests.get(url, params=params, auth=auth)
|
|
83 |
response.raise_for_status()
|
|
84 |
except RequestException as e:
|
|
85 |
raise APIError(u'Arpege server is down: %s' % e)
|
73 |
86 |
data = []
|
74 |
|
if response.status_code // 100 != 2:
|
75 |
|
raise APIError(u'HTTP error: %s' % response.status_code)
|
76 |
87 |
try:
|
77 |
88 |
result = response.json()
|
78 |
89 |
except ValueError:
|
79 |
|
-
|