Skip to content
This repository was archived by the owner on Nov 15, 2022. It is now read-only.

Commit 03359df

Browse files
authored
Merge pull request #8 from discogs/provide-separate-validate-url
Provide separate validate url.
2 parents 9400de9 + f9db3d0 commit 03359df

File tree

3 files changed

+47
-5
lines changed

3 files changed

+47
-5
lines changed

cas_client/_version.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
__version_info__ = (0, 1, 4)
1+
__version_info__ = (0, 1, 5)
22
__version__ = '.'.join(str(_) for _ in __version_info__)

cas_client/cas_client.py

+16-4
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ def __init__(
3030
self,
3131
server_url,
3232
service_url=None,
33+
validate_url=None,
3334
auth_prefix='/cas',
3435
proxy_url=None,
3536
proxy_callback=None,
@@ -42,6 +43,7 @@ def __init__(
4243
self._proxy_url = proxy_url
4344
self._server_url = server_url
4445
self._service_url = service_url
46+
self._validate_url = validate_url or server_url
4547
self._session_storage_adapter = session_storage_adapter
4648
self._verify_certificates = bool(verify_certificates)
4749
self._headers = headers
@@ -398,22 +400,22 @@ def _get_proxy_url(self, ticket):
398400
return url
399401

400402
def _get_proxy_validate_url(self, ticket):
401-
template = '{server_url}{auth_prefix}/proxy?'
403+
template = '{validate_url}{auth_prefix}/proxy?'
402404
template += 'ticket={ticket}&service={proxy_callback}'
403405
url = template.format(
404406
auth_prefix=self.auth_prefix,
405407
proxy_callback=self.proxy_callback,
406-
server_url=self.server_url,
408+
validate=self.validate_url,
407409
ticket=ticket,
408410
)
409411
return url
410412

411413
def _get_service_validate_url(self, ticket, service_url=None):
412-
template = '{server_url}{auth_prefix}/serviceValidate?'
414+
template = '{validate_url}{auth_prefix}/serviceValidate?'
413415
template += 'ticket={ticket}&service={service_url}'
414416
url = template.format(
415417
auth_prefix=self.auth_prefix,
416-
server_url=self.server_url,
418+
validate_url=self.validate_url,
417419
service_url=service_url or self.service_url,
418420
ticket=ticket,
419421
)
@@ -507,6 +509,16 @@ def session_storage_adapter(self):
507509
'''
508510
return self._session_storage_adapter
509511

512+
@property
513+
def validate_url(self):
514+
'''
515+
The CAS client's validation URL.
516+
517+
Defaults to the server_url, should only be set if using a separate
518+
hostname for internal calls to /validateService.
519+
'''
520+
return self._validate_url
521+
510522
@property
511523
def verify_certificates(self):
512524
'''

tests/test.py

+30
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,36 @@ def test_perform_service_validate(self):
8787
ticket='FOO',
8888
service_url='BAR',
8989
)
90+
m.assert_called_once_with(
91+
'https://dummy.url/cas/serviceValidate?ticket=FOO&service=BAR',
92+
headers=None
93+
)
94+
self.assertTrue(response.success)
95+
self.assertEqual(response.attributes, {
96+
u'i2a2characteristics': u'0,3592,2000',
97+
u'puid': u'0012345678',
98+
u'firstname': u'Jeffrey A',
99+
u'lastname': u'Ott',
100+
u'fullname': u'Jeffrey A Ott',
101+
u'email': u'[email protected]',
102+
})
103+
self.assertEqual(response.response_type, 'authenticationSuccess')
104+
self.assertEqual(response.user, 'jott')
105+
106+
def test_perform_service_validate_separate_url(self):
107+
cas_client = CASClient(
108+
'https://dummy.url', validate_url='https://validate.url')
109+
assert not cas_client.headers
110+
with mock.patch('cas_client.CASClient._perform_get') as m:
111+
m.return_value = self.response_text
112+
response = cas_client.perform_service_validate(
113+
ticket='FOO',
114+
service_url='BAR',
115+
)
116+
m.assert_called_once_with(
117+
'https://validate.url/cas/serviceValidate?ticket=FOO&service=BAR',
118+
headers=None
119+
)
90120
self.assertTrue(response.success)
91121
self.assertEqual(response.attributes, {
92122
u'i2a2characteristics': u'0,3592,2000',

0 commit comments

Comments
 (0)