Module: PxModule

Defined in:
lib/perimeter_x.rb,
lib/perimeterx/version.rb,
lib/perimeterx/configuration.rb,
lib/perimeterx/utils/px_logger.rb,
lib/perimeterx/utils/px_constants.rb,
lib/perimeterx/utils/px_http_client.rb,
lib/perimeterx/utils/px_template_factory.rb,
lib/perimeterx/internal/perimeter_x_context.rb,
lib/perimeterx/internal/payload/perimeter_x_payload.rb,
lib/perimeterx/internal/payload/perimeter_x_token_v1.rb,
lib/perimeterx/internal/payload/perimeter_x_token_v3.rb,
lib/perimeterx/internal/payload/perimeter_x_cookie_v1.rb,
lib/perimeterx/internal/payload/perimeter_x_cookie_v3.rb,
lib/perimeterx/internal/clients/perimeter_x_risk_client.rb,
lib/perimeterx/internal/clients/perimeter_x_activity_client.rb,
lib/perimeterx/internal/validators/perimeter_x_s2s_validator.rb,
lib/perimeterx/internal/validators/perimeter_x_cookie_validator.rb,
lib/perimeterx/internal/validators/perimeter_x_captcha_validator.rb

Defined Under Namespace

Modules: PxTemplateFactory Classes: Configuration, PerimeterX, PerimeterXContext, PerimeterxActivitiesClient, PerimeterxCaptchaValidator, PerimeterxCookieV1, PerimeterxCookieV3, PerimeterxCookieValidator, PerimeterxPayload, PerimeterxRiskClient, PerimeterxS2SValidator, PerimeterxTokenV1, PerimeterxTokenV3, PxHttpClient, PxLogger

Constant Summary collapse

VERSION =
'1.3.0'
MONITOR_MODE =

Misc

1
ACTIVE_MODE =
2
RISK_MODE_ACTIVE =
'active_blocking'
RISK_MODE_MONITOR =
'monitor'
SDK_NAME =
"RUBY SDK v#{PxModule::VERSION}"
API_V1_S2S =

Routes

'/api/v1/collector/s2s'
API_V1_CAPTCHA =
'/api/v1/risk/captcha'
API_V2_RISK =
'/api/v2/risk'
BLOCK_ACTIVITY =

Activity Types

'block'
PAGE_REQUESTED_ACTIVITY =
'page_requested'
'no_cookie'
'invalid_cookie'
'cookie_expired'
'cookie_high_score'
'cookie_validation_failed'
'cookie_decryption_failed'
SENSITIVE_ROUTE =
'sensitive_route'
BLOCK_TEMPLATE =

Templates

'block'
CAPTCHA_TEMPLATE =
'captcha'
TEMPLATE_EXT =
'.mustache'
PROP_REF_ID =

Template Props

:refId
PROP_APP_ID =
:appId
PROP_VID =
:vid
PROP_UUID =
:uuid
PROP_LOGO_VISIBILITY =
:logoVisibility
PROP_CUSTOM_LOGO =
:customLogo
PROP_CSS_REF =
:cssRef
PROP_JS_REF =
:jsRef
HOST_URL =
:hostUrl
VISIBLE =
'visible'
HIDDEN =
'hidden'
TOKEN_HEADER =

Mobile SDK

'X-PX-AUTHORIZATION'

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.configure(params) ⇒ Object



59
60
61
# File 'lib/perimeter_x.rb', line 59

def self.configure(params)
  @px_instance = PerimeterX.configure(params)
end

Instance Method Details

#px_verify_requestObject

Module expose API



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/perimeter_x.rb', line 17

def px_verify_request
  verified, px_ctx = PerimeterX.instance.verify(request.env)

  # Invalidate _pxCaptcha, can be done only on the controller level
  cookies[:_pxCaptcha] = {value: "", expires: -1.minutes.from_now}

  unless verified
    # In case custon block handler exists
    if (PerimeterX.instance.px_config.key?(:custom_block_handler))
      PerimeterX.instance.px_config[:logger].debug('PxModule[px_verify_request]: custom_block_handler triggered')
      return instance_exec(px_ctx, &PerimeterX.instance.px_config[:custom_block_handler])
    else
      # Generate template
      PerimeterX.instance.px_config[:logger].debug('PxModule[px_verify_request]: sending default block page')
      html = PxTemplateFactory.get_template(px_ctx, PerimeterX.instance.px_config)
      response.headers['Content-Type'] = 'text/html'
      response.status = 403
      # Web handler
      if px_ctx.context[:cookie_origin] == 'cookie'
        PerimeterX.instance.px_config[:logger].debug('PxModule[px_verify_request]: web block')
        response.headers['Content-Type'] = 'text/html'
        render :html => html
      else # Mobile SDK
        PerimeterX.instance.px_config[:logger].debug('PxModule[px_verify_request]: mobile sdk block')
        response.headers['Content-Type'] = 'application/json'
        hash_json = {
            :action => px_ctx.context[:block_action],
            :uuid => px_ctx.context[:uuid],
            :vid => px_ctx.context[:vid],
            :appId => PerimeterX.instance.px_config[:app_id],
            :page => Base64.strict_encode64(html),
            :collectorUrl => "https://collector-#{PerimeterX.instance.px_config[:app_id]}.perimeterx.net"
        }
        render :json => hash_json
      end
    end
  end

  # Request was verified
  return verified
end