legitbot 1.0.2 → 1.4.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/.editorconfig +17 -0
- 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/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 +15 -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: 783bc47b1bc8f80e5d4818f150663a2cb6fb90e5dd2378bae456eb2fb1d78823
|
4
|
+
data.tar.gz: 0e274e1eaa295ffa0e00a8d6e2884194ed53108da9ecb75c3ef2ef4746048c9e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ec7c2f2cb78cc8a586a35bea72e39b12835679089f4b4d5cba754aa0caccee0c9e8c1c94461a7fd8fcb1cf4f8195f196346ea4abe7bd96a080c5c831f9d68c7a
|
7
|
+
data.tar.gz: a92ea8ff049127871988e8dbad7cb76b3c53f13dde97a157509e9013898c1da2cc3e573ae695d9af2e82372bf478348aeca6ec77a673798b52ac1e3ab623e214
|
data/.editorconfig
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
root = true
|
2
|
+
|
3
|
+
[*]
|
4
|
+
end_of_line = lf
|
5
|
+
insert_final_newline = true
|
6
|
+
trim_trailing_whitespace = true
|
7
|
+
charset = utf-8
|
8
|
+
|
9
|
+
indent_style = space
|
10
|
+
indent_size = 2
|
11
|
+
|
12
|
+
[*.md]
|
13
|
+
trim_trailing_whitespace = false
|
14
|
+
|
15
|
+
[*.yml]
|
16
|
+
indent_style = space
|
17
|
+
indent_size = 2
|
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/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.0
|
4
|
+
version: 1.4.0
|
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-28 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
|
@@ -137,6 +137,7 @@ executables: []
|
|
137
137
|
extensions: []
|
138
138
|
extra_rdoc_files: []
|
139
139
|
files:
|
140
|
+
- ".editorconfig"
|
140
141
|
- ".github/workflows/build.yml"
|
141
142
|
- ".gitignore"
|
142
143
|
- ".rubocop.yml"
|
@@ -167,7 +168,6 @@ files:
|
|
167
168
|
- lib/legitbot/yandex.rb
|
168
169
|
- test/ahrefs_test.rb
|
169
170
|
- test/alexa_test.rb
|
170
|
-
- test/apple_as_google_test.rb
|
171
171
|
- test/apple_test.rb
|
172
172
|
- test/botmatch_test.rb
|
173
173
|
- test/facebook_test.rb
|
@@ -191,14 +191,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
191
191
|
requirements:
|
192
192
|
- - ">="
|
193
193
|
- !ruby/object:Gem::Version
|
194
|
-
version: 2.
|
194
|
+
version: 2.5.0
|
195
195
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
196
196
|
requirements:
|
197
197
|
- - ">="
|
198
198
|
- !ruby/object:Gem::Version
|
199
199
|
version: '0'
|
200
200
|
requirements: []
|
201
|
-
rubygems_version: 3.1.
|
201
|
+
rubygems_version: 3.1.6
|
202
202
|
signing_key:
|
203
203
|
specification_version: 4
|
204
204
|
summary: 'Validate requests from Web crawlers: impersonating or not?'
|
@@ -210,7 +210,6 @@ test_files:
|
|
210
210
|
- test/alexa_test.rb
|
211
211
|
- test/ahrefs_test.rb
|
212
212
|
- test/apple_test.rb
|
213
|
-
- test/apple_as_google_test.rb
|
214
213
|
- test/oracle_test.rb
|
215
214
|
- test/google_test.rb
|
216
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
|