|
10 | 10 | from flask import session
|
11 | 11 | from flask.helpers import make_response
|
12 | 12 | from flask.helpers import send_from_directory
|
| 13 | +from oidcservice.exception import OidcServiceError |
13 | 14 |
|
14 | 15 | import oidcrp
|
15 | 16 |
|
@@ -91,21 +92,31 @@ def get_rp(op_hash):
|
91 | 92 | def finalize(op_hash, request_args):
|
92 | 93 | rp = get_rp(op_hash)
|
93 | 94 |
|
94 |
| - try: |
95 |
| - session['client_id'] = rp.service_context.registration_response['client_id'] |
96 |
| - except KeyError: |
97 |
| - session['client_id'] = rp.service_context.client_id |
| 95 | + if hasattr(rp, 'status_code') and rp.status_code != 200: |
| 96 | + logger.error(rp.response[0].decode()) |
| 97 | + return rp.response[0], rp.status_code |
98 | 98 |
|
99 |
| - session['state'] = request_args['state'] |
100 |
| - try: |
101 |
| - iss = rp.session_interface.get_iss(request_args['state']) |
102 |
| - except KeyError: |
| 99 | + session['client_id'] = rp.service_context.registration_response.\ |
| 100 | + get('client_id', rp.service_context.client_id) |
| 101 | + |
| 102 | + session['state'] = request_args.get('state') |
| 103 | + |
| 104 | + if session['state']: |
| 105 | + iss = rp.session_interface.get_iss(session['state']) |
| 106 | + else: |
103 | 107 | return make_response('Unknown state', 400)
|
104 | 108 |
|
105 | 109 | session['session_state'] = request_args.get('session_state', '')
|
106 | 110 |
|
107 | 111 | logger.debug('Issuer: {}'.format(iss))
|
108 |
| - res = current_app.rph.finalize(iss, request_args) |
| 112 | + |
| 113 | + try: |
| 114 | + res = current_app.rph.finalize(iss, request_args) |
| 115 | + except OidcServiceError as excp: |
| 116 | + # replay attack prevention, is that code was already used before |
| 117 | + return excp.__str__(), 403 |
| 118 | + except Exception as excp: |
| 119 | + raise excp |
109 | 120 |
|
110 | 121 | if 'userinfo' in res:
|
111 | 122 | endpoints = {}
|
|
0 commit comments