Sha256: 714d15ef165c92ce202080ffc96ba0fc139c6fc7f2c887d37981c9768eecd234

Contents?: true

Size: 1.34 KB

Versions: 47

Compression:

Stored size: 1.34 KB

Contents

# frozen_string_literal: true

module Decidim
  # A middleware that enhances the request with the current organization based
  # on the hostname.
  class CurrentOrganization
    # Initializes the Rack Middleware.
    #
    # app - The Rack application
    def initialize(app)
      @app = app
    end

    # Main entry point for a Rack Middleware.
    #
    # env - A Hash.
    def call(env)
      organization = detect_current_organization(env)
      if organization
        env["decidim.current_organization"] = organization
        @app.call(env)
      else
        organization = find_secondary_host_org(env)
        return @app.call(env) unless organization

        location = new_location_for(env, organization.host)

        [301, { "Location" => location, "Content-Type" => "text/html", "Content-Length" => "0" }, []]
      end
    end

    private

    def detect_current_organization(env)
      host = host_for(env)
      Decidim::Organization.where(host: host).first
    end

    def find_secondary_host_org(env)
      host = host_for(env)
      Decidim::Organization.where("? = ANY(secondary_hosts)", host).first
    end

    def host_for(env)
      Rack::Request.new(env).host.downcase
    end

    def new_location_for(env, host)
      request = Rack::Request.new(env)
      url = URI(request.url)
      url.host = host
      url.to_s
    end
  end
end

Version data entries

47 entries across 47 versions & 2 rubygems

Version Path
decidim-core-0.10.1 app/middleware/decidim/current_organization.rb
decidim-core-0.10.0 app/middleware/decidim/current_organization.rb
decidim-core-0.9.3 app/middleware/decidim/current_organization.rb
decidim-core-0.9.2 app/middleware/decidim/current_organization.rb
decidim-core-0.9.1 app/middleware/decidim/current_organization.rb
decidim-core-0.9.0 app/middleware/decidim/current_organization.rb
decidim-core-0.8.4 app/middleware/decidim/current_organization.rb
decidim-core-0.8.3 app/middleware/decidim/current_organization.rb
decidim-core-0.8.2 app/middleware/decidim/current_organization.rb
decidim-core-0.8.1 app/middleware/decidim/current_organization.rb
decidim-core-0.8.0 app/middleware/decidim/current_organization.rb
decidim-core-0.7.4 app/middleware/decidim/current_organization.rb
decidim-core-0.7.3 app/middleware/decidim/current_organization.rb
decidim-core-0.7.2 app/middleware/decidim/current_organization.rb
decidim-core-0.7.1 app/middleware/decidim/current_organization.rb
decidim-core-0.7.0 app/middleware/decidim/current_organization.rb
decidim-core-0.6.8 app/middleware/decidim/current_organization.rb
decidim-0.6.8 decidim-core/app/middleware/decidim/current_organization.rb
decidim-core-0.6.7 app/middleware/decidim/current_organization.rb
decidim-0.6.7 decidim-core/app/middleware/decidim/current_organization.rb