Skip to content

Instantly share code, notes, and snippets.

@paulmooring
Created August 14, 2013 17:12
Show Gist options
  • Save paulmooring/6233169 to your computer and use it in GitHub Desktop.
Save paulmooring/6233169 to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
require 'rubygems'
require 'json'
require 'optparse'
require 'net/http'
require 'highline/import'
opts = Hash.new
option_parser = OptionParser.new do |o|
o.banner = "Usage: #{$0} [-h] [-vq] target"
o.on("-v","--verbose", "Raise verbosity") do
if opts[:verbosity].respond_to? :+
opts[:verbosity] += 1
else
opts[:verbosity] = 1
end
end
o.on("-q","--quiet", "Lower verbosity") do
if opts[:verbosity].respond_to? :-
opts[:verbosity] -= 1
else
opts[:verbosity] = -1
end
end
o.on("-u", "--user GITHUB_USER", "The GitHub user to auth with") do |user|
opts[:user] = user
end
o.on("-p", "--password PASSWORD", "The password for your GitHub user") do |pass|
opts[:password] = pass
end
end
option_parser.parse!
def make_req(endpoint, auth = false)
uri = URI.parse("https://api.github.com#{endpoint}")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
req = Net::HTTP::Get.new(uri.request_uri)
req.basic_auth(auth[:user], auth[:password]) if auth
http.request(req)
end
if ARGV[0]
opts[:org] = ARGV[0]
else
raise ArgumentError, "Org is a required argument, please specify a organization."
exit 1
end
unless opts[:password].kind_of? String
opts[:password] = ask("Enter password: ") do |q|
q.echo = false
end
end if opts[:user].kind_of? String
resp = make_req('/orgs/opscode/teams', opts)
body = JSON.parse(resp.body)
if body.kind_of?(Hash)
case body['message']
when "Bad credentials"
raise ArgumentError, "Bad user name or password provided."
exit 1
when "Not Found"
raise ArgumentError, "Could not find /orgs/#{opts[:org]}/teams"
exit 1
end
end
require 'pry'
binding.pry
teams = body.map do |team|
JSON.parse(resp.body).map do |team|
team = JSON.parse(make_req(team['url'].gsub('https://api.github.com', ''), opts).body)
{
:name => team['name'],
:repos => JSON.parse(make_req("#{team['url'].gsub('https://api.github.com', '')}/repos", opts).body).map { |repo| repo['name'] },
:members => JSON.parse(make_req("#{team['url'].gsub('https://api.github.com', '')}/members", opts).body).map { |member| member['login'] }
}
end
end
puts 'Team Name,Repos,Members'
teams.each do |team|
puts "#{team[:name]},#{team[:repos].join(' ')},#{team['members'].join(' ')}"
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment