perimeter_x 1.0.6.pre.alpha → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +6 -3
  3. data/.travis.yml +3 -0
  4. data/Dockerfile +19 -41
  5. data/Gemfile +1 -1
  6. data/Gemfile.lock +51 -3
  7. data/LICENSE.txt +9 -12
  8. data/Rakefile +10 -2
  9. data/changelog.md +72 -0
  10. data/examples/app/controllers/home_controller.rb +9 -0
  11. data/examples/app/views/home/index.html.erb.dist +20 -0
  12. data/examples/config/initializers/perimeterx.rb.dist +8 -0
  13. data/examples/{routes.rb → config/routes.rb} +0 -0
  14. data/lib/perimeter_x.rb +192 -37
  15. data/lib/perimeterx/configuration.rb +30 -18
  16. data/lib/perimeterx/internal/clients/perimeter_x_activity_client.rb +110 -0
  17. data/lib/perimeterx/internal/clients/perimeter_x_risk_client.rb +28 -0
  18. data/lib/perimeterx/internal/exceptions/px_cookie_decryption_exception.rb +5 -0
  19. data/lib/perimeterx/internal/payload/perimeter_x_cookie_v1.rb +42 -0
  20. data/lib/perimeterx/internal/payload/perimeter_x_cookie_v3.rb +37 -0
  21. data/lib/perimeterx/internal/payload/perimeter_x_payload.rb +148 -0
  22. data/lib/perimeterx/internal/payload/perimeter_x_token_v1.rb +38 -0
  23. data/lib/perimeterx/internal/payload/perimeter_x_token_v3.rb +36 -0
  24. data/lib/perimeterx/internal/perimeter_x_context.rb +112 -53
  25. data/lib/perimeterx/internal/validators/perimeter_x_cookie_validator.rb +103 -0
  26. data/lib/perimeterx/internal/validators/perimeter_x_s2s_validator.rb +128 -0
  27. data/lib/perimeterx/utils/px_constants.rb +62 -0
  28. data/lib/perimeterx/utils/px_http_client.rb +43 -28
  29. data/lib/perimeterx/utils/px_logger.rb +12 -6
  30. data/lib/perimeterx/utils/px_template_factory.rb +41 -0
  31. data/lib/perimeterx/utils/templates/block_template.mustache +175 -0
  32. data/lib/perimeterx/utils/templates/ratelimit.mustache +9 -0
  33. data/lib/perimeterx/version.rb +2 -2
  34. data/perimeter_x.gemspec +10 -4
  35. data/readme.md +258 -42
  36. metadata +130 -24
  37. data/bin/console +0 -14
  38. data/bin/setup +0 -8
  39. data/examples/home_controller.rb.dist +0 -23
  40. data/lib/perimeterx/internal/perimeter_x_risk_client.rb +0 -29
  41. data/lib/perimeterx/internal/perimeter_x_s2s_validator.rb +0 -67
metadata CHANGED
@@ -1,57 +1,151 @@
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: 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: 2017-03-24 00:00:00.000000000 Z
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.14'
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.14'
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: '10.0'
33
+ version: '12.3'
34
34
  type: :development
35
35
  prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '12.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: concurrent-ruby
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.0'
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: 1.0.5
51
+ type: :runtime
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - "~>"
56
+ - !ruby/object:Gem::Version
57
+ version: '1.0'
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: 1.0.5
61
+ - !ruby/object:Gem::Dependency
62
+ name: typhoeus
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '1.1'
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: 1.1.2
71
+ type: :runtime
72
+ prerelease: false
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - "~>"
76
+ - !ruby/object:Gem::Version
77
+ version: '1.1'
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: 1.1.2
81
+ - !ruby/object:Gem::Dependency
82
+ name: mustache
83
+ requirement: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - "~>"
86
+ - !ruby/object:Gem::Version
87
+ version: '1.0'
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: 1.0.3
91
+ type: :runtime
92
+ prerelease: false
36
93
  version_requirements: !ruby/object:Gem::Requirement
37
94
  requirements:
38
95
  - - "~>"
39
96
  - !ruby/object:Gem::Version
40
- version: '10.0'
97
+ version: '1.0'
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: 1.0.3
41
101
  - !ruby/object:Gem::Dependency
42
- name: httpclient
102
+ name: activesupport
43
103
  requirement: !ruby/object:Gem::Requirement
44
104
  requirements:
