legitbot 1.5.1 → 1.6.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 90eab3a4d53cc388fac2db75058e11c549ec09b3acb3352a398c10e437c0f233
4
- data.tar.gz: 5a252a30d37a44de60bb5b7baf1f264477211c22c0acc1477317f8281b7e9103
3
+ metadata.gz: df2907ab34b159613adf21c3301607f53fa893e0823f81560e45ad2c8303075b
4
+ data.tar.gz: fe913e9b72878969839326da227c1169ad8234a8ae335e276f614b53e5777d42
5
5
  SHA512:
6
- metadata.gz: c56a32b2bccb2667f5c42c7580c31b2d79884331dfecf5f3cd01f1242ad2e53a5a4d1192a01f1f814014ef3da38702ad5b6041da3ba89d6b14cfbb5658550c47
7
- data.tar.gz: c388aad0dec6a86a8d7a9ae23ae1e3200cd7eb3df421f74934b1a7582d9e63c4da1b66d9f28def1685f821c9ac2813b2d7fa38c4653a0a72301576c1cdddcf9b
6
+ metadata.gz: f8af647da764cd722f27f2936f8f9728f9cdd7b313e295d9c80ebe7144a601a5360f5b615039d5afe75f7ded891e3bfc06292383e9e41e342977d39f1e485dab
7
+ data.tar.gz: 74e3dd5cb2c4d2e7df717c6bb3a072c74aa51b922f7f71d280cde82387ba458d30970f85c4f79508852ef5c2969196bd640427bf2323104229616960314fb9df
@@ -13,7 +13,7 @@ jobs:
13
13
  strategy:
14
14
  fail-fast: false
15
15
  matrix:
16
- ruby: [ jruby, 2.5, 2.6, 2.7 ]
16
+ ruby: [ jruby, 2.6, 2.7, 3.0 ]
17
17
 
18
18
  steps:
19
19
  - uses: actions/checkout@v2
@@ -41,7 +41,7 @@ jobs:
41
41
 
42
42
  strategy:
43
43
  matrix:
44
- ruby: [ 2.7 ]
44
+ ruby: [ 3.0 ]
45
45
 
46
46
  steps:
47
47
  - uses: actions/checkout@v2
data/.rubocop.yml CHANGED
@@ -1,3 +1,6 @@
1
+ require:
2
+ - rubocop-minitest
3
+
1
4
  AllCops:
2
5
  CacheRootDirectory: 'vendor'
3
6
  NewCops: enable
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.7.3
1
+ 3.0.3
data/Rakefile CHANGED
@@ -1,25 +1 @@
1
1
  # frozen_string_literal: true
2
-
3
- require 'rubygems'
4
- require 'bundler'
5
- require 'bump/tasks'
6
- require 'rake/testtask'
7
- Bundler::GemHelper.install_tasks
8
-
9
- Bump.tag_by_default = true
10
-
11
- Rake::TestTask.new do |t|
12
- t.libs << 'test'
13
- t.test_files = FileList['test/**/*_test.rb']
14
- t.warning = true
15
- t.verbose = true
16
- end
17
-
18
- desc 'Start a console'
19
- task :console do
20
- require 'irb'
21
- ARGV.clear
22
- IRB.start
23
- end
24
-
25
- task default: %w[test]
data/legitbot.gemspec CHANGED
@@ -19,15 +19,18 @@ Gem::Specification.new do |spec|
19
19
  'rubygems_mfa_required' => 'true'
20
20
  }
21
21
 
22
- spec.required_ruby_version = '>= 2.5.0'
23
- spec.add_dependency 'augmented_interval_tree', '~> 0.1', '>= 0.1.1'
22
+ spec.required_ruby_version = '>= 2.6.0'
23
+ spec.add_dependency 'fast_interval_tree', '~> 0.2', '>= 0.2.2'
24
24
  spec.add_dependency 'irrc', '~> 0.2', '>= 0.2.1'
25
25
  spec.add_development_dependency 'bump', '~> 0.8', '>= 0.8.0'
26
+ spec.add_development_dependency 'dns_mock', '~> 1.5.0', '>= 1.5.0'
26
27
  spec.add_development_dependency 'minitest', '~> 5.1', '>= 5.1.0'
28
+ spec.add_development_dependency 'minitest-hooks', '~> 1.5', '>= 1.5.0'
27
29
  spec.add_development_dependency 'rake', '~> 13.0', '>= 13.0.0'
