From dddd054757e5bdddf3a5bfa0509128857d9f2ac8 Mon Sep 17 00:00:00 2001 From: Tomas Pazderka Date: Thu, 10 Aug 2017 15:22:25 +0200 Subject: [PATCH] Fix generation of endpoint urls Close #405 --- CHANGELOG.md | 7 +++++++ src/oic/oic/provider.py | 8 +++++--- tests/test_oic_provider.py | 10 ++++++++++ 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 484300c60..461617c2d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,13 @@ The format is based on the [KeepAChangeLog] project. [KeepAChangeLog]: http://keepachangelog.com/ +## 0.11.1.0 [Unreleased] + +### Fixed +- [#405]: Fix generation of endpoint urls + +[#405]: https://github.com.OpenIDC/pyoidc/issues/405 + ## 0.11.0.0 [2017-07-07] ### Changed diff --git a/src/oic/oic/provider.py b/src/oic/oic/provider.py index a85b82311..84ebfa868 100644 --- a/src/oic/oic/provider.py +++ b/src/oic/oic/provider.py @@ -1663,9 +1663,11 @@ def create_providerinfo(self, pcr_class=ProviderConfigurationResponse, for endp in self.endp: # _log_info("# %s, %s" % (endp, endp.name)) - _provider_info['{}_endpoint'.format(endp.etype)] = '{}/{}'.format( - self.baseurl, - endp.url) + if not self.baseurl.endswith('/'): + baseurl = self.baseurl + '/' + else: + baseurl = self.baseurl + _provider_info['{}_endpoint'.format(endp.etype)] = urljoin(baseurl, endp.url) if setup and isinstance(setup, dict): for key in pcr_class.c_param.keys(): diff --git a/tests/test_oic_provider.py b/tests/test_oic_provider.py index 3c571f9b1..0ec7e5602 100644 --- a/tests/test_oic_provider.py +++ b/tests/test_oic_provider.py @@ -189,6 +189,16 @@ def create_provider(self, session_db_factory): "request_object_signing_alg": DEF_SIGN_ALG["openid_request_object"]} self.cons.keyjar[""] = KC_RSA + def test_providerinfo(self): + self.provider.baseurl = 'http://example.com/path1/path2' + resp = self.provider.create_providerinfo() + assert resp.to_dict()['authorization_endpoint'] == 'http://example.com/path1/path2/authorization' + + def test_providerinfo_trailing(self): + self.provider.baseurl = 'http://example.com/path1/path2/' + resp = self.provider.create_providerinfo() + assert resp.to_dict()['authorization_endpoint'] == 'http://example.com/path1/path2/authorization' + def test_authorization_endpoint(self): bib = {"scope": ["openid"], "state": "id-6da9ca0cc23959f5f33e8becd9b08cae",