vagrant-s3auth 0.0.2 → 0.1.0.alpha1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 092ce09db56f427904d76e1aca0b66f6adfa499a
4
- data.tar.gz: 523c368c3d5c3fd13aa6216f1d864ffdec67ef90
3
+ metadata.gz: 24bd022cbfa2876c12e53ab63524d0223c1db2bc
4
+ data.tar.gz: a4c3000842d64b4cd7e86a1916f3059b82a29d59
5
5
  SHA512:
6
- metadata.gz: 27af19fae218886584b4bf57efcfce1236cee5b270e1b7b36e46a38f9d3a8db3ae272684b6e86aaa27febb9ed2bc7075b9667512f5f5ff81240e2dd00178f984
7
- data.tar.gz: 2d07e190738c9f79862a971f43294d81fad809b8494cef94c5225f9c3c964e531f388dbbab59a4e8b3b32a0e96ef72f6c83f13f44c888607a247f4622c10f7fe
6
+ metadata.gz: 9106c22b6c8982f6e2fe6f54d3c11835f6361d478b22b0128e862bb2f67d73a17d34570253283730f16cda6c04a05e0403e0a05a7b4dda013fa7d6a5d10939fd
7
+ data.tar.gz: 7a1be0554b1811f140a2ec74184869984ab4256d3389d2ba7e960c702821fd2a6626aed874a06ab2f30bdc7fb4f4008081ad43d802271f92331d3e2c33188c24
data/.rubocop.yml CHANGED
@@ -1,20 +1,21 @@
1
- AlignParameters:
1
+ Lint/AssignmentInCondition:
2
2
  Enabled: false
3
3
 
4
- AssignmentInCondition:
4
+ Style/AlignParameters:
5
+ EnforcedStyle: with_fixed_indentation
6
+
7
+ Style/Documentation:
5
8
  Enabled: false
6
9
 
7
- Documentation:
10
+ Style/FileName:
8
11
  Enabled: false
9
12
 
10
- LineLength:
13
+ Style/LineLength:
11
14
  Max: 100
12
15
 
13
- MethodLength:
16
+ Style/MethodLength:
14
17
  CountComments: false # count full line comments?
15
18
  Max: 20
16
19
 
17
- SignalException:
20
+ Style/SignalException:
18
21
  EnforcedStyle: only_raise
19
- SupportedStyles:
20
- - only_raise
data/Gemfile CHANGED
@@ -5,5 +5,7 @@ group :plugins do
5
5
  end
6
6
 
7
7
  group :development do
8
+ gem 'rake', '~> 10.3.2'
9
+ gem 'rubocop', '~> 0.23.0'
8
10
  gem 'vagrant', git: 'git://github.com/mitchellh/vagrant.git'
9
11
  end
data/Gemfile.lock CHANGED
@@ -1,58 +1,113 @@
1
1
  GIT
2
2
  remote: git://github.com/mitchellh/vagrant.git
3
- revision: b97c509c15d94ee70af8ce25739934c5dccb7452
3
+ revision: f0cd8511ed3784415df14aa17b7e4b4935733b63
4
4
  specs:
5
- vagrant (1.5.3.dev)
6
- bundler (~> 1.5.2)
5
+ vagrant (1.6.4.dev)
6
+ bundler (>= 1.5.2, < 1.7.0)
7
7
  childprocess (~> 0.5.0)
8
8
  erubis (~> 2.7.0)
9
9
  i18n (~> 0.6.0)
10
10
  listen (~> 2.7.1)
11
11
  log4r (~> 1.1.9, < 1.1.11)
12
12
  net-scp (~> 1.1.0)
13
- net-ssh (>= 2.6.6, < 2.8.0)
13
+ net-ssh (>= 2.6.6, < 2.10.0)
14
14
  rb-kqueue (~> 0.2.0)
15
15
  wdm (~> 0.1.0)
16
+ winrm (~> 1.1.3)
16
17
 
17
18
  PATH
18
19
  remote: .
19
20
  specs:
20
- vagrant-s3auth (0.0.2)
21
+ vagrant-s3auth (0.1.0.alpha1)
21
22
 
22
23
  GEM
23
24
  remote: https://rubygems.org/
24
25
  specs:
26
+ akami (1.2.2)
27
+ gyoku (>= 0.4.0)
28
+ nokogiri
29
+ ast (2.0.0)
30
+ builder (3.2.2)
25
31
  celluloid (0.15.2)
26
32
  timers (~> 1.1.0)
27
- celluloid-io (0.15.0)
28
- celluloid (>= 0.15.0)
29
- nio4r (>= 0.5.0)
30
- childprocess (0.5.2)
33
+ childprocess (0.5.3)
31
34
  ffi (~> 1.0, >= 1.0.11)
32
35
  erubis (2.7.0)
