Skip to content

Commit baf385e

Browse files
committed
Use session_ids list to handle session variable
1 parent b3cae30 commit baf385e

File tree

1 file changed

+43
-32
lines changed

1 file changed

+43
-32
lines changed

app/route_oidc.py

Lines changed: 43 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,7 @@ def verify_user():
228228

229229
@oidc.route("/.well-known/<service>")
230230
def well_known(service):
231+
session_id = request.values.get("sessionId")
231232
if service == "openid-credential-issuer":
232233
info = {
233234
"response": oidc_metadata,
@@ -387,10 +388,7 @@ def authorizationv2(
387388

388389
session["authorization_params"] = params
389390

390-
session_id = str(uuid.uuid4())
391-
session_ids.update(
392-
{session_id: {"expires": datetime.now() + timedelta(minutes=60)}}
393-
)
391+
session_id = request.values["session-id"]
394392
session["session_id"] = session_id
395393
cfgservice.app_logger.info(
396394
", Session ID: "
@@ -767,9 +765,7 @@ def par_endpoint():
767765

768766
@oidc.route("/pushed_authorizationv2", methods=["POST"])
769767
def par_endpointv2():
770-
771-
session_id = str(uuid.uuid4())
772-
768+
session_id = request.values["sessionId"]
773769
cfgservice.app_logger.info(
774770
", Session ID: "
775771
+ session_id
@@ -808,21 +804,15 @@ def par_endpointv2():
808804
+ str(json.loads(response.get_data()))
809805
)
810806

811-
session_ids.update(
812-
{
813-
session_id: {
814-
"expires": datetime.now() + timedelta(minutes=60),
815-
"request_uri": json.loads(response.get_data())["request_uri"],
816-
}
817-
}
818-
)
807+
session_ids[session_id].update({
808+
"request_uri": json.loads(response.get_data())["request_uri"],
809+
})
819810

820811
return response
821812

822813

823814
@oidc.route("/credential", methods=["POST"])
824815
def credential():
825-
826816
headers = dict(request.headers)
827817
payload = json.loads(request.data)
828818

@@ -831,7 +821,7 @@ def credential():
831821

832822
access_token = headers["Authorization"][7:]
833823
session_id = getSessionId_accessToken(access_token)
834-
824+
session_id = request.values["sessionId"]
835825
cfgservice.app_logger.info(
836826
", Session ID: "
837827
+ session_id
@@ -887,6 +877,7 @@ def credential():
887877
+ "Credential response, Payload: "
888878
+ str(_response)
889879
)
880+
session_ids[session_id]["status"] = "success"
890881
return _response
891882

892883

@@ -1115,23 +1106,23 @@ def load_test():
11151106

11161107
@oidc.route("/issueStatus", methods=["GET"])
11171108
def issue_status():
1118-
values = request.values
1119-
session_id = values["sessionId"]
1109+
session_id = request.values["sessionId"]
1110+
try:
1111+
session = session_ids[session_id]
1112+
except:
1113+
return {
1114+
"status": "fail",
1115+
"reason": "no issuance session found",
1116+
"sessionId": session_id,
1117+
}, 500
11201118

11211119
return {
11221120
"status": "pending",
11231121
"reason": "ok",
11241122
"sessionId": session_id,
11251123
}, 200
11261124

1127-
def create_qr_code(credential_offer_URI: str, credentials_id: list) -> tuple[str, str]:
1128-
credential_offer = {
1129-
"credential_issuer": cfgservice.service_url[:-1],
1130-
"credential_configuration_ids": credentials_id,
1131-
"grants": {
1132-
"authorization_code": {}},
1133-
}
1134-
1125+
def create_qr_code(credential_offer_URI: str, credential_offer) -> tuple[str, str]:
11351126
json_string = json.dumps(credential_offer)
11361127

11371128
uri = f"{credential_offer_URI}credential_offer?credential_offer=" + urllib.parse.quote(json_string, safe=":/")
@@ -1152,26 +1143,40 @@ def credentialOffer():
11521143
form_keys = request.form.keys()
11531144
credential_offer_URI = request.form.get("credential_offer_URI")
11541145

1146+
11551147
values = request.values
1148+
11561149
if 'sessionId' in values and 'credentialType' in values:
11571150
session_id = values["sessionId"]
11581151
credential_type = values["credentialType"]
1159-
credentials_id = [credential_type,]
1160-
_, qr_img_base64 = create_qr_code(credential_offer_URI, credentials_id)
1152+
1153+
session_ids.update(
1154+
{
1155+
session_id: {
1156+
"expires": datetime.now() + timedelta(minutes=60)}
1157+
},
1158+
)
1159+
url = os.environ.get('SERVICE_URL')
1160+
credential_offer = {
1161+
"credential_issuer": cfgservice.service_url[:-1],
1162+
"credential_configuration_ids": [credential_type,],
1163+
"grants": {
1164+
"authorization_code": {}},
1165+
}
1166+
1167+
_, qr_img_base64 = create_qr_code(url, credential_offer)
11611168

11621169
return {
11631170
"qr": qr_img_base64,
11641171
"sessionId": session_id,
11651172
}, 200
11661173

11671174
elif "proceed" in form_keys:
1168-
11691175
form = list(form_keys)
11701176
form.remove("proceed")
11711177
form.remove("credential_offer_URI")
11721178
form.remove("Authorization Code Grant")
11731179
all_exist = all(credential in credentialsSupported for credential in form)
1174-
11751180
if all_exist:
11761181
credentials_id = form
11771182
session["credentials_id"] = credentials_id
@@ -1183,7 +1188,13 @@ def credentialOffer():
11831188
)
11841189

11851190
else:
1186-
uri, qr_img_base64 = create_qr_code(credential_offer_URI, credentials_id)
1191+
credential_offer = {
1192+
"credential_issuer": cfgservice.service_url[:-1],
1193+
"credential_configuration_ids": credentials_id,
1194+
"grants": {
1195+
"authorization_code": {}},
1196+
}
1197+
uri, qr_img_base64 = create_qr_code(credential_offer_URI, credential_offer)
11871198

11881199
wallet_url = cfgservice.wallet_test_url + "credential_offer"
11891200

0 commit comments

Comments
 (0)