legitbot 1.4.5 → 1.5.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: 3eb1ad3043aa5d9c87f6417fa287121cc5ec37fe1fcb6b043f9e6ee9a88ec771
4
- data.tar.gz: 01764d6f90fd4f72751d18ea17d4f6921103ba2e050fe8f179d13d889d920347
3
+ metadata.gz: 8d80bbf2deb17b90d29f6d19b5405b63e52911e5fadf05a2b6c10a7a8772afa6
4
+ data.tar.gz: fcac15d55a5f59d8076eeab89b67c07466c15f646b9205d8fdc49b29f55084b4
5
5
  SHA512:
6
- metadata.gz: '0269f1dd308855bb4dd15e82601dba739b2f77bfb2777d802f4b813b0a73d31f052e3f75cbc26812589a3816aefe6d49c9b9ab20b59b229a346c4d8da27b46a5'
7
- data.tar.gz: 1e2f8e9e5e7ae7812df3016e6f0c6e45af9f4b60d67512f9678be1437ccbc8dcf55ae1fbeb404274d03b80c32e6bc8e7678b22654c089900b11f2681fc090b73
6
+ metadata.gz: d0e367f8e02357527a46112cfd9acdc3448fc99320d6c0a117af81b8bd17a58c997a678747f1bc137fe7772b2c2e80fbf1fb4bb39cbdf52d6e53a4f4ce7dc1b7
7
+ data.tar.gz: '019f70211891e34b1290565e006ca8e58b25db9303db94a274ca8697871420f22983642f125e38faab02a4df9984bd097e0e61ee88adf0ce70940334d70232c4'
data/README.md CHANGED
@@ -39,10 +39,18 @@ Rack::Attack.blocklist 'fake search engines' do |request|
39
39
  end
40
40
  ```
41
41
 
42
+ ## Versioning
43
+
44
+ [Semantic versioning](https://semver.org/) with the following clarifications:
45
+
46
+ * MINOR version is incremented when support for new bots is added.
47
+ * PATCH version is incremented when validation logic for a bot changes (IP list updated, for example).
48
+
42
49
  ## Supported
43
50
 
44
51
  * [Ahrefs](https://ahrefs.com/robot)
45
52
  * [Alexa](https://support.alexa.com/hc/en-us/articles/360046707834-What-are-the-IP-addresses-for-Alexa-s-Certify-and-Site-Audit-crawlers-)
53
+ * [Amazon AdBot](https://adbot.amazon.com/index.html)
46
54
  * [Applebot](https://support.apple.com/en-us/HT204683)
47
55
  * [Baidu spider](http://help.baidu.com/question?prod_en=master&class=498&id=1000973)
48
56
  * [Bingbot](https://blogs.bing.com/webmaster/2012/08/31/how-to-verify-that-bingbot-is-bingbot/)
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legitbot # :nodoc:
4
+ # https://adbot.amazon.com/index.html
5
+ class Amazon < BotMatch
6
+ domains 'amazonadbot.com.'
7
+ end
8
+
9
+ rule Legitbot::Amazon, %w[AmazonAdBot]
10
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Legitbot
4
- VERSION = '1.4.5'
4
+ VERSION = '1.5.0'
5
5
  end
data/lib/legitbot.rb CHANGED
@@ -5,6 +5,7 @@ require_relative 'legitbot/botmatch'
5
5
 
6
6
  require_relative 'legitbot/ahrefs'
7
7
  require_relative 'legitbot/alexa'
8
+ require_relative 'legitbot/amazon'
8
9
  require_relative 'legitbot/apple'
9
10
  require_relative 'legitbot/baidu'
10
11
  require_relative 'legitbot/bing'
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'minitest/autorun'
4
+ require 'legitbot'
5
+
6
+ class AmazonTest < Minitest::Test
7
+ def test_malicious_ip
8
+ ip = '149.210.164.47'
9
+ match = Legitbot::Amazon.new ip
10
+ assert !match.valid?, msg: "#{ip} is not a real AmazonAdBot IP"
11
+ end
12
+
13
+ def test_valid_ip
14
+ ip = '54.166.7.90'
15
+ match = Legitbot::Amazon.new ip
16
+ assert match.valid?, msg: "#{ip} is a valid AmazonAdBot IP"
17
+ end
18
+
19
+ def test_malicious_ua
20
+ bot = Legitbot.bot(
21
+ 'Mozilla/5.0 (compatible; AmazonAdBot/1.0; +https://adbot.amazon.com)',
22
+ '149.210.164.47'
23
+ )
24
+ assert bot, msg: 'AmazonAdBot detected from User-Agent'
25
+ assert !bot.valid?, msg: 'Not a valid AmazonAdBot'
26
+ end
27
+
28
+ def test_valid_ua
29
+ bot = Legitbot.bot(
30
+ 'Mozilla/5.0 (compatible; AmazonAdBot/1.0; +https://adbot.amazon.com)',
31
+ '54.166.7.90'
32
+ )
33
+ assert bot, msg: 'AmazonAdBot detected from User-Agent'
34
+ assert bot.valid?, msg: 'Valid AmazonAdBot'
35
+ end
36
+
37
+ def test_valid_name
38
+ bot = Legitbot.bot(
39
+ 'Mozilla/5.0 (compatible; AmazonAdBot/1.0; +https://adbot.amazon.com)',
40
+ '54.166.7.90'
41
+ )
42
+ assert_equal :amazon, bot.detected_as
43
+ end
44
+
45
+ def test_fake_name
46
+ bot = Legitbot.bot(
47
+ 'Mozilla/5.0 (compatible; AmazonAdBot/1.0; +https://adbot.amazon.com)',
48
+ '81.1.172.108'
49
+ )
50
+ assert_equal :amazon, bot.detected_as
51
+ end
52
+ end
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.4.5
4
+ version: 1.5.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: 2021-10-01 00:00:00.000000000 Z
11
+ date: 2021-11-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: augmented_interval_tree
@@ -150,6 +150,7 @@ files:
150
150
  - lib/legitbot.rb
151
151
  - lib/legitbot/ahrefs.rb
152
152
  - lib/legitbot/alexa.rb
153
+ - lib/legitbot/amazon.rb
153
154
  - lib/legitbot/apple.rb
154
155
  - lib/legitbot/baidu.rb
155
156
  - lib/legitbot/bing.rb
@@ -169,6 +170,7 @@ files:
169
170
  - lib/legitbot/yandex.rb
170
171
  - test/ahrefs_test.rb
171
172
  - test/alexa_test.rb
173
+ - test/amazon_test.rb
172
174
  - test/apple_test.rb
173
175
  - test/botmatch_test.rb
174
176
  - test/facebook_test.rb
@@ -214,6 +216,7 @@ test_files:
214
216
  - test/apple_test.rb
215
217
  - test/oracle_test.rb
216
218
  - test/google_test.rb
219
+ - test/amazon_test.rb
217
220
  - test/petalbot_test.rb
218
221
  - test/botmatch_test.rb
219
222
  - test/facebook_test.rb