Guest User

.git/AWSDevTools/aws/dev_tools.rb

a guest
Dec 4th, 2013
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.35 KB | None | 0 0
  1. irb(main):003:0> require 'openssl'
  2. => false
  3. irb(main):004:0> require 'aws/elastic_beanstalk_config'
  4. LoadError: cannot load such file -- aws/elastic_beanstalk_config
  5. from /usr/local/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require'
  6. from /usr/local/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require'
  7. from (irb):4
  8. from /usr/local/bin/irb:12:in `<main>'
  9. irb(main):005:0>
  10. irb(main):006:0* module AWS
  11. irb(main):007:1> module DevTools
  12. irb(main):008:2>
  13. irb(main):009:2* @@beanstalk_config = nil
  14. irb(main):010:2> def beanstalk_config
  15. irb(main):011:3> @@beanstalk_config ||= ElasticBeanstalkConfig.new(Dir.pwd)
  16. irb(main):012:3> end
  17. irb(main):013:2> module_function :beanstalk_config
  18. irb(main):014:2>
  19. irb(main):015:2* def commit_exists?(commit)
  20. irb(main):016:3> id = %x{git rev-parse #{commit}}.strip
  21. irb(main):017:3> $?.exitstatus == 0
  22. irb(main):018:3> end
  23. irb(main):019:2> module_function :commit_exists?
  24. irb(main):020:2>
  25. irb(main):021:2* def git_object_type(commit)
  26. irb(main):022:3> %x{git cat-file -t #{commit}}.strip
  27. irb(main):023:3> end
  28. irb(main):024:2> module_function :git_object_type
  29. irb(main):025:2>
  30. irb(main):026:2* def commit_id(commit)
  31. irb(main):027:3> commit ||= "HEAD"
  32. irb(main):028:3> id = %x{git rev-parse #{commit}}.strip
  33. irb(main):029:3> unless "commit" == (type = git_object_type(commit))
  34. irb(main):030:4> raise "#{commit} is a #{type}, and the value of --commit must refer to a commit"
  35. irb(main):031:4> end
  36. irb(main):032:3> raise "Unable to find revision #{commit}" unless $? == 0
  37. irb(main):033:3> id
  38. irb(main):034:3> end
  39. irb(main):035:2> module_function :commit_id
  40. irb(main):036:2>
  41. irb(main):037:2* def host()
  42. irb(main):038:3> beanstalk_config.dev_tools_endpoint.split(":")[0]
  43. irb(main):039:3> end
  44. irb(main):040:2> module_function :host
  45. irb(main):041:2>
  46. irb(main):042:2* def port()
  47. irb(main):043:3> beanstalk_config.dev_tools_endpoint.split(":")[1]
  48. irb(main):044:3> end
  49. irb(main):045:2> module_function :port
  50. irb(main):046:2>
  51. irb(main):047:2* def repo()
  52. irb(main):048:3> beanstalk_config.application_name
  53. irb(main):049:3> end
  54. irb(main):050:2> module_function :repo
  55. irb(main):051:2>
  56. irb(main):052:2* def headers(date)
  57. irb(main):053:3> [date, beanstalk_config.region, "devtools", "aws4_request"]
  58. irb(main):054:3> end
  59. irb(main):055:2> module_function :headers
  60. irb(main):056:2>
  61. irb(main):057:2* def to_hex(str)
  62. irb(main):058:3> str.to_s.unpack("H*").first
  63. irb(main):059:3> end
  64. irb(main):060:2> module_function :to_hex
  65. irb(main):061:2>
  66. irb(main):062:2* def sha256(str)
  67. irb(main):063:3> OpenSSL::Digest.hexdigest("sha256", str)
  68. end
  69. irb(main):064:3> end
  70. irb(main):065:2> module_function :sha256
  71. irb(main):066:2>
  72. irb(main):067:2* def hmac(d,s)
  73. irb(main):068:3> OpenSSL::HMAC.digest(OpenSSL::Digest.new("sha256"), s, d)
  74. irb(main):069:3> end
  75. irb(main):070:2> module_function :hmac
  76. irb(main):071:2>
  77. irb(main):072:2* def environment()
  78. irb(main):073:3> current_branch = %x(git rev-parse --abbrev-ref HEAD)
  79. irb(main):074:3> raise "Error looking up current branch." unless $? == 0
  80. irb(main):075:3> current_branch.chomp!
  81. irb(main):076:3> if (current_branch == "HEAD")
  82. irb(main):077:4> # HEAD doesn't point to a branch, so we'll fall back to default.
  83. irb(main):078:4* return nil
  84. irb(main):079:4> end
  85. irb(main):080:3> beanstalk_config.branch_mappings[current_branch]
  86. irb(main):081:3> end
  87. irb(main):082:2> module_function :environment
  88. irb(main):083:2>
  89. irb(main):084:2* def signed_uri env, commit
  90. irb(main):085:3> time = Time.now.utc.strftime("%Y%m%dT%H%M%S")
  91. irb(main):086:3> date = time[0..7]
  92. irb(main):087:3>
  93. irb(main):088:3* env ||= environment || beanstalk_config.environment_name
  94. irb(main):089:3> secret_key = beanstalk_config.secret_access_key
  95. irb(main):090:3> raise "Unable to find AWS Secret Key. Please run git aws.config to add it." if secret_key.nil? or secret_key.empty?
  96. irb(main):091:3> access_key = beanstalk_config.access_key_id
  97. irb(main):092:3> raise "Unable to find AWS Access Key. Please run git aws.config to add it." if access_key.nil? or access_key.empty?
  98. irb(main):093:3>
  99. irb(main):094:3* path = "/v1/repos/#{to_hex repo}/commitid/#{to_hex(commit_id(commit))}"
  100. irb(main):095:3> path += "/environment/#{to_hex env}" unless env.nil? || env.empty?
  101. irb(main):096:3>
  102. irb(main):097:3* request_signature = sha256 "GIT\n#{path}\n\nhost:#{host}\n\nhost\n"
  103. irb(main):098:3> scope = headers(date).join('/')
  104. irb(main):099:3> string_to_sign = "AWS4-HMAC-SHA256\n#{time}\n#{scope}\n#{request_signature}"
  105. irb(main):100:3> pass = to_hex(hmac(string_to_sign,headers(date).inject("AWS4" + secret_key) { |s,i| hmac(i,s) }))
  106. irb(main):101:3>
  107. irb(main):102:3* endpoint = host
  108. irb(main):103:3> endpoint += ":#{port}" if port
  109. irb(main):104:3>
  110. irb(main):105:3* "https://#{access_key}:#{time}Z#{pass}@#{endpoint}#{path}"
  111. irb(main):106:3> end
  112. irb(main):107:2> module_function :signed_uri
  113. irb(main):108:2>
  114. irb(main):109:2* end
  115. irb(main):110:1> end
  116. => AWS::DevTools
  117. irb(main):111:0>
Advertisement
Add Comment
Please, Sign In to add comment