trabajo-afectivo/lib/pseudonymisation.rb
2022-01-01 14:38:12 +01:00

45 lines
1 KiB
Ruby

# Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
class Pseudonymisation
def self.of_hash(source)
return if source.blank?
source.transform_values do |value|
of_value(value.to_s)
end
end
def self.of_value(source)
of_email_address(source)
rescue
of_string(source)
end
def self.of_email_address(source)
email_address = Mail::AddressList.new(source).addresses.first
"#{of_string(email_address.local)}@#{of_domain(email_address.domain)}"
rescue
raise ArgumentError
end
def self.of_domain(source)
domain_parts = source.split('.')
# e.g. localhost
return of_string(source) if domain_parts.size == 1
tld = domain_parts[-1]
other = domain_parts[0..-2].join('.')
"#{of_string(other)}.#{tld}"
end
def self.of_string(source)
return '*' if source.to_s.length <= 1
return "#{source.first}*#{source.last}" if source.exclude?(' ')
source.split.map do |sub_string|
of_string(sub_string)
end.join(' ')
end
end