28
30
  spec.add_development_dependency 'rubocop', '~> 1.24.0', '>= 1.24.0'
31
+ spec.add_development_dependency 'rubocop-minitest', '~> 0.17.0', '>= 0.17.0'
29
32
 
30
33
  spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
31
34
  spec.rdoc_options = ['--charset=UTF-8']
32
- spec.test_files = Dir.glob('test/**/*')
35
+ spec.test_files = Dir.glob('test/**/*').reject { |f| f.start_with? 'test/lib' }
33
36
  end
@@ -64,6 +64,8 @@ module Legitbot
64
64
  return nil if record.nil?
65
65
 
66
66
  resolver.getaddress(record.to_s).to_s
67
+ rescue Resolv::ResolvError
68
+ nil
67
69
  end
68
70
  end
69
71
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Legitbot
4
- VERSION = '1.5.1'
4
+ VERSION = '1.6.0'
5
5
  end
data/rakelib/bump.rake ADDED
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bump/tasks'
4
+
5
+ Bump.tag_by_default = true
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler'
4
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ desc 'Start a console'
4
+ task :console do
5
+ require 'irb'
6
+ ARGV.clear
7
+ IRB.start
8
+ end
data/rakelib/test.rake ADDED
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rake/testtask'
4
+
5
+ Rake::TestTask.new do |t|
6
+ t.libs << 'test'
7
+ t.test_files = FileList['test/**/*_test.rb']
8
+ t.warning = true
9
+ t.verbose = true
10
+ end
11
+
12
+ task default: %w[test]
data/test/ahrefs_test.rb CHANGED
@@ -1,19 +1,24 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'minitest/autorun'
4
+ require 'minitest/hooks/test'
5
+ require 'lib/dns_server_mock'
4
6
  require 'legitbot'
5
7
 
6
8
  class AhrefsTest < Minitest::Test
9
+ include Minitest::Hooks
10
+ include DnsServerMock
11
+
7
12
  def test_malicious_ip
8
13
  ip = '149.210.164.47'
9
14
  match = Legitbot::Ahrefs.new ip
10
- assert !match.valid?, msg: "#{ip} is not a real Ahrefs IP"
15
+ refute match.valid?
11
16
  end
12
17
 
13
18
  def test_valid_ip
14
19
  ip = '54.36.148.0'
15
20
  match = Legitbot::Ahrefs.new ip
16
- assert match.valid?, msg: "#{ip} is a valid Ahrefs IP"
21
+ assert match.valid?
17
22
  end
18
23
 
19
24
  def test_malicious_ua
@@ -21,8 +26,8 @@ class AhrefsTest < Minitest::Test
21
26
  'Mozilla/5.0 (compatible; AhrefsBot/6.1; +http://ahrefs.com/robot/)',
22
27
  '149.210.164.47'
23
28
  )
24
- assert bot, msg: 'Ahrefs detected from User-Agent'
25
- assert !bot.valid?, msg: 'Not a valid Ahrefs'
29
+ assert bot
30
+ refute bot.valid?
26
31
  end
27
32
 
28
33
  def test_valid_ua
@@ -30,7 +35,7 @@ class AhrefsTest < Minitest::Test
30
35
  'Mozilla/5.0 (compatible; AhrefsBot/6.1; +http://ahrefs.com/robot/)',
31
36
  '54.36.148.0'
32
37
  )
33
- assert bot, msg: 'Ahrefs detected from User-Agent'
34
- assert bot.valid?, msg: 'Valid Ahrefs'
38
+ assert bot
39
+ assert bot.valid?
35
40
  end
36
41
  end
data/test/alexa_test.rb CHANGED
@@ -1,19 +1,24 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'minitest/autorun'
4
+ require 'minitest/hooks/test'
5
+ require 'lib/dns_server_mock'
4
6
  require 'legitbot'
5
7
 
6
8
  class AlexaTest < Minitest::Test
9
+ include Minitest::Hooks
10
+ include DnsServerMock
11
+
7
12
  def test_malicious_ip
8
13
  ip = '149.210.164.47'
9
14
  match = Legitbot::Alexa.new ip
10
- assert !match.valid?, msg: "#{ip} is not a real Alexa IP"
15
+ refute match.valid?
11
16
  end
12
17
 
13
18
  def test_valid_ip
14
19
  ip = '52.86.176.3'
15
20
  match = Legitbot::Alexa.new ip
16
- assert match.valid?, msg: "#{ip} is a valid Alexa IP"
21
+ assert match.valid?
17
22
  end
