Sha256: 70531704319f5ab5881f659f7c4a38c6e59478388952304c9374b37c0146157e

Contents?: true

Size: 1.49 KB

Versions: 23

Compression:

Stored size: 1.49 KB

Contents

require 'rhoconnect/middleware/helpers'

module Rhoconnect
  module Condition
    # Sinatra condition
    module ClientRequired
      def self.extended(base)
        base.include_client_required_condition
      end

      def include_client_required_condition
        include ClientRequiredHelpers
        set(:client_required) do |value|
          condition do
            if value
              catch_all do
                client = extract_current_client
                # client should be valid here
                raise ArgumentError.new(UNKNOWN_CLIENT) unless client
                env[CURRENT_CLIENT] = client
              end
            end
          end
        end
      end
    end

    module ClientRequiredHelpers
      # helper method
      def extract_current_client
        client = nil
        # TODO: This is removed when V3 is deprecated
        if params["cud"]
          cud_client_id = JSON.parse(params["cud"])["client_id"]
          params.merge!(:client_id => cud_client_id) if cud_client_id
        end
        client_id = @env[Rhoconnect::CLIENT_ID_HEADER]
        client_id = params[:client_id] unless client_id
        if client_id
          client = Client.load(client_id.to_s,
                               params[:source_name] ? {:source_name => params[:source_name]} : {:source_name => '*'})
          if client and current_user and client.user_id != current_user.login
            client.switch_user(current_user.login)
          end
        end
        client
      end
    end
  end
end

Version data entries

23 entries across 23 versions & 1 rubygems

Version Path
rhoconnect-7.6.0 lib/rhoconnect/condition/client_required.rb
rhoconnect-7.5.1 lib/rhoconnect/condition/client_required.rb
rhoconnect-7.4.1 lib/rhoconnect/condition/client_required.rb
rhoconnect-7.1.17 lib/rhoconnect/condition/client_required.rb
rhoconnect-6.2.0 lib/rhoconnect/condition/client_required.rb
rhoconnect-6.0.11 lib/rhoconnect/condition/client_required.rb
rhoconnect-5.5.18 lib/rhoconnect/condition/client_required.rb
rhoconnect-5.5.17 lib/rhoconnect/condition/client_required.rb
rhoconnect-5.5.15 lib/rhoconnect/condition/client_required.rb
rhoconnect-5.5.0.22 lib/rhoconnect/condition/client_required.rb
rhoconnect-5.5.2 lib/rhoconnect/condition/client_required.rb
rhoconnect-5.5.0.7 lib/rhoconnect/condition/client_required.rb
rhoconnect-5.5.0.3 lib/rhoconnect/condition/client_required.rb
rhoconnect-5.5.0 lib/rhoconnect/condition/client_required.rb
rhoconnect-5.1.1 lib/rhoconnect/condition/client_required.rb
rhoconnect-4.0.4 lib/rhoconnect/condition/client_required.rb
rhoconnect-4.0.3 lib/rhoconnect/condition/client_required.rb
rhoconnect-4.0.2 lib/rhoconnect/condition/client_required.rb
rhoconnect-4.0.1 lib/rhoconnect/condition/client_required.rb
rhoconnect-4.0.0 lib/rhoconnect/condition/client_required.rb