import os import requests from django.conf import settings from openid_connect import connect, connect_url from openid_connect._oidc import OpenIDClient, TokenResponse class OpenIDClientCustom(OpenIDClient): def refresh_session(self, refresh_token): r = requests.post(self.token_endpoint, auth=self.auth, data=dict( grant_type="refresh_token", refresh_token=refresh_token ), headers={'Accept': 'application/json'}) if r.status_code != 200: #r.raise_for_status() return None resp = TokenResponse(r.json(), self) if "scope" in resp._data: resp.scope = set(self.translate_scope_out(set(resp._data["scope"].split(" ")))) if not hasattr(resp, "scope") or "openid" in resp.scope: resp.id = self.get_id(resp) return resp server = None def get_server_orig(): global server if server is not None: return server AUTH_URL = os.environ.get("AUTH_URL") if AUTH_URL: server = connect_url(AUTH_URL) else: server = connect(settings.AUTH_SERVER, settings.AUTH_CLIENT_ID, settings.AUTH_CLIENT_SECRET, getattr(settings, 'AUTH_PROTOCOL', None)) return server def get_server(): global server if server is not None: return server server = OpenIDClientCustom( settings.AUTH_SERVER, settings.AUTH_CLIENT_ID, settings.AUTH_CLIENT_SECRET) return server