diff --git a/githubot.coffee b/githubot.coffee index 8967306..8eb1acf 100644 --- a/githubot.coffee +++ b/githubot.coffee @@ -17,7 +17,11 @@ class Github url = "/#{url}" unless url[0] is "/" url = "https://api.github.com#{url}" req = http.create(url).header("Accept", "application/json") - req = req.header("Authorization", "token #{oauth_token}") if (oauth_token = process.env.HUBOT_GITHUB_TOKEN)? + if (oauth_token = process.env.HUBOT_GITHUB_TOKEN)? + req = req.header("Authorization", "token #{oauth_token}") + else if process.env.HUBOT_BOT_GITHUB_USER? and process.env.HUBOT_BOT_GITHUB_PASSWORD? + basic_auth = "#{process.env.HUBOT_BOT_GITHUB_USER}:#{process.env.HUBOT_BOT_GITHUB_PASSWORD}" + req = req.header("Authorization", "Basic #{new Buffer(basic_auth).toString('base64')}") req[verb.toLowerCase()](JSON.stringify data) (err, res, body) => data = null if err? diff --git a/test/request.coffee b/test/request.coffee index 3754349..fa865be 100644 --- a/test/request.coffee +++ b/test/request.coffee @@ -24,6 +24,22 @@ describe "github api", -> network.matchHeader("Authorization", "token 789abc") gh.request "GET", "repos/foo/bar/branches", success done delete process.env.HUBOT_GITHUB_TOKEN + it "uses basic auth if user/pass exists", (done) -> + process.env.HUBOT_BOT_GITHUB_USER = "imauser" + process.env.HUBOT_BOT_GITHUB_PASSWORD = "mypassword" + network.matchHeader("Authorization", "Basic aW1hdXNlcjpteXBhc3N3b3Jk") + gh.request "GET", "repos/foo/bar/branches", success done + delete process.env.HUBOT_BOT_GITHUB_USER + delete process.env.HUBOT_BOT_GITHUB_PASSWORD + it "oauth supercedes basic auth", (done) -> + process.env.HUBOT_GITHUB_TOKEN = "789abc" + process.env.HUBOT_BOT_GITHUB_USER = "imauser" + process.env.HUBOT_BOT_GITHUB_PASSWORD = "mypassword" + network.matchHeader("Authorization", "token 789abc") + gh.request "GET", "repos/foo/bar/branches", success done + delete process.env.HUBOT_GITHUB_TOKEN + delete process.env.HUBOT_BOT_GITHUB_USER + delete process.env.HUBOT_BOT_GITHUB_PASSWORD it "includes accept header", (done) -> network.matchHeader('Accept', 'application/json') gh.request "GET", "repos/foo/bar/branches", success done