lib/legitbot/facebook.rb in legitbot-0.3.2 vs lib/legitbot/facebook.rb in legitbot-0.4.0
- old
+ new
@@ -1,48 +1,22 @@
-require 'ipaddr'
+# frozen_string_literal: true
+
require 'irrc'
-require 'interval_tree'
-module Legitbot
+module Legitbot # :nodoc:
# https://developers.facebook.com/docs/sharing/webmasters/crawler
-
class Facebook < BotMatch
AS = 'AS32934'
- def valid?
- ip = IPAddr.new(@ip)
- Facebook.valid_ips[ip.ipv4? ? :ipv4 : :ipv6].search(ip.to_i).size > 0
- end
-
- @mutex = Mutex.new
-
- def self.valid_ips
- @mutex.synchronize { @ips ||= load_ips }
- end
-
- def self.reload!
- @mutex.synchronize { @ips = load_ips }
- end
-
- def self.load_ips
- whois.map do |(family, records)|
- ranges = records.map do |cidr|
- range = IPAddr.new(cidr).to_range
- (range.begin.to_i..range.end.to_i)
- end
- [family, IntervalTree::Tree.new(ranges)]
- end.to_h
- end
-
- def self.whois
+ ip_ranges do
client = Irrc::Client.new
client.query :radb, AS
results = client.perform
- %i(ipv4 ipv6).map do |family|
- [family, results[AS][family][AS]]
- end.to_h
+ %i[ipv4 ipv6].map do |family|
+ results[AS][family][AS]
+ end.flatten
end
end
- rule Legitbot::Facebook, %w(Facebot facebookexternalhit/1.1)
+ rule Legitbot::Facebook, %w[Facebot facebookexternalhit/1.1]
end