require "net/http" require "json" require "uri" def request(path, body = nil) uri = URI("https://scormbox.com/api/v1" + path) http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true http.open_timeout = 20 http.read_timeout = 20 message = body.nil? ? Net::HTTP::Get.new(uri) : Net::HTTP::Post.new(uri) message.basic_auth(ENV.fetch("SCORMBOX_API_KEY"), ENV.fetch("SCORMBOX_API_SECRET")) message["Content-Type"] = "application/json" message.body = JSON.generate(body) unless body.nil? response = http.request(message) raise "SCORMBox HTTP #{response.code}" unless response.is_a?(Net::HTTPSuccess) JSON.parse(response.body) end course_path = "/courses/" + URI.encode_www_form_component(ENV.fetch("SCORMBOX_COURSE_ID")) user = { name: ENV.fetch("SCORMBOX_LEARNER_NAME"), email: ENV.fetch("SCORMBOX_LEARNER_EMAIL") } session = request(course_path + "/sessions", { user: user, origin: ENV.fetch("SCORMBOX_ORIGIN"), attempt_mode: "resume" }) # Deliver session["launch_token"] only to this learner's authorized browser page. result = request(course_path + "/results?" + URI.encode_www_form(email: user[:email])) puts JSON.pretty_generate(result)