perimeter_x 1.0.6.pre.alpha → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +5 -3
  3. data/Dockerfile +5 -3
  4. data/Gemfile +1 -1
  5. data/Gemfile.lock +44 -2
  6. data/LICENSE.txt +9 -12
  7. data/Rakefile +9 -2
  8. data/changelog.md +20 -0
  9. data/examples/app/controllers/home_controller.rb +9 -0
  10. data/examples/app/views/home/index.html.erb.dist +20 -0
  11. data/examples/config/initializers/perimeterx.rb.dist +8 -0
  12. data/examples/{routes.rb → config/routes.rb} +0 -0
  13. data/lib/perimeter_x.rb +109 -33
  14. data/lib/perimeterx/configuration.rb +25 -17
  15. data/lib/perimeterx/internal/clients/perimeter_x_activity_client.rb +92 -0
  16. data/lib/perimeterx/internal/clients/perimeter_x_risk_client.rb +28 -0
  17. data/lib/perimeterx/internal/exceptions/px_cookie_decryption_exception.rb +5 -0
  18. data/lib/perimeterx/internal/perimeter_x_context.rb +81 -53
  19. data/lib/perimeterx/internal/perimeter_x_cookie.rb +140 -0
  20. data/lib/perimeterx/internal/perimeter_x_cookie_v1.rb +42 -0
  21. data/lib/perimeterx/internal/perimeter_x_cookie_v3.rb +37 -0
  22. data/lib/perimeterx/internal/validators/perimeter_x_captcha_validator.rb +65 -0
  23. data/lib/perimeterx/internal/validators/perimeter_x_cookie_validator.rb +76 -0
  24. data/lib/perimeterx/internal/validators/perimeter_x_s2s_validator.rb +114 -0
  25. data/lib/perimeterx/utils/px_constants.rb +45 -0
  26. data/lib/perimeterx/utils/px_http_client.rb +47 -26
  27. data/lib/perimeterx/utils/px_logger.rb +12 -6
  28. data/lib/perimeterx/utils/px_template_factory.rb +31 -0
  29. data/lib/perimeterx/utils/templates/block.mustache +146 -0
  30. data/lib/perimeterx/utils/templates/captcha.mustache +185 -0
  31. data/lib/perimeterx/version.rb +2 -2
  32. data/perimeter_x.gemspec +6 -1
  33. data/readme.md +218 -34
  34. metadata +90 -11
  35. data/bin/console +0 -14
  36. data/bin/setup +0 -8
  37. data/examples/home_controller.rb.dist +0 -23
  38. data/lib/perimeterx/internal/perimeter_x_risk_client.rb +0 -29
  39. data/lib/perimeterx/internal/perimeter_x_s2s_validator.rb +0 -67
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: perimeter_x
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.6.pre.alpha
4
+ version: 1.1.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: 2017-03-24 00:00:00.000000000 Z
11
+ date: 2017-06-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,74 @@ dependencies:
52
52
  - - '='
53
53
  - !ruby/object:Gem::Version
54
54
  version: 2.8.2.4
55
+ - !ruby/object:Gem::Dependency
56
+ name: mustache
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.0'
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: 1.0.3
65
+ type: :runtime
66
+ prerelease: false
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - "~>"
70
+ - !ruby/object:Gem::Version
71
+ version: '1.0'
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: 1.0.3
75
+ - !ruby/object:Gem::Dependency
76
+ name: activesupport
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: 4.2.0
82
+ type: :runtime
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: 4.2.0
89
+ - !ruby/object:Gem::Dependency
90
+ name: rspec
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '3.0'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '3.0'
103
+ - !ruby/object:Gem::Dependency
104
+ name: mocha
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '1.2'
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: 1.2.1
113
+ type: :development
114
+ prerelease: false
115
+ version_requirements: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - "~>"
118
+ - !ruby/object:Gem::Version
119
+ version: '1.2'
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: 1.2.1
55
123
  description: PerimeterX ruby module to monitor and block traffic according to PerimeterX
56
124
  risk score
57
125
  email: nitzan@perimeterx.com
@@ -67,18 +135,29 @@ files:
67
135
  - Gemfile.lock
68
136
  - LICENSE.txt
69
137
  - Rakefile
70
- - bin/console
71
- - bin/setup
72
138
  - changelog.md
73
- - examples/home_controller.rb.dist
74
- - examples/routes.rb
139
+ - examples/app/controllers/home_controller.rb
140
+ - examples/app/views/home/index.html.erb.dist
141
+ - examples/config/initializers/perimeterx.rb.dist
142
+ - examples/config/routes.rb
75
143
  - lib/perimeter_x.rb
76
144
  - lib/perimeterx/configuration.rb
145
+ - lib/perimeterx/internal/clients/perimeter_x_activity_client.rb
146
+ - lib/perimeterx/internal/clients/perimeter_x_risk_client.rb
147
+ - lib/perimeterx/internal/exceptions/px_cookie_decryption_exception.rb
77
148
  - lib/perimeterx/internal/perimeter_x_context.rb
78
- - lib/perimeterx/internal/perimeter_x_risk_client.rb
79
- - lib/perimeterx/internal/perimeter_x_s2s_validator.rb
149
+ - lib/perimeterx/internal/perimeter_x_cookie.rb
150
+ - lib/perimeterx/internal/perimeter_x_cookie_v1.rb
151
+ - lib/perimeterx/internal/perimeter_x_cookie_v3.rb
152
+ - lib/perimeterx/internal/validators/perimeter_x_captcha_validator.rb
153
+ - lib/perimeterx/internal/validators/perimeter_x_cookie_validator.rb
154
+ - lib/perimeterx/internal/validators/perimeter_x_s2s_validator.rb
155
+ - lib/perimeterx/utils/px_constants.rb
80
156
  - lib/perimeterx/utils/px_http_client.rb