18
23
 
19
24
  def test_malicious_ua
@@ -21,8 +26,8 @@ class AlexaTest < Minitest::Test
21
26
  'Mozilla/5.0 (compatible; Alexabot/1.0; +http://www.alexa.com/help/certifyscan; certifyscan@alexa.com)',
22
27
  '149.210.164.47'
23
28
  )
24
- assert bot, msg: 'Alexa detected from User-Agent'
25
- assert !bot.valid?, msg: 'Not a valid Alexa'
29
+ assert bot
30
+ refute bot.valid?
26
31
  end
27
32
 
28
33
  def test_valid_ua
@@ -30,7 +35,7 @@ class AlexaTest < Minitest::Test
30
35
  'Mozilla/5.0 (compatible; Alexabot/1.0; +http://www.alexa.com/help/certifyscan; certifyscan@alexa.com)',
31
36
  '52.86.176.3'
32
37
  )
33
- assert bot, msg: 'Alexa detected from User-Agent'
34
- assert bot.valid?, msg: 'Valid Alexa'
38
+ assert bot
39
+ assert bot.valid?
35
40
  end
36
41
  end
data/test/amazon_test.rb CHANGED
@@ -1,19 +1,24 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'minitest/autorun'
4
+ require 'minitest/hooks/test'
5
+ require 'lib/dns_server_mock'
4
6
  require 'legitbot'
5
7
 
6
8
  class AmazonTest < Minitest::Test
9
+ include Minitest::Hooks
10
+ include DnsServerMock
11
+
7
12
  def test_malicious_ip
8
13
  ip = '149.210.164.47'
9
14
  match = Legitbot::Amazon.new ip
10
- assert !match.valid?, msg: "#{ip} is not a real AmazonAdBot IP"
15
+ refute match.valid?
11
16
  end
12
17
 
13
18
  def test_valid_ip
14
19
  ip = '54.166.7.90'
15
20
  match = Legitbot::Amazon.new ip
16
- assert match.valid?, msg: "#{ip} is a valid AmazonAdBot IP"
21
+ assert match.valid?
17
22
  end
18
23
 
19
24
  def test_malicious_ua
@@ -21,8 +26,8 @@ class AmazonTest < Minitest::Test
21
26
  'Mozilla/5.0 (compatible; AmazonAdBot/1.0; +https://adbot.amazon.com)',
22
27
  '149.210.164.47'
23
28
  )
24
- assert bot, msg: 'AmazonAdBot detected from User-Agent'
25
- assert !bot.valid?, msg: 'Not a valid AmazonAdBot'
29
+ assert bot
30
+ refute bot.valid?
26
31
  end
27
32
 
28
33
  def test_valid_ua
@@ -30,8 +35,8 @@ class AmazonTest < Minitest::Test
30
35
  'Mozilla/5.0 (compatible; AmazonAdBot/1.0; +https://adbot.amazon.com)',
31
36
  '54.166.7.90'
32
37
  )
33
- assert bot, msg: 'AmazonAdBot detected from User-Agent'
34
- assert bot.valid?, msg: 'Valid AmazonAdBot'
38
+ assert bot
39
+ assert bot.valid?
35
40
  end
36
41
 
37
42
  def test_valid_name
data/test/apple_test.rb CHANGED
@@ -1,19 +1,24 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'minitest/autorun'
4
+ require 'minitest/hooks/test'
5
+ require 'lib/dns_server_mock'
4
6
  require 'legitbot'
5
7
 
6
8
  class AppleTest < Minitest::Test
9
+ include Minitest::Hooks
10
+ include DnsServerMock
11
+
7
12
  def test_valid_ip
8
13
  ip = '17.58.98.60'
9
14
  match = Legitbot::Apple.new(ip)
10
- assert match.valid?, msg: "#{ip} is a valid Applebot IP"
15
+ assert match.valid?
11
16
  end
12
17
 
13
18
  def test_invalid_ip
14
19
  ip = '127.0.0.1'
15
20
  match = Legitbot::Apple.new(ip)
16
- assert match.fake?, msg: "#{ip} is a fake Applebot IP"
21
+ assert match.fake?
17
22
  end
18
23
 
19
24
  # rubocop:disable Layout/LineLength
@@ -23,7 +28,7 @@ class AppleTest < Minitest::Test
23
28
  '17.58.98.60'
24
29
  )
25
30
  assert_equal :apple, bot.detected_as
