prevoty 1.0.1 → 1.1.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 +4 -4
- data/lib/prevoty.rb +2 -0
- data/lib/prevoty/client.rb +30 -6
- data/lib/prevoty/responses/filter_statistics.rb +0 -3
- data/lib/prevoty/responses/monitor_content.rb +12 -0
- data/lib/prevoty/responses/monitor_query.rb +12 -0
- data/lib/prevoty/version.rb +1 -1
- data/prevoty.gemspec +1 -0
- data/test/specs/client_spec.rb +42 -24
- data/test/test_helper.rb +1 -0
- metadata +18 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ad5b5a54c536fe5f3fb549c378397945327ea326
|
4
|
+
data.tar.gz: e155ae00f346da84b53aee63f4b951e90220b176
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2aedb6bee19a97421af036868eec01180450eb9b263085babdd831d9151331399938d508cbe848db2d1aac3d0117a2b5619213b68956234752c6384ecc6d0ad6
|
7
|
+
data.tar.gz: c67de2fa8357b5d16567a37974f9bf9d60e4cba2d48c0b9b3baa6ab2f14544a192aaaeff75f49592a824c0b6e91fc74ec4818da4d30625f9ae90abb415c90215
|
data/lib/prevoty.rb
CHANGED
@@ -29,3 +29,5 @@ require 'prevoty/responses/ecdsa_private_key'
|
|
29
29
|
require 'prevoty/responses/rsa_signature'
|
30
30
|
require 'prevoty/responses/ecdsa_signature'
|
31
31
|
require 'prevoty/responses/signature_verify'
|
32
|
+
require 'prevoty/responses/monitor_content'
|
33
|
+
require 'Prevoty/responses/monitor_query'
|
data/lib/prevoty/client.rb
CHANGED
@@ -79,6 +79,21 @@ module Prevoty
|
|
79
79
|
end
|
80
80
|
end
|
81
81
|
|
82
|
+
def monitor_content(input)
|
83
|
+
params = {api_key: @api_key, input: JSON.dump(input)}
|
84
|
+
|
85
|
+
response = HTTParty.post("#{@base}/1/xss/monitor", query: params)
|
86
|
+
case response.code
|
87
|
+
when 200 then return JSON.parse(response.body).map {|record| MonitorContent.new(record)}
|
88
|
+
when 400 then raise BadInputParameter
|
89
|
+
when 403 then raise BadAPIKey
|
90
|
+
when 413 then raise RequestTooLarge
|
91
|
+
when 500 then raise InternalError
|
92
|
+
when 507 then raise AccountQuotaExceeded
|
93
|
+
else raise Exception
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
82
97
|
def generate_timed_token(user_identifier, action, ttl)
|
83
98
|
params = {api_key: @api_key, user_identifier: user_identifier, action: action, ttl: ttl}
|
84
99
|
|
@@ -177,16 +192,25 @@ module Prevoty
|
|
177
192
|
end
|
178
193
|
end
|
179
194
|
|
180
|
-
def
|
181
|
-
params = {api_key: @api_key,
|
195
|
+
def monitor_query(query)
|
196
|
+
params = {api_key: @api_key, inputs: JSON.dump(query)}
|
182
197
|
|
183
|
-
|
198
|
+
response = HTTParty.post("#{@base}/1/query/monitor", query: params)
|
199
|
+
case response.code
|
200
|
+
when 200 then return JSON.parse(response.body).map {|record| MonitorQuery.new(record)}
|
201
|
+
when 400 then raise BadInputParameter
|
202
|
+
when 403 then raise BadAPIKey
|
203
|
+
when 413 then raise RequestTooLarge
|
204
|
+
when 500 then raise InternalError
|
205
|
+
when 507 then raise AccountQuotaExceeded
|
206
|
+
else raise Exception
|
207
|
+
end
|
184
208
|
end
|
185
209
|
|
186
|
-
def
|
187
|
-
params = {api_key: @api_key, input: input
|
210
|
+
def validate_pattern(pattern, input)
|
211
|
+
params = {api_key: @api_key, input: input}
|
188
212
|
|
189
|
-
return call_pattern("#{@base}/1/pattern
|
213
|
+
return call_pattern("#{@base}/1/pattern/#{pattern}", params)
|
190
214
|
end
|
191
215
|
|
192
216
|
def hash(input, function)
|
@@ -5,7 +5,6 @@ module Prevoty
|
|
5
5
|
:blacklisted_phrases, :flagged_phrases,
|
6
6
|
:javascript_attributes, :javascript_protocols, :javascript_tags,
|
7
7
|
:prevoty_profanity_features, :prevoty_spam_features,
|
8
|
-
:prevoty_link_metadata, :prevoty_link_density,
|
9
8
|
:tags_balanced, :transformations
|
10
9
|
def initialize(data)
|
11
10
|
@bytes = data["bytes"]
|
@@ -19,8 +18,6 @@ module Prevoty
|
|
19
18
|
@javascript_tags = data["javascript_tags"]
|
20
19
|
@prevoty_profanity_features = data["prevoty_profanity_features"]
|
21
20
|
@prevoty_spam_features = data["prevoty_spam_features"]
|
22
|
-
@prevoty_link_metadata = data["prevoty_link_metadata"]
|
23
|
-
@prevoty_link_density = data["prevoty_link_density"]
|
24
21
|
@tags_balanced = data["tags_balanced"]
|
25
22
|
@transformations = data["transformations"]
|
26
23
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Prevoty
|
2
|
+
class MonitorContent
|
3
|
+
attr_accessor :bytes, :javascript_attributes, :javascript_protocols, :javascript_tags
|
4
|
+
|
5
|
+
def initialize(data)
|
6
|
+
@bytes = data["bytes"]
|
7
|
+
@javascript_attributes = data["javascript_attributes"]
|
8
|
+
@javascript_protocols = data["javascript_protocols"]
|
9
|
+
@javascript_tags = data["javascript_tags"]
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Prevoty
|
2
|
+
class MonitorQuery
|
3
|
+
attr_accessor :version, :processed, :intelligence, :error
|
4
|
+
|
5
|
+
def initialize(data)
|
6
|
+
@version = data["version"]
|
7
|
+
@processed = data["processed"]
|
8
|
+
@intelligence = data["intel"].map {|statement| Intelligence.new(statement)}
|
9
|
+
@error = data["error"]
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
data/lib/prevoty/version.rb
CHANGED
data/prevoty.gemspec
CHANGED
data/test/specs/client_spec.rb
CHANGED
@@ -124,6 +124,26 @@ describe Prevoty::Client do
|
|
124
124
|
response.statistics.class.must_equal Prevoty::FilterStatistics
|
125
125
|
end
|
126
126
|
|
127
|
+
it 'should throw BadInputParameter for monitor_content without an api key' do
|
128
|
+
client = Prevoty::Client.new('')
|
129
|
+
assert_raises Prevoty::BadInputParameter do
|
130
|
+
client.monitor_content(CONTENT_PAYLOAD)
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
it 'should throw BadAPIKey for monitor_content with an invalid api key' do
|
135
|
+
client = Prevoty::Client.new('badapikey')
|
136
|
+
assert_raises Prevoty::BadAPIKey do
|
137
|
+
client.monitor_content(CONTENT_PAYLOAD)
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
it 'should return a valid response for monitor with a valid api key' do
|
142
|
+
client = Prevoty::Client.new(API_KEY)
|
143
|
+
response = client.monitor_content(["stuff=lol", "things=<script>alert()</script>"])
|
144
|
+
response.class.must_equal Array
|
145
|
+
end
|
146
|
+
|
127
147
|
it 'should throw BadInputParameter for generate_timed_token without an api key' do
|
128
148
|
client = Prevoty::Client.new('')
|
129
149
|
assert_raises Prevoty::BadInputParameter do
|
@@ -245,21 +265,21 @@ describe Prevoty::Client do
|
|
245
265
|
it 'should throw BadInputParameter for analyze_query without an api key' do
|
246
266
|
client = Prevoty::Client.new('')
|
247
267
|
assert_raises Prevoty::BadInputParameter do
|
248
|
-
client.analyze_query(
|
268
|
+
client.analyze_query(QUERY_PAYLOAD, '')
|
249
269
|
end
|
250
270
|
end
|
251
271
|
|
252
272
|
it 'should throw BadAPIKey for analyze_query with an invalid api key' do
|
253
273
|
client = Prevoty::Client.new('badapikey')
|
254
274
|
assert_raises Prevoty::BadAPIKey do
|
255
|
-
client.analyze_query(
|
275
|
+
client.analyze_query(QUERY_PAYLOAD, '')
|
256
276
|
end
|
257
277
|
end
|
258
278
|
|
259
279
|
it 'should throw BadInputParameter for analyze_query with an invalid query key' do
|
260
280
|
client = Prevoty::Client.new(API_KEY)
|
261
281
|
assert_raises Prevoty::BadInputParameter do
|
262
|
-
client.analyze_query(
|
282
|
+
client.analyze_query(QUERY_PAYLOAD, 'badkey')
|
263
283
|
end
|
264
284
|
end
|
265
285
|
|
@@ -269,51 +289,49 @@ describe Prevoty::Client do
|
|
269
289
|
response.class.must_equal Prevoty::QueryAnalysis
|
270
290
|
end
|
271
291
|
|
272
|
-
|
273
|
-
it 'should throw BadInputParameter for validate_pattern without an api key' do
|
292
|
+
it 'should throw BadInputParameter for monitor_query without an api key' do
|
274
293
|
client = Prevoty::Client.new('')
|
275
294
|
assert_raises Prevoty::BadInputParameter do
|
276
|
-
client.
|
295
|
+
client.monitor_query(MONITOR_QUERY_PAYLOAD)
|
277
296
|
end
|
278
297
|
end
|
279
298
|
|
280
|
-
it 'should throw BadAPIKey for
|
299
|
+
it 'should throw BadAPIKey for monitor_query with an invalid api key' do
|
281
300
|
client = Prevoty::Client.new('badapikey')
|
282
301
|
assert_raises Prevoty::BadAPIKey do
|
283
|
-
client.
|
302
|
+
client.monitor_query(MONITOR_QUERY_PAYLOAD)
|
284
303
|
end
|
285
304
|
end
|
286
305
|
|
287
|
-
it 'should
|
288
|
-
client = Prevoty::Client.new(API_KEY)
|
289
|
-
response = client.validate_pattern('badpattern', '12345')
|
290
|
-
response.matched.must_equal false
|
291
|
-
end
|
292
|
-
|
293
|
-
it 'should return a valid response for validate_pattern' do
|
306
|
+
it 'should return a valid response for monitor with a valid api key' do
|
294
307
|
client = Prevoty::Client.new(API_KEY)
|
295
|
-
response = client.
|
296
|
-
response.class.must_equal
|
297
|
-
response.matched.must_equal true
|
308
|
+
response = client.monitor_query(MONITOR_QUERY_PAYLOAD)
|
309
|
+
response.class.must_equal Array
|
298
310
|
end
|
299
311
|
|
300
|
-
it 'should throw BadInputParameter for
|
312
|
+
it 'should throw BadInputParameter for validate_pattern without an api key' do
|
301
313
|
client = Prevoty::Client.new('')
|
302
314
|
assert_raises Prevoty::BadInputParameter do
|
303
|
-
client.
|
315
|
+
client.validate_pattern(Prevoty::Pattern::NUMERIC, '')
|
304
316
|
end
|
305
317
|
end
|
306
318
|
|
307
|
-
it 'should throw BadAPIKey for
|
319
|
+
it 'should throw BadAPIKey for validate_pattern with an invalid api key' do
|
308
320
|
client = Prevoty::Client.new('badapikey')
|
309
321
|
assert_raises Prevoty::BadAPIKey do
|
310
|
-
client.
|
322
|
+
client.validate_pattern(Prevoty::Pattern::NUMERIC, '')
|
311
323
|
end
|
312
324
|
end
|
313
325
|
|
314
|
-
it 'should
|
326
|
+
it 'should throw BadInputParameter for validate_pattern with an invalid pattern' do
|
327
|
+
client = Prevoty::Client.new(API_KEY)
|
328
|
+
response = client.validate_pattern('badpattern', '12345')
|
329
|
+
response.matched.must_equal false
|
330
|
+
end
|
331
|
+
|
332
|
+
it 'should return a valid response for validate_pattern' do
|
315
333
|
client = Prevoty::Client.new(API_KEY)
|
316
|
-
response = client.
|
334
|
+
response = client.validate_pattern(Prevoty::Pattern::NUMERIC, '12345')
|
317
335
|
response.class.must_equal Prevoty::InputValidation
|
318
336
|
response.matched.must_equal true
|
319
337
|
end
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: prevoty
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joe Rozner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-03-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '10.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: pry
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.10'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.10'
|
55
69
|
description: Implementation of the Prevoty API
|
56
70
|
email:
|
57
71
|
- joe@prevoty.com
|
@@ -85,6 +99,8 @@ files:
|
|
85
99
|
- lib/prevoty/responses/generate_token.rb
|
86
100
|
- lib/prevoty/responses/hash_result.rb
|
87
101
|
- lib/prevoty/responses/input_validation.rb
|
102
|
+
- lib/prevoty/responses/monitor_content.rb
|
103
|
+
- lib/prevoty/responses/monitor_query.rb
|
88
104
|
- lib/prevoty/responses/query_analysis.rb
|
89
105
|
- lib/prevoty/responses/rsa_private_key.rb
|
90
106
|
- lib/prevoty/responses/rsa_public_key.rb
|