X-Git-Url: http://nitlanguage.org diff --git a/lib/github/github_curl.nit b/lib/github/github_curl.nit new file mode 100644 index 0000000..5e50474 --- /dev/null +++ b/lib/github/github_curl.nit @@ -0,0 +1,80 @@ +# 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