26
- assert bot.valid?, msg: 'A valid Applebot User-agent and IP'
31
+ assert bot.valid?
27
32
  end
28
33
  # rubocop:enable Layout/LineLength
29
34
  end
@@ -1,11 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'minitest/autorun'
4
+ require 'minitest/hooks/test'
5
+ require 'lib/dns_server_mock'
4
6
  require 'legitbot'
5
7
 
6
8
  class BotMatchTest < Minitest::Test
9
+ include Minitest::Hooks
10
+ include DnsServerMock
11
+
7
12
  def test_valid_class_syntax
8
- assert Legitbot::Google.valid?('66.249.64.141'), msg: 'Valid Googlebot'
9
- assert Legitbot::Google.fake?('149.210.164.47'), msg: 'Fake Googlebot'
13
+ assert Legitbot::Google.valid?('66.249.64.141')
14
+ assert Legitbot::Google.fake?('149.210.164.47')
10
15
  end
11
16
  end
@@ -20,44 +20,48 @@ class FacebookTest < Minitest::Test
20
20
  def test_valid_ip
21
21
  ip = '69.63.186.89'
22
22
  match = Legitbot::Facebook.new(ip)
23
- assert match.valid?, msg: "#{ip} is a valid Facebook IP"
23
+ assert match.valid?
24
24
 
25
25
  ip = '69.171.251.1'
26
26
  match = Legitbot::Facebook.new(ip)
27
- assert match.valid?, msg: "#{ip} is a valid Facebook IP"
27
+ assert match.valid?
28
28
  end
29
29
 
30
30
  def test_invalid_ip
31
31
  ip = '127.0.0.1'
32
32
  match = Legitbot::Facebook.new(ip)
33
- assert match.fake?, msg: "#{ip} is a fake Facebook IP"
33
+ assert match.fake?
34
34
  end
35
35
 
36
- # rubocop:disable Layout/LineLength, Metrics/MethodLength
37
- def test_user_agent
36
+ def test_user_agent1
38
37
  Legitbot.bot(
39
38
  'facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)',
40
39
  '31.13.76.56'
41
40
  ) do |bot|
42
41
  assert_equal :facebook, bot.detected_as
43
- assert bot.valid?, msg: 'true Facebook'
42
+ assert bot.valid?
44
43
  end
44
+ end
45
45
 
46
+ def test_user_agent2
46
47
  Legitbot.bot(
47
48
  'facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)',
48
49
  '173.252.87.8'
49
50
  ) do |bot|
50
51
  assert_equal :facebook, bot.detected_as
51
- assert bot.valid?, msg: 'true Facebook'
52
+ assert bot.valid?
52
53
  end
54
+ end
53
55
 
56
+ # rubocop:disable Layout/LineLength
57
+ def test_user_agent3
54
58
  Legitbot.bot(
55
59
  'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/601.2.4 (KHTML, like Gecko) Version/9.0.1 Safari/601.2.4 facebookexternalhit/1.1 Facebot Twitterbot/1.0',
56
60
  '92.243.181.7'
57
61
  ) do |bot|
58
- assert %i[facebook twitter].include?(bot.detected_as)
59
- assert bot.fake?, msg: 'fake Facebook'
62
+ assert_includes %i[facebook twitter], bot.detected_as
63
+ assert bot.fake?
60
64
  end
61
65
  end
62
- # rubocop:enable Layout/LineLength, Metrics/MethodLength
66
+ # rubocop:enable Layout/LineLength
63
67
  end
data/test/google_test.rb CHANGED
@@ -1,19 +1,24 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'minitest/autorun'
4
+ require 'minitest/hooks/test'
5
+ require 'lib/dns_server_mock'
4
6
  require 'legitbot'
5
7
 
6
8
  class GoogleTest < Minitest::Test
9
+ include Minitest::Hooks
10
+ include DnsServerMock
11
+
7
12
  def test_malicious_ip
8
13
  ip = '149.210.164.47'
9
14
  match = Legitbot::Google.new ip
10
- assert !match.valid?, msg: "#{ip} is not a real Googlebot IP"
15
+ refute match.valid?
11
16
  end
12
17
 
13
18
  def test_valid_ip
14
19
  ip = '66.249.64.141'
15
20
  match = Legitbot::Google.new ip
16
- assert match.valid?, msg: "#{ip} is a valid Googlebot IP"
21
+ assert match.valid?
17
22
  end
18
23
 
19
24
  def test_malicious_ua
