import base64 import json import os import urllib.parse import urllib.request class NoRedirect(urllib.request.HTTPRedirectHandler): def redirect_request(self, req, fp, code, msg, headers, newurl): return None opener = urllib.request.build_opener(NoRedirect) credentials = os.environ["SCORMBOX_API_KEY"] + ":" + os.environ["SCORMBOX_API_SECRET"] authorization = "Basic " + base64.b64encode(credentials.encode()).decode() def request(path, body=None): data = None if body is None else json.dumps(body).encode() message = urllib.request.Request( "https://scormbox.com/api/v1" + path, data=data, method="GET" if body is None else "POST", headers={"Authorization": authorization, "Content-Type": "application/json"} ) with opener.open(message, timeout=20) as response: return json.load(response) course_path = "/courses/" + urllib.parse.quote(os.environ["SCORMBOX_COURSE_ID"], safe="") user = {"name": os.environ["SCORMBOX_LEARNER_NAME"], "email": os.environ["SCORMBOX_LEARNER_EMAIL"]} session = request(course_path + "/sessions", { "user": user, "origin": os.environ["SCORMBOX_ORIGIN"], "attempt_mode": "resume" }) # Deliver session["launch_token"] only to this learner's authorized browser page. result = request(course_path + "/results?" + urllib.parse.urlencode({"email": user["email"]})) print(json.dumps(result, indent=2))