--- /dev/null
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Curl extention to access the Github API
+# See https://developer.github.com/v3/ for details
+module github_curl
+
+import curl
+import json::static
+
+# Specific Curl that know hot to talk to the github API
+class GithubCurl
+ super Curl
+
+ # Headers to use on all requests
+ var header: HeaderMap is noinit
+
+ # OAuth token
+ var auth: String
+
+ # User agent (is used by github to contact devs in case of problems)
+ # Eg. "Awesome-Octocat-App"
+ var user_agent: String
+
+ init do
+ header = new HeaderMap
+ header["Authorization"] = "token {auth}"
+ end
+
+ # Get the requested URI, and check the HTTP response. Then convert to JSON
+ # and check for Github errors.
+ fun get_and_check(uri: String): nullable Jsonable
+ do
+ var request = new CurlHTTPRequest(uri, self)
+ request.user_agent = user_agent
+ request.headers = header
+ var response = request.execute
+
+ if response isa CurlResponseSuccess then
+ var obj = response.body_str.parse_json
+ if obj isa JsonObject then
+ if obj.keys.has("message") then
+ print "Message from Github API: {obj["message"] or else ""}"
+ print "Requested URI: {uri}"
+ abort
+ end
+ end
+ return obj
+
+ else if response isa CurlResponseFailed then
+ print "Request to Github API failed"
+ print "Requested URI: {uri}"
+ print "Error code: {response.error_code}"
+ print "Error msg: {response.error_msg}"
+ abort
+ else abort
+ end
+end
+
+# Return the value of `git config --get github.oauthtoken`
+# return "" if no such a key
+fun get_github_oauth: String
+do
+ var p = new IProcess("git", "config", "--get", "github.oauthtoken")
+ var token = p.read_line
+ p.wait
+ p.close
+ return token.trim
+end