@@ -21,8 +26,8 @@ class GoogleTest < Minitest::Test
21
26
  'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)',
22
27
  '149.210.164.47'
23
28
  )
24
- assert bot, msg: 'Googlebot detected from User-Agent'
25
- assert !bot.valid?, msg: 'Not a valid Googlebot'
29
+ assert bot
30
+ refute bot.valid?
26
31
  end
27
32
 
28
33
  def test_valid_ua
@@ -30,8 +35,8 @@ class GoogleTest < Minitest::Test
30
35
  'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)',
31
36
  '66.249.64.141'
32
37
  )
33
- assert bot, msg: 'Googlebot detected from User-Agent'
34
- assert bot.valid?, msg: 'Valid Googlebot'
38
+ assert bot
39
+ assert bot.valid?
35
40
  end
36
41
 
37
42
  def test_valid_name
@@ -4,6 +4,7 @@ require 'minitest/autorun'
4
4
  require 'legitbot'
5
5
 
6
6
  module Legitbot
7
+ # rubocop:disable Minitest/MultipleAssertions
7
8
  module Validators
8
9
  class NoRanges
9
10
  include IpRanges
@@ -128,4 +129,5 @@ module Legitbot
128
129
  end
129
130
  end
130
131
  end
132
+ # rubocop:enable Minitest/MultipleAssertions
131
133
  end
@@ -5,10 +5,8 @@ require 'legitbot'
5
5
 
6
6
  class LegitbotTest < Minitest::Test
7
7
  def test_rules
8
- assert !Legitbot.bot('Firefox', '127.0.0.1'),
9
- msg: 'Not a bot'
10
- assert Legitbot.bot('Googlebot', '5.140.70.64'),
11
- msg: 'No reverse resolve, bot'
8
+ refute Legitbot.bot('Firefox', '127.0.0.1')
9
+ assert Legitbot.bot('Googlebot', '5.140.70.64')
12
10
 
13
11
  Legitbot.bot('Firefox', '127.0.0.1') do |_bot|
14
12
  flunk 'No bot Firefox is possible'
@@ -0,0 +1,89 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'dns_mock'
4
+ require 'json'
5
+
6
+ TEST_DNS_RECORDS = {
7
+ # Malicious
8
+ '149.210.164.47' => {
9
+ ptr: %w[malicious.spam.co]
10
+ },
11
+
12
+ # Ahrefs
13
+ 'ip-54-36-148-0.a.ahrefs.com' => {
14
+ a: %w[54.36.148.0]
15
+ },
16
+ '54.36.148.0' => {
17
+ ptr: %w[ip-54-36-148-0.a.ahrefs.com]
18
+ },
19
+
20
+ # Alexa
21
+ '52.86.176.3' => {
22
+ ptr: %w[crawl-52-86-176-3.alexa.com]
23
+ },
24
+
25
+ # Amazon
26
+ 'crawler-54-166-7-90.amazonadbot.com' => {
27
+ a: %w[54.166.7.90]
28
+ },
29
+ '54.166.7.90' => {
30
+ ptr: %w[crawler-54-166-7-90.amazonadbot.com]
31
+ },
32
+
33
+ # Apple
34
+ '17-58-98-60.applebot.apple.com' => {
35
+ a: %w[17.58.98.60]
36
+ },
37
+ '17.58.98.60' => {
38
+ ptr: %w[17-58-98-60.applebot.apple.com]
39
+ },
40
+
41
+ # Google
42
+ 'crawl-66-249-64-141.googlebot.com' => {
43
+ a: %w[66.249.64.141]
44
+ },
45
+ '66.249.64.141' => {
46
+ ptr: %w[crawl-66-249-64-141.googlebot.com]
47
+ },
48
+
49
+ # Petalbot
50
+ 'petalbot-114-119-134-10.petalsearch.com' => {
51
+ a: %w[114.119.134.10]
52
+ },
53
+ '114.119.134.10' => {
54
+ ptr: %w[petalbot-114-119-134-10.petalsearch.com]
55
+ },
56
+
57
+ # Pinterest
58
+ 'crawl-54-236-1-11.pinterest.com' => {
59
+ a: %w[54.236.1.11]
60
+ },
61
+ '54.236.1.11' => {
62
+ ptr: %w[crawl-54-236-1-11.pinterest.com]
63
+ }
64
+ }.freeze
65
+
66
+ class DnsServer
67
+ class << self
68
+ attr_accessor :mock
69
+ end
70
+
71
+ @mock = DnsMock.start_server records: TEST_DNS_RECORDS
72
+ end
73
+
74
+ module DnsServerMock
75
+ def before_all
76
+ super
77
+
78
+ Legitbot.resolver_config = {
79
+ nameserver: 'localhost',
80
+ nameserver_port: [['localhost', DnsServer.mock.port]]
81
+ }
82
+ end
83
+
84
+ def after_all
85
+ Legitbot.resolver_config = nil
86
+
87
+ super
88
+ end
89
+ end
data/test/oracle_test.rb CHANGED
@@ -7,13 +7,13 @@ class OracleTest < Minitest::Test
7
7
  def test_malicious_ip
8
8
  ip = '149.210.164.47'
9
9
  match = Legitbot::Oracle.new ip
10
- assert !match.valid?, msg: "#{ip} is not a real Oracle IP"
10
+ refute match.valid?
11
11
  end
12
12
 
13
13
  def test_valid_ip
14
14
  ip = '148.64.56.64'
15
15
  match = Legitbot::Oracle.new ip
16
- assert match.valid?, msg: "#{ip} is a valid Oracle IP"
16
+ assert match.valid?
17
17
  end
18
18
 
19
19
  def test_malicious_ua
@@ -21,8 +21,8 @@ class OracleTest < Minitest::Test
21
21
  'Mozilla/5.0 (compatible; GrapeshotCrawler/2.0; +http://www.grapeshot.co.uk/crawler.php)',
22
22
  '149.210.164.47'
23
23
  )
24
- assert bot, msg: 'Oracle detected from User-Agent'
25
- assert !bot.valid?, msg: 'Not a valid Oracle'
24
+ assert bot
25
+ refute bot.valid?
26
26
  end
27
27
 
28
28
  def test_valid_ua
@@ -30,7 +30,7 @@ class OracleTest < Minitest::Test
30
30
  'Mozilla/5.0 (compatible; GrapeshotCrawler/2.0; +http://www.grapeshot.co.uk/crawler.php)',
31
31
  '148.64.56.64'
32
32
  )
33
- assert bot, msg: 'Oracle detected from User-Agent'
34
- assert bot.valid?, msg: 'Valid Oracle'
33
+ assert bot
34
+ assert bot.valid?
35
35
  end
36
36
  end
@@ -1,19 +1,24 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'minitest/autorun'
4
+ require 'minitest/hooks/test'
5
+ require 'lib/dns_server_mock'
4
6
  require 'legitbot'
5
7
 
6
8
  class PetalbotTest < Minitest::Test
9
+ include Minitest::Hooks
10
+ include DnsServerMock
11
+
7
12
  def test_malicious_ip
8
13
  ip = '149.210.164.47'
9
14
  match = Legitbot::Petalbot.new ip
10
- assert !match.valid?, msg: "#{ip} is not a real Petalbot IP"
15
+ refute match.valid?
11
16
  end
12
17
 
13
18
  def test_valid_ip
14
- ip = '114.119.128.10'
19
+ ip = '114.119.134.10'
15
20
  match = Legitbot::Petalbot.new ip
16
- assert match.valid?, msg: "#{ip} is a valid Petalbot IP"
21
+ assert match.valid?
17
22
  end
18
23
 
19
24
  def test_malicious_ua
@@ -21,17 +26,17 @@ class PetalbotTest < Minitest::Test
21
26
  'Mozilla/5.0 (compatible;PetalBot; +https://aspiegel.com/petalbot)',
22
27
  '149.210.164.47'
23
28
  )
24
- assert bot, msg: 'Petalbot detected from User-Agent'
25
- assert !bot.valid?, msg: 'Not a valid Petalbot'
29
+ assert bot
30
+ refute bot.valid?
26
31
  end
27
32
 
28
33
  def test_valid_ua
29
34
  bot = Legitbot.bot(
30
35
  'Mozilla/5.0 (compatible;PetalBot; +https://aspiegel.com/petalbot)',
31
- '114.119.128.10'
36
+ '114.119.134.10'
32
37
  )
33
- assert bot, msg: 'Petalbot detected from User-Agent'
34
- assert bot.valid?, msg: 'Valid Petalbot'
38
+ assert bot
39
+ assert bot.valid?
35
40
  end
36
41
 
37
42
  def test_valid_name
@@ -1,19 +1,24 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'minitest/autorun'
4
+ require 'minitest/hooks/test'
5
+ require 'lib/dns_server_mock'
4
6
  require 'legitbot'