81
157
  - lib/perimeterx/utils/px_logger.rb
158
+ - lib/perimeterx/utils/px_template_factory.rb
159
+ - lib/perimeterx/utils/templates/block.mustache
160
+ - lib/perimeterx/utils/templates/captcha.mustache
82
161
  - lib/perimeterx/version.rb
83
162
  - perimeter_x.gemspec
84
163
  - readme.md
@@ -101,12 +180,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
101
180
  version: '2.3'
102
181
  required_rubygems_version: !ruby/object:Gem::Requirement
103
182
  requirements:
104
- - - ">"
183
+ - - ">="
105
184
  - !ruby/object:Gem::Version
106
- version: 1.3.1
185
+ version: '0'
107
186
  requirements: []
108
187
  rubyforge_project:
109
- rubygems_version: 2.4.6
188
+ rubygems_version: 2.6.11
110
189
  signing_key:
111
190
  specification_version: 4
112
191
  summary: PerimeterX ruby implmentation
data/bin/console DELETED
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require "bundler/setup"
4
- require "perimeter_x"
5
-
6
- # You can add fixtures and/or initialization code here to make experimenting
7
- # with your gem easier. You can also use a different console, if you like.
8
-
9
- # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
12
-
13
- require "irb"
14
- IRB.start(__FILE__)
data/bin/setup DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle install
7
-
8
- # Do any other automated setup that you need to do here
@@ -1,23 +0,0 @@
1
- class HomeController < ApplicationController
2
- include PerimeterX
3
-
4
- before_action :px_middleware
5
-
6
- attr_accessor :px
7
-
8
- def initialize()
9
- params = {
10
- "app_id" => <APP_ID>,
11
- "cookie_key" => <COOKIE_KEY>,
12
- "auth_token" => <AUTH_TOKEN>
13
- }
14
- @px = PxModule.instance(params)
15
- end
16
-
17
- def index
18
- end
19
-
20
- def px_middleware
21
- px.px_verify(request.env)
22
- end
23
- end
@@ -1,29 +0,0 @@
1
- require 'perimeterx/utils/px_logger'
2
-
3
- class PerimeterxRiskClient
4
- L = PxLogger.instance
5
-
6
- attr_accessor :px_ctx
7
- attr_accessor :px_config
8
- attr_accessor :http_client
9
-
10
- def initialize(px_ctx, px_config, http_client)
11
- @px_ctx = px_ctx
12
- @px_config = px_config
13
- @http_client = http_client;
14
- end
15
-
16
- def format_headers()
17
- formated_headers = []
18
- @px_ctx.context[:headers].each do |k,v|
19
- if (!@px_config["sensitive_headers"].include? k.to_s)
20
- formated_headers.push({
21
- :name => k.to_s,
22
- :value => v
23
- })
24
- end #end if
25
- end #end forech
26
- return formated_headers
27
- end #end method
28
-
29
- end #end class
@@ -1,67 +0,0 @@
1
- require 'perimeterx/internal/perimeter_x_risk_client'
2
-
3
- class PerimeterxS2SValidator < PerimeterxRiskClient
4
-
5
- attr_accessor :risk_mode
6
- attr_accessor :response
7
-
8
- def initialize(px_ctx, px_config, http_client)
9
- L.info("PerimeterxS2SValidator: initialize")
10
- @px_ctx = px_ctx
11
- @px_config = px_config
12
- @http_client = http_client
13
- end
14
-
15
- def send_risk_request
16
- L.info("PerimeterxS2SValidator[send_risk_request]: send_risk_request")
17
- request_body = {
18
- 'request' => {
19
- 'ip' => @px_ctx.context[:ip],
20
- 'headers' => format_headers(),
21
- 'url' => @px_ctx.context[:full_url]
22
- },
23
- 'additional' => {
24
- 's2s_call_reason' => @px_ctx.context[:s2s_call_reason],
25
- 'module_version' => @px_config["sdk_name"],
26
- 'http_method' => @px_ctx.context[:http_method],
27
- 'http_version' => @px_ctx.context[:http_version],
28
- }
29
- }
30
-
31
- headers = {
32
- "Authorization" => "Bearer #{@px_config['auth_token']}" ,
33
- "Content-Type" => "application/json"
34
- };
35
-
36
- return @http_client.post("/api/v2/risk", request_body, headers)
37
- end
38
-
39
- def verify
40
- L.info("PerimeterxS2SValidator[verify]: started")
41
- response = send_risk_request()
42
- if (!response)
43
- return @px_ctx
44
- end
45
- @px_ctx.context[:made_s2s_risk_api_call] = true
46
- response_body = eval(response.content);
47
- # When success
48
- if (response.status == 200 && response_body.key?(:score) && response_body.key?(:action))
49
- L.info("PerimeterxS2SValidator[verify]: response ok")
50
- score = response_body[:score]
51
- @px_ctx.context[:score] = score
52
- @px_ctx.context[:uuid] = response_body[:uuid]
53
- @px_ctx.context[:block_action] = response_body[:action]
54
- end #end success response
55
-
56
- # When error
57
- if(response.status != 200)
58
- L.warn("PerimeterxS2SValidator[verify]: bad response, return code #{response.code}")
59
- @px_ctx.context[:uuid] = ""
60
- @px_ctx.context[:s2s_error_msg] = response_body[:message]
61
- end
62
-
63
- L.info("PerimeterxS2SValidator[verify]: done")
64
- return @px_ctx
65
- end #end method
66
-
67
- end