Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- irb(main):003:0> require 'openssl'
- => false
- irb(main):004:0> require 'aws/elastic_beanstalk_config'
- LoadError: cannot load such file -- aws/elastic_beanstalk_config
- from /usr/local/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require'
- from /usr/local/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require'
- from (irb):4
- from /usr/local/bin/irb:12:in `<main>'
- irb(main):005:0>
- irb(main):006:0* module AWS
- irb(main):007:1> module DevTools
- irb(main):008:2>
- irb(main):009:2* @@beanstalk_config = nil
- irb(main):010:2> def beanstalk_config
- irb(main):011:3> @@beanstalk_config ||= ElasticBeanstalkConfig.new(Dir.pwd)
- irb(main):012:3> end
- irb(main):013:2> module_function :beanstalk_config
- irb(main):014:2>
- irb(main):015:2* def commit_exists?(commit)
- irb(main):016:3> id = %x{git rev-parse #{commit}}.strip
- irb(main):017:3> $?.exitstatus == 0
- irb(main):018:3> end
- irb(main):019:2> module_function :commit_exists?
- irb(main):020:2>
- irb(main):021:2* def git_object_type(commit)
- irb(main):022:3> %x{git cat-file -t #{commit}}.strip
- irb(main):023:3> end
- irb(main):024:2> module_function :git_object_type
- irb(main):025:2>
- irb(main):026:2* def commit_id(commit)
- irb(main):027:3> commit ||= "HEAD"
- irb(main):028:3> id = %x{git rev-parse #{commit}}.strip
- irb(main):029:3> unless "commit" == (type = git_object_type(commit))
- irb(main):030:4> raise "#{commit} is a #{type}, and the value of --commit must refer to a commit"
- irb(main):031:4> end
- irb(main):032:3> raise "Unable to find revision #{commit}" unless $? == 0
- irb(main):033:3> id
- irb(main):034:3> end
- irb(main):035:2> module_function :commit_id
- irb(main):036:2>
- irb(main):037:2* def host()
- irb(main):038:3> beanstalk_config.dev_tools_endpoint.split(":")[0]
- irb(main):039:3> end
- irb(main):040:2> module_function :host
- irb(main):041:2>
- irb(main):042:2* def port()
- irb(main):043:3> beanstalk_config.dev_tools_endpoint.split(":")[1]
- irb(main):044:3> end
- irb(main):045:2> module_function :port
- irb(main):046:2>
- irb(main):047:2* def repo()
- irb(main):048:3> beanstalk_config.application_name
- irb(main):049:3> end
- irb(main):050:2> module_function :repo
- irb(main):051:2>
- irb(main):052:2* def headers(date)
- irb(main):053:3> [date, beanstalk_config.region, "devtools", "aws4_request"]
- irb(main):054:3> end
- irb(main):055:2> module_function :headers
- irb(main):056:2>
- irb(main):057:2* def to_hex(str)
- irb(main):058:3> str.to_s.unpack("H*").first
- irb(main):059:3> end
- irb(main):060:2> module_function :to_hex
- irb(main):061:2>
- irb(main):062:2* def sha256(str)
- irb(main):063:3> OpenSSL::Digest.hexdigest("sha256", str)
- end
- irb(main):064:3> end
- irb(main):065:2> module_function :sha256
- irb(main):066:2>
- irb(main):067:2* def hmac(d,s)
- irb(main):068:3> OpenSSL::HMAC.digest(OpenSSL::Digest.new("sha256"), s, d)
- irb(main):069:3> end
- irb(main):070:2> module_function :hmac
- irb(main):071:2>
- irb(main):072:2* def environment()
- irb(main):073:3> current_branch = %x(git rev-parse --abbrev-ref HEAD)
- irb(main):074:3> raise "Error looking up current branch." unless $? == 0
- irb(main):075:3> current_branch.chomp!
- irb(main):076:3> if (current_branch == "HEAD")
- irb(main):077:4> # HEAD doesn't point to a branch, so we'll fall back to default.
- irb(main):078:4* return nil
- irb(main):079:4> end
- irb(main):080:3> beanstalk_config.branch_mappings[current_branch]
- irb(main):081:3> end
- irb(main):082:2> module_function :environment
- irb(main):083:2>
- irb(main):084:2* def signed_uri env, commit
- irb(main):085:3> time = Time.now.utc.strftime("%Y%m%dT%H%M%S")
- irb(main):086:3> date = time[0..7]
- irb(main):087:3>
- irb(main):088:3* env ||= environment || beanstalk_config.environment_name
- irb(main):089:3> secret_key = beanstalk_config.secret_access_key
- 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?
- irb(main):091:3> access_key = beanstalk_config.access_key_id
- 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?
- irb(main):093:3>
- irb(main):094:3* path = "/v1/repos/#{to_hex repo}/commitid/#{to_hex(commit_id(commit))}"
- irb(main):095:3> path += "/environment/#{to_hex env}" unless env.nil? || env.empty?
- irb(main):096:3>
- irb(main):097:3* request_signature = sha256 "GIT\n#{path}\n\nhost:#{host}\n\nhost\n"
- irb(main):098:3> scope = headers(date).join('/')
- irb(main):099:3> string_to_sign = "AWS4-HMAC-SHA256\n#{time}\n#{scope}\n#{request_signature}"
- irb(main):100:3> pass = to_hex(hmac(string_to_sign,headers(date).inject("AWS4" + secret_key) { |s,i| hmac(i,s) }))
- irb(main):101:3>
- irb(main):102:3* endpoint = host
- irb(main):103:3> endpoint += ":#{port}" if port
- irb(main):104:3>
- irb(main):105:3* "https://#{access_key}:#{time}Z#{pass}@#{endpoint}#{path}"
- irb(main):106:3> end
- irb(main):107:2> module_function :signed_uri
- irb(main):108:2>
- irb(main):109:2* end
- irb(main):110:1> end
- => AWS::DevTools
- irb(main):111:0>
Advertisement
Add Comment
Please, Sign In to add comment