obscenity-plus 1.0.1
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 +7 -0
- data/LICENSE.txt +20 -0
- data/README.md +297 -0
- data/config/blacklist.yml +566 -0
- data/config/international.yml +820 -0
- data/lib/obscenity/active_model.rb +19 -0
- data/lib/obscenity/base.rb +75 -0
- data/lib/obscenity/config.rb +51 -0
- data/lib/obscenity/error.rb +7 -0
- data/lib/obscenity/rack.rb +89 -0
- data/lib/obscenity/rspec_matcher.rb +7 -0
- data/lib/obscenity/version.rb +5 -0
- data/lib/obscenity.rb +40 -0
- data/test/helper.rb +29 -0
- data/test/static/422.html +1 -0
- data/test/test_active_model.rb +70 -0
- data/test/test_base.rb +29 -0
- data/test/test_config.rb +67 -0
- data/test/test_obscenity.rb +70 -0
- data/test/test_rack.rb +207 -0
- data/test/test_test.rb +17 -0
- data/test/test_version.rb +9 -0
- metadata +148 -0
data/test/test_rack.rb
ADDED
@@ -0,0 +1,207 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'rack/mock'
|
3
|
+
require 'obscenity/rack'
|
4
|
+
|
5
|
+
class TestRack < Test::Unit::TestCase
|
6
|
+
|
7
|
+
context "Rack::Obscenity" do
|
8
|
+
setup do
|
9
|
+
@env = {}
|
10
|
+
@body = 'hello'
|
11
|
+
@status = 200
|
12
|
+
@headers = { 'Content-Type' => 'text/plain' }
|
13
|
+
@app = lambda { |env| [@status, @headers, [@body]] }
|
14
|
+
end
|
15
|
+
|
16
|
+
def mock_env(options = {})
|
17
|
+
@env = Rack::MockRequest.env_for('/', options)
|
18
|
+
end
|
19
|
+
|
20
|
+
def middleware(options = {})
|
21
|
+
Rack::Obscenity.new(@app, options)
|
22
|
+
end
|
23
|
+
|
24
|
+
def get(params = {})
|
25
|
+
{ 'QUERY_STRING' => Rack::Utils.build_query(params) }
|
26
|
+
end
|
27
|
+
|
28
|
+
def get_response_params
|
29
|
+
Rack::Utils.parse_query(@env['QUERY_STRING'], "&")
|
30
|
+
end
|
31
|
+
|
32
|
+
def post(params = {})
|
33
|
+
{ 'rack.input' => StringIO.new(Rack::Utils.build_query(params)) }
|
34
|
+
end
|
35
|
+
|
36
|
+
def post_response_params
|
37
|
+
Rack::Utils.parse_query(@env['rack.input'].read, "&")
|
38
|
+
end
|
39
|
+
|
40
|
+
def assert_success_response(status, headers, body)
|
41
|
+
assert_equal @status, status
|
42
|
+
assert_equal @headers, headers
|
43
|
+
assert_equal [@body], body
|
44
|
+
end
|
45
|
+
|
46
|
+
context "default configuration" do
|
47
|
+
should "not evaluate the profanity of parameters" do
|
48
|
+
app = middleware
|
49
|
+
status, headers, body = app.call(mock_env)
|
50
|
+
assert_success_response status, headers, body
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
context "rejecting requests" do
|
55
|
+
should "not reject if parameter values don't contain profanity" do
|
56
|
+
app = middleware(reject: true)
|
57
|
+
status, headers, body = app.call(mock_env(get(foo: 'bar')))
|
58
|
+
assert_success_response status, headers, body
|
59
|
+
end
|
60
|
+
|
61
|
+
should "reject if GET parameter values contain profanity" do
|
62
|
+
app = middleware(reject: true)
|
63
|
+
status, headers, body = app.call(mock_env(get(foo: 'bar', baz: 'shit')))
|
64
|
+
assert_equal 422, status
|
65
|
+
assert_equal [''], body
|
66
|
+
end
|
67
|
+
|
68
|
+
should "reject if POST parameter values contain profanity" do
|
69
|
+
app = middleware(reject: true)
|
70
|
+
status, headers, body = app.call(mock_env(post(foo: 'bar', baz: 'ass')))
|
71
|
+
assert_equal 422, status
|
72
|
+
assert_equal [''], body
|
73
|
+
end
|
74
|
+
|
75
|
+
should "reject if given parameter values contain profanity" do
|
76
|
+
app = middleware(reject: { params: [:foo] })
|
77
|
+
[ get(foo: 'ass', baz: 'shit'),
|
78
|
+
post(foo: 'ass').merge(get(foo: 'nice', baz: 'shit'))
|
79
|
+
].each do |options|
|
80
|
+
status, headers, body = app.call(mock_env(options))
|
81
|
+
assert_equal 422, status
|
82
|
+
assert_equal [''], body
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
should "not reject if other parameter values contain profanity" do
|
87
|
+
app = middleware(reject: { params: [:foo] })
|
88
|
+
status, headers, body = app.call(mock_env(get(foo: 'nice', baz: 'shit')))
|
89
|
+
assert_success_response status, headers, body
|
90
|
+
end
|
91
|
+
|
92
|
+
should "reject if parameter values contain profanity" do
|
93
|
+
app = middleware(reject: { params: :all })
|
94
|
+
status, headers, body = app.call(mock_env(get(foo: 'ass')))
|
95
|
+
assert_equal 422, status
|
96
|
+
assert_equal [''], body
|
97
|
+
end
|
98
|
+
|
99
|
+
should "reject if parameter values contain profanity and display a custom message" do
|
100
|
+
app = middleware(reject: { message: "We don't accept profanity" })
|
101
|
+
status, headers, body = app.call(mock_env(get(foo: 'ass')))
|
102
|
+
assert_equal 422, status
|
103
|
+
assert_equal ["We don't accept profanity"], body
|
104
|
+
end
|
105
|
+
|
106
|
+
should "reject if parameter values contain profanity and render a custom file" do
|
107
|
+
app = middleware(reject: { path: "test/static/422.html" })
|
108
|
+
status, headers, body = app.call(mock_env(get(foo: 'ass')))
|
109
|
+
assert_equal 422, status
|
110
|
+
assert_equal ["We don't accept profanity"], body
|
111
|
+
end
|
112
|
+
|
113
|
+
should "reject parameter values when they're a hash and contain profanity" do
|
114
|
+
app = middleware(reject: true)
|
115
|
+
status, headers, body = app.call(mock_env(get(foo: 'clean', bar: {one: 'ass'})))
|
116
|
+
assert_equal 422, status
|
117
|
+
assert_equal [''], body
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
context "sanitizing requests" do
|
122
|
+
should "not sanitize if parameter values don't contain profanity" do
|
123
|
+
app = middleware(sanitize: true)
|
124
|
+
status, headers, body = app.call(mock_env(get(foo: 'bar')))
|
125
|
+
assert_success_response status, headers, body
|
126
|
+
request_params = get_response_params
|
127
|
+
assert_equal 'bar', request_params['foo']
|
128
|
+
end
|
129
|
+
|
130
|
+
should "sanitize if GET parameter values contain profanity" do
|
131
|
+
app = middleware(sanitize: true)
|
132
|
+
status, headers, body = app.call(mock_env(get(foo: 'bar', baz: 'shit')))
|
133
|
+
assert_success_response status, headers, body
|
134
|
+
request_params = get_response_params
|
135
|
+
assert_equal 'bar', request_params['foo']
|
136
|
+
assert_equal '$@!#%', request_params['baz']
|
137
|
+
end
|
138
|
+
|
139
|
+
should "sanitize if POST parameter values contain profanity" do
|
140
|
+
app = middleware(sanitize: true)
|
141
|
+
status, headers, body = app.call(mock_env(post(foo: 'bar', baz: 'ass')))
|
142
|
+
assert_success_response status, headers, body
|
143
|
+
request_params = post_response_params
|
144
|
+
assert_equal 'bar', request_params['foo']
|
145
|
+
assert_equal '$@!#%', request_params['baz']
|
146
|
+
end
|
147
|
+
|
148
|
+
should "not sanitize if other parameter values contain profanity" do
|
149
|
+
app = middleware(sanitize: { params: [:foo] })
|
150
|
+
status, headers, body = app.call(mock_env(get(foo: 'nice', baz: 'shit')))
|
151
|
+
assert_success_response status, headers, body
|
152
|
+
request_params = get_response_params
|
153
|
+
assert_equal 'nice', request_params['foo']
|
154
|
+
assert_equal 'shit', request_params['baz']
|
155
|
+
end
|
156
|
+
|
157
|
+
should "sanitize if parameter values contain profanity" do
|
158
|
+
app = middleware(sanitize: { params: :all })
|
159
|
+
status, headers, body = app.call(mock_env(get(foo: 'ass')))
|
160
|
+
assert_success_response status, headers, body
|
161
|
+
request_params = get_response_params
|
162
|
+
assert_equal '$@!#%', request_params['foo']
|
163
|
+
end
|
164
|
+
|
165
|
+
should "sanitize the title using the :garbled replacement" do
|
166
|
+
app = middleware(sanitize: { replacement: :garbled })
|
167
|
+
status, headers, body = app.call(mock_env(get(foo: 'ass')))
|
168
|
+
assert_success_response status, headers, body
|
169
|
+
request_params = get_response_params
|
170
|
+
assert_equal '$@!#%', request_params['foo']
|
171
|
+
end
|
172
|
+
|
173
|
+
should "sanitize the title using the :stars replacement" do
|
174
|
+
app = middleware(sanitize: { replacement: :stars })
|
175
|
+
status, headers, body = app.call(mock_env(get(foo: 'ass')))
|
176
|
+
assert_success_response status, headers, body
|
177
|
+
request_params = get_response_params
|
178
|
+
assert_equal '***', request_params['foo']
|
179
|
+
end
|
180
|
+
|
181
|
+
should "sanitize the title using the :vowels replacement" do
|
182
|
+
app = middleware(sanitize: { replacement: :vowels })
|
183
|
+
status, headers, body = app.call(mock_env(get(foo: 'ass')))
|
184
|
+
assert_success_response status, headers, body
|
185
|
+
request_params = get_response_params
|
186
|
+
assert_equal '*ss', request_params['foo']
|
187
|
+
end
|
188
|
+
|
189
|
+
should "sanitize the title using the :nonconsonants replacement" do
|
190
|
+
app = middleware(sanitize: { replacement: :nonconsonants })
|
191
|
+
status, headers, body = app.call(mock_env(get(foo: '5hit')))
|
192
|
+
assert_success_response status, headers, body
|
193
|
+
request_params = get_response_params
|
194
|
+
assert_equal '*h*t', request_params['foo']
|
195
|
+
end
|
196
|
+
|
197
|
+
should "sanitize the title using a custom replacement" do
|
198
|
+
app = middleware(sanitize: { replacement: "[censored]" })
|
199
|
+
status, headers, body = app.call(mock_env(get(foo: 'text with ass')))
|
200
|
+
assert_success_response status, headers, body
|
201
|
+
request_params = get_response_params
|
202
|
+
assert_equal 'text with [censored]', request_params['foo']
|
203
|
+
end
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
end
|
data/test/test_test.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#first test of the gem and rspec
|
2
|
+
require 'rails_helper'
|
3
|
+
|
4
|
+
RSpec.describe Dummy::BaseModel, type: :model do
|
5
|
+
before do
|
6
|
+
Obscenity.configure do |config|
|
7
|
+
config.blacklist = ["badword"]
|
8
|
+
config.replacement = :stars
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
it "validates profanity in the title" do
|
13
|
+
model = Dummy::BaseModel.new(title: "This is a badword")
|
14
|
+
expect(Obscenity.profane?(model.title)).to be true
|
15
|
+
expect(Obscenity.sanitize(model.title)).to eq "This is a *******"
|
16
|
+
end
|
17
|
+
end
|
metadata
ADDED
@@ -0,0 +1,148 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: obscenity-plus
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ropetow
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2025-01-14 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '3.12'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '3.12'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '12.3'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '12.3'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: factory_bot
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '6.5'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '6.5'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rack
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '3.0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '3.0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: activemodel
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '6.0'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '6.0'
|
97
|
+
description: Obscenity is a profanity filter gem for Ruby, Rails (through ActiveModel),
|
98
|
+
and Rack middleware.
|
99
|
+
email: ropetow@outlook.com
|
100
|
+
executables: []
|
101
|
+
extensions: []
|
102
|
+
extra_rdoc_files: []
|
103
|
+
files:
|
104
|
+
- LICENSE.txt
|
105
|
+
- README.md
|
106
|
+
- config/blacklist.yml
|
107
|
+
- config/international.yml
|
108
|
+
- lib/obscenity.rb
|
109
|
+
- lib/obscenity/active_model.rb
|
110
|
+
- lib/obscenity/base.rb
|
111
|
+
- lib/obscenity/config.rb
|
112
|
+
- lib/obscenity/error.rb
|
113
|
+
- lib/obscenity/rack.rb
|
114
|
+
- lib/obscenity/rspec_matcher.rb
|
115
|
+
- lib/obscenity/version.rb
|
116
|
+
- test/helper.rb
|
117
|
+
- test/static/422.html
|
118
|
+
- test/test_active_model.rb
|
119
|
+
- test/test_base.rb
|
120
|
+
- test/test_config.rb
|
121
|
+
- test/test_obscenity.rb
|
122
|
+
- test/test_rack.rb
|
123
|
+
- test/test_test.rb
|
124
|
+
- test/test_version.rb
|
125
|
+
homepage: http://github.com/ropetow/obscenity-plus
|
126
|
+
licenses:
|
127
|
+
- MIT
|
128
|
+
metadata: {}
|
129
|
+
post_install_message:
|
130
|
+
rdoc_options: []
|
131
|
+
require_paths:
|
132
|
+
- lib
|
133
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
134
|
+
requirements:
|
135
|
+
- - ">="
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: '2.7'
|
138
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
139
|
+
requirements:
|
140
|
+
- - ">="
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: '0'
|
143
|
+
requirements: []
|
144
|
+
rubygems_version: 3.5.22
|
145
|
+
signing_key:
|
146
|
+
specification_version: 4
|
147
|
+
summary: An updated profanity filter in Jan 2025. Forked from the Obscenity gem.
|
148
|
+
test_files: []
|