Sha256: 905cd4d8dcc0254133055c2d45b4291ea308c951ae0bac2d74c6c1ecab2f1b96

Contents?: true

Size: 1.2 KB

Versions: 1

Compression:

Stored size: 1.2 KB

Contents

require "cgi"
require "uri"

require_relative "../client"

module VagrantPlugins
  module LoginCommand
    class AddAuthentication
      ALLOWED_AUTHENTICATION_HOSTS = %w[
        app.vagrantup.com
        atlas.hashicorp.com
        vagrantcloud.com
      ].freeze

      def initialize(app, env)
        @app = app
      end

      def call(env)
        client = Client.new(env[:env])
        token  = client.token

        if token && Vagrant.server_url
          server_uri = URI.parse(Vagrant.server_url)

          env[:box_urls].map! do |url|
            u = URI.parse(url)
            replace = u.host == server_uri.host

            if !replace
              if ALLOWED_AUTHENTICATION_HOSTS.include?(u.host) &&
                  ALLOWED_AUTHENTICATION_HOSTS.include?(server_uri.host)
                replace = true
              end
            end

            if replace
              q = CGI.parse(u.query || "")

              current = q["access_token"]
              if current && current.empty?
                q["access_token"] = token
              end

              u.query = URI.encode_www_form(q)
            end

            u.to_s
          end
        end

        @app.call(env)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
vagrant-unbundled-2.0.2.0 plugins/commands/login/middleware/add_authentication.rb