Class: PxModule::PerimeterX

Inherits:
Object
  • Object
show all
Defined in:
lib/perimeter_x.rb

Overview

PerimeterX Module

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(request_config) ⇒ PerimeterX

Returns a new instance of PerimeterX.



172
173
174
175
176
177
178
179
180
181
182
183
# File 'lib/perimeter_x.rb', line 172

def initialize(request_config)

  @px_config = Configuration.new(request_config).configuration
  @logger = @px_config[:logger]
  @px_http_client = PxHttpClient.new(@px_config)

  @px_activity_client = PerimeterxActivitiesClient.new(@px_config, @px_http_client)

  @px_cookie_validator = PerimeterxCookieValidator.new(@px_config)
  @px_s2s_validator = PerimeterxS2SValidator.new(@px_config, @px_http_client)
  @logger.debug('PerimeterX[initialize]')
end

Instance Attribute Details

#px_activity_clientObject

Returns the value of attribute px_activity_client.



123
124
125
# File 'lib/perimeter_x.rb', line 123

def px_activity_client
  @px_activity_client
end

#px_configObject (readonly)

Returns the value of attribute px_config.



121
122
123
# File 'lib/perimeter_x.rb', line 121

def px_config
  @px_config
end

#px_http_clientObject

Returns the value of attribute px_http_client.



122
123
124
# File 'lib/perimeter_x.rb', line 122

def px_http_client
  @px_http_client
end

Class Method Details

.set_basic_config(basic_config) ⇒ Object

Static methods



126
127
128
# File 'lib/perimeter_x.rb', line 126

def self.set_basic_config(basic_config)
  Configuration.set_basic_config(basic_config)
end

Instance Method Details

#verify(env) ⇒ Object

Instance Methods



131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
# File 'lib/perimeter_x.rb', line 131

def verify(env)
  begin

    # check module_enabled 
    @logger.debug('PerimeterX[pxVerify]')
    if !@px_config[:module_enabled]
      @logger.warn('Module is disabled')
      return nil
    end

    req = ActionDispatch::Request.new(env)
    
    # filter whitelist routes
    url_path = URI.parse(req.original_url).path
    if url_path && !url_path.empty?
      if check_whitelist_routes(px_config[:whitelist_routes], url_path)
        @logger.debug("PerimeterX[pxVerify]: whitelist route: #{url_path}")
        return nil
      end
    end
    
    # create context
    px_ctx = PerimeterXContext.new(@px_config, req)

    # Cookie phase
    cookie_verified, px_ctx = @px_cookie_validator.verify(px_ctx)
    if !cookie_verified
      if !px_ctx.context[:mobile_error].nil?
        px_ctx.context[:s2s_call_reason] = "mobile_error_#{px_ctx.context[:mobile_error]}"
      end
      @px_s2s_validator.verify(px_ctx)
    end

    return handle_verification(px_ctx)
  rescue Exception => e
    @logger.error("#{e.backtrace.first}: #{e.message} (#{e.class})")
    e.backtrace.drop(1).map {|s| @logger.error("\t#{s}")}
    return nil
  end
end