dodgy_stalker 0.0.1 → 0.0.2
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/.ruby-version +1 -0
- data/dodgy_stalker.gemspec +1 -1
- data/lib/dodgy_stalker/data_store.rb +0 -2
- data/lib/dodgy_stalker/engines.rb +0 -1
- data/lib/dodgy_stalker/version.rb +1 -1
- data/lib/generators/dodgy_stalker/templates/migration.rb +0 -22
- data/spec/datastores/wordlist_spec.rb +6 -6
- data/spec/engines/banned_words_spec.rb +9 -8
- data/spec/engines/stop_form_spam_spec.rb +4 -4
- data/spec/policy_spec.rb +3 -3
- metadata +6 -14
- data/lib/dodgy_stalker/data_store/blacklist.rb +0 -9
- data/lib/dodgy_stalker/data_store/whitelist.rb +0 -14
- data/lib/dodgy_stalker/engines/blacklist.rb +0 -55
- data/spec/datastores/blacklist_spec.rb +0 -40
- data/spec/datastores/whitelist_spec.rb +0 -44
- data/spec/engines/blacklist_spec.rb +0 -67
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 32289bb020d8d52033f2478858e43fd88db4a31c
|
4
|
+
data.tar.gz: 1e18c56fe677b40c5c973de25beaa2f947b89da5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5c22343a74c9e31f1f26cbf81a0167380047a2396fd33bce1905f042b5e14bd910a4d34aef08e3bf2c175260a50c8d367321b1d396b176bbf68dc57186f10015
|
7
|
+
data.tar.gz: fc082d7cc0d8fd820e5983c236067533d8287d411aaded59b1f6977caa7e59d7a9afcc0c369e8413b161c5b6eadc98a4c562027a0d5d563a96fe219344e8159d
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.2.3
|
data/dodgy_stalker.gemspec
CHANGED
@@ -27,7 +27,7 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.add_development_dependency "pg"
|
28
28
|
spec.add_development_dependency "database_cleaner"
|
29
29
|
|
30
|
-
spec.add_dependency "activerecord", "
|
30
|
+
spec.add_dependency "activerecord", ">= 4.0"
|
31
31
|
spec.add_dependency "typhoeus"
|
32
32
|
spec.add_dependency "addressable"
|
33
33
|
end
|
@@ -10,27 +10,5 @@ class CreateDodgyStalkerTables < ActiveRecord::Migration
|
|
10
10
|
t.datetime "created_at", null: false
|
11
11
|
t.datetime "updated_at", null: false
|
12
12
|
end
|
13
|
-
|
14
|
-
create_table "whitelist", force: true do |t|
|
15
|
-
t.string "username"
|
16
|
-
t.string "email"
|
17
|
-
t.string "ip_address"
|
18
|
-
t.string "twitter_uid"
|
19
|
-
t.string "google_uid"
|
20
|
-
t.string "facebook_uid"
|
21
|
-
t.datetime "created_at", null: false
|
22
|
-
t.datetime "updated_at", null: false
|
23
|
-
end
|
24
|
-
|
25
|
-
create_table "blacklist", force: true do |t|
|
26
|
-
t.string "username"
|
27
|
-
t.string "email"
|
28
|
-
t.string "ip_address"
|
29
|
-
t.string "twitter_uid"
|
30
|
-
t.string "google_uid"
|
31
|
-
t.string "facebook_uid"
|
32
|
-
t.datetime "created_at", null: false
|
33
|
-
t.datetime "updated_at", null: false
|
34
|
-
end
|
35
13
|
end
|
36
14
|
end
|
@@ -7,14 +7,14 @@ describe DodgyStalker::DataStore::Wordlist do
|
|
7
7
|
context "attributes :ban, :hold, :notify" do
|
8
8
|
it "toggle one attribute, turn off others" do
|
9
9
|
wordlist.toggle('ban')
|
10
|
-
wordlist.ban.
|
11
|
-
wordlist.hold.
|
12
|
-
wordlist.notify.
|
10
|
+
expect(wordlist.ban).to eq(true)
|
11
|
+
expect(wordlist.hold).to eq(false)
|
12
|
+
expect(wordlist.notify).to eq(false)
|
13
13
|
|
14
14
|
wordlist.toggle('hold')
|
15
|
-
wordlist.ban.
|
16
|
-
wordlist.hold.
|
17
|
-
wordlist.notify.
|
15
|
+
expect(wordlist.ban).to eq(false)
|
16
|
+
expect(wordlist.hold).to eq(true)
|
17
|
+
expect(wordlist.notify).to eq(false)
|
18
18
|
end
|
19
19
|
end
|
20
20
|
end
|
@@ -9,53 +9,54 @@ describe DodgyStalker::Engines::BannedWords do
|
|
9
9
|
it "returns a list of banned words in input" do
|
10
10
|
datastore.create(word: 'fuck!', ban: true)
|
11
11
|
datastore.create(word: 'ass', ban: true)
|
12
|
-
engine.banned.
|
12
|
+
expect(engine.banned).to include('fuck!', 'ass')
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
16
|
describe "#blacklisted_email" do
|
17
17
|
it "returns a list of blacklisted emails" do
|
18
18
|
datastore.create(word: '@wp.pl', blacklist_email: true)
|
19
|
-
described_class.new('piotr@wp.pl')
|
19
|
+
engine = described_class.new('piotr@wp.pl')
|
20
|
+
expect(engine.blacklisted_email).to include('@wp.pl')
|
20
21
|
end
|
21
22
|
end
|
22
23
|
|
23
24
|
describe "#on_hold" do
|
24
25
|
it "returns a list of hold words in input" do
|
25
26
|
datastore.create(word: 'viagra', hold: true)
|
26
|
-
engine.on_hold.
|
27
|
+
expect(engine.on_hold).to include('viagra')
|
27
28
|
end
|
28
29
|
end
|
29
30
|
|
30
31
|
describe "#notify" do
|
31
32
|
it "returns a list of notify words in input" do
|
32
33
|
datastore.create(word: 'underage', notify: true)
|
33
|
-
engine.notify.
|
34
|
+
expect(engine.notify).to include('underage')
|
34
35
|
end
|
35
36
|
end
|
36
37
|
|
37
38
|
describe "#match" do
|
38
39
|
it "matches full words (no partials)" do
|
39
40
|
datastore.create(word: 'fuck', ban: true)
|
40
|
-
engine.banned.
|
41
|
+
expect(engine.banned.size).to eq(0)
|
41
42
|
end
|
42
43
|
|
43
44
|
it "ignores quotes on matches" do
|
44
45
|
datastore.create(word: 'quoted', ban: true)
|
45
|
-
engine.banned.to_a.
|
46
|
+
expect(engine.banned.to_a.size).to eq(1)
|
46
47
|
end
|
47
48
|
|
48
49
|
it "allows to change word separator via config" do
|
49
50
|
old_separator = DodgyStalker::Config.new.word_separator
|
50
51
|
DodgyStalker.configure {|c| c.word_separator = %q{(^|\s|\A|\Z|$|\.|,|\+)} }
|
51
52
|
datastore.create(word: 'plused', ban: true)
|
52
|
-
engine.banned.to_a.
|
53
|
+
expect(engine.banned.to_a.size). to eq(1)
|
53
54
|
DodgyStalker.configure {|c| c.word_separator = old_separator }
|
54
55
|
end
|
55
56
|
|
56
57
|
it "matches with partials" do
|
57
58
|
datastore.create(word: 'fuck', ban: true)
|
58
|
-
engine.to_a(true).
|
59
|
+
expect(engine.to_a(true).size).to eq(1)
|
59
60
|
end
|
60
61
|
end
|
61
62
|
end
|
@@ -7,13 +7,13 @@ describe DodgyStalker::Engines::StopForumSpam do
|
|
7
7
|
|
8
8
|
context "when user is in sfs database" do
|
9
9
|
it "returns true confidence is above 0.75" do
|
10
|
-
engine.
|
11
|
-
engine.on_blacklist
|
10
|
+
allow(engine).to receive(:confidence_for) { 0.76 }
|
11
|
+
expect(engine.on_blacklist?).to eq(true)
|
12
12
|
end
|
13
13
|
|
14
14
|
it "returns false when confidence is below 0.75" do
|
15
|
-
engine.
|
16
|
-
engine.on_blacklist
|
15
|
+
allow(engine).to receive(:confidence_for) { 0.74 }
|
16
|
+
expect(engine.on_blacklist?).to eq(false)
|
17
17
|
end
|
18
18
|
end
|
19
19
|
end
|
data/spec/policy_spec.rb
CHANGED
@@ -6,12 +6,12 @@ describe DodgyStalker::Policy do
|
|
6
6
|
|
7
7
|
describe "#validate" do
|
8
8
|
it "returns true if there are any blacklist results" do
|
9
|
-
policy.validate.
|
9
|
+
expect(policy.validate).to eq(true)
|
10
10
|
end
|
11
11
|
|
12
12
|
it "returns false if there are no blacklist entries" do
|
13
|
-
policy.
|
14
|
-
policy.validate.
|
13
|
+
allow(policy).to receive(:spamcheck_results) { [] }
|
14
|
+
expect(policy.validate).to eq(false)
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dodgy_stalker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- robuye
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-07-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -126,14 +126,14 @@ dependencies:
|
|
126
126
|
name: activerecord
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- - "
|
129
|
+
- - ">="
|
130
130
|
- !ruby/object:Gem::Version
|
131
131
|
version: '4.0'
|
132
132
|
type: :runtime
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
|
-
- - "
|
136
|
+
- - ">="
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '4.0'
|
139
139
|
- !ruby/object:Gem::Dependency
|
@@ -172,6 +172,7 @@ extensions: []
|
|
172
172
|
extra_rdoc_files: []
|
173
173
|
files:
|
174
174
|
- ".gitignore"
|
175
|
+
- ".ruby-version"
|
175
176
|
- Gemfile
|
176
177
|
- LICENSE
|
177
178
|
- LICENSE.txt
|
@@ -181,23 +182,17 @@ files:
|
|
181
182
|
- lib/dodgy_stalker.rb
|
182
183
|
- lib/dodgy_stalker/config.rb
|
183
184
|
- lib/dodgy_stalker/data_store.rb
|
184
|
-
- lib/dodgy_stalker/data_store/blacklist.rb
|
185
185
|
- lib/dodgy_stalker/data_store/common.rb
|
186
|
-
- lib/dodgy_stalker/data_store/whitelist.rb
|
187
186
|
- lib/dodgy_stalker/data_store/wordlist.rb
|
188
187
|
- lib/dodgy_stalker/engines.rb
|
189
188
|
- lib/dodgy_stalker/engines/banned_words.rb
|
190
|
-
- lib/dodgy_stalker/engines/blacklist.rb
|
191
189
|
- lib/dodgy_stalker/engines/stop_forum_spam.rb
|
192
190
|
- lib/dodgy_stalker/policy.rb
|
193
191
|
- lib/dodgy_stalker/version.rb
|
194
192
|
- lib/generators/dodgy_stalker/migration_generator.rb
|
195
193
|
- lib/generators/dodgy_stalker/templates/migration.rb
|
196
|
-
- spec/datastores/blacklist_spec.rb
|
197
|
-
- spec/datastores/whitelist_spec.rb
|
198
194
|
- spec/datastores/wordlist_spec.rb
|
199
195
|
- spec/engines/banned_words_spec.rb
|
200
|
-
- spec/engines/blacklist_spec.rb
|
201
196
|
- spec/engines/stop_form_spam_spec.rb
|
202
197
|
- spec/migrations/001_create_dodgy_stalker_tables.rb
|
203
198
|
- spec/policy_spec.rb
|
@@ -222,16 +217,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
222
217
|
version: '0'
|
223
218
|
requirements: []
|
224
219
|
rubyforge_project:
|
225
|
-
rubygems_version: 2.
|
220
|
+
rubygems_version: 2.4.5.1
|
226
221
|
signing_key:
|
227
222
|
specification_version: 4
|
228
223
|
summary: Filters to detect spam, trolls and unwanted content
|
229
224
|
test_files:
|
230
|
-
- spec/datastores/blacklist_spec.rb
|
231
|
-
- spec/datastores/whitelist_spec.rb
|
232
225
|
- spec/datastores/wordlist_spec.rb
|
233
226
|
- spec/engines/banned_words_spec.rb
|
234
|
-
- spec/engines/blacklist_spec.rb
|
235
227
|
- spec/engines/stop_form_spam_spec.rb
|
236
228
|
- spec/migrations/001_create_dodgy_stalker_tables.rb
|
237
229
|
- spec/policy_spec.rb
|
@@ -1,14 +0,0 @@
|
|
1
|
-
module DodgyStalker
|
2
|
-
module DataStore
|
3
|
-
class Whitelist < ActiveRecord::Base
|
4
|
-
self.table_name = 'whitelist'
|
5
|
-
|
6
|
-
include Common
|
7
|
-
|
8
|
-
def on_list(attr)
|
9
|
-
conditions = attributes.with_indifferent_access.except(:id, :created_at, :updated_at).merge(attr)
|
10
|
-
model.where(conditions)
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
@@ -1,55 +0,0 @@
|
|
1
|
-
module DodgyStalker
|
2
|
-
module Engines
|
3
|
-
class Blacklist
|
4
|
-
def initialize(attributes)
|
5
|
-
@attributes = attributes
|
6
|
-
end
|
7
|
-
|
8
|
-
def banned_ip?(ip)
|
9
|
-
return false if ip.nil?
|
10
|
-
DataStore::Blacklist.where(ip_address: ip).exists?
|
11
|
-
end
|
12
|
-
|
13
|
-
def on_blacklist?
|
14
|
-
return false if whitelist.on_list(attributes).exists?
|
15
|
-
|
16
|
-
Policy.new(fetched_results).validate
|
17
|
-
end
|
18
|
-
|
19
|
-
def blacklist!(opts={})
|
20
|
-
if (blacklist.add(attributes.merge(opts)) && whitelist.remove(attributes))
|
21
|
-
true
|
22
|
-
else
|
23
|
-
false
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
#Remove attributes from blacklist and add to whitelist
|
28
|
-
def remove!
|
29
|
-
if (blacklist.remove(attributes) && whitelist.add(attributes))
|
30
|
-
true
|
31
|
-
else
|
32
|
-
false
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
private
|
37
|
-
|
38
|
-
def fetched_results
|
39
|
-
@fetched_results ||= blacklist.on_list(attributes).to_a
|
40
|
-
end
|
41
|
-
|
42
|
-
def blacklist
|
43
|
-
DataStore::Blacklist.new
|
44
|
-
end
|
45
|
-
|
46
|
-
def whitelist
|
47
|
-
DataStore::Whitelist.new
|
48
|
-
end
|
49
|
-
|
50
|
-
def attributes
|
51
|
-
@attributes
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe DodgyStalker::DataStore::Blacklist do
|
4
|
-
let(:list) { described_class.new }
|
5
|
-
let(:user) { double('User', username: 'Rob', email: 'email@domain.com') }
|
6
|
-
let(:attributes) { { email: user.email, username: user.username } }
|
7
|
-
|
8
|
-
describe "#on_list" do
|
9
|
-
it "returns matches for any attributes" do
|
10
|
-
list.add(username: user.username)
|
11
|
-
list.add(email: user.email)
|
12
|
-
list.on_list(attributes).should have(2).entries
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
describe "#add" do
|
17
|
-
it "adds new entry to blacklist" do
|
18
|
-
expect { list.add(attributes) }.to change { DodgyStalker::DataStore::Blacklist.count }.
|
19
|
-
from(0).to(1)
|
20
|
-
end
|
21
|
-
|
22
|
-
it "does not add duplicates" do
|
23
|
-
list.add(attributes)
|
24
|
-
expect { list.add(attributes) }.to_not change { DodgyStalker::DataStore::Blacklist.count }
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
describe "#remove" do
|
29
|
-
it "removes user from blacklist" do
|
30
|
-
list.add(attributes)
|
31
|
-
expect { list.remove(attributes) }.to change { DodgyStalker::DataStore::Blacklist.count }.
|
32
|
-
from(1).to(0)
|
33
|
-
end
|
34
|
-
|
35
|
-
it "removes only exact matches" do
|
36
|
-
list.add(attributes.merge(facebook_uid: '123'))
|
37
|
-
expect { list.remove(attributes) }.to_not change { DodgyStalker::DataStore::Blacklist.count }
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
@@ -1,44 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe DodgyStalker::DataStore::Whitelist do
|
4
|
-
let(:list) { described_class.new }
|
5
|
-
let(:user) { double('User', email: 'rob@example.com', username: 'rob') }
|
6
|
-
let(:attributes) { { email: user.email, username: user.username } }
|
7
|
-
|
8
|
-
describe "#on_list" do
|
9
|
-
it "returns only exact matches" do
|
10
|
-
list.add(username: user.username)
|
11
|
-
list.add(email: user.email)
|
12
|
-
list.add(attributes)
|
13
|
-
|
14
|
-
list.on_list(attributes).should have(1).entry
|
15
|
-
|
16
|
-
list.on_list(username: user.username, email: 'mail@domain.com').should have(0).entries
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
describe "#add" do
|
21
|
-
it "adds new entry to whitelist" do
|
22
|
-
expect { list.add(attributes) }.to change { DodgyStalker::DataStore::Whitelist.count }.
|
23
|
-
from(0).to(1)
|
24
|
-
end
|
25
|
-
|
26
|
-
it "does not add duplicates" do
|
27
|
-
list.add(attributes)
|
28
|
-
expect { list.add(attributes) }.to_not change { DodgyStalker::DataStore::Whitelist.count }
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
describe "#remove" do
|
33
|
-
it "removes user from whitelist" do
|
34
|
-
list.add(attributes)
|
35
|
-
expect { list.remove(attributes) }.to change { DodgyStalker::DataStore::Whitelist.count }.
|
36
|
-
from(1).to(0)
|
37
|
-
end
|
38
|
-
|
39
|
-
it "removes only exact matches" do
|
40
|
-
list.add(attributes.merge(facebook_uid: '123'))
|
41
|
-
expect { list.remove(attributes) }.to_not change { DodgyStalker::DataStore::Whitelist.count }
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
@@ -1,67 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe DodgyStalker::Engines::Blacklist do
|
4
|
-
let(:engine) { described_class.new(attributes) }
|
5
|
-
let(:user) { double('User', username: 'rob', email: 'rob@example.com') }
|
6
|
-
let(:attributes) { { email: user.email, username: user.username } }
|
7
|
-
|
8
|
-
describe "#on_blacklist?" do
|
9
|
-
context "when there is no whitelist entry" do
|
10
|
-
it "returns true when user is on blacklist" do
|
11
|
-
DodgyStalker::DataStore::Blacklist.new.add(attributes)
|
12
|
-
engine.on_blacklist?.should be true
|
13
|
-
end
|
14
|
-
|
15
|
-
it "returns false when user is not on blacklist" do
|
16
|
-
engine.on_blacklist?.should be false
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
it "returns false when there is whitelist entry" do
|
21
|
-
DodgyStalker::DataStore::Whitelist.new.add(attributes)
|
22
|
-
DodgyStalker::DataStore::Blacklist.new.add(attributes)
|
23
|
-
engine.on_blacklist?.should be false
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
describe "#blacklist!" do
|
28
|
-
it "adds user to blacklist" do
|
29
|
-
expect { engine.blacklist! }.to change { DodgyStalker::DataStore::Blacklist.count }.
|
30
|
-
from(0).to(1)
|
31
|
-
end
|
32
|
-
|
33
|
-
it "removes user from whitelist" do
|
34
|
-
DodgyStalker::DataStore::Whitelist.new.add(attributes)
|
35
|
-
expect { engine.blacklist! }.to change { DodgyStalker::DataStore::Whitelist.count }.
|
36
|
-
from(1).to(0)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
describe "#banned_ip?" do
|
41
|
-
it "returns false if passed ip is nil" do
|
42
|
-
engine.banned_ip?(nil).should be false
|
43
|
-
end
|
44
|
-
|
45
|
-
it "returns false if IP is not on blacklist" do
|
46
|
-
engine.banned_ip?('0.0.0.0').should be false
|
47
|
-
end
|
48
|
-
|
49
|
-
it "returns true if IP is on blacklist" do
|
50
|
-
DodgyStalker::DataStore::Blacklist.new.add(ip_address: '1.2.3.4')
|
51
|
-
engine.banned_ip?('1.2.3.4').should be true
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
describe "#remove!" do
|
56
|
-
it "removes the user from blacklist" do
|
57
|
-
DodgyStalker::DataStore::Blacklist.new.add(attributes)
|
58
|
-
expect { engine.remove! }.to change { DodgyStalker::DataStore::Blacklist.count }.
|
59
|
-
from(1).to(0)
|
60
|
-
end
|
61
|
-
|
62
|
-
it "adds the user to whitelist" do
|
63
|
-
expect { engine.remove! }.to change { DodgyStalker::DataStore::Whitelist.count }.
|
64
|
-
from(0).to(1)
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|