33
36
  ffi (1.9.3)
37
+ gssapi (1.0.3)
38
+ ffi (>= 1.0.1)
39
+ gyoku (1.1.1)
40
+ builder (>= 2.1.2)
41
+ httpclient (2.4.0)
42
+ httpi (0.9.7)
43
+ rack
34
44
  i18n (0.6.9)
35
- listen (2.7.1)
45
+ json (1.8.1)
46
+ listen (2.7.8)
36
47
  celluloid (>= 0.15.2)
37
- celluloid-io (>= 0.15.0)
38
48
  rb-fsevent (>= 0.9.3)
39
49
  rb-inotify (>= 0.9)
50
+ little-plugger (1.1.3)
40
51
  log4r (1.1.10)
52
+ logging (1.8.2)
53
+ little-plugger (>= 1.1.3)
54
+ multi_json (>= 1.8.4)
55
+ mini_portile (0.6.0)
56
+ multi_json (1.10.1)
41
57
  net-scp (1.1.2)
42
58
  net-ssh (>= 2.6.5)
43
- net-ssh (2.7.0)
44
- nio4r (1.0.0)
59
+ net-ssh (2.9.1)
60
+ nokogiri (1.6.2.1)
61
+ mini_portile (= 0.6.0)
62
+ nori (1.1.5)
63
+ parser (2.1.9)
64
+ ast (>= 1.1, < 3.0)
65
+ slop (~> 3.4, >= 3.4.5)
66
+ powerpack (0.0.9)
67
+ rack (1.5.2)
68
+ rainbow (2.0.0)
69
+ rake (10.3.2)
45
70
  rb-fsevent (0.9.4)
46
- rb-inotify (0.9.3)
71
+ rb-inotify (0.9.5)
47
72
  ffi (>= 0.5.0)
48
- rb-kqueue (0.2.2)
73
+ rb-kqueue (0.2.3)
49
74
  ffi (>= 0.5.0)
75
+ rubocop (0.23.0)
76
+ json (>= 1.7.7, < 2)
77
+ parser (~> 2.1.9)
78
+ powerpack (~> 0.0.6)
79
+ rainbow (>= 1.99.1, < 3.0)
80
+ ruby-progressbar (~> 1.4)
81
+ ruby-progressbar (1.5.1)
82
+ rubyntlm (0.1.1)
83
+ savon (0.9.5)
84
+ akami (~> 1.0)
85
+ builder (>= 2.1.2)
86
+ gyoku (>= 0.4.0)
87
+ httpi (~> 0.9)
88
+ nokogiri (>= 1.4.0)
89
+ nori (~> 1.0)
90
+ wasabi (~> 1.0)
91
+ slop (3.5.0)
50
92
  timers (1.1.0)
93
+ uuidtools (2.1.4)
94
+ wasabi (1.0.0)
95
+ nokogiri (>= 1.4.0)
51
96
  wdm (0.1.0)
97
+ winrm (1.1.3)
98
+ gssapi (~> 1.0.0)
99
+ httpclient (~> 2.2, >= 2.2.0.2)
100
+ logging (~> 1.6, >= 1.6.1)
101
+ nokogiri (~> 1.5)
102
+ rubyntlm (~> 0.1.1)
103
+ savon (= 0.9.5)
104
+ uuidtools (~> 2.1.2)
52
105
 
53
106
  PLATFORMS
54
107
  ruby
55
108
 
56
109
  DEPENDENCIES
110
+ rake (~> 10.3.2)
111
+ rubocop (~> 0.23.0)
57
112
  vagrant!
58
113
  vagrant-s3auth!
data/Rakefile CHANGED
@@ -1,6 +1,11 @@
1
1
  require 'rubygems'
2
2
  require 'bundler/setup'
3
+ require 'rubocop/rake_task'
3
4
 
4
5
  Dir.chdir(File.expand_path('../', __FILE__))
5
6
 
6
7
  Bundler::GemHelper.install_tasks
