vagrant-s3auth 0.0.1
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 +7 -0
 - data/.gitignore +4 -0
 - data/.rubocop.yml +20 -0
 - data/Gemfile +9 -0
 - data/Gemfile.lock +58 -0
 - data/LICENSE +3 -0
 - data/README.md +181 -0
 - data/Rakefile +6 -0
 - data/lib/vagrant-s3auth.rb +14 -0
 - data/lib/vagrant-s3auth/action.rb +14 -0
 - data/lib/vagrant-s3auth/action/authenticate_box_url.rb +86 -0
 - data/lib/vagrant-s3auth/action/box_add.rb +41 -0
 - data/lib/vagrant-s3auth/errors.rb +15 -0
 - data/lib/vagrant-s3auth/plugin.rb +53 -0
 - data/lib/vagrant-s3auth/version.rb +5 -0
 - data/locales/en.yml +10 -0
 - data/vagrant-s3auth.gemspec +20 -0
 - metadata +89 -0
 
    
        checksums.yaml
    ADDED
    
    | 
         @@ -0,0 +1,7 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            ---
         
     | 
| 
      
 2 
     | 
    
         
            +
            SHA1:
         
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 8bd07d8c67e818f8b050629b918f2939c85d6b43
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 1439d1a6f47f937886bd861affe61a38c49bee2a
         
     | 
| 
      
 5 
     | 
    
         
            +
            SHA512:
         
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: e6d3178aca6715909b44ba0e548045e3c70e752ca0ce81b8894214ac6d15ebe6612aeb85b1c35e6caffb089771b5a654c0098354ea36a31c990f3f060774c7a6
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 1f79b0b7fb583e0f627ac3b6dd80bde532aab476bb80b1f42e9072a09c42842b2dd874291c81479442edd202fc46fecaf9683cddc33429020e1d0726b7509266
         
     | 
    
        data/.gitignore
    ADDED
    
    
    
        data/.rubocop.yml
    ADDED
    
    | 
         @@ -0,0 +1,20 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            AlignParameters:
         
     | 
| 
      
 2 
     | 
    
         
            +
              Enabled: false
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            AssignmentInCondition:
         
     | 
| 
      
 5 
     | 
    
         
            +
              Enabled: false
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            Documentation:
         
     | 
| 
      
 8 
     | 
    
         
            +
              Enabled: false
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            LineLength:
         
     | 
| 
      
 11 
     | 
    
         
            +
              Max: 100
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            MethodLength:
         
     | 
| 
      
 14 
     | 
    
         
            +
              CountComments: false  # count full line comments?
         
     | 
| 
      
 15 
     | 
    
         
            +
              Max: 20
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            SignalException:
         
     | 
| 
      
 18 
     | 
    
         
            +
              EnforcedStyle: only_raise
         
     | 
| 
      
 19 
     | 
    
         
            +
              SupportedStyles:
         
     | 
| 
      
 20 
     | 
    
         
            +
                - only_raise
         
     | 
    
        data/Gemfile
    ADDED
    
    
    
        data/Gemfile.lock
    ADDED
    
    | 
         @@ -0,0 +1,58 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            GIT
         
     | 
| 
      
 2 
     | 
    
         
            +
              remote: git://github.com/mitchellh/vagrant.git
         
     | 
| 
      
 3 
     | 
    
         
            +
              revision: b97c509c15d94ee70af8ce25739934c5dccb7452
         
     | 
| 
      
 4 
     | 
    
         
            +
              specs:
         
     | 
| 
      
 5 
     | 
    
         
            +
                vagrant (1.5.3.dev)
         
     | 
| 
      
 6 
     | 
    
         
            +
                  bundler (~> 1.5.2)
         
     | 
| 
      
 7 
     | 
    
         
            +
                  childprocess (~> 0.5.0)
         
     | 
| 
      
 8 
     | 
    
         
            +
                  erubis (~> 2.7.0)
         
     | 
| 
      
 9 
     | 
    
         
            +
                  i18n (~> 0.6.0)
         
     | 
| 
      
 10 
     | 
    
         
            +
                  listen (~> 2.7.1)
         
     | 
| 
      
 11 
     | 
    
         
            +
                  log4r (~> 1.1.9, < 1.1.11)
         
     | 
| 
      
 12 
     | 
    
         
            +
                  net-scp (~> 1.1.0)
         
     | 
| 
      
 13 
     | 
    
         
            +
                  net-ssh (>= 2.6.6, < 2.8.0)
         
     | 
