dyndnsd/lib/dyndnsd/helper.rb

63 lines
1.7 KiB
Ruby
Raw Normal View History

2020-03-06 21:33:29 +01:00
# frozen_string_literal: true
2018-02-03 21:40:44 +01:00
require 'ipaddr'
module Dyndnsd
class Helper
2020-02-28 15:13:28 +01:00
# @param hostname [String]
# @param domain [String]
# @return [Boolean]
2018-02-23 12:54:43 +01:00
def self.fqdn_valid?(hostname, domain)
2018-02-03 21:40:44 +01:00
return false if hostname.length < domain.length + 2
2018-02-23 12:54:43 +01:00
return false if !hostname.end_with?(domain)
2018-02-03 21:40:44 +01:00
name = hostname.chomp(domain)
2018-02-23 12:54:43 +01:00
return false if !name.match(/^[a-zA-Z0-9_-]+\.$/)
2018-02-03 21:40:44 +01:00
true
end
2020-02-28 15:13:28 +01:00
# @param ip [String]
# @return [Boolean]
2018-02-23 12:54:43 +01:00
def self.ip_valid?(ip)
IPAddr.new(ip)
2018-03-26 20:56:53 +02:00
true
2018-02-23 12:54:43 +01:00
rescue ArgumentError
2018-03-26 20:56:53 +02:00
false
2018-02-03 21:40:44 +01:00
end
2020-02-28 15:13:28 +01:00
# @param username [String]
# @param password [String]
# @param users [Hash]
# @return [Boolean]
def self.user_allowed?(username, password, users)
(users.key? username) && (users[username]['password'] == password)
end
2020-02-28 15:13:28 +01:00
# @param hostname [String]
# @param myips [Array]
# @param hosts [Hash]
# @return [Boolean]
def self.changed?(hostname, myips, hosts)
# myips order is always deterministic
((!hosts.include? hostname) || (hosts[hostname] != myips)) && !myips.empty?
end
2020-02-28 15:13:28 +01:00
# @param operation [String]
# @param block [Proc]
# @return [void]
def self.span(operation, &block)
tracer = OpenTelemetry.tracer_provider.tracer(Dyndnsd.name, Dyndnsd::VERSION)
tracer.in_span(
operation,
attributes: {'component' => 'dyndnsd'},
kind: :server
) do |span|
Dyndnsd.logger.debug "Creating span ID #{span.context.hex_span_id} for trace ID #{span.context.hex_trace_id}"
block.call(span)
rescue StandardError => e
span.record_exception(e)
2020-10-30 23:54:55 +01:00
raise e
end
end
2018-02-03 21:40:44 +01:00
end
end