8
+
9
+ RuboCop::RakeTask.new(:lint)
10
+
11
+ task default: %w(lint)
@@ -0,0 +1,38 @@
1
+ require 'uri'
2
+
3
+ require 'vagrant/util/downloader'
4
+ require 'vagrant-s3auth/util/authenticator'
5
+
6
+ module Vagrant
7
+ module Util
8
+ class Downloader
9
+ def execute_curl_with_s3(options, subprocess_options, &data_proc)
10
+ begin
11
+ url = URI.parse(@source)
12
+ rescue URI::InvalidURIError
13
+ @logger.info("s3auth: Ignoring unparsable URL: #{url}")
14
+ end
15
+
16
+ if url && s3_url?(url)
17
+ @logger.info("s3auth: Signing S3 URL: #{url}")
18
+
19
+ method = options.any? { |o| o == '-I' } ? 'HEAD' : 'GET'
20
+ headers = VagrantPlugins::S3Auth::Util::Authenticator.sign(url, method)
21
+
22
+ headers.each do |name, value|
23
+ options << '-H' << "#{name}: #{value}"
24
+ end
25
+ end
26
+
27
+ execute_curl_without_s3(options, subprocess_options, &data_proc)
28
+ end
29
+
30
+ def s3_url?(url)
31
+ url.host =~ VagrantPlugins::S3Auth::S3_HOST_MATCHER
32
+ end
33
+
34
+ alias_method :execute_curl_without_s3, :execute_curl
35
+ alias_method :execute_curl, :execute_curl_with_s3
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,2 @@
1
+ require_relative 'extensions/box_add'
2
+ require_relative 'extensions/downloader'
@@ -8,8 +8,8 @@ if Vagrant::VERSION < '1.5.0'
8
8
  raise 'The Vagrant AWS plugin is only compatible with Vagrant 1.5+'
9
9
  end
10
10
 
11
- require_relative 'action'
12
11
  require_relative 'errors'
12
+ require_relative 'extensions'
13
13
 
14
14
  module VagrantPlugins
15
15
  module S3Auth
@@ -20,34 +20,10 @@ module VagrantPlugins
20
20
  Use versioned Vagrant boxes with S3 authentication.
21
21
  DESC
22
22
 
23
- action_hook 'authenticate-box-url', :authenticate_box_url do |hook|
24
- setup_i18n
25
- setup_logging
26
-
27
- hook.append(Action.authenticate_box_url)
28
- end
29
-
30
23
  def self.setup_i18n
31
24
  I18n.load_path << File.expand_path('locales/en.yml', VagrantPlugins::S3Auth.source_root)
32
25
  I18n.reload!
33
26
  end
34
-
35
- def self.setup_logging
36
- require 'log4r'
37
-
38
- level = nil
39
- begin
40
- level = Log4r.const_get(ENV['VAGRANT_LOG'].upcase)
41
- rescue NameError
42
- level = nil
43
- end
44
-
45
- if level
46
- logger = Log4r::Logger.new('vagrant_s3auth')
47
- logger.outputters = Log4r::Outputter.stderr
48
- logger.level = level
49
- end
50
- end
51
27
  end
52
28
  end
53
29
  end
@@ -0,0 +1,53 @@
1
+ require 'base64'
2
+ require 'cgi'
3
+ require 'log4r'
4
+ require 'openssl'
5
+ require 'uri'
6
+
7
+ require 'vagrant/util/downloader'
8
+
9
+ module VagrantPlugins
10
+ module S3Auth
11
+ module Util
12
+ class Authenticator
13
+ def self.sign(url, method)
14
+ new.sign(url, method)
15
+ end
16
+
17
+ def initialize
18
+ @access_key = ENV['AWS_ACCESS_KEY_ID']
19
+ @secret_key = ENV['AWS_SECRET_ACCESS_KEY']
20
+
21
+ ensure_credentials
22
+ end
23
+
24
+ def sign(url, method)
25
+ now = CGI.rfc1123_date(Time.now)
26
+ message = "#{method}\n\n\n#{now}\n#{url.path}"
27
+ signature = Base64.strict_encode64(
28
+ OpenSSL::HMAC.digest('sha1', @secret_key, message))
29
+
30
+ {
31
+ date: now,
32
+ authorization: "AWS #{@access_key}:#{signature}"
33
+ }
34
+ end
35
+
36
+ protected
37
+
38
+ def ensure_credentials
39
+ missing_variables = []
40
+ missing_variables << 'AWS_ACCESS_KEY_ID' unless @access_key
41
+ missing_variables << 'AWS_SECRET_ACCESS_KEY' unless @secret_key
42
+
43
+ # rubocop:disable Style/GuardClause
44
+ unless missing_variables.empty?
45
+ raise Errors::MissingCredentialsError,
46
+ missing_variables: missing_variables.join(', ')
47
+ end
48
+ # rubocop:enable Style/GuardClause
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -1,5 +1,5 @@
1
1
  module VagrantPlugins
2
2
  module S3Auth
3
- VERSION = '0.0.2'
3
+ VERSION = '0.1.0.alpha1'
4
4
  end
5
5
  end
@@ -5,6 +5,7 @@ require 'vagrant-s3auth/plugin'
5
5
  module VagrantPlugins
6
6
  module S3Auth
7
7
  S3_HOST = 's3.amazonaws.com'