| 
      
 14 
     | 
    
         
            +
                  rb-kqueue (~> 0.2.0)
         
     | 
| 
      
 15 
     | 
    
         
            +
                  wdm (~> 0.1.0)
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            PATH
         
     | 
| 
      
 18 
     | 
    
         
            +
              remote: .
         
     | 
| 
      
 19 
     | 
    
         
            +
              specs:
         
     | 
| 
      
 20 
     | 
    
         
            +
                vagrant-s3auth (0.0.1)
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            GEM
         
     | 
| 
      
 23 
     | 
    
         
            +
              remote: https://rubygems.org/
         
     | 
| 
      
 24 
     | 
    
         
            +
              specs:
         
     | 
| 
      
 25 
     | 
    
         
            +
                celluloid (0.15.2)
         
     | 
| 
      
 26 
     | 
    
         
            +
                  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)
         
     | 
| 
      
 31 
     | 
    
         
            +
                  ffi (~> 1.0, >= 1.0.11)
         
     | 
| 
      
 32 
     | 
    
         
            +
                erubis (2.7.0)
         
     | 
| 
      
 33 
     | 
    
         
            +
                ffi (1.9.3)
         
     | 
| 
      
 34 
     | 
    
         
            +
                i18n (0.6.9)
         
     | 
| 
      
 35 
     | 
    
         
            +
                listen (2.7.1)
         
     | 
| 
      
 36 
     | 
    
         
            +
                  celluloid (>= 0.15.2)
         
     | 
| 
      
 37 
     | 
    
         
            +
                  celluloid-io (>= 0.15.0)
         
     | 
| 
      
 38 
     | 
    
         
            +
                  rb-fsevent (>= 0.9.3)
         
     | 
| 
      
 39 
     | 
    
         
            +
                  rb-inotify (>= 0.9)
         
     | 
| 
      
 40 
     | 
    
         
            +
                log4r (1.1.10)
         
     | 
| 
      
 41 
     | 
    
         
            +
                net-scp (1.1.2)
         
     | 
| 
      
 42 
     | 
    
         
            +
                  net-ssh (>= 2.6.5)
         
     | 
| 
      
 43 
     | 
    
         
            +
                net-ssh (2.7.0)
         
     | 
| 
      
 44 
     | 
    
         
            +
                nio4r (1.0.0)
         
     | 
| 
      
 45 
     | 
    
         
            +
                rb-fsevent (0.9.4)
         
     | 
| 
      
 46 
     | 
    
         
            +
                rb-inotify (0.9.3)
         
     | 
| 
      
 47 
     | 
    
         
            +
                  ffi (>= 0.5.0)
         
     | 
| 
      
 48 
     | 
    
         
            +
                rb-kqueue (0.2.2)
         
     | 
| 
      
 49 
     | 
    
         
            +
                  ffi (>= 0.5.0)
         
     | 
| 
      
 50 
     | 
    
         
            +
                timers (1.1.0)
         
     | 
| 
      
 51 
     | 
    
         
            +
                wdm (0.1.0)
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
            PLATFORMS
         
     | 
| 
      
 54 
     | 
    
         
            +
              ruby
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
            DEPENDENCIES
         
     | 
| 
      
 57 
     | 
    
         
            +
              vagrant!
         
     | 
| 
      
 58 
     | 
    
         
            +
              vagrant-s3auth!
         
     | 
    
        data/LICENSE
    ADDED
    
    
    
        data/README.md
    ADDED
    
    | 
         @@ -0,0 +1,181 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # vagrant-s3auth
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            Private, versioned Vagrant boxes hosted on Amazon S3.
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            ## Installation
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            From the command line:
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            ```bash
         
     | 
| 
      
 10 
     | 
    
         
            +
            $ vagrant plugin install vagrant-s3auth
         
     | 
| 
      
 11 
     | 
    
         
            +
            ```
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            ### Requirements
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            * [Vagrant][vagrant], v1.5.0+
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            ## Usage
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            vagrant-s3auth will automatically convert S3 box URLs
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            ```
         
     | 
| 
      
 22 
     | 
    
         
            +
            s3://bucket.example.com/path/to/metadata
         
     | 
| 
      
 23 
     | 
    
         
            +
            ```
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
            to URLs [signed with your AWS access key][aws-signed]:
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            ```
         
     | 
| 
      
 28 
     | 
    
         
            +
            https://s3.amazonaws.com/bucket.example.com/path/to/metadata?AWSAccessKeyId=
         
     | 
| 
      
 29 
     | 
    
         
            +
                AKIAIOSFODNN7EXAMPLE&Expires=1141889120&Signature=vjbyPxybdZaNmGa%2ByT272YEAiv4%3D
         
     | 
| 
      
 30 
     | 
    
         
            +
            ```
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
            This means you can host your team's sensitive, private boxes on S3, and use your
         
     | 
