Module: Piiguard

Defined in:
lib/piiguard.rb,
lib/piiguard/railtie.rb,
lib/piiguard/version.rb,
lib/piiguard/masked_logger.rb

Defined Under Namespace

Classes: MaskedLogger, Railtie

Constant Summary collapse

EMAIL_REGEX =
/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/i
PHONE_REGEX =
/\b\d{10}\b/
VERSION =
"0.1.0"

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.configObject

Returns the value of attribute config.



13
14
15
# File 'lib/piiguard.rb', line 13

def config
  @config
end

.custom_filtersObject

Returns the value of attribute custom_filters.



13
14
15
# File 'lib/piiguard.rb', line 13

def custom_filters
  @custom_filters
end

.enabledObject

Returns the value of attribute enabled.



13
14
15
# File 'lib/piiguard.rb', line 13

def enabled
  @enabled
end

Class Method Details

.configure {|config| ... } ⇒ Object

Yields:



22
23
24
25
26
27
28
# File 'lib/piiguard.rb', line 22

def self.configure
  self.config ||= OpenStruct.new(
    mask_email: true,
    mask_phone: true
  )
  yield(config)
end

.default_filtersObject



32
33
34
35
36
37
38
39
40
41
# File 'lib/piiguard.rb', line 32

def self.default_filters
  [
    :email,
    :phone,
    :mobile,
    :password,
    :token,
    :api_key
  ]
end

.filtersObject



43
44
45
# File 'lib/piiguard.rb', line 43

def self.filters
  (default_filters + (custom_filters || [])).uniq
end

.mask(data) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/piiguard.rb', line 47

def self.mask(data)
  case data
  when String
    mask_string(data)
  when Hash
    data.each_with_object({}) do |(k,v), result|
      result[k] = mask(v)
    end
  when Array
    data.map { |v| mask(v) }
  else
    data
  end
end

.mask_string(text) ⇒ Object



62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/piiguard.rb', line 62

def self.mask_string(text)
  result = text

  if config&.mask_email
    result = result.gsub(EMAIL_REGEX, "[EMAIL]")
  end

  if config&.mask_phone
    result = result.gsub(PHONE_REGEX, "[PHONE]")
  end

  result
end