Skip to content
This repository was archived by the owner on Jun 1, 2023. It is now read-only.

Commit dcddccc

Browse files
committed
Refactored
1 parent 539c951 commit dcddccc

3 files changed

Lines changed: 39 additions & 34 deletions

File tree

flask_rp/views.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
from flask.helpers import make_response
1212
from flask.helpers import send_from_directory
1313

14+
import oidcrp
15+
1416
logger = logging.getLogger(__name__)
1517

1618
oidc_rp_views = Blueprint('oidc_rp', __name__, url_prefix='')
@@ -215,7 +217,7 @@ def logout():
215217
def backchannel_logout(op_hash):
216218
_rp = get_rp(op_hash)
217219
try:
218-
_state = current_app.rph.backchannel_logout(request.data, _rp)
220+
_state = oidcrp.backchannel_logout(request.data, _rp)
219221
except Exception as err:
220222
logger.error('Exception: {}'.format(err))
221223
return 'System error!', 400

src/oidcrp/__init__.py

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -874,49 +874,49 @@ def logout(self, state, client=None, post_logout_redirect_uri=''):
874874

875875
return resp
876876

877-
@staticmethod
878-
def backchannel_logout(client, request='', request_args=None):
879-
"""
877+
def clear_session(self, state):
878+
client = self.get_client_from_session_key(state)
879+
client.session_interface.remove_state(state)
880880

881-
:param request: URL encoded logout request
882-
:return:
883-
"""
884881

885-
if request:
886-
req = BackChannelLogoutRequest().from_urlencoded(as_unicode(request))
887-
else:
888-
req = BackChannelLogoutRequest(**request_args)
882+
def backchannel_logout(client, request='', request_args=None):
883+
"""
889884
890-
kwargs = {
891-
'aud': client.service_context.client_id,
892-
'iss': client.service_context.issuer,
893-
'keyjar': client.service_context.keyjar
894-
}
885+
:param request: URL encoded logout request
886+
:return:
887+
"""
895888

896-
try:
897-
req.verify(**kwargs)
898-
except (MessageException, ValueError, NotForMe) as err:
899-
raise MessageException('Bogus logout request: {}'.format(err))
889+
if request:
890+
req = BackChannelLogoutRequest().from_urlencoded(as_unicode(request))
891+
else:
892+
req = BackChannelLogoutRequest(**request_args)
900893

901-
# Find the subject through 'sid' or 'sub'
894+
kwargs = {
895+
'aud': client.service_context.client_id,
896+
'iss': client.service_context.issuer,
897+
'keyjar': client.service_context.keyjar
898+
}
902899

900+
try:
901+
req.verify(**kwargs)
902+
except (MessageException, ValueError, NotForMe) as err:
903+
raise MessageException('Bogus logout request: {}'.format(err))
904+
905+
# Find the subject through 'sid' or 'sub'
906+
907+
try:
908+
sub = req[verified_claim_name('logout_token')]['sub']
909+
except KeyError:
903910
try:
904-
sub = req[verified_claim_name('logout_token')]['sub']
911+
sid = req[verified_claim_name('logout_token')]['sid']
905912
except KeyError:
906-
try:
907-
sid = req[verified_claim_name('logout_token')]['sid']
908-
except KeyError:
909-
raise MessageException('Neither "sid" nor "sub"')
910-
else:
911-
_state = client.session_interface.get_state_by_sid(sid)
913+
raise MessageException('Neither "sid" nor "sub"')
912914
else:
913-
_state = client.session_interface.get_state_by_sub(sub)
914-
915-
return _state
915+
_state = client.session_interface.get_state_by_sid(sid)
916+
else:
917+
_state = client.session_interface.get_state_by_sub(sub)
916918

917-
def clear_session(self, state):
918-
client = self.get_client_from_session_key(state)
919-
client.session_interface.remove_state(state)
919+
return _state
920920

921921

922922
def get_provider_specific_service(service_provider, service, **kwargs):

src/oidcrp/oauth2/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,9 @@ def service_request(self, service, url, method="GET", body=None,
149149
if not response_body_type:
150150
response_body_type = service.response_body_type
151151

152+
if 300 <= resp.status_code < 400:
153+
return {'http_response': resp}
154+
152155
if response_body_type == 'html':
153156
return resp.text
154157

0 commit comments

Comments
 (0)