Skip to content

Instantly share code, notes, and snippets.

@evianzhow
Created November 15, 2016 05:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save evianzhow/0081d4bc97ad3f25bc4c2ca2a9e83bbf to your computer and use it in GitHub Desktop.
Save evianzhow/0081d4bc97ad3f25bc4c2ca2a9e83bbf to your computer and use it in GitHub Desktop.
Remove all GitLab deploy keys like a boss
require 'net/http'
require 'json'
HOST = 'enter_your_own_domain_here'
def login username, password
uri = URI("http://#{HOST}/api/v3/session?login=#{username}&password=#{password}")
# Create client
http = Net::HTTP.new(uri.host, uri.port)
# Create Request
req = Net::HTTP::Post.new(uri)
# Fetch Request
res = http.request(req)
JSON.parse(res.body)['private_token']
rescue StandardError => e
puts "HTTP Request failed (#{e.message})"
end
def list_projects private_token
uri = URI("http://#{HOST}/api/v3/projects/all")
# Create client
http = Net::HTTP.new(uri.host, uri.port)
# Create Request
req = Net::HTTP::Get.new(uri)
# Add headers
req.add_field "private-token", private_token
# Fetch Request
res = http.request(req)
JSON.parse(res.body)
rescue StandardError => e
puts "HTTP Request failed (#{e.message})"
end
def list_project_deploy_keys private_token, project_id
uri = URI("http://#{HOST}/api/v3/projects/#{project_id.to_s}/deploy_keys")
# Create client
http = Net::HTTP.new(uri.host, uri.port)
# Create Request
req = Net::HTTP::Get.new(uri)
# Add headers
req.add_field "private-token", private_token
# Fetch Request
res = http.request(req)
JSON.parse(res.body)
rescue StandardError => e
puts "HTTP Request failed (#{e.message})"
end
def delete_project_deploy_key private_token, project_id, key_id
uri = URI("http://#{HOST}/api/v3/projects/#{project_id.to_s}/deploy_keys/#{key_id.to_s}")
# Create client
http = Net::HTTP.new(uri.host, uri.port)
# Create Request
req = Net::HTTP::Delete.new(uri)
# Add headers
req.add_field "private-token", private_token
# Fetch Request
res = http.request(req)
JSON.parse(res.body)
rescue StandardError => e
puts "HTTP Request failed (#{e.message})"
end
def reduce_kp keypairs, key
!(keypairs.map { |kp| kp[0] }.include?key)
end
keypairs = []
token = login('zhouyifei', '3Za-msG-2xC-dWu')
list_projects(token).each do |project|
id = project['id']
list_project_deploy_keys(token, id).each do |key|
keypairs << [key['id'], id] if reduce_kp(keypairs, key['id'])
end
end
keypairs.each do |kp|
key = kp[0]
rid = kp[1]
p delete_project_deploy_key(token, rid, key)
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment