legitbot 1.1.0 → 1.4.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0ad027c85951667c22f02a0fde2347e5d1503493b07f4f041ab1f0965eae096b
4
- data.tar.gz: a967d17674592fb06cefbebf8abe7fce9b72e49281f116ab337d0f888d46d326
3
+ metadata.gz: 88b7c118fb39080f7bbed1839c41173f67501f816ccc2409378a0c974e353633
4
+ data.tar.gz: cd97cd5656347126b11999d38c450fd35ce88a523186c01d4a8417aa7bf9edd6
5
5
  SHA512:
6
- metadata.gz: be5c129e2d5e4f381a056744daa29907da3bb42849ff2ff33b7b45525d1175ad465e01f6f3e1b523b5163608ad747edbebea1c4bd3e355d927b3102ad3dca016
7
- data.tar.gz: 9562a862188263637923035e0cc8b533f1f4153bc863c07a1b01538f2487c1052b0c68a4ca00dcf4085eb6a031c2cc92d264985fd429ecf47f8aadd46801eca0
6
+ metadata.gz: 45cebed5ce8a638612496ca824eb3706e7f198ea4b1a0e394a62eb41b2069d0a28ae44d226897373ef7747dfe44926263dbfc1e6ea2620908c2d341d70f75e09
7
+ data.tar.gz: d008044692ddfb2dc31b03d3d91eb3c6de3d79f0888e093432a27233d4a8c944e0bc7e951857c8a6663670047f0518565a8f128375ea658ab99c8ba3f1a01723
@@ -1,6 +1,10 @@
1
1
  name: build
2
2
 
3
- on: [pull_request, push]
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.6 ]
44
+ ruby: [ 2.7 ]
41
45
 
42
46
  steps:
43
47
  - uses: actions/checkout@v2
data/.rubocop.yml CHANGED
@@ -1,3 +1,10 @@
1
1
  AllCops:
2
2
  CacheRootDirectory: 'vendor'
3
3
  NewCops: enable
4
+ SuggestExtensions: false
5
+
6
+ Gemspec/RequiredRubyVersion:
7
+ Enabled: false
8
+
9
+ Naming/MemoizedInstanceVariableName:
10
+ Enabled: false
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.4
1
+ 2.7.3
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Legitbot ![](https://github.com/alaz/legitbot/workflows/build/badge.svg) [![Gem Version](https://badge.fury.io/rb/legitbot.svg)](https://badge.fury.io/rb/legitbot)
1
+ # Legitbot ![](https://github.com/alaz/legitbot/workflows/build/badge.svg) ![](https://badge.fury.io/rb/legitbot.svg)
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.4.0'
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', '~> 12.3', '>= 12.3.0'
23
- spec.add_development_dependency 'rubocop', '~> 0.90', '< 0.91'
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']
@@ -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
@@ -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
@@ -40,7 +40,7 @@ module Legitbot
40
40
 
41
41
  obj = IPAddr.new(ip)
42
42
  ranges = valid_ips[obj.ipv4? ? :ipv4 : :ipv6].search(obj.to_i)
43
- !ranges.empty?
43
+ !ranges.nil? && !ranges.empty?
44
44
  end
45
45
 
46
46
  def valid_ips
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Legitbot
4
- VERSION = '1.1.0'
4
+ VERSION = '1.4.1'
5
5
  end
@@ -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
@@ -34,7 +34,7 @@ class PinterestTest < Minitest::Test
34
34
  assert bot.valid?, msg: 'Valid Pinterest'
35
35
  end
36
36
 
37
- # rubocop:disable Metrics/LineLength
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 Metrics/LineLength
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.0
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: 2020-09-12 00:00:00.000000000 Z
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: '12.3'
99
+ version: '13.0'
100
100
  - - ">="
101
101
  - !ruby/object:Gem::Version
102
- version: 12.3.0
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: '12.3'
109
+ version: '13.0'
110
110
  - - ">="
111
111
  - !ruby/object:Gem::Version
112
- version: 12.3.0
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: '0.90'
120
- - - "<"
119
+ version: 1.15.0
120
+ - - ">="
121
121
  - !ruby/object:Gem::Version
122
- version: '0.91'
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: '0.90'
130
- - - "<"
129
+ version: 1.15.0
130
+ - - ">="
131
131
  - !ruby/object:Gem::Version
132
- version: '0.91'
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.4.0
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.2
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