legitbot 1.1.0 → 1.4.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 +4 -4
- data/.github/workflows/build.yml +7 -3
- data/.rubocop.yml +7 -0
- data/.ruby-version +1 -1
- data/README.md +1 -1
- data/legitbot.gemspec +3 -3
- data/lib/legitbot/apple.rb +0 -8
- data/lib/legitbot/duckduckgo.rb +2 -1
- data/lib/legitbot/validators/ip_ranges.rb +1 -1
- data/lib/legitbot/version.rb +1 -1
- data/test/legitbot/validators/ip_ranges_test.rb +9 -0
- data/test/pinterest_test.rb +2 -2
- metadata +14 -16
- data/test/apple_as_google_test.rb +0 -27
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 88b7c118fb39080f7bbed1839c41173f67501f816ccc2409378a0c974e353633
|
|
4
|
+
data.tar.gz: cd97cd5656347126b11999d38c450fd35ce88a523186c01d4a8417aa7bf9edd6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 45cebed5ce8a638612496ca824eb3706e7f198ea4b1a0e394a62eb41b2069d0a28ae44d226897373ef7747dfe44926263dbfc1e6ea2620908c2d341d70f75e09
|
|
7
|
+
data.tar.gz: d008044692ddfb2dc31b03d3d91eb3c6de3d79f0888e093432a27233d4a8c944e0bc7e951857c8a6663670047f0518565a8f128375ea658ab99c8ba3f1a01723
|
data/.github/workflows/build.yml
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
name: build
|
|
2
2
|
|
|
3
|
-
on:
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
push:
|
|
6
|
+
schedule:
|
|
7
|
+
- cron: '29 6 * * 6'
|
|
4
8
|
|
|
5
9
|
jobs:
|
|
6
10
|
test:
|
|
@@ -9,7 +13,7 @@ jobs:
|
|
|
9
13
|
strategy:
|
|
10
14
|
fail-fast: false
|
|
11
15
|
matrix:
|
|
12
|
-
ruby: [ jruby, 2.6 ]
|
|
16
|
+
ruby: [ jruby, 2.5, 2.6, 2.7 ]
|
|
13
17
|
|
|
14
18
|
steps:
|
|
15
19
|
- uses: actions/checkout@v2
|
|
@@ -37,7 +41,7 @@ jobs:
|
|
|
37
41
|
|
|
38
42
|
strategy:
|
|
39
43
|
matrix:
|
|
40
|
-
ruby: [ 2.
|
|
44
|
+
ruby: [ 2.7 ]
|
|
41
45
|
|
|
42
46
|
steps:
|
|
43
47
|
- uses: actions/checkout@v2
|
data/.rubocop.yml
CHANGED
data/.ruby-version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
2.
|
|
1
|
+
2.7.3
|
data/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Legitbot 
|
|
1
|
+
# Legitbot  
|
|
2
2
|
|
|
3
3
|
Ruby gem to check that an IP belongs to a bot, typically a search
|
|
4
4
|
engine. This can be of help in protecting a web site from fake search
|
data/legitbot.gemspec
CHANGED
|
@@ -14,13 +14,13 @@ Gem::Specification.new do |spec|
|
|
|
14
14
|
spec.summary = 'Validate requests from Web crawlers: impersonating or not?'
|
|
15
15
|
spec.description = 'Does Web request come from a real search engine or from an impersonating agent?'
|
|
16
16
|
|
|
17
|
-
spec.required_ruby_version = '>= 2.
|
|
17
|
+
spec.required_ruby_version = '>= 2.5.0'
|
|
18
18
|
spec.add_dependency 'augmented_interval_tree', '~> 0.1', '>= 0.1.1'
|
|
19
19
|
spec.add_dependency 'irrc', '~> 0.2', '>= 0.2.1'
|
|
20
20
|
spec.add_development_dependency 'bump', '~> 0.8', '>= 0.8.0'
|
|
21
21
|
spec.add_development_dependency 'minitest', '~> 5.1', '>= 5.1.0'
|
|
22
|
-
spec.add_development_dependency 'rake', '~>
|
|
23
|
-
spec.add_development_dependency 'rubocop', '~> 0
|
|
22
|
+
spec.add_development_dependency 'rake', '~> 13.0', '>= 13.0.0'
|
|
23
|
+
spec.add_development_dependency 'rubocop', '~> 1.15.0', '>= 1.15.0'
|
|
24
24
|
|
|
25
25
|
spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
|
26
26
|
spec.rdoc_options = ['--charset=UTF-8']
|
data/lib/legitbot/apple.rb
CHANGED
|
@@ -8,13 +8,5 @@ module Legitbot # :nodoc:
|
|
|
8
8
|
ip_ranges '17.0.0.0/8'
|
|
9
9
|
end
|
|
10
10
|
|
|
11
|
-
# https://support.apple.com/en-us/HT204683
|
|
12
|
-
# rubocop:disable Naming/ClassAndModuleCamelCase
|
|
13
|
-
class Apple_as_Google < BotMatch
|
|
14
|
-
ip_ranges '17.0.0.0/8'
|
|
15
|
-
end
|
|
16
|
-
# rubocop:enable Naming/ClassAndModuleCamelCase
|
|
17
|
-
|
|
18
11
|
rule Legitbot::Apple, %w[Applebot]
|
|
19
|
-
rule Legitbot::Apple_as_Google, %w[Googlebot]
|
|
20
12
|
end
|
data/lib/legitbot/duckduckgo.rb
CHANGED
|
@@ -4,14 +4,15 @@ module Legitbot # :nodoc:
|
|
|
4
4
|
# https://duckduckgo.com/duckduckbot
|
|
5
5
|
class DuckDuckGo < BotMatch
|
|
6
6
|
ip_ranges %w[
|
|
7
|
+
20.191.45.212
|
|
7
8
|
23.21.227.69
|
|
8
9
|
40.88.21.235
|
|
9
10
|
50.16.241.113
|
|
10
11
|
50.16.241.114
|
|
11
12
|
50.16.241.117
|
|
12
13
|
50.16.247.234
|
|
13
|
-
52.204.97.54
|
|
14
14
|
52.5.190.19
|
|
15
|
+
52.204.97.54
|
|
15
16
|
54.197.234.188
|
|
16
17
|
54.208.100.253
|
|
17
18
|
54.208.102.37
|
data/lib/legitbot/version.rb
CHANGED
|
@@ -51,6 +51,11 @@ module Legitbot
|
|
|
51
51
|
ip_ranges { nil }
|
|
52
52
|
end
|
|
53
53
|
|
|
54
|
+
class Ipv4Ranges
|
|
55
|
+
include IpRanges
|
|
56
|
+
ip_ranges { ['66.220.144.0/21'] }
|
|
57
|
+
end
|
|
58
|
+
|
|
54
59
|
class IpRangesTest < Minitest::Test
|
|
55
60
|
def test_partition_method
|
|
56
61
|
empty = NoRanges.partition_ips([])
|
|
@@ -117,6 +122,10 @@ module Legitbot
|
|
|
117
122
|
def test_nil_ranges
|
|
118
123
|
assert NilRanges.valid_ip?('127.0.0.1')
|
|
119
124
|
end
|
|
125
|
+
|
|
126
|
+
def test_ipv4_only_ranges
|
|
127
|
+
refute Ipv4Ranges.valid_ip?('2a03:2880:f234:0:0:0:0:1')
|
|
128
|
+
end
|
|
120
129
|
end
|
|
121
130
|
end
|
|
122
131
|
end
|
data/test/pinterest_test.rb
CHANGED
|
@@ -34,7 +34,7 @@ class PinterestTest < Minitest::Test
|
|
|
34
34
|
assert bot.valid?, msg: 'Valid Pinterest'
|
|
35
35
|
end
|
|
36
36
|
|
|
37
|
-
# rubocop:disable
|
|
37
|
+
# rubocop:disable Layout/LineLength
|
|
38
38
|
def test_android_not_bot
|
|
39
39
|
bot = Legitbot.bot(
|
|
40
40
|
'Mozilla/5.0 (Linux; Android 8.0.0; SM-G965F Build/R16NW; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/70.0.3538.64 Mobile Safari/537.36 [Pinterest/Android]',
|
|
@@ -42,7 +42,7 @@ class PinterestTest < Minitest::Test
|
|
|
42
42
|
)
|
|
43
43
|
assert_nil bot
|
|
44
44
|
end
|
|
45
|
-
# rubocop:enable
|
|
45
|
+
# rubocop:enable Layout/LineLength
|
|
46
46
|
|
|
47
47
|
def test_engine_name
|
|
48
48
|
bot = Legitbot.bot(
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: legitbot
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.1
|
|
4
|
+
version: 1.4.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Alexander Azarov
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2021-05-31 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: augmented_interval_tree
|
|
@@ -96,40 +96,40 @@ dependencies:
|
|
|
96
96
|
requirements:
|
|
97
97
|
- - "~>"
|
|
98
98
|
- !ruby/object:Gem::Version
|
|
99
|
-
version: '
|
|
99
|
+
version: '13.0'
|
|
100
100
|
- - ">="
|
|
101
101
|
- !ruby/object:Gem::Version
|
|
102
|
-
version:
|
|
102
|
+
version: 13.0.0
|
|
103
103
|
type: :development
|
|
104
104
|
prerelease: false
|
|
105
105
|
version_requirements: !ruby/object:Gem::Requirement
|
|
106
106
|
requirements:
|
|
107
107
|
- - "~>"
|
|
108
108
|
- !ruby/object:Gem::Version
|
|
109
|
-
version: '
|
|
109
|
+
version: '13.0'
|
|
110
110
|
- - ">="
|
|
111
111
|
- !ruby/object:Gem::Version
|
|
112
|
-
version:
|
|
112
|
+
version: 13.0.0
|
|
113
113
|
- !ruby/object:Gem::Dependency
|
|
114
114
|
name: rubocop
|
|
115
115
|
requirement: !ruby/object:Gem::Requirement
|
|
116
116
|
requirements:
|
|
117
117
|
- - "~>"
|
|
118
118
|
- !ruby/object:Gem::Version
|
|
119
|
-
version:
|
|
120
|
-
- - "
|
|
119
|
+
version: 1.15.0
|
|
120
|
+
- - ">="
|
|
121
121
|
- !ruby/object:Gem::Version
|
|
122
|
-
version:
|
|
122
|
+
version: 1.15.0
|
|
123
123
|
type: :development
|
|
124
124
|
prerelease: false
|
|
125
125
|
version_requirements: !ruby/object:Gem::Requirement
|
|
126
126
|
requirements:
|
|
127
127
|
- - "~>"
|
|
128
128
|
- !ruby/object:Gem::Version
|
|
129
|
-
version:
|
|
130
|
-
- - "
|
|
129
|
+
version: 1.15.0
|
|
130
|
+
- - ">="
|
|
131
131
|
- !ruby/object:Gem::Version
|
|
132
|
-
version:
|
|
132
|
+
version: 1.15.0
|
|
133
133
|
description: Does Web request come from a real search engine or from an impersonating
|
|
134
134
|
agent?
|
|
135
135
|
email: self@alaz.me
|
|
@@ -168,7 +168,6 @@ files:
|
|
|
168
168
|
- lib/legitbot/yandex.rb
|
|
169
169
|
- test/ahrefs_test.rb
|
|
170
170
|
- test/alexa_test.rb
|
|
171
|
-
- test/apple_as_google_test.rb
|
|
172
171
|
- test/apple_test.rb
|
|
173
172
|
- test/botmatch_test.rb
|
|
174
173
|
- test/facebook_test.rb
|
|
@@ -192,14 +191,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
192
191
|
requirements:
|
|
193
192
|
- - ">="
|
|
194
193
|
- !ruby/object:Gem::Version
|
|
195
|
-
version: 2.
|
|
194
|
+
version: 2.5.0
|
|
196
195
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
197
196
|
requirements:
|
|
198
197
|
- - ">="
|
|
199
198
|
- !ruby/object:Gem::Version
|
|
200
199
|
version: '0'
|
|
201
200
|
requirements: []
|
|
202
|
-
rubygems_version: 3.1.
|
|
201
|
+
rubygems_version: 3.1.6
|
|
203
202
|
signing_key:
|
|
204
203
|
specification_version: 4
|
|
205
204
|
summary: 'Validate requests from Web crawlers: impersonating or not?'
|
|
@@ -211,7 +210,6 @@ test_files:
|
|
|
211
210
|
- test/alexa_test.rb
|
|
212
211
|
- test/ahrefs_test.rb
|
|
213
212
|
- test/apple_test.rb
|
|
214
|
-
- test/apple_as_google_test.rb
|
|
215
213
|
- test/oracle_test.rb
|
|
216
214
|
- test/google_test.rb
|
|
217
215
|
- test/botmatch_test.rb
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'minitest/autorun'
|
|
4
|
-
require 'legitbot'
|
|
5
|
-
|
|
6
|
-
class AppleAsGoogleTest < Minitest::Test
|
|
7
|
-
def test_valid_ip
|
|
8
|
-
ip = '17.58.98.60'
|
|
9
|
-
match = Legitbot::Apple_as_Google.new(ip)
|
|
10
|
-
assert match.valid?, msg: "#{ip} is a valid Applebot IP"
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def test_invalid_ip
|
|
14
|
-
ip = '127.0.0.1'
|
|
15
|
-
match = Legitbot::Apple_as_Google.new(ip)
|
|
16
|
-
assert match.fake?, msg: "#{ip} is a fake Applebot IP"
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def test_user_agent
|
|
20
|
-
bot = Legitbot.bot(
|
|
21
|
-
'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)',
|
|
22
|
-
'17.58.98.60'
|
|
23
|
-
)
|
|
24
|
-
assert_equal :apple_as_google, bot.detected_as
|
|
25
|
-
assert bot.valid?, msg: 'A valid Applebot User-agent and IP'
|
|
26
|
-
end
|
|
27
|
-
end
|