21
1
Fork 0
mirror of https://github.com/Evolix/chexpire.git synced 2024-04-30 07:50:49 +02:00
chexpire/app/services/whois/parser/afnic.rb

63 lines
1.7 KiB
Ruby
Raw Normal View History

# Copyright (C) 2018 Colin Darie <colin@darie.eu>, 2018 Evolix <info@evolix.fr>
# License: GNU AGPL-3+ (see full text in LICENSE file)
2018-05-30 18:15:20 +02:00
module Whois
module Parser
2018-06-05 16:42:04 +02:00
class AFNIC < Base
2019-02-28 22:33:33 +01:00
# https://www.afnic.fr
# Rate limiting : 7200 requests per 24h
# cf. https://www.afnic.fr/fr/ressources/documents-de-reference/documents-techniques/documents-techniques-supplementaires-1.html
2018-06-05 16:42:04 +02:00
SUPPORTED_TLD = %w[
.fr
.re
.tf
.yt
.pm
.wf
].freeze
2018-05-30 18:15:20 +02:00
COMMENT_REGEX = /^%+ +(?<text>.+)$/
FIELD_REGEX = /^(?<name>[^:]+)\s*:\s+(?<value>.+)$/
2018-05-30 12:04:07 +02:00
2018-05-30 18:15:20 +02:00
def self.supports?(domain)
SUPPORTED_TLD.include?(tld(domain))
end
2018-05-30 12:04:07 +02:00
2018-05-30 18:15:20 +02:00
protected
2018-05-30 12:04:07 +02:00
2018-05-30 18:15:20 +02:00
def do_parse
raise_not_found if comment_include?("No entries found")
2018-05-30 12:04:07 +02:00
2018-05-30 18:15:20 +02:00
set_date_format
2018-05-30 12:04:07 +02:00
2018-05-30 18:15:20 +02:00
extract_values
end
2018-05-30 12:04:07 +02:00
2018-05-30 18:15:20 +02:00
private
2018-05-30 12:04:07 +02:00
2018-05-30 18:15:20 +02:00
def extract_values
domain_index = get_field!("domain", value: domain).index
2018-05-30 12:04:07 +02:00
2018-05-30 18:15:20 +02:00
created_date = get_value!("created", after: domain_index)
response.created_at = parse_date(created_date)
2018-05-30 12:04:07 +02:00
2018-05-30 18:15:20 +02:00
expire_date = get_value!("Expiry Date", after: domain_index)
response.expire_at = parse_date(expire_date)
# Sometimes there is no "last-update" field, so we use the creation date
updated_date = get_value("last-update", after: domain_index).presence || created_date
2018-05-30 18:15:20 +02:00
response.updated_at = parse_date(updated_date)
end
def parse_date(str)
super "#{str} UTC"
end
2018-05-30 16:48:25 +02:00
2018-05-30 18:15:20 +02:00
def set_date_format
afnic_format = get_field!("complete date format").value
2018-05-30 12:04:07 +02:00
2018-05-30 18:15:20 +02:00
@date_format = "%d/%m/%Y %Z" if afnic_format == "DD/MM/YYYY"
end
2018-05-30 12:04:07 +02:00
end
end
end