| 
      
 33 
     | 
    
         
            +
            developers' existing AWS credentials to securely grant access.
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
            If you've already got your credentials stored in the appropriate environment
         
     | 
| 
      
 36 
     | 
    
         
            +
            variables:
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 39 
     | 
    
         
            +
            # Vagrantfile
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
            Vagrant.configure('2') do |config|
         
     | 
| 
      
 42 
     | 
    
         
            +
              config.vm.box     = 'simple-secrets'
         
     | 
| 
      
 43 
     | 
    
         
            +
              config.vm.box_url = 's3://example.com/secret.box'
         
     | 
| 
      
 44 
     | 
    
         
            +
            end
         
     | 
| 
      
 45 
     | 
    
         
            +
            ```
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
            ### Configuration
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
            #### AWS credentials
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
            AWS credentials are read from the standard environment variables
         
     | 
| 
      
 52 
     | 
    
         
            +
            `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY`.
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
            If you need to obtain credentials from elsewhere, drop a block like the
         
     | 
| 
      
 55 
     | 
    
         
            +
            following at the top of your Vagrantfile:
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 58 
     | 
    
         
            +
            creds = File.read(File.expand_path('~/.company-aws-creds')).lines
         
     | 
| 
      
 59 
     | 
    
         
            +
            ENV['AWS_ACCESS_KEY_ID']     = creds[0]
         
     | 
| 
      
 60 
     | 
    
         
            +
            ENV['AWS_SECRET_ACCESS_KEY'] = creds[1]
         
     | 
| 
      
 61 
     | 
    
         
            +
            ```
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
            #### Simple boxes
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
            Simply point your `box_url` at Amazon S3:
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 69 
     | 
    
         
            +
            Vagrant.configure('2') do |config|
         
     | 
| 
      
 70 
     | 
    
         
            +
              config.vm.box     = 'simple-secrets'
         
     | 
| 
      
 71 
     | 
    
         
            +
              config.vm.box_url = 'https://s3.amazonaws.com/bucket.example.com/secret.box'
         
     | 
| 
      
 72 
     | 
    
         
            +
            end
         
     | 
| 
      
 73 
     | 
    
         
            +
            ```
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
            Note that your URL must be of the form
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
            ```
         
     | 
| 
      
 78 
     | 
    
         
            +
            https://s3.amazonaws.com/bucket/resource
         
     | 
| 
      
 79 
     | 
    
         
            +
            ```
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
            Other valid forms of S3 URLs (`bucket.s3.amazonaws.com/resource.box`, etc.) will
         
     | 
| 
      
 82 
     | 
    
         
            +
            not be detected by vagrant-s3auth.
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
            As shorthand, `s3://` URLs will be automatically transformed. This is equivalent
         
     | 
| 
      
 85 
     | 
    
         
            +
            to the above:
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 88 
     | 
    
         
            +
            Vagrant.configure('2') do |config|
         
     | 
| 
      
 89 
     | 
    
         
            +
              config.vm.box     = 'simple-secrets'
         
     | 
| 
      
 90 
     | 
    
         
            +
              config.vm.box_url = 's3://example.com/secret.box'
         
     | 
| 
      
 91 
     | 
    
         
            +
            end
         
     | 
| 
      
 92 
     | 
    
         
            +
            ```
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
            **Note:** Simple box URLs must end in `.box`, or they'll be interpreted as
         
     | 
| 
      
 95 
     | 
    
         
            +
            [metadata boxes](#metadata-boxes).
         
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
      
 97 
     | 
    
         
            +
            #### Vagrant Cloud
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
      
 99 
     | 
    
         
            +
            Boxes on [Vagrant Cloud][vagrant-cloud] have support for versioning, multiple
         
     | 
| 
      
 100 
     | 
    
         
            +
            providers, and a GUI management tool. If you've got a box version on Vagrant
         
     | 
| 
      
 101 
     | 
    
         
            +
            Cloud.
         
     | 
| 
      
 102 
     | 
    
         
            +
             
     | 
| 
      
 103 
     | 
    
         
            +
            Then just configure your Vagrantfile like normal:
         
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
      
 105 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 106 
     | 
    
         
            +
            Vagrant.configure('2') do |config|
         
     | 
| 
      
 107 
     | 
    
         
            +
              config.vm.box = 'examplecorp/secrets'
         
     | 
| 
      
 108 
     | 
    
         
            +
            end
         
     | 
| 
      
 109 
     | 
    
         
            +
            ```
         
     | 
