Method: JSONSchemer::Format::Hostname#valid_hostname?

Defined in:
lib/json_schemer/format/hostname.rb

#valid_hostname?(data) ⇒ Boolean

Returns:

  • (Boolean)


48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/json_schemer/format/hostname.rb', line 48

def valid_hostname?(data)
  hostname_size = 0
  data.split(LABEL_SEPARATOR_REGEX, -1).map do |label|
    a_label = SimpleIDN.to_ascii(label)
    return false if a_label.size > MAX_A_LABEL_SIZE
    hostname_size += a_label.size + 1 # include separator
    return false if hostname_size > MAX_HOSTNAME_SIZE
    u_label = SimpleIDN.to_unicode(a_label)
    # https://datatracker.ietf.org/doc/html/rfc5891#section-4.2.3.1
    return false if u_label.slice(2, 2) == '--'
    return false if ARABIC_INDIC_DIGITS_REGEX.match?(u_label) && ARABIC_EXTENDED_DIGITS_REGEX.match?(u_label)
    u_label.gsub!(CONTEXT_REGEX, 'ok')
    u_label.gsub!(KATAKANA_MIDDLE_DOT_REGEX, 'ok') if KATAKANA_MIDDLE_DOT_CONTEXT_REGEX.match?(u_label)
    u_label
  end.join('.').match?(HOSTNAME_REGEX)
rescue SimpleIDN::ConversionError
  false
end