45
- - - '='
105
+ - - ">="
46
106
  - !ruby/object:Gem::Version
47
- version: 2.8.2.4
107
+ version: 5.2.4.3
48
108
  type: :runtime
49
109
  prerelease: false
50
110
  version_requirements: !ruby/object:Gem::Requirement
51
111
  requirements:
52
- - - '='
112
+ - - ">="
53
113
  - !ruby/object:Gem::Version
54
- version: 2.8.2.4
114
+ version: 5.2.4.3
115
+ - !ruby/object:Gem::Dependency
116
+ name: rspec
117
+ requirement: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - "~>"
120
+ - !ruby/object:Gem::Version
121
+ version: '3.0'
122
+ type: :development
123
+ prerelease: false
124
+ version_requirements: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - "~>"
127
+ - !ruby/object:Gem::Version
128
+ version: '3.0'
129
+ - !ruby/object:Gem::Dependency
130
+ name: mocha
131
+ requirement: !ruby/object:Gem::Requirement
132
+ requirements:
133
+ - - "~>"
134
+ - !ruby/object:Gem::Version
135
+ version: '1.2'
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: 1.2.1
139
+ type: :development
140
+ prerelease: false
141
+ version_requirements: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '1.2'
146
+ - - ">="
147
+ - !ruby/object:Gem::Version
148
+ version: 1.2.1
55
149
  description: PerimeterX ruby module to monitor and block traffic according to PerimeterX
56
150
  risk score
57
151
  email: nitzan@perimeterx.com
@@ -62,23 +156,36 @@ extra_rdoc_files:
62
156
  - changelog.md
63
157
  files:
64
158
  - ".gitignore"
159
+ - ".travis.yml"
65
160
  - Dockerfile
66
161
  - Gemfile
67
162
  - Gemfile.lock
68
163
  - LICENSE.txt
69
164
  - Rakefile
70
- - bin/console
71
- - bin/setup
72
165
  - changelog.md
73
- - examples/home_controller.rb.dist
74
- - examples/routes.rb
166
+ - examples/app/controllers/home_controller.rb
167
+ - examples/app/views/home/index.html.erb.dist
168
+ - examples/config/initializers/perimeterx.rb.dist
169
+ - examples/config/routes.rb
75
170
  - lib/perimeter_x.rb
76
171
  - lib/perimeterx/configuration.rb
172
+ - lib/perimeterx/internal/clients/perimeter_x_activity_client.rb
173
+ - lib/perimeterx/internal/clients/perimeter_x_risk_client.rb
174
+ - lib/perimeterx/internal/exceptions/px_cookie_decryption_exception.rb
175
+ - lib/perimeterx/internal/payload/perimeter_x_cookie_v1.rb
176
+ - lib/perimeterx/internal/payload/perimeter_x_cookie_v3.rb
177
+ - lib/perimeterx/internal/payload/perimeter_x_payload.rb
178
+ - lib/perimeterx/internal/payload/perimeter_x_token_v1.rb
179
+ - lib/perimeterx/internal/payload/perimeter_x_token_v3.rb
77
180
  - 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
181
+ - lib/perimeterx/internal/validators/perimeter_x_cookie_validator.rb
182
+ - lib/perimeterx/internal/validators/perimeter_x_s2s_validator.rb
183
+ - lib/perimeterx/utils/px_constants.rb
80
184
  - lib/perimeterx/utils/px_http_client.rb
81
185
  - lib/perimeterx/utils/px_logger.rb
186
+ - lib/perimeterx/utils/px_template_factory.rb
187
+ - lib/perimeterx/utils/templates/block_template.mustache
188
+ - lib/perimeterx/utils/templates/ratelimit.mustache
82
189
  - lib/perimeterx/version.rb
83
190
  - perimeter_x.gemspec
84
191
  - readme.md
@@ -101,12 +208,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
101
208
  version: '2.3'
102
209
  required_rubygems_version: !ruby/object:Gem::Requirement
103
210
  requirements:
104
- - - ">"
211
+ - - ">="
105
212
  - !ruby/object:Gem::Version
106
- version: 1.3.1
213
+ version: '0'
107
214
  requirements: []
108
- rubyforge_project:
109
- rubygems_version: 2.4.6
215
+ rubygems_version: 3.0.3
110
216
  signing_key:
111
217
  specification_version: 4
112
218
  summary: PerimeterX ruby implmentation
@@ -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