| 
      
 110 
     | 
    
         
            +
             
     | 
| 
      
 111 
     | 
    
         
            +
            #### Metadata boxes
         
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
      
 113 
     | 
    
         
            +
            [Metadata boxes][metadata-boxes] were added to Vagrant in 1.5 and power Vagrant
         
     | 
| 
      
 114 
     | 
    
         
            +
            Cloud. You can host your own metadata and bypass Vagrant Cloud entirely.
         
     | 
| 
      
 115 
     | 
    
         
            +
             
     | 
| 
      
 116 
     | 
    
         
            +
            Essentially, you point your `box_url` at a [JSON metadata file][metadata-boxes]
         
     | 
| 
      
 117 
     | 
    
         
            +
            that tells Vagrant where to find all possible versions:
         
     | 
| 
      
 118 
     | 
    
         
            +
             
     | 
| 
      
 119 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 120 
     | 
    
         
            +
            # Vagrantfile
         
     | 
| 
      
 121 
     | 
    
         
            +
             
     | 
| 
      
 122 
     | 
    
         
            +
            Vagrant.configure('2') do |config|
         
     | 
| 
      
 123 
     | 
    
         
            +
              config.vm.box     = 'examplecorp/secrets'
         
     | 
| 
      
 124 
     | 
    
         
            +
              config.vm.box_url = 's3://example.com/secrets'
         
     | 
| 
      
 125 
     | 
    
         
            +
            end
         
     | 
| 
      
 126 
     | 
    
         
            +
            ```
         
     | 
| 
      
 127 
     | 
    
         
            +
             
     | 
| 
      
 128 
     | 
    
         
            +
            ```json
         
     | 
| 
      
 129 
     | 
    
         
            +
            "s3://example.com/secrets"
         
     | 
| 
      
 130 
     | 
    
         
            +
             
     | 
| 
      
 131 
     | 
    
         
            +
            {
         
     | 
| 
      
 132 
     | 
    
         
            +
              "name": "examplecorp/secrets",
         
     | 
| 
      
 133 
     | 
    
         
            +
              "description": "This box contains company secrets.",
         
     | 
| 
      
 134 
     | 
    
         
            +
              "versions": [{
         
     | 
| 
      
 135 
     | 
    
         
            +
                "version": "0.1.0",
         
     | 
| 
      
 136 
     | 
    
         
            +
                "providers": [{
         
     | 
| 
      
 137 
     | 
    
         
            +
                  "name": "virtualbox",
         
     | 
| 
      
 138 
     | 
    
         
            +
                  "url": "https://s3.amazonaws.com/example.com/secrets.box",
         
     | 
| 
      
 139 
     | 
    
         
            +
                  "checksum_type": "sha1",
         
     | 
| 
      
 140 
     | 
    
         
            +
                  "checksum": "foo"
         
     | 
| 
      
 141 
     | 
    
         
            +
                }]
         
     | 
| 
      
 142 
     | 
    
         
            +
              }]
         
     | 
| 
      
 143 
     | 
    
         
            +
            }
         
     | 
| 
      
 144 
     | 
    
         
            +
            ```
         
     | 
| 
      
 145 
     | 
    
         
            +
             
     | 
| 
      
 146 
     | 
    
         
            +
            **Note:** box URLs in metadata JSON must use the
         
     | 
| 
      
 147 
     | 
    
         
            +
            `s3.amazonaws.com/bucket.example.com/resource.box` URL form, or it won't get
         
     | 
| 
      
 148 
     | 
    
         
            +
            auto-signed.
         
     | 
| 
      
 149 
     | 
    
         
            +
             
     | 
| 
      
 150 
     | 
    
         
            +
            ### Rules
         
     | 
| 
      
 151 
     | 
    
         
            +
             
     | 
| 
      
 152 
     | 
    
         
            +
            To sum up:
         
     | 
| 
      
 153 
     | 
    
         
            +
             
     | 
| 
      
 154 
     | 
    
         
            +
            * Only the `box_url` setting can use the `s3://` shorthand. URLs entered on the
         
     | 