5
7
 
6
8
  class PinterestTest < Minitest::Test
9
+ include Minitest::Hooks
10
+ include DnsServerMock
11
+
7
12
  def test_malicious_ip
8
13
  ip = '149.210.164.47'
9
14
  match = Legitbot::Pinterest.new ip
10
- assert !match.valid?, msg: "#{ip} is not a real Pinterest IP"
15
+ refute match.valid?
11
16
  end
12
17
 
13
18
  def test_valid_ip
14
19
  ip = '54.236.1.11'
15
20
  match = Legitbot::Pinterest.new ip
16
- assert match.valid?, msg: "#{ip} is a valid Pinterest IP"
21
+ assert match.valid?
17
22
  end
18
23
 
19
24
  def test_malicious_ua
@@ -21,8 +26,8 @@ class PinterestTest < Minitest::Test
21
26
  'Mozilla/5.0 (compatible; Pinterestbot/1.0; +https://www.pinterest.com/bot.html)',
22
27
  '149.210.164.47'
23
28
  )
24
- assert bot, msg: 'Pinterest detected from User-Agent'
25
- assert !bot.valid?, msg: 'Not a valid Pinterest'
29
+ assert bot
30
+ refute bot.valid?
26
31
  end
27
32
 
28
33
  def test_valid_ua
@@ -30,8 +35,8 @@ class PinterestTest < Minitest::Test
30
35
  'Mozilla/5.0 (compatible; Pinterestbot/1.0; +https://www.pinterest.com/bot.html)',
31
36
  '54.236.1.11'
32
37
  )
33
- assert bot, msg: 'Pinterest detected from User-Agent'
34
- assert bot.valid?, msg: 'Valid Pinterest'
38
+ assert bot
39
+ assert bot.valid?
35
40
  end
36
41
 
37
42
  # rubocop:disable Layout/LineLength
data/test/twitter_test.rb CHANGED
@@ -7,13 +7,13 @@ class TwitterTest < Minitest::Test
7
7
  def test_malicious_ip
8
8
  ip = '149.210.164.47'
9
9
  match = Legitbot::Twitter.new ip
10
- assert !match.valid?, msg: "#{ip} is not a real Twitter IP"
10
+ refute match.valid?
11
11
  end
12
12
 
13
13
  def test_valid_ip
14
14
  ip = '199.16.156.125'
15
15
  match = Legitbot::Twitter.new ip
16
- assert match.valid?, msg: "#{ip} is a valid Twitter IP"
16
+ assert match.valid?
17
17
  end
18
18
 
19
19
  def test_malicious_ua
@@ -21,8 +21,8 @@ class TwitterTest < Minitest::Test
21
21
  'Twitterbot/1.0',
22
22
  '149.210.164.47'
23
23
  )
24
- assert bot, msg: 'Twitter detected from User-Agent'
25
- assert !bot.valid?, msg: 'Not a valid Twitter'
24
+ assert bot
25
+ refute bot.valid?
26
26
  end
27
27
 
28
28
  def test_valid_ua
@@ -30,7 +30,7 @@ class TwitterTest < Minitest::Test
30
30
  'Twitterbot/1.0',
31
31
  '199.16.156.125'
32
32
  )
33
- assert bot, msg: 'Twitter detected from User-Agent'
34
- assert bot.valid?, msg: 'Valid Twitter'
33
+ assert bot
34
+ assert bot.valid?
35
35
  end
36
36
  end
metadata CHANGED
@@ -1,35 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: legitbot
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.1
4
+ version: 1.6.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: 2022-01-01 00:00:00.000000000 Z
11
+ date: 2022-03-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: augmented_interval_tree
14
+ name: fast_interval_tree
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.1'
19
+ version: '0.2'
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 0.1.1
22
+ version: 0.2.2
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - "~>"
28
28
  - !ruby/object:Gem::Version
29
- version: '0.1'
29
+ version: '0.2'
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 0.1.1
32
+ version: 0.2.2
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: irrc
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -70,6 +70,26 @@ dependencies:
70
70
  - - ">="
71
71
  - !ruby/object:Gem::Version
72
72
  version: 0.8.0
73
+ - !ruby/object:Gem::Dependency
74
+ name: dns_mock
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: 1.5.0
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 1.5.0
83
+ type: :development
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 1.5.0
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: 1.5.0
73
93
  - !ruby/object:Gem::Dependency
74
94
  name: minitest
