def provider_config(self, issuer, keys=True, endpoints=True): if issuer.endswith("/"): _issuer = issuer[:-1] else: _issuer = issuer url = OIDCONF_PATTERN % _issuer r = self.http_request(url) if r.status_code == 200: pcr = ProviderConfigurationResponse().from_json(r.text) else: raise Exception("Trying '%s', status %s" % (url, r.status_code)) if "issuer" in pcr: if pcr["issuer"].endswith("/"): _pcr_issuer = pcr["issuer"][:-1] else: _pcr_issuer = pcr["issuer"] try: assert _issuer == _pcr_issuer except AssertionError: raise Exception("provider info issuer mismatch '%s' != '%s'" % ( _issuer, _pcr_issuer)) if endpoints: for key, val in pcr.items(): if key.endswith("_endpoint"): setattr(self, key, val) if keys: self.keystore.load_keys(pcr, _issuer) return pcr
def provider_config(self, issuer, keys=True, endpoints=True): if issuer.endswith("/"): _issuer = issuer[:-1] else: _issuer = issuer url = OIDCONF_PATTERN % _issuer pcr = None r = self.http_request(url) if r.status_code == 200: pcr = ProviderConfigurationResponse().from_json(r.text) elif r.status_code == 302: while r.status_code == 302: r = self.http_request(r.headers["location"]) if r.status_code == 200: pcr = ProviderConfigurationResponse().from_json(r.text) break if pcr is None: raise Exception("Trying '%s', status %s" % (url, r.status_code)) if "issuer" in pcr: _pcr_issuer = pcr["issuer"] if pcr["issuer"].endswith("/"): if issuer.endswith("/"): _issuer = issuer else: _issuer = issuer + "/" else: if issuer.endswith("/"): _issuer = issuer[:-1] else: _issuer = issuer try: assert _issuer == _pcr_issuer except AssertionError: raise Exception("provider info issuer mismatch '%s' != '%s'" % ( _issuer, _pcr_issuer)) self.provider_info[_pcr_issuer] = pcr else: _pcr_issuer = issuer if endpoints: for key, val in pcr.items(): if key.endswith("_endpoint"): setattr(self, key, val) if keys: self.keyjar.load_keys(pcr, _pcr_issuer) return pcr