| 
      
 155 
     | 
    
         
            +
              Vagrant Cloud management interface and in JSON metadata must use the full
         
     | 
| 
      
 156 
     | 
    
         
            +
              HTTPS URL.
         
     | 
| 
      
 157 
     | 
    
         
            +
             
     | 
| 
      
 158 
     | 
    
         
            +
            * The full HTTPS URL must be of the form
         
     | 
| 
      
 159 
     | 
    
         
            +
              `https://s3.amazonaws.com/bucket.example.com/resource.box`, or it won't be
         
     | 
| 
      
 160 
     | 
    
         
            +
              signed properly.
         
     | 
| 
      
 161 
     | 
    
         
            +
             
     | 
| 
      
 162 
     | 
    
         
            +
            * Metadata box files must *not* end in `.box`.
         
     | 
| 
      
 163 
     | 
    
         
            +
             
     | 
| 
      
 164 
     | 
    
         
            +
            * Actual box files *must* end in `.box`.
         
     | 
| 
      
 165 
     | 
    
         
            +
             
     | 
| 
      
 166 
     | 
    
         
            +
            ### Auto-install
         
     | 
| 
      
 167 
     | 
    
         
            +
             
     | 
| 
      
 168 
     | 
    
         
            +
            The beauty of Vagrant is the magic of "`vagrant up` and done." Making your users
         
     | 
| 
      
 169 
     | 
    
         
            +
            install a plugin is lame.
         
     | 
| 
      
 170 
     | 
    
         
            +
             
     | 
| 
      
 171 
     | 
    
         
            +
            But wait! Just stick some shell in your Vagrantfile:
         
     | 
| 
      
 172 
     | 
    
         
            +
             
     | 
| 
      
 173 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 174 
     | 
    
         
            +
            %x(vagrant plugin install vagrant-s3auth) unless Vagrant.has_plugin?('vagrant-s3auth')
         
     | 
