legitbot 0.4.0 → 0.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: dfc1b3322ff4f85957dabf6790d535f27f99feed47bdb4ff1bba65f6242d31a2
4
- data.tar.gz: 32e842cc3d297b3afda0ef9b265121a11c363857a726819f886b441e6c53a53c
3
+ metadata.gz: 86eb19b33835daaf208e4603d289ceb47c7ab68700a3bd08de99f60792d49798
4
+ data.tar.gz: 620efdf47110dfd96c07e1ffe148666b65d8121c639330f20b0b27f26b1a91d0
5
5
  SHA512:
6
- metadata.gz: 3654c256da13b37045425457a96ac9a8b41c5ae5c0cce49b7898170e2d23a66a5cb7e612503dc1d88dc2e1240dcb07c9ccc5d5aa8439f280144abe969dc0ae7b
7
- data.tar.gz: 554e120d1001a71f455aedcd4d30397b22130279a6f99f8e022d40ade50427590dd52e982820399852ec52fbb2c96b7ea1461f82d8e88cb89acc053097136b32
6
+ metadata.gz: 53fe5ac9f2fbcdbd229fe8dc32b2dade2671ecdb1b03d61a17c0d49139c0137790dbb97735987d4a9957cb0ae0563e6893ed8292c98dadec309ebc88f2013bfe
7
+ data.tar.gz: e1adf66298503e14032b13f8f16fe86fe5ed3a8fe1a3021bb165de7b2037a7051ba49ddd4ddc5aa396a34a627ef42e3c2239de1cb220eb8f07171718a0207a99
@@ -1,5 +1,6 @@
1
1
  AllCops:
2
2
  Include:
3
+ - '**/*.gemspec'
3
4
  - '**/Gemfile'
4
5
  - '**/Rakefile'
5
6
  - 'lib/**/*.rb'