8
+ S3_HOST_MATCHER = /^s3([[:alnum:]\-\.]+)?\.amazonaws\.com$/
8
9
  BOX_URL_MATCHER = %r{^s3://(?<bucket>[[:alnum:]\-\.]+)(?<resource>.*)/?}
9
10
 
10
11
  def self.source_root
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-s3auth
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0.alpha1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nikhil Benesch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-06 00:00:00.000000000 Z
11
+ date: 2014-06-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -54,11 +54,12 @@ files:
54
54
  - README.md
55
55
  - Rakefile
56
56
  - lib/vagrant-s3auth.rb
57
- - lib/vagrant-s3auth/action.rb
58
- - lib/vagrant-s3auth/action/authenticate_box_url.rb
59
- - lib/vagrant-s3auth/action/box_add.rb
60
57
  - lib/vagrant-s3auth/errors.rb
58
+ - lib/vagrant-s3auth/extensions.rb
59
+ - lib/vagrant-s3auth/extensions/box_add.rb
60
+ - lib/vagrant-s3auth/extensions/downloader.rb
61
61
  - lib/vagrant-s3auth/plugin.rb
62
+ - lib/vagrant-s3auth/util/authenticator.rb
62
63
  - lib/vagrant-s3auth/version.rb
63
64
  - locales/en.yml
64
65
  - vagrant-s3auth.gemspec
@@ -77,9 +78,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
77
78
  version: '0'
78
79
  required_rubygems_version: !ruby/object:Gem::Requirement
79
80
  requirements:
80
- - - '>='
81
+ - - '>'
81
82
  - !ruby/object:Gem::Version
82
- version: '0'
83
+ version: 1.3.1
83
84
  requirements: []
84
85
  rubyforge_project:
85
86
  rubygems_version: 2.0.14
@@ -1,86 +0,0 @@
1
- require 'base64'
2
- require 'cgi'
3
- require 'log4r'
4
- require 'openssl'
5
- require 'uri'
6
-
7
- module VagrantPlugins
8
- module S3Auth
9
- module Action
10
- class AuthenticateBoxUrl
11
- def initialize(app, env)
12
- @app = app
13
- @logger = Log4r::Logger.new('vagrant_s3auth::action::authenticate_box_url')
14
- @access_key = ENV['AWS_ACCESS_KEY_ID']
15
- @secret_key = ENV['AWS_SECRET_ACCESS_KEY']
16
- end
17
-
18
- def call(env)
19
- env[:box_urls].map! do |url_string|
20
- begin
21
- url = URI.parse(url_string)
22
- rescue URI::InvalidURIError
23
- next url_string
24
- end
25
-
26
- unless s3_url?(url)
27
- @logger.debug("Skipping non-S3 host: #{url}")
28
- next url_string
29
- end
30
-
31
- # Vagrant makes a HEAD request for metadata. S3 doesn't support
32
- # query-string authentication on HEAD requests, so skip signing. We
33
- # need to provide a different "authenticated" URL, though, or
34
- # Vagrant will think the box doesn't require authentication,
35
- # and won't request an authenticated URL for the box itself.
36
- unless box_url?(url)
37
- @logger.debug("Munging S3 metadata URL: #{url}")
38
- next url_string + '?'
39
- end
40
-
41
- @logger.info("Signing URL for S3 box: #{url}")
42
- sign(url)
43
- end
44
-
45
- @app.call(env)
46
- end
47
-
48
- def sign(url)
49
- ensure_credentials
50
-
51
- expires = (Time.now + 20).to_i
52
- message = "GET\n\n\n#{expires}\n#{url.path}"
53
- signature = CGI.escape(Base64.strict_encode64(
54
- OpenSSL::HMAC.digest('sha1', @secret_key, message)))
55
-
56
- url.query = {
57
- 'AWSAccessKeyId' => @access_key,
58
- 'Expires' => expires,
59
- 'Signature' => signature
60
- }.map { |k, v| "#{k}=#{v}" }.join('&')
61
-
62
- url.to_s
63
- end
64
-
65
- def ensure_credentials
66
- missing_variables = []
67
- missing_variables << 'AWS_ACCESS_KEY_ID' unless @access_key
68
- missing_variables << 'AWS_SECRET_ACCESS_KEY' unless @secret_key
69
-
70
- unless missing_variables.empty?
71
- raise Errors::MissingCredentialsError,
72
- missing_variables: missing_variables.join(', ')
73
- end
74
- end
75
-
76
- def s3_url?(url)
77
- url.host == S3_HOST
78
- end
79
-
80
- def box_url?(url)
81
- url.path.end_with?('.box')
82
- end
83
- end
84
- end
85
- end
86
- end
@@ -1,14 +0,0 @@
1
- require_relative 'action/authenticate_box_url'
2
- require_relative 'action/box_add'
3
-
4
- module VagrantPlugins
5
- module S3Auth
6
- module Action
7
- def self.authenticate_box_url
8
- Vagrant::Action::Builder.new.tap do |b|
9
- b.use AuthenticateBoxUrl
10
- end
11
- end
12
- end
13
- end
14
- end