1+ require 'concurrent'
2+ require 'json'
3+ require 'base64'
14require 'perimeterx/configuration'
25require 'perimeterx/utils/px_logger'
36require 'perimeterx/utils/px_constants'
1013require 'perimeterx/internal/validators/perimeter_x_captcha_validator'
1114
1215module PxModule
13-
1416 # Module expose API
1517 def px_verify_request
16- verified , px_ctx = PerimeterX . instance . verify ( env )
18+ verified , px_ctx = PerimeterX . instance . verify ( request . env )
1719
1820 # Invalidate _pxCaptcha, can be done only on the controller level
19- cookies [ :_pxCaptcha ] = { value : "" , expires : -1 . minutes . from_now }
21+ cookies [ :_pxCaptcha ] = { value : "" , expires : -1 . minutes . from_now }
2022
21- if ( ! verified )
23+ unless verified
2224 # In case custon block handler exists
2325 if ( PerimeterX . instance . px_config . key? ( :custom_block_handler ) )
24- PerimeterX . instance . px_config [ :logger ] . debug ( " PxModule[px_verify_request]: custom_block_handler triggered" )
26+ PerimeterX . instance . px_config [ :logger ] . debug ( ' PxModule[px_verify_request]: custom_block_handler triggered' )
2527 return instance_exec ( px_ctx , &PerimeterX . instance . px_config [ :custom_block_handler ] )
2628 else
2729 # Generate template
28- PerimeterX . instance . px_config [ :logger ] . debug ( " PxModule[px_verify_request]: sending default block page" )
30+ PerimeterX . instance . px_config [ :logger ] . debug ( ' PxModule[px_verify_request]: sending default block page' )
2931 html = PxTemplateFactory . get_template ( px_ctx , PerimeterX . instance . px_config )
30- response . headers [ " Content-Type" ] = " text/html"
32+ response . headers [ ' Content-Type' ] = ' text/html'
3133 response . status = 403
32- render :html => html
34+ # Web handler
35+ if px_ctx . context [ :cookie_origin ] == 'cookie'
36+ PerimeterX . instance . px_config [ :logger ] . debug ( 'PxModule[px_verify_request]: web block' )
37+ response . headers [ 'Content-Type' ] = 'text/html'
38+ render :html => html
39+ else # Mobile SDK
40+ PerimeterX . instance . px_config [ :logger ] . debug ( 'PxModule[px_verify_request]: mobile sdk block' )
41+ response . headers [ 'Content-Type' ] = 'application/json'
42+ hash_json = {
43+ :action => px_ctx . context [ :block_action ] ,
44+ :uuid => px_ctx . context [ :uuid ] ,
45+ :vid => px_ctx . context [ :vid ] ,
46+ :appId => PerimeterX . instance . px_config [ :app_id ] ,
47+ :page => Base64 . strict_encode64 ( html ) ,
48+ :collectorUrl => "https://collector-#{ PerimeterX . instance . px_config [ :app_id ] } .perimeterx.net"
49+ }
50+ render :json => hash_json
51+ end
3352 end
3453 end
3554
55+ # Request was verified
3656 return verified
3757 end
3858
@@ -41,7 +61,7 @@ def self.configure(params)
4161 end
4262
4363
44- # PerimtereX Module
64+ # PerimeterX Module
4565 class PerimeterX
4666 @@__instance = nil
4767 @@mutex = Mutex . new
@@ -62,19 +82,19 @@ def self.configure(params)
6282
6383 def self . instance
6484 return @@__instance if !@@__instance . nil?
65- raise Exception . new ( " Please initialize perimeter x first" )
85+ raise Exception . new ( ' Please initialize perimeter x first' )
6686 end
6787
6888
6989 #Instance Methods
7090 def verify ( env )
7191 begin
72- @logger . debug ( "PerimeterX[pxVerify]" )
73- req = ActionDispatch ::Request . new ( env )
92+ @logger . debug ( 'PerimeterX[pxVerify]' )
7493 if ( !@px_config [ :module_enabled ] )
75- @logger . warn ( " Module is disabled" )
94+ @logger . warn ( ' Module is disabled' )
7695 return true
7796 end
97+ req = ActionDispatch ::Request . new ( env )
7898 px_ctx = PerimeterXContext . new ( @px_config , req )
7999
80100 # Captcha phase
@@ -96,7 +116,7 @@ def verify(env)
96116 end
97117 rescue Exception => e
98118 @logger . error ( "#{ e . backtrace . first } : #{ e . message } (#{ e . class } )" )
99- e . backtrace . drop ( 1 ) . map { |s | @logger . error ( "\t #{ s } " ) }
119+ e . backtrace . drop ( 1 ) . map { |s | @logger . error ( "\t #{ s } " ) }
100120 return true
101121 end
102122 end
@@ -111,11 +131,11 @@ def verify(env)
111131 @px_cookie_validator = PerimeterxCookieValidator . new ( @px_config )
112132 @px_s2s_validator = PerimeterxS2SValidator . new ( @px_config , @px_http_client )
113133 @px_captcha_validator = PerimeterxCaptchaValidator . new ( @px_config , @px_http_client )
114- @logger . debug ( " PerimeterX[initialize]" )
134+ @logger . debug ( ' PerimeterX[initialize]Z' )
115135 end
116136
117137 private def handle_verification ( px_ctx )
118- @logger . debug ( " PerimeterX[handle_verification]" )
138+ @logger . debug ( ' PerimeterX[handle_verification]' )
119139 @logger . debug ( "PerimeterX[handle_verification]: processing ended - score:#{ px_ctx . context [ :score ] } , uuid:#{ px_ctx . context [ :uuid ] } " )
120140
121141 score = px_ctx . context [ :score ]
@@ -130,12 +150,12 @@ def verify(env)
130150 @px_activity_client . send_block_activity ( px_ctx )
131151
132152 # In case were in monitor mode, end here
133- if ( @px_config [ :module_mode ] == PxModule ::MONITOR_MODE )
134- @logger . debug ( " PerimeterX[handle_verification]: monitor mode is on, passing request" )
153+ if ( @px_config [ :module_mode ] == PxModule ::MONITOR_MODE )
154+ @logger . debug ( ' PerimeterX[handle_verification]: monitor mode is on, passing request' )
135155 return true
136156 end
137157
138- @logger . debug ( " PerimeterX[handle_verification]: verification ended, the request should be blocked" )
158+ @logger . debug ( ' PerimeterX[handle_verification]: verification ended, the request should be blocked' )
139159
140160 return false , px_ctx
141161 end
0 commit comments