data/README.md CHANGED
@@ -51,6 +51,7 @@ end
51
51
  * [Facebook crawler](https://developers.facebook.com/docs/sharing/webmasters/crawler)
52
52
  * [Google crawlers](https://support.google.com/webmasters/answer/1061943)
53
53
  * [Pinterest](https://help.pinterest.com/en/articles/about-pinterest-crawler-0)
54
+ * [Twitterbot](https://developer.twitter.com/en/docs/tweets/optimize-with-cards/guides/getting-started), the list of IPs is in the [Troubleshooting page](https://developer.twitter.com/en/docs/tweets/optimize-with-cards/guides/troubleshooting-cards)
54
55
  * [Yandex robots](https://yandex.com/support/webmaster/robot-workings/check-yandex-robots.xml)
55
56
 
56
57
  ## License
@@ -1,28 +1,29 @@
1
- # encoding: utf-8
2
- $LOAD_PATH.push File.expand_path("../lib", __FILE__)
3
- require "legitbot/version"
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.push File.expand_path('lib', __dir__)
4
+ require 'legitbot/version'
4
5
 
5
6
  Gem::Specification.new do |spec|
6
7
  spec.name = 'legitbot'
7
8
  spec.version = Legitbot::VERSION
8
9
  spec.license = 'Apache-2.0'
9
10
 
10
- spec.author = "Alexander Azarov"
11
- spec.email = "self@alaz.me"
12
- spec.homepage = "https://github.com/alaz/legitbot"
13
- spec.summary = %q{Validate requests from Web crawlers: impersonating or not?}
14
- spec.description = "A library to make sure a Web request has been "\
15
- "made by a real search engine, not a malicious agent"
11
+ spec.author = 'Alexander Azarov'
12
+ spec.email = 'self@alaz.me'
13
+ spec.homepage = 'https://github.com/alaz/legitbot'
14
+ spec.summary = 'Validate requests from Web crawlers: impersonating or not?'
15
+ spec.description = 'A library to make sure a Web request has been '\
16
+ 'made by a real search engine, not a malicious agent'
16
17
 
17
18
  spec.required_ruby_version = '>= 2.3.0'
18
- spec.add_dependency "irrc", ">= 0.2.1"
19
- spec.add_dependency "augmented_interval_tree", ">= 0.1.1"
20
- spec.add_development_dependency "bump", '>= 0.8.0'
21
- spec.add_development_dependency "rake", '>= 12.3.0'
22
- spec.add_development_dependency "rubocop", '>= 0.74.0'
23
- spec.add_development_dependency "minitest", '>= 5.1.0'
19
+ spec.add_dependency 'augmented_interval_tree', '~> 0.1', '>= 0.1.1'
20
+ spec.add_dependency 'irrc', '~> 0.2', '>= 0.2.1'
21
+ spec.add_development_dependency 'bump', '~> 0.8', '>= 0.8.0'
22
+ spec.add_development_dependency 'minitest', '~> 5.1', '>= 5.1.0'
23
+ spec.add_development_dependency 'rake', '~> 12.3', '>= 12.3.0'
24
+ spec.add_development_dependency 'rubocop', '~> 0.74', '>= 0.74.0'
24
25
 
25
- spec.files = `git ls-files`.split($/)
26
- spec.rdoc_options = ["--charset=UTF-8"]
27
- spec.test_files = Dir.glob("test/**/*")
26
+ spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
27
+ spec.rdoc_options = ['--charset=UTF-8']
28
+ spec.test_files = Dir.glob('test/**/*')
28
29
  end
@@ -11,4 +11,5 @@ require_relative 'legitbot/duckduckgo'
11
11
  require_relative 'legitbot/facebook'
12
12
  require_relative 'legitbot/google'
13
13
  require_relative 'legitbot/pinterest'
14
+ require_relative 'legitbot/twitter'
14
15
  require_relative 'legitbot/yandex'
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legitbot # :nodoc:
4
+ # https://developer.twitter.com/en/docs/tweets/optimize-with-cards/guides/getting-started
5
+ # https://developer.twitter.com/en/docs/tweets/optimize-with-cards/guides/troubleshooting-cards
6
+ class Twitter < BotMatch
7
+ ip_ranges %w[
8
+ 199.16.156.0/22
9
+ 199.59.148.0/22
10
+ ]
11
+ end
12
+
13
+ rule Legitbot::Twitter, %w[Twitterbot]
14
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Legitbot
4
- VERSION = '0.4.0'
4
+ VERSION = '0.4.1'
5
5
  end
@@ -55,7 +55,7 @@ class FacebookTest < Minitest::Test
55
55
  '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
56
  '92.243.181.7'
57
57
  ) do |bot|
58
- assert_equal :facebook, bot.detected_as
58
+ assert %i[facebook twitter].include?(bot.detected_as)
59
59
  assert bot.fake?, msg: 'fake Facebook'
60
60
  end
61
61
  end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'minitest/autorun'
4
+ require 'legitbot'
5
+
6
+ class TwitterTest < Minitest::Test
7
+ def test_malicious_ip
8
+ ip = '149.210.164.47'
9
+ match = Legitbot::Twitter.new ip
10
+ assert !match.valid?, msg: "#{ip} is not a real Twitter IP"
11
+ end
12
+
13
+ def test_valid_ip
14
+ ip = '199.16.156.125'
15
+ match = Legitbot::Twitter.new ip
16
+ assert match.valid?, msg: "#{ip} is a valid Twitter IP"
17
+ end
18
+
19
+ def test_malicious_ua
20
+ bot = Legitbot.bot(
21
+ 'Twitterbot/1.0',
22
+ '149.210.164.47'
23
+ )
24
+ assert bot, msg: 'Twitter detected from User-Agent'
25
+ assert !bot.valid?, msg: 'Not a valid Twitter'
26
+ end
27
+
28
+ def test_valid_ua
29
+ bot = Legitbot.bot(
30
+ 'Twitterbot/1.0',
31
+ '199.16.156.125'
32
+ )
33
+ assert bot, msg: 'Twitter detected from User-Agent'
34
+ assert bot.valid?, msg: 'Valid Twitter'
35
+ end
36
+ end
metadata CHANGED
@@ -1,47 +1,62 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: legitbot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.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: 2019-09-18 00:00:00.000000000 Z
11
+ date: 2019-10-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: irrc
14
+ name: augmented_interval_tree
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.1'
17
20
  - - ">="
18
21
  - !ruby/object:Gem::Version
19
- version: 0.2.1
22
+ version: 0.1.1
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '0.1'
24
30
  - - ">="
25
31
  - !ruby/object:Gem::Version
26
- version: 0.2.1
32
+ version: 0.1.1
27
33
  - !ruby/object:Gem::Dependency
28
- name: augmented_interval_tree
34
+ name: irrc
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '0.2'
31
40
  - - ">="
32
41
  - !ruby/object:Gem::Version
33
- version: 0.1.1
42
+ version: 0.2.1
34
43
  type: :runtime
35
44
  prerelease: false
36
45
  version_requirements: !ruby/object:Gem::Requirement
37
46
  requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '0.2'
38
50
  - - ">="
39
51
  - !ruby/object:Gem::Version
40
- version: 0.1.1
52
+ version: 0.2.1
41
53
  - !ruby/object:Gem::Dependency
42
54
  name: bump
43
55
  requirement: !ruby/object:Gem::Requirement
44
56
  requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '0.8'
45
60
  - - ">="
46
61
  - !ruby/object:Gem::Version
47
62
  version: 0.8.0
@@ -49,51 +64,72 @@ dependencies:
49
64
  prerelease: false
50
65
  version_requirements: !ruby/object:Gem::Requirement
51
66
  requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '0.8'
52
70
  - - ">="
53
71
  - !ruby/object:Gem::Version
54
72
  version: 0.8.0
55
73
  - !ruby/object:Gem::Dependency
56
- name: rake
74
+ name: minitest
57
75
  requirement: !ruby/object:Gem::Requirement
58
76
  requirements:
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: '5.1'
59
80
  - - ">="
60
81
  - !ruby/object:Gem::Version
61
- version: 12.3.0
82
+ version: 5.1.0
62
83
  type: :development
63
84
  prerelease: false
64
85
  version_requirements: !ruby/object:Gem::Requirement
65
86
  requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '5.1'
66
90
  - - ">="
67
91
  - !ruby/object:Gem::Version
68
- version: 12.3.0
92
+ version: 5.1.0
69
93
  - !ruby/object:Gem::Dependency
70
- name: rubocop
94
+ name: rake
71
95
  requirement: !ruby/object:Gem::Requirement
72
96
  requirements:
97
+ - - "~>"
98
+ - !ruby/object:Gem::Version
99
+ version: '12.3'
73
100
  - - ">="
74
101
  - !ruby/object:Gem::Version
75
- version: 0.74.0
102
+ version: 12.3.0
76
103
  type: :development
77
104
  prerelease: false
78
105
  version_requirements: !ruby/object:Gem::Requirement
79
106
  requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '12.3'
80
110
  - - ">="
81
111
  - !ruby/object:Gem::Version
82
- version: 0.74.0
112
+ version: 12.3.0
83
113
  - !ruby/object:Gem::Dependency
84
- name: minitest
114
+ name: rubocop
85
115
  requirement: !ruby/object:Gem::Requirement
86
116
  requirements:
117
+ - - "~>"
118
+ - !ruby/object:Gem::Version
119
+ version: '0.74'
87
120
  - - ">="
88
121
  - !ruby/object:Gem::Version
89
- version: 5.1.0
122
+ version: 0.74.0
90
123
  type: :development
91
124
  prerelease: false
92
125
  version_requirements: !ruby/object:Gem::Requirement
93
126
  requirements:
127
+ - - "~>"
128
+ - !ruby/object:Gem::Version
129
+ version: '0.74'
94
130
  - - ">="
95
131
  - !ruby/object:Gem::Version
96
- version: 5.1.0
132
+ version: 0.74.0
97
133
  description: A library to make sure a Web request has been made by a real search engine,
98
134
  not a malicious agent
99
135
  email: self@alaz.me
@@ -121,6 +157,7 @@ files:
121
157
  - lib/legitbot/google.rb
122
158
  - lib/legitbot/legitbot.rb
123
159
  - lib/legitbot/pinterest.rb
160
+ - lib/legitbot/twitter.rb
124
161
  - lib/legitbot/validators/domains.rb
125
162
  - lib/legitbot/validators/ip_ranges.rb
126
163
  - lib/legitbot/version.rb
@@ -135,6 +172,7 @@ files:
135
172
  - test/legitbot/validators/ip_ranges_test.rb
136
173
  - test/legitbot_test.rb
137
174
  - test/pinterest_test.rb
175
+ - test/twitter_test.rb
138
176
  homepage: https://github.com/alaz/legitbot
139
177
  licenses:
140
178
  - Apache-2.0
@@ -171,3 +209,4 @@ test_files:
171
209
  - test/google_test.rb
172
210
  - test/botmatch_test.rb
173
211
  - test/facebook_test.rb
212
+ - test/twitter_test.rb