Skip to content

Instantly share code, notes, and snippets.

@smathy
Created April 7, 2011 04:00
Show Gist options
  • Save smathy/907012 to your computer and use it in GitHub Desktop.
Save smathy/907012 to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
## configure these
gh_pass = '*github_api_token*'
gh_user = '*github_username*'
ssh_key = ARGV.shift
require "rubygems"
require "yaml"
require 'net/http'
servername = `hostname`.chomp
gh_user += '/token'
Net::HTTP.start('github.com') do |gh|
req = Net::HTTP::Get.new '/api/v2/yaml/user/keys'
req.basic_auth gh_user, gh_pass
response = gh.request(req)
keys = YAML.load( response.body )['public_keys']
response.error! unless response.is_a? Net::HTTPSuccess
keys.select { |k| k['title'] == servername }.each do |k|
exit if k['key'] == ssh_key
req = Net::HTTP::Post.new '/api/v2/yaml/user/key/remove'
req.basic_auth gh_user, gh_pass
req.set_form_data 'id' => k['id']
response = gh.request(req)
response.error! unless response.is_a? Net::HTTPSuccess
end
req = Net::HTTP::Post.new '/api/v2/yaml/user/key/add'
req.basic_auth gh_user, gh_pass
req.set_form_data 'title' => servername, 'key' => ssh_key
response = gh.request(req)
response.error! unless response.is_a? Net::HTTPSuccess
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment