perimeter_x 1.4.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.travis.yml +1 -1
- data/Dockerfile +12 -7
- data/Gemfile.lock +32 -31
- data/changelog.md +25 -0
- data/lib/perimeter_x.rb +75 -23
- data/lib/perimeterx/configuration.rb +24 -20
- data/lib/perimeterx/internal/clients/perimeter_x_activity_client.rb +25 -5
- data/lib/perimeterx/internal/payload/perimeter_x_payload.rb +3 -0
- data/lib/perimeterx/internal/perimeter_x_context.rb +32 -15
- data/lib/perimeterx/internal/validators/perimeter_x_cookie_validator.rb +9 -2
- data/lib/perimeterx/internal/validators/perimeter_x_s2s_validator.rb +19 -6
- data/lib/perimeterx/utils/px_constants.rb +14 -4
- data/lib/perimeterx/utils/px_http_client.rb +2 -2
- data/lib/perimeterx/utils/px_template_factory.rb +13 -9
- data/lib/perimeterx/utils/templates/{funcaptcha.mobile.mustache → block_template.mustache} +31 -34
- data/lib/perimeterx/utils/templates/ratelimit.mustache +9 -0
- data/lib/perimeterx/version.rb +1 -1
- data/perimeter_x.gemspec +3 -3
- data/readme.md +15 -5
- metadata +15 -21
- data/lib/perimeterx/internal/validators/perimeter_x_captcha_validator.rb +0 -65
- data/lib/perimeterx/utils/templates/block.mobile.mustache +0 -133
- data/lib/perimeterx/utils/templates/block.mustache +0 -146
- data/lib/perimeterx/utils/templates/funcaptcha.mustache +0 -191
- data/lib/perimeterx/utils/templates/recaptcha.mobile.mustache +0 -196
- data/lib/perimeterx/utils/templates/recaptcha.mustache +0 -176
metadata
CHANGED
@@ -1,43 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: perimeter_x
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nitzan Goldfeder
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-07-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1
|
19
|
+
version: '2.1'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '1
|
26
|
+
version: '2.1'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '12.3'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '12.3'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: concurrent-ruby
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -104,14 +104,14 @@ dependencies:
|
|
104
104
|
requirements:
|
105
105
|
- - ">="
|
106
106
|
- !ruby/object:Gem::Version
|
107
|
-
version:
|
107
|
+
version: 5.2.4.3
|
108
108
|
type: :runtime
|
109
109
|
prerelease: false
|
110
110
|
version_requirements: !ruby/object:Gem::Requirement
|
111
111
|
requirements:
|
112
112
|
- - ">="
|
113
113
|
- !ruby/object:Gem::Version
|
114
|
-
version:
|
114
|
+
version: 5.2.4.3
|
115
115
|
- !ruby/object:Gem::Dependency
|
116
116
|
name: rspec
|
117
117
|
requirement: !ruby/object:Gem::Requirement
|
@@ -178,19 +178,14 @@ files:
|
|
178
178
|
- lib/perimeterx/internal/payload/perimeter_x_token_v1.rb
|
179
179
|
- lib/perimeterx/internal/payload/perimeter_x_token_v3.rb
|
180
180
|
- lib/perimeterx/internal/perimeter_x_context.rb
|
181
|
-
- lib/perimeterx/internal/validators/perimeter_x_captcha_validator.rb
|
182
181
|
- lib/perimeterx/internal/validators/perimeter_x_cookie_validator.rb
|
183
182
|
- lib/perimeterx/internal/validators/perimeter_x_s2s_validator.rb
|
184
183
|
- lib/perimeterx/utils/px_constants.rb
|
185
184
|
- lib/perimeterx/utils/px_http_client.rb
|
186
185
|
- lib/perimeterx/utils/px_logger.rb
|
187
186
|
- lib/perimeterx/utils/px_template_factory.rb
|
188
|
-
- lib/perimeterx/utils/templates/
|
189
|
-
- lib/perimeterx/utils/templates/
|
190
|
-
- lib/perimeterx/utils/templates/funcaptcha.mobile.mustache
|
191
|
-
- lib/perimeterx/utils/templates/funcaptcha.mustache
|
192
|
-
- lib/perimeterx/utils/templates/recaptcha.mobile.mustache
|
193
|
-
- lib/perimeterx/utils/templates/recaptcha.mustache
|
187
|
+
- lib/perimeterx/utils/templates/block_template.mustache
|
188
|
+
- lib/perimeterx/utils/templates/ratelimit.mustache
|
194
189
|
- lib/perimeterx/version.rb
|
195
190
|
- perimeter_x.gemspec
|
196
191
|
- readme.md
|
@@ -217,8 +212,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
217
212
|
- !ruby/object:Gem::Version
|
218
213
|
version: '0'
|
219
214
|
requirements: []
|
220
|
-
|
221
|
-
rubygems_version: 2.6.11
|
215
|
+
rubygems_version: 3.0.3
|
222
216
|
signing_key:
|
223
217
|
specification_version: 4
|
224
218
|
summary: PerimeterX ruby implmentation
|
@@ -1,65 +0,0 @@
|
|
1
|
-
require 'perimeterx/internal/clients/perimeter_x_risk_client'
|
2
|
-
|
3
|
-
module PxModule
|
4
|
-
class PerimeterxCaptchaValidator < PerimeterxRiskClient
|
5
|
-
|
6
|
-
def initialize(px_config, http_client)
|
7
|
-
super(px_config, http_client)
|
8
|
-
end
|
9
|
-
|
10
|
-
def send_captcha_request(captcha, px_ctx)
|
11
|
-
|
12
|
-
request_body = {
|
13
|
-
:request => {
|
14
|
-
:ip => px_ctx.context[:ip],
|
15
|
-
:headers => format_headers(px_ctx),
|
16
|
-
:uri => px_ctx.context[:uri],
|
17
|
-
:captchaType => @px_config[:captcha_provider]
|
18
|
-
},
|
19
|
-
:additional => {
|
20
|
-
:module_version => @px_config[:sdk_name]
|
21
|
-
},
|
22
|
-
:pxCaptcha => captcha,
|
23
|
-
:hostname => px_ctx.context[:hostname]
|
24
|
-
}
|
25
|
-
|
26
|
-
# Prepare request
|
27
|
-
headers = {
|
28
|
-
"Authorization" => "Bearer #{@px_config[:auth_token]}" ,
|
29
|
-
"Content-Type" => "application/json"
|
30
|
-
}
|
31
|
-
|
32
|
-
return @http_client.post(PxModule::API_CAPTCHA, request_body, headers, @px_config[:api_timeout], @px_config[:api_timeout_connection])
|
33
|
-
|
34
|
-
end
|
35
|
-
|
36
|
-
def verify(px_ctx)
|
37
|
-
captcha_validated = false
|
38
|
-
begin
|
39
|
-
if !px_ctx.context.key?(:px_captcha)
|
40
|
-
return captcha_validated, px_ctx
|
41
|
-
end
|
42
|
-
captcha = px_ctx.context[:px_captcha]
|
43
|
-
if captcha.nil?
|
44
|
-
return captcha_validated, px_ctx
|
45
|
-
end
|
46
|
-
|
47
|
-
response = send_captcha_request(captcha, px_ctx)
|
48
|
-
|
49
|
-
if response.success?
|
50
|
-
response_body = eval(response.body)
|
51
|
-
if response_body[:status] == 0
|
52
|
-
captcha_validated = true
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
return captcha_validated, px_ctx
|
57
|
-
|
58
|
-
rescue Exception => e
|
59
|
-
@logger.error("PerimeterxCaptchaValidator[verify]: failed, returning false => #{e.message}")
|
60
|
-
return captcha_validated, px_ctx
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
end
|
65
|
-
end
|
@@ -1,133 +0,0 @@
|
|
1
|
-
<!DOCTYPE html>
|
2
|
-
<html lang="en">
|
3
|
-
<head>
|
4
|
-
<meta charset="utf-8">
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1">
|
6
|
-
<title>Access to this page has been denied.</title>
|
7
|
-
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300" rel="stylesheet">
|
8
|
-
<style>
|
9
|
-
html,body{
|
10
|
-
margin: 0;
|
11
|
-
padding: 0;
|
12
|
-
font-family: 'Open Sans', sans-serif;
|
13
|
-
color: #000;
|
14
|
-
}
|
15
|
-
|
16
|
-
a{
|
17
|
-
color: #c5c5c5;
|
18
|
-
text-decoration: none;
|
19
|
-
}
|
20
|
-
|
21
|
-
.container{
|
22
|
-
align-items: center;
|
23
|
-
display: flex;
|
24
|
-
flex: 1;
|
25
|
-
justify-content: space-between;
|
26
|
-
flex-direction: column;
|
27
|
-
height: 100%;
|
28
|
-
}
|
29
|
-
|
30
|
-
.container > div {
|
31
|
-
width: 100%;
|
32
|
-
display: flex;
|
33
|
-
justify-content:center;
|
34
|
-
}
|
35
|
-
|
36
|
-
.container > div > div {
|
37
|
-
display: flex;
|
38
|
-
width: 80%;
|
39
|
-
}
|
40
|
-
|
41
|
-
.customer-logo-wrapper{
|
42
|
-
padding-top: 2rem;
|
43
|
-
flex-grow: 0;
|
44
|
-
background-color: #fff;
|
45
|
-
visibility: {{logoVisibility}};
|
46
|
-
}
|
47
|
-
|
48
|
-
.customer-logo{
|
49
|
-
border-bottom: 1px solid #000;
|
50
|
-
}
|
51
|
-
|
52
|
-
.customer-logo > img{
|
53
|
-
padding-bottom: 1rem;
|
54
|
-
max-height: 50px;
|
55
|
-
max-width: auto;
|
56
|
-
}
|
57
|
-
|
58
|
-
.page-title-wrapper{
|
59
|
-
flex-grow: 2;
|
60
|
-
}
|
61
|
-
.page-title {
|
62
|
-
flex-direction: column-reverse;
|
63
|
-
}
|
64
|
-
|
65
|
-
.content-wrapper{
|
66
|
-
flex-grow: 5;
|
67
|
-
}
|
68
|
-
.content{
|
69
|
-
flex-direction: column;
|
70
|
-
}
|
71
|
-
|
72
|
-
.page-footer-wrapper{
|
73
|
-
align-items: center;
|
74
|
-
flex-grow: 0.2;
|
75
|
-
background-color: #000;
|
76
|
-
color: #c5c5c5;
|
77
|
-
font-size: 70%;
|
78
|
-
}
|
79
|
-
@media (min-width:768px){
|
80
|
-
html,body{
|
81
|
-
height: 100%;
|
82
|
-
}
|
83
|
-
}
|
84
|
-
</style>
|
85
|
-
<!-- Custom CSS -->
|
86
|
-
{{# cssRef }}
|
87
|
-
<link rel="stylesheet" type="text/css" href="{{cssRef}}" />
|
88
|
-
{{/ cssRef }}
|
89
|
-
</head>
|
90
|
-
<body>
|
91
|
-
<section class="container">
|
92
|
-
<div class="customer-logo-wrapper">
|
93
|
-
<div class="customer-logo">
|
94
|
-
<img src="{{customLogo}}" alt="Logo"/>
|
95
|
-
</div>
|
96
|
-
</div>
|
97
|
-
<div class="page-title-wrapper">
|
98
|
-
<div class="page-title">
|
99
|
-
<h1>Access to this page has been denied.</h1>
|
100
|
-
</div>
|
101
|
-
</div>
|
102
|
-
<div class="content-wrapper">
|
103
|
-
<div class="content">
|
104
|
-
<p>
|
105
|
-
You have been blocked because we believe you are using automation tools to browse the website.
|
106
|
-
</p>
|
107
|
-
<p>
|
108
|
-
Please note that Javascript and Cookies must be enabled on your browser to access the website.
|
109
|
-
</p>
|
110
|
-
<p>
|
111
|
-
If you think you have been blocked by mistake, please contact the website administrator with the reference ID below.
|
112
|
-
</p>
|
113
|
-
<p>
|
114
|
-
Reference ID: #{{refId}}
|
115
|
-
</p>
|
116
|
-
</div>
|
117
|
-
</div>
|
118
|
-
<div class="page-footer-wrapper">
|
119
|
-
<div class="page-footer">
|
120
|
-
<p>
|
121
|
-
Powered by
|
122
|
-
<a href="https://www.perimeterx.com/whywasiblocked">PerimeterX</a>
|
123
|
-
, Inc.
|
124
|
-
</p>
|
125
|
-
</div>
|
126
|
-
</div>
|
127
|
-
</section>
|
128
|
-
<!-- Custom Script -->
|
129
|
-
{{# jsRef }}
|
130
|
-
<script src="{{jsRef}}"></script>
|
131
|
-
{{/ jsRef }}
|
132
|
-
</body>
|
133
|
-
</html>
|
@@ -1,146 +0,0 @@
|
|
1
|
-
<!DOCTYPE html>
|
2
|
-
<html lang="en">
|
3
|
-
<head>
|
4
|
-
<meta charset="utf-8">
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1">
|
6
|
-
<title>Access to this page has been denied.</title>
|
7
|
-
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300" rel="stylesheet">
|
8
|
-
<style>
|
9
|
-
html,body{
|
10
|
-
margin: 0;
|
11
|
-
padding: 0;
|
12
|
-
font-family: 'Open Sans', sans-serif;
|
13
|
-
color: #000;
|
14
|
-
}
|
15
|
-
|
16
|
-
a{
|
17
|
-
color: #c5c5c5;
|
18
|
-
text-decoration: none;
|
19
|
-
}
|
20
|
-
|
21
|
-
.container{
|
22
|
-
align-items: center;
|
23
|
-
display: flex;
|
24
|
-
flex: 1;
|
25
|
-
justify-content: space-between;
|
26
|
-
flex-direction: column;
|
27
|
-
height: 100%;
|
28
|
-
}
|
29
|
-
|
30
|
-
.container > div {
|
31
|
-
width: 100%;
|
32
|
-
display: flex;
|
33
|
-
justify-content:center;
|
34
|
-
}
|
35
|
-
|
36
|
-
.container > div > div {
|
37
|
-
display: flex;
|
38
|
-
width: 80%;
|
39
|
-
}
|
40
|
-
|
41
|
-
.customer-logo-wrapper{
|
42
|
-
padding-top: 2rem;
|
43
|
-
flex-grow: 0;
|
44
|
-
background-color: #fff;
|
45
|
-
visibility: {{logoVisibility}};
|
46
|
-
}
|
47
|
-
|
48
|
-
.customer-logo{
|
49
|
-
border-bottom: 1px solid #000;
|
50
|
-
}
|
51
|
-
|
52
|
-
.customer-logo > img{
|
53
|
-
padding-bottom: 1rem;
|
54
|
-
max-height: 50px;
|
55
|
-
max-width: auto;
|
56
|
-
}
|
57
|
-
|
58
|
-
.page-title-wrapper{
|
59
|
-
flex-grow: 2;
|
60
|
-
}
|
61
|
-
.page-title {
|
62
|
-
flex-direction: column-reverse;
|
63
|
-
}
|
64
|
-
|
65
|
-
.content-wrapper{
|
66
|
-
flex-grow: 5;
|
67
|
-
}
|
68
|
-
.content{
|
69
|
-
flex-direction: column;
|
70
|
-
}
|
71
|
-
|
72
|
-
.page-footer-wrapper{
|
73
|
-
align-items: center;
|
74
|
-
flex-grow: 0.2;
|
75
|
-
background-color: #000;
|
76
|
-
color: #c5c5c5;
|
77
|
-
font-size: 70%;
|
78
|
-
}
|
79
|
-
@media (min-width:768px){
|
80
|
-
html,body{
|
81
|
-
height: 100%;
|
82
|
-
}
|
83
|
-
}
|
84
|
-
</style>
|
85
|
-
<!-- Custom CSS -->
|
86
|
-
{{# cssRef }}
|
87
|
-
<link rel="stylesheet" type="text/css" href="{{cssRef}}" />
|
88
|
-
{{/ cssRef }}
|
89
|
-
</head>
|
90
|
-
<body>
|
91
|
-
<section class="container">
|
92
|
-
<div class="customer-logo-wrapper">
|
93
|
-
<div class="customer-logo">
|
94
|
-
<img src="{{customLogo}}" alt="Logo"/>
|
95
|
-
</div>
|
96
|
-
</div>
|
97
|
-
<div class="page-title-wrapper">
|
98
|
-
<div class="page-title">
|
99
|
-
<h1>Access to this page has been denied.</h1>
|
100
|
-
</div>
|
101
|
-
</div>
|
102
|
-
<div class="content-wrapper">
|
103
|
-
<div class="content">
|
104
|
-
<p>
|
105
|
-
You have been blocked because we believe you are using automation tools to browse the website.
|
106
|
-
</p>
|
107
|
-
<p>
|
108
|
-
Please note that Javascript and Cookies must be enabled on your browser to access the website.
|
109
|
-
</p>
|
110
|
-
<p>
|
111
|
-
If you think you have been blocked by mistake, please contact the website administrator with the reference ID below.
|
112
|
-
</p>
|
113
|
-
<p>
|
114
|
-
Reference ID: #{{refId}}
|
115
|
-
</p>
|
116
|
-
</div>
|
117
|
-
</div>
|
118
|
-
<div class="page-footer-wrapper">
|
119
|
-
<div class="page-footer">
|
120
|
-
<p>
|
121
|
-
Powered by
|
122
|
-
<a href="https://www.perimeterx.com/whywasiblocked">PerimeterX</a>
|
123
|
-
, Inc.
|
124
|
-
</p>
|
125
|
-
</div>
|
126
|
-
</div>
|
127
|
-
</section>
|
128
|
-
<!-- Px -->
|
129
|
-
<script>
|
130
|
-
(
|
131
|
-
function (){
|
132
|
-
window._pxAppId = '{{appId}}';
|
133
|
-
var p = document.getElementsByTagName("script")[0], s = document.createElement("script");
|
134
|
-
|
135
|
-
s.async = 1;
|
136
|
-
s.src = '//client.perimeterx.net/{{appId}}/main.min.js';
|
137
|
-
p.parentNode.insertBefore(s, p);
|
138
|
-
} ()
|
139
|
-
);
|
140
|
-
</script>
|
141
|
-
<!-- Custom Script -->
|
142
|
-
{{# jsRef }}
|
143
|
-
<script src="{{jsRef}}"></script>
|
144
|
-
{{/ jsRef }}
|
145
|
-
</body>
|
146
|
-
</html>
|
@@ -1,191 +0,0 @@
|
|
1
|
-
<!DOCTYPE html>
|
2
|
-
<html lang="en">
|
3
|
-
<head>
|
4
|
-
<meta charset="utf-8">
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1">
|
6
|
-
<title>Access to this page has been denied.</title>
|
7
|
-
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300" rel="stylesheet">
|
8
|
-
<style>
|
9
|
-
html, body {
|
10
|
-
margin: 0;
|
11
|
-
padding: 0;
|
12
|
-
font-family: 'Open Sans', sans-serif;
|
13
|
-
color: #000;
|
14
|
-
}
|
15
|
-
|
16
|
-
a {
|
17
|
-
color: #c5c5c5;
|
18
|
-
text-decoration: none;
|
19
|
-
}
|
20
|
-
|
21
|
-
.container {
|
22
|
-
align-items: center;
|
23
|
-
display: flex;
|
24
|
-
flex: 1;
|
25
|
-
justify-content: space-between;
|
26
|
-
flex-direction: column;
|
27
|
-
height: 100%;
|
28
|
-
}
|
29
|
-
|
30
|
-
.container > div {
|
31
|
-
width: 100%;
|
32
|
-
display: flex;
|
33
|
-
justify-content: center;
|
34
|
-
}
|
35
|
-
|
36
|
-
.container > div > div {
|
37
|
-
display: flex;
|
38
|
-
width: 80%;
|
39
|
-
}
|
40
|
-
|
41
|
-
.customer-logo-wrapper {
|
42
|
-
padding-top: 2rem;
|
43
|
-
flex-grow: 0;
|
44
|
-
background-color: #fff;
|
45
|
-
visibility: {{logoVisibility}};
|
46
|
-
}
|
47
|
-
|
48
|
-
.customer-logo {
|
49
|
-
border-bottom: 1px solid #000;
|
50
|
-
}
|
51
|
-
|
52
|
-
.customer-logo > img {
|
53
|
-
padding-bottom: 1rem;
|
54
|
-
max-height: 50px;
|
55
|
-
max-width: 100%;
|
56
|
-
}
|
57
|
-
|
58
|
-
.page-title-wrapper {
|
59
|
-
flex-grow: 2;
|
60
|
-
}
|
61
|
-
|
62
|
-
.page-title {
|
63
|
-
flex-direction: column-reverse;
|
64
|
-
}
|
65
|
-
|
66
|
-
.content-wrapper {
|
67
|
-
flex-grow: 5;
|
68
|
-
}
|
69
|
-
|
70
|
-
.content {
|
71
|
-
flex-direction: column;
|
72
|
-
}
|
73
|
-
|
74
|
-
.page-footer-wrapper {
|
75
|
-
align-items: center;
|
76
|
-
flex-grow: 0.2;
|
77
|
-
background-color: #000;
|
78
|
-
color: #c5c5c5;
|
79
|
-
font-size: 70%;
|
80
|
-
}
|
81
|
-
|
82
|
-
@media (min-width: 768px) {
|
83
|
-
html, body {
|
84
|
-
height: 100%;
|
85
|
-
}
|
86
|
-
}
|
87
|
-
</style>
|
88
|
-
<!-- Custom CSS -->
|
89
|
-
{{# cssRef }}
|
90
|
-
<link rel="stylesheet" type="text/css" href="{{ . }}"/>
|
91
|
-
{{/ cssRef }}
|
92
|
-
<script src="https://funcaptcha.com/fc/api/?onload=loadFunCaptcha" async defer></script>
|
93
|
-
</head>
|
94
|
-
|
95
|
-
<body>
|
96
|
-
<section class="container">
|
97
|
-
<div class="customer-logo-wrapper">
|
98
|
-
<div class="customer-logo">
|
99
|
-
<img src="{{customLogo}}" alt="Logo"/>
|
100
|
-
</div>
|
101
|
-
</div>
|
102
|
-
<div class="page-title-wrapper">
|
103
|
-
<div class="page-title">
|
104
|
-
<h1>Please verify you are a human</h1>
|
105
|
-
</div>
|
106
|
-
</div>
|
107
|
-
<div class="content-wrapper">
|
108
|
-
<div class="content">
|
109
|
-
<p>
|
110
|
-
Please click "Verify" to continue
|
111
|
-
</p>
|
112
|
-
<div id="CAPTCHA"></div>
|
113
|
-
<p>
|
114
|
-
Access to this page has been denied because we believe you are using automation tools to browse the
|
115
|
-
website.
|
116
|
-
</p>
|
117
|
-
<p>
|
118
|
-
This may happen as a result of the following:
|
119
|
-
</p>
|
120
|
-
<ul>
|
121
|
-
<li>
|
122
|
-
Javascript is disabled or blocked by an extension (ad blockers for example)
|
123
|
-
</li>
|
124
|
-
<li>
|
125
|
-
Your browser does not support cookies
|
126
|
-
</li>
|
127
|
-
</ul>
|
128
|
-
<p>
|
129
|
-
Please make sure that Javascript and cookies are enabled on your browser and that you are not blocking
|
130
|
-
them from loading.
|
131
|
-
</p>
|
132
|
-
<p>
|
133
|
-
Reference ID: #{{refId}}
|
134
|
-
</p>
|
135
|
-
</div>
|
136
|
-
</div>
|
137
|
-
<div class="page-footer-wrapper">
|
138
|
-
<div class="page-footer">
|
139
|
-
<p>
|
140
|
-
Powered by
|
141
|
-
<a href="https://www.perimeterx.com/whywasiblocked">PerimeterX</a>
|
142
|
-
, Inc.
|
143
|
-
</p>
|
144
|
-
</div>
|
145
|
-
</div>
|
146
|
-
</section>
|
147
|
-
<!-- Px -->
|
148
|
-
<script>
|
149
|
-
(
|
150
|
-
function () {
|
151
|
-
window._pxAppId = '{{appId}}';
|
152
|
-
var p = document.getElementsByTagName("script")[0], s = document.createElement("script");
|
153
|
-
|
154
|
-
s.async = 1;
|
155
|
-
s.src = '//client.perimeterx.net/{{appId}}/main.min.js';
|
156
|
-
p.parentNode.insertBefore(s, p);
|
157
|
-
}()
|
158
|
-
);
|
159
|
-
</script>
|
160
|
-
<!-- Captcha -->
|
161
|
-
<script>
|
162
|
-
|
163
|
-
function loadFunCaptcha() {
|
164
|
-
var vid = '{{vid}}';
|
165
|
-
var uuid = '{{uuid}}';
|
166
|
-
|
167
|
-
new FunCaptcha({
|
168
|
-
public_key: "19E4B3B8-6CBE-35CC-4205-FC79ECDDA765",
|
169
|
-
target_html: "CAPTCHA",
|
170
|
-
callback: function () {
|
171
|
-
var expiryUtc = new Date(Date.now() + 1000 * 10).toUTCString();
|
172
|
-
var pxCaptcha = "_pxCaptcha=" + btoa(JSON.stringify({r: document.getElementById("FunCaptcha-Token").value, u: uuid, v: vid}));
|
173
|
-
var cookieParts = [
|
174
|
-
pxCaptcha,
|
175
|
-
"; expires=",
|
176
|
-
expiryUtc,
|
177
|
-
"; path=/"
|
178
|
-
];
|
179
|
-
|
180
|
-
document.cookie = cookieParts.join("");
|
181
|
-
location.reload();
|
182
|
-
}
|
183
|
-
});
|
184
|
-
}
|
185
|
-
</script>
|
186
|
-
<!-- Custom Script -->
|
187
|
-
{{# jsRef }}
|
188
|
-
<script src="{{ . }}"></script>
|
189
|
-
{{/ jsRef }}
|
190
|
-
</body>
|
191
|
-
</html>
|