75
95
  requirement: !ruby/object:Gem::Requirement
@@ -90,6 +110,26 @@ dependencies:
90
110
  - - ">="
91
111
  - !ruby/object:Gem::Version
92
112
  version: 5.1.0
113
+ - !ruby/object:Gem::Dependency
114
+ name: minitest-hooks
115
+ requirement: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - "~>"
118
+ - !ruby/object:Gem::Version
119
+ version: '1.5'
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: 1.5.0
123
+ type: :development
124
+ prerelease: false
125
+ version_requirements: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - "~>"
128
+ - !ruby/object:Gem::Version
129
+ version: '1.5'
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: 1.5.0
93
133
  - !ruby/object:Gem::Dependency
94
134
  name: rake
95
135
  requirement: !ruby/object:Gem::Requirement
@@ -130,6 +170,26 @@ dependencies:
130
170
  - - ">="
131
171
  - !ruby/object:Gem::Version
132
172
  version: 1.24.0
173
+ - !ruby/object:Gem::Dependency
174
+ name: rubocop-minitest
175
+ requirement: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - "~>"
178
+ - !ruby/object:Gem::Version
179
+ version: 0.17.0
180
+ - - ">="
181
+ - !ruby/object:Gem::Version
182
+ version: 0.17.0
183
+ type: :development
184
+ prerelease: false
185
+ version_requirements: !ruby/object:Gem::Requirement
186
+ requirements:
187
+ - - "~>"
188
+ - !ruby/object:Gem::Version
189
+ version: 0.17.0
190
+ - - ">="
191
+ - !ruby/object:Gem::Version
192
+ version: 0.17.0
133
193
  description: Does Web request come from a real search engine or from an impersonating
134
194
  agent?
135
195
  email: self@alaz.me
@@ -168,6 +228,10 @@ files:
168
228
  - lib/legitbot/validators/ip_ranges.rb
169
229
  - lib/legitbot/version.rb
170
230
  - lib/legitbot/yandex.rb
231
+ - rakelib/bump.rake
232
+ - rakelib/bundler.rake
233
+ - rakelib/console.rake
234
+ - rakelib/test.rake
171
235
  - test/ahrefs_test.rb
172
236
  - test/alexa_test.rb
173
237
  - test/amazon_test.rb
@@ -178,6 +242,7 @@ files:
178
242
  - test/legitbot/validators/domains_test.rb
179
243
  - test/legitbot/validators/ip_ranges_test.rb
180
244
  - test/legitbot_test.rb
245
+ - test/lib/dns_server_mock.rb
181
246
  - test/oracle_test.rb
182
247
  - test/petalbot_test.rb
183
248
  - test/pinterest_test.rb
@@ -196,29 +261,29 @@ required_ruby_version: !ruby/object:Gem::Requirement
196
261
  requirements:
197
262
  - - ">="
198
263
  - !ruby/object:Gem::Version
199
- version: 2.5.0
264
+ version: 2.6.0
200
265
  required_rubygems_version: !ruby/object:Gem::Requirement
201
266
  requirements:
202
267
  - - ">="
203
268
  - !ruby/object:Gem::Version
204
269
  version: '0'
205
270
  requirements: []
206
- rubygems_version: 3.1.6
271
+ rubygems_version: 3.2.32
207
272
  signing_key:
208
273
  specification_version: 4
209
274
  summary: 'Validate requests from Web crawlers: impersonating or not?'
210
275
  test_files:
211
- - test/legitbot_test.rb
212
- - test/legitbot/validators/domains_test.rb
213
- - test/legitbot/validators/ip_ranges_test.rb
214
- - test/pinterest_test.rb
215
- - test/alexa_test.rb
216
276
  - test/ahrefs_test.rb
217
- - test/apple_test.rb
218
- - test/oracle_test.rb
219
- - test/google_test.rb
277
+ - test/alexa_test.rb
220
278
  - test/amazon_test.rb
221
- - test/petalbot_test.rb
279
+ - test/apple_test.rb
222
280
  - test/botmatch_test.rb
223
281
  - test/facebook_test.rb
282
+ - test/google_test.rb
283
+ - test/legitbot/validators/domains_test.rb
284
+ - test/legitbot/validators/ip_ranges_test.rb
285
+ - test/legitbot_test.rb
286
+ - test/oracle_test.rb
287
+ - test/petalbot_test.rb
288
+ - test/pinterest_test.rb
224
289
  - test/twitter_test.rb