stoolie 0.0.2 → 0.0.3
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/README.md +1 -1
- data/VERSION +1 -1
- data/lib/stoolie.rb +1 -1
- data/lib/stoolie/clients/prevoty/smartfilter.rb +100 -0
- data/lib/stoolie/clients/smart_filter.rb +18 -41
- data/lib/stoolie/filter.rb +7 -2
- data/stoolie.gemspec +3 -2
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b08dfb182be3bffe1d92f2d467324d00230d7d1c
|
4
|
+
data.tar.gz: 622872b0bb0ca414c4fb6757761781a7a706634d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6c111411770de04086328bc58551176c5fa8c52722461b96e631128fffa88e10af85c7fa2fcdfc1dc895602771ffe1bac600182f5e3918603c32e7d85e8db54f
|
7
|
+
data.tar.gz: 11f58c2850469b8fcd5f02786ee26a4e1bb2b1eb0fe5c014d1289429565046d4add0fbaa23e258d685c0b97d81b2272dbc3db995dfdecf5130e729d652122371
|
data/README.md
CHANGED
@@ -10,7 +10,7 @@ The easiest way to install is with [Bundler](http://gembundler.com)
|
|
10
10
|
gem 'stoolie'
|
11
11
|
```
|
12
12
|
|
13
|
-
Stoolie will work on Ruby 1.8.7
|
13
|
+
Stoolie will work on Ruby 1.8.7+, however the development gems (such as rspec) will only work on 1.9.3+.
|
14
14
|
|
15
15
|
## Configuration
|
16
16
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.3
|
data/lib/stoolie.rb
CHANGED
@@ -0,0 +1,100 @@
|
|
1
|
+
# © Prevoty SmartFilter
|
2
|
+
# https://github.com/smartfiltersecurity/smartfilter-ruby
|
3
|
+
|
4
|
+
require 'rubygems'
|
5
|
+
require 'httparty'
|
6
|
+
require 'json'
|
7
|
+
|
8
|
+
class SmartFilterNetworkException < Exception; end
|
9
|
+
class SmartFilterBadInputParameter < Exception; end
|
10
|
+
class SmartFilterBadAPIKey < Exception; end
|
11
|
+
class SmartFilterRequestTooLarge < Exception; end
|
12
|
+
class SmartFilterInternalError < Exception; end
|
13
|
+
class SmartFilterAccountQuotaExceeded < Exception; end
|
14
|
+
|
15
|
+
class PrevotySmartFilter
|
16
|
+
attr_accessor :key, :base
|
17
|
+
|
18
|
+
def initialize(key)
|
19
|
+
@key = key
|
20
|
+
@base = 'https://api.prevoty.com/1'
|
21
|
+
end
|
22
|
+
|
23
|
+
# Endpoint: /key/verify
|
24
|
+
def verify
|
25
|
+
begin
|
26
|
+
return verify!
|
27
|
+
rescue => e
|
28
|
+
return nil
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def verify!
|
33
|
+
options = {:api_key => @key}
|
34
|
+
response = HTTParty.get("#{@base}/key/verify", :query => options)
|
35
|
+
return true if response.code == 200
|
36
|
+
raise SmartFilterBadInputParameter.new if response.code == 400
|
37
|
+
raise SmartFilterBadAPIKey.new if response.code == 403
|
38
|
+
raise SmartFilterInternalError.new if response.code == 500
|
39
|
+
false
|
40
|
+
end
|
41
|
+
|
42
|
+
# Endpoint: /key/info
|
43
|
+
def info
|
44
|
+
begin
|
45
|
+
return info!
|
46
|
+
rescue => e
|
47
|
+
return nil
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def info!
|
52
|
+
options = {:api_key => @key}
|
53
|
+
response = HTTParty.get("#{@base}/key/info", :query => options)
|
54
|
+
return JSON.parse(response.body) if response.code == 200
|
55
|
+
raise SmartFilterBadInputParameter.new if response.code == 400
|
56
|
+
raise SmartFilterBadAPIKey.new if response.code == 403
|
57
|
+
raise SmartFilterInternalError.new if response.code == 500
|
58
|
+
Array.new
|
59
|
+
end
|
60
|
+
|
61
|
+
# Endpoint: /rule/verify
|
62
|
+
def verify_rule(rule_key)
|
63
|
+
begin
|
64
|
+
return verify_rule!(rule_key)
|
65
|
+
rescue => e
|
66
|
+
return nil
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def verify_rule!(rule_key)
|
71
|
+
options = {:api_key => @key, :rule_key => rule_key}
|
72
|
+
response = HTTParty.get("#{@base}/rule/verify", :query => options)
|
73
|
+
return true if response.code == 200
|
74
|
+
raise SmartFilterBadInputParameter.new if response.code == 400
|
75
|
+
raise SmartFilterBadAPIKey.new if response.code == 403
|
76
|
+
raise SmartFilterInternalError.new if response.code == 500
|
77
|
+
false
|
78
|
+
end
|
79
|
+
|
80
|
+
# Endpoint: /xss/filter
|
81
|
+
def filter(input, rule_key)
|
82
|
+
begin
|
83
|
+
return filter!(input, rule_key)
|
84
|
+
rescue => e
|
85
|
+
return nil
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def filter!(input, rule_key)
|
90
|
+
options = {:api_key => @key, :input => input, :rule_key => rule_key}
|
91
|
+
response = HTTParty.post("#{@base}/xss/filter", :query => options)
|
92
|
+
return JSON.parse(response.body) if response.code == 200
|
93
|
+
raise SmartFilterBadInputParameter.new if response.code == 400
|
94
|
+
raise SmartFilterBadAPIKey.new if response.code == 403
|
95
|
+
raise SmartFilterRequestTooLarge.new if response.code == 413
|
96
|
+
raise SmartFilterInternalError.new if response.code == 500
|
97
|
+
raise SmartFilterAccountQuotaExceeded.new if response.code == 507
|
98
|
+
Array.new
|
99
|
+
end
|
100
|
+
end
|
@@ -1,52 +1,28 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/../result')
|
2
|
-
require '
|
3
|
-
require 'httparty'
|
2
|
+
require File.expand_path(File.dirname(__FILE__) + '/prevoty/smartfilter')
|
4
3
|
|
5
|
-
class
|
6
|
-
class SmartFilterBadInputParameter < Exception; end
|
7
|
-
class SmartFilterBadAPIKey < Exception; end
|
8
|
-
class SmartFilterRequestTooLarge < Exception; end
|
9
|
-
class SmartFilterInternalError < Exception; end
|
10
|
-
class SmartFilterAccountQuotaExceeded < Exception; end
|
4
|
+
class SmartFilterBadRuleKey < Exception; end
|
11
5
|
|
12
|
-
class SmartFilter
|
13
|
-
|
14
|
-
|
6
|
+
class SmartFilter < PrevotySmartFilter
|
7
|
+
alias_method :api_key, :key
|
8
|
+
alias_method :api_key=, :key=
|
15
9
|
|
16
|
-
|
17
|
-
@config = SmartFilter.config(Stoolie.config.smart_filter)
|
10
|
+
attr_accessor :rule_key, :input, :output, :response
|
18
11
|
|
19
|
-
|
20
|
-
@
|
12
|
+
def initialize(key = nil)
|
13
|
+
@config = SmartFilter.config(Stoolie.config.smart_filter)
|
21
14
|
|
22
|
-
|
23
|
-
end
|
15
|
+
super(key)
|
24
16
|
|
25
|
-
|
26
|
-
|
27
|
-
begin
|
28
|
-
return filter!(input, rule_key)
|
29
|
-
rescue => e
|
30
|
-
return nil
|
31
|
-
end
|
17
|
+
@rule_key = key || @config[:rule_key]
|
18
|
+
@api_key = @key = @config[:api_key]
|
32
19
|
end
|
33
20
|
|
34
|
-
def filter!(input, rule_key
|
21
|
+
def filter!(input, rule_key)
|
35
22
|
rule_key ||= @rule_key
|
36
|
-
|
37
|
-
response = HTTParty.post("#{@base}/xss/filter", :query => options, :timeout => 5)
|
23
|
+
raise SmartFilterBadRuleKey.new unless rule_key
|
38
24
|
|
39
|
-
|
40
|
-
raise "You must configure Smart Filter to use a rule key and api key"
|
41
|
-
end
|
42
|
-
|
43
|
-
return JSON.parse(response.body) if response.code == 200
|
44
|
-
raise SmartFilterBadInputParameter if response.code == 400
|
45
|
-
raise SmartFilterBadAPIKey if response.code == 403
|
46
|
-
raise SmartFilterRequestTooLarge if response.code == 413
|
47
|
-
raise SmartFilterInternalError if response.code == 500
|
48
|
-
raise SmartFilterAccountQuotaExceeded if response.code == 507
|
49
|
-
Array.new
|
25
|
+
super(input, rule_key)
|
50
26
|
end
|
51
27
|
|
52
28
|
# Public: allows changing the thresholds at which the xss, spam & offensive methods will trigger
|
@@ -102,9 +78,10 @@ class SmartFilter
|
|
102
78
|
# Returns a Stoolie::Result object
|
103
79
|
def analyze(input = '')
|
104
80
|
@input = input
|
105
|
-
|
106
|
-
@
|
107
|
-
@
|
81
|
+
@response = filter!(@input, rule_key)
|
82
|
+
@output = @response['output']
|
83
|
+
@stats = @response['statistics']
|
84
|
+
|
108
85
|
@result = Stoolie::Result.new(self)
|
109
86
|
end
|
110
87
|
|
data/lib/stoolie/filter.rb
CHANGED
@@ -1,4 +1,7 @@
|
|
1
|
-
require
|
1
|
+
# ideally, we would only require a client if it's in use
|
2
|
+
Dir[File.expand_path(File.dirname(__FILE__) + '/clients/*.rb')].each { |file| require file }
|
3
|
+
|
4
|
+
class StoolieFilterClientException < Exception; end
|
2
5
|
|
3
6
|
module Stoolie
|
4
7
|
class Filter
|
@@ -6,7 +9,9 @@ module Stoolie
|
|
6
9
|
|
7
10
|
# Public: takes the class name of the filter client to use - e.g. SmartFilter
|
8
11
|
def initialize(client = nil)
|
9
|
-
|
12
|
+
raise StoolieFilterClientException.new("client must be a Class") if client and !client.is_a?(Class)
|
13
|
+
|
14
|
+
@config = Stoolie.configure
|
10
15
|
|
11
16
|
@client = client || Stoolie.config.client
|
12
17
|
@client = @client.send(:new)
|
data/stoolie.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "stoolie"
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Aaron Wallis"]
|
12
|
-
s.date = "2014-
|
12
|
+
s.date = "2014-07-01"
|
13
13
|
s.description = "Content filter to determine the XSS, spam or offensive quality of text."
|
14
14
|
s.email = "awallis@bleacherreport.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -25,6 +25,7 @@ Gem::Specification.new do |s|
|
|
25
25
|
"Rakefile",
|
26
26
|
"VERSION",
|
27
27
|
"lib/stoolie.rb",
|
28
|
+
"lib/stoolie/clients/prevoty/smartfilter.rb",
|
28
29
|
"lib/stoolie/clients/smart_filter.rb",
|
29
30
|
"lib/stoolie/filter.rb",
|
30
31
|
"lib/stoolie/railtie.rb",
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stoolie
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aaron Wallis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-07-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: loofah
|
@@ -166,6 +166,7 @@ files:
|
|
166
166
|
- Rakefile
|
167
167
|
- VERSION
|
168
168
|
- lib/stoolie.rb
|
169
|
+
- lib/stoolie/clients/prevoty/smartfilter.rb
|
169
170
|
- lib/stoolie/clients/smart_filter.rb
|
170
171
|
- lib/stoolie/filter.rb
|
171
172
|
- lib/stoolie/railtie.rb
|