| 
      
 175 
     | 
    
         
            +
            ```
         
     | 
| 
      
 176 
     | 
    
         
            +
             
     | 
| 
      
 177 
     | 
    
         
            +
             
     | 
| 
      
 178 
     | 
    
         
            +
            [aws-signed]: http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html#RESTAuthenticationQueryStringAuth
         
     | 
| 
      
 179 
     | 
    
         
            +
            [metadata-boxes]: http://docs.vagrantup.com/v2/boxes/format.html
         
     | 
| 
      
 180 
     | 
    
         
            +
            [vagrant]: http://vagrantup.com
         
     | 
| 
      
 181 
     | 
    
         
            +
            [vagrant-cloud]: http://vagrantcloud.com
         
     | 
    
        data/Rakefile
    ADDED
    
    
| 
         @@ -0,0 +1,14 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'pathname'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'vagrant-s3auth/plugin'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            module VagrantPlugins
         
     | 
| 
      
 6 
     | 
    
         
            +
              module S3Auth
         
     | 
| 
      
 7 
     | 
    
         
            +
                S3_HOST         = 's3.amazonaws.com'
         
     | 
| 
      
 8 
     | 
    
         
            +
                BOX_URL_MATCHER = %r{^s3://(?<bucket>[[:alnum:]\-\.]+)(?<resource>.*)/?}
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                def self.source_root
         
     | 
| 
      
 11 
     | 
    
         
            +
                  @source_root ||= Pathname.new(File.expand_path('../../', __FILE__))
         
     | 
| 
      
 12 
     | 
    
         
            +
                end
         
     | 
| 
      
 13 
     | 
    
         
            +
              end
         
     | 
| 
      
 14 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,14 @@ 
     | 
|
| 
      
 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
         
     | 
| 
         @@ -0,0 +1,86 @@ 
     | 
|
| 
      
 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
         
     | 
| 
         @@ -0,0 +1,41 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'uri'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Vagrant
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Action
         
     | 
| 
      
 5 
     | 
    
         
            +
                module Builtin
         
     | 
| 
      
 6 
     | 
    
         
            +
                  class BoxAdd
         
     | 
| 
      
 7 
     | 
    
         
            +
                    def call_with_s3(env)
         
     | 
| 
      
 8 
     | 
    
         
            +
                      box_url = env[:box_url]
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                      # Non-iterable box_urls are Vagrant Cloud boxes, which we don't need
         
     | 
| 
      
 11 
     | 
    
         
            +
                      # to handle.
         
     | 
| 
      
 12 
     | 
    
         
            +
                      if box_url.respond_to?(:map!)
         
     | 
| 
      
 13 
     | 
    
         
            +
                        box_url.map! do |url|
         
     | 
| 
      
 14 
     | 
    
         
            +
                          if matched = VagrantPlugins::S3Auth::BOX_URL_MATCHER.match(url)
         
     | 
| 
      
 15 
     | 
    
         
            +
                            @logger.info('Transforming S3 box URL: #{url}')
         
     | 
| 
      
 16 
     | 
    
         
            +
                            s3_url(matched[:bucket], matched[:resource])
         
     | 
| 
      
 17 
     | 
    
         
            +
                          else
         
     | 
| 
      
 18 
     | 
    
         
            +
                            @logger.info("Not transforming non-S3 box: #{url}")
         
     | 
| 
      
 19 
     | 
    
         
            +
                            url
         
     | 
| 
      
 20 
     | 
    
         
            +
                          end
         
     | 
| 
      
 21 
     | 
    
         
            +
                        end
         
     | 
| 
      
 22 
     | 
    
         
            +
                      else
         
     | 
| 
      
 23 
     | 
    
         
            +
                        @logger.debug('Box URL #{box_url.inspect} looks like a Vagrant "
         
     | 
| 
      
 24 
     | 
    
         
            +
                          Cloud box, skipping S3 transformation...')
         
     | 
| 
      
 25 
     | 
    
         
            +
                      end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                      call_without_s3(env)
         
     | 
| 
      
 28 
     | 
    
         
            +
                    end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                    def s3_url(bucket, resource)
         
     | 
| 
      
 31 
     | 
    
         
            +
                      URI::HTTPS.build(
         
     | 
| 
      
 32 
     | 
    
         
            +
                        host: VagrantPlugins::S3Auth::S3_HOST,
         
     | 
| 
      
 33 
     | 
    
         
            +
                        path: File.join('/', bucket, resource)).to_s
         
     | 
| 
      
 34 
     | 
    
         
            +
                    end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                    alias_method :call_without_s3, :call
         
     | 
| 
      
 37 
     | 
    
         
            +
                    alias_method :call, :call_with_s3
         
     | 
| 
      
 38 
     | 
    
         
            +
                  end
         
     | 
| 
      
 39 
     | 
    
         
            +
                end
         
     | 
| 
      
 40 
     | 
    
         
            +
              end
         
     | 
| 
      
 41 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,15 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'vagrant'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module VagrantPlugins
         
     | 
| 
      
 4 
     | 
    
         
            +
              module S3Auth
         
     | 
| 
      
 5 
     | 
    
         
            +
                module Errors
         
     | 
| 
      
 6 
     | 
    
         
            +
                  class VagrantS3AuthError < Vagrant::Errors::VagrantError
         
     | 
| 
      
 7 
     | 
    
         
            +
                    error_namespace('vagrant_s3auth.errors')
         
     | 
| 
      
 8 
     | 
    
         
            +
                  end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                  class MissingCredentialsError < VagrantS3AuthError
         
     | 
| 
      
 11 
     | 
    
         
            +
                    error_key(:missing_credentials)
         
     | 
| 
      
 12 
     | 
    
         
            +
                  end
         
     | 
| 
      
 13 
     | 
    
         
            +
                end
         
     | 
| 
      
 14 
     | 
    
         
            +
              end
         
     | 
| 
      
 15 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,53 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            begin
         
     | 
| 
      
 2 
     | 
    
         
            +
              require 'vagrant'
         
     | 
| 
      
 3 
     | 
    
         
            +
            rescue LoadError
         
     | 
| 
      
 4 
     | 
    
         
            +
              raise 'The Vagrant S3Auth plugin must be run within Vagrant.'
         
     | 
| 
      
 5 
     | 
    
         
            +
            end
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            if Vagrant::VERSION < '1.5.0'
         
     | 
| 
      
 8 
     | 
    
         
            +
              raise 'The Vagrant AWS plugin is only compatible with Vagrant 1.5+'
         
     | 
| 
      
 9 
     | 
    
         
            +
            end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            require_relative 'action'
         
     | 
| 
      
 12 
     | 
    
         
            +
            require_relative 'errors'
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            module VagrantPlugins
         
     | 
| 
      
 15 
     | 
    
         
            +
              module S3Auth
         
     | 
| 
      
 16 
     | 
    
         
            +
                class Plugin < Vagrant.plugin(2)
         
     | 
| 
      
 17 
     | 
    
         
            +
                  name 's3auth'
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                  description <<-DESC
         
     | 
| 
      
 20 
     | 
    
         
            +
                    Use versioned Vagrant boxes with S3 authentication.
         
     | 
| 
      
 21 
     | 
    
         
            +
                  DESC
         
     | 
| 
      
 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 
     | 
    
         
            +
                  def self.setup_i18n
         
     | 
| 
      
 31 
     | 
    
         
            +
                    I18n.load_path << File.expand_path('locales/en.yml', VagrantPlugins::S3Auth.source_root)
         
     | 
| 
      
 32 
     | 
    
         
            +
                    I18n.reload!
         
     | 
| 
      
 33 
     | 
    
         
            +
                  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 
     | 
    
         
            +
                end
         
     | 
| 
      
 52 
     | 
    
         
            +
              end
         
     | 
| 
      
 53 
     | 
    
         
            +
            end
         
     | 
    
        data/locales/en.yml
    ADDED
    
    
| 
         @@ -0,0 +1,20 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            $LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'vagrant-s3auth/version'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            Gem::Specification.new do |spec|
         
     | 
| 
      
 6 
     | 
    
         
            +
              spec.name          = 'vagrant-s3auth'
         
     | 
| 
      
 7 
     | 
    
         
            +
              spec.version       = VagrantPlugins::S3Auth::VERSION
         
     | 
| 
      
 8 
     | 
    
         
            +
              spec.authors       = ['Nikhil Benesch']
         
     | 
| 
      
 9 
     | 
    
         
            +
              spec.email         = ['benesch@whoop.com']
         
     | 
| 
      
 10 
     | 
    
         
            +
              spec.summary       = 'Private, versioned Vagrant boxes hosted on Amazon S3.'
         
     | 
| 
      
 11 
     | 
    
         
            +
              spec.homepage      = 'https://github.com/WhoopInc/vagrant-s3auth'
         
     | 
| 
      
 12 
     | 
    
         
            +
              spec.license       = 'All rights reserved'
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              spec.files         = `git ls-files -z`.split("\x0")
         
     | 
| 
      
 15 
     | 
    
         
            +
              spec.test_files    = spec.files.grep(/spec/)
         
     | 
| 
      
 16 
     | 
    
         
            +
              spec.require_paths = ['lib']
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
              spec.add_development_dependency 'bundler', '~> 1.5'
         
     | 
| 
      
 19 
     | 
    
         
            +
              spec.add_development_dependency 'rake'
         
     | 
| 
      
 20 
     | 
    
         
            +
            end
         
     | 
    
        metadata
    ADDED
    
    | 
         @@ -0,0 +1,89 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            --- !ruby/object:Gem::Specification
         
     | 
| 
      
 2 
     | 
    
         
            +
            name: vagrant-s3auth
         
     | 
| 
      
 3 
     | 
    
         
            +
            version: !ruby/object:Gem::Version
         
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.0.1
         
     | 
| 
      
 5 
     | 
    
         
            +
            platform: ruby
         
     | 
| 
      
 6 
     | 
    
         
            +
            authors:
         
     | 
| 
      
 7 
     | 
    
         
            +
            - Nikhil Benesch
         
     | 
| 
      
 8 
     | 
    
         
            +
            autorequire: 
         
     | 
| 
      
 9 
     | 
    
         
            +
            bindir: bin
         
     | 
| 
      
 10 
     | 
    
         
            +
            cert_chain: []
         
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2014-04-11 00:00:00.000000000 Z
         
     | 
| 
      
 12 
     | 
    
         
            +
            dependencies:
         
     | 
| 
      
 13 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 14 
     | 
    
         
            +
              name: bundler
         
     | 
| 
      
 15 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 16 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 17 
     | 
    
         
            +
                - - ~>
         
     | 
| 
      
 18 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 19 
     | 
    
         
            +
                    version: '1.5'
         
     | 
| 
      
 20 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 21 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 22 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 23 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 24 
     | 
    
         
            +
                - - ~>
         
     | 
| 
      
 25 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 26 
     | 
    
         
            +
                    version: '1.5'
         
     | 
| 
      
 27 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 28 
     | 
    
         
            +
              name: rake
         
     | 
| 
      
 29 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 30 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 31 
     | 
    
         
            +
                - - '>='
         
     | 
| 
      
 32 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 33 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 34 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 35 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 36 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 37 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 38 
     | 
    
         
            +
                - - '>='
         
     | 
| 
      
 39 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 40 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 41 
     | 
    
         
            +
            description: 
         
     | 
| 
      
 42 
     | 
    
         
            +
            email:
         
     | 
| 
      
 43 
     | 
    
         
            +
            - benesch@whoop.com
         
     | 
| 
      
 44 
     | 
    
         
            +
            executables: []
         
     | 
| 
      
 45 
     | 
    
         
            +
            extensions: []
         
     | 
| 
      
 46 
     | 
    
         
            +
            extra_rdoc_files: []
         
     | 
| 
      
 47 
     | 
    
         
            +
            files:
         
     | 
| 
      
 48 
     | 
    
         
            +
            - .gitignore
         
     | 
| 
      
 49 
     | 
    
         
            +
            - .rubocop.yml
         
     | 
| 
      
 50 
     | 
    
         
            +
            - Gemfile
         
     | 
| 
      
 51 
     | 
    
         
            +
            - Gemfile.lock
         
     | 
| 
      
 52 
     | 
    
         
            +
            - LICENSE
         
     | 
| 
      
 53 
     | 
    
         
            +
            - README.md
         
     | 
| 
      
 54 
     | 
    
         
            +
            - Rakefile
         
     | 
| 
      
 55 
     | 
    
         
            +
            - lib/vagrant-s3auth.rb
         
     | 
| 
      
 56 
     | 
    
         
            +
            - lib/vagrant-s3auth/action.rb
         
     | 
| 
      
 57 
     | 
    
         
            +
            - lib/vagrant-s3auth/action/authenticate_box_url.rb
         
     | 
| 
      
 58 
     | 
    
         
            +
            - lib/vagrant-s3auth/action/box_add.rb
         
     | 
| 
      
 59 
     | 
    
         
            +
            - lib/vagrant-s3auth/errors.rb
         
     | 
| 
      
 60 
     | 
    
         
            +
            - lib/vagrant-s3auth/plugin.rb
         
     | 
| 
      
 61 
     | 
    
         
            +
            - lib/vagrant-s3auth/version.rb
         
     | 
| 
      
 62 
     | 
    
         
            +
            - locales/en.yml
         
     | 
| 
      
 63 
     | 
    
         
            +
            - vagrant-s3auth.gemspec
         
     | 
| 
      
 64 
     | 
    
         
            +
            homepage: https://github.com/WhoopInc/vagrant-s3auth
         
     | 
| 
      
 65 
     | 
    
         
            +
            licenses:
         
     | 
| 
      
 66 
     | 
    
         
            +
            - All rights reserved
         
     | 
| 
      
 67 
     | 
    
         
            +
            metadata: {}
         
     | 
| 
      
 68 
     | 
    
         
            +
            post_install_message: 
         
     | 
| 
      
 69 
     | 
    
         
            +
            rdoc_options: []
         
     | 
| 
      
 70 
     | 
    
         
            +
            require_paths:
         
     | 
| 
      
 71 
     | 
    
         
            +
            - lib
         
     | 
| 
      
 72 
     | 
    
         
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         
     | 
| 
      
 73 
     | 
    
         
            +
              requirements:
         
     | 
| 
      
 74 
     | 
    
         
            +
              - - '>='
         
     | 
| 
      
 75 
     | 
    
         
            +
                - !ruby/object:Gem::Version
         
     | 
| 
      
 76 
     | 
    
         
            +
                  version: '0'
         
     | 
| 
      
 77 
     | 
    
         
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
      
 78 
     | 
    
         
            +
              requirements:
         
     | 
| 
      
 79 
     | 
    
         
            +
              - - '>='
         
     | 
| 
      
 80 
     | 
    
         
            +
                - !ruby/object:Gem::Version
         
     | 
| 
      
 81 
     | 
    
         
            +
                  version: '0'
         
     | 
| 
      
 82 
     | 
    
         
            +
            requirements: []
         
     | 
| 
      
 83 
     | 
    
         
            +
            rubyforge_project: 
         
     | 
| 
      
 84 
     | 
    
         
            +
            rubygems_version: 2.0.14
         
     | 
| 
      
 85 
     | 
    
         
            +
            signing_key: 
         
     | 
| 
      
 86 
     | 
    
         
            +
            specification_version: 4
         
     | 
| 
      
 87 
     | 
    
         
            +
            summary: Private, versioned Vagrant boxes hosted on Amazon S3.
         
     | 
| 
      
 88 
     | 
    
         
            +
            test_files:
         
     | 
| 
      
 89 
     | 
    
         
            +
            - vagrant-s3auth.gemspec
         
     |