fluent-plugin-email-obfuscate 0.0.1 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 144ea941d820cf9397f8950c7393d9873f27306d
4
- data.tar.gz: cbff42d1234a688b1d4da4e6bab9a4fe224c3b1a
3
+ metadata.gz: c8c95d15752cf1fbeeb6e933d0d42423b05ebaf1
4
+ data.tar.gz: 177b3fd14bf1c47b985aed8ac168e861006c0327
5
5
  SHA512:
6
- metadata.gz: 190489016407ed6321b030ee8088fcdec9e68eae78194b08b79b85c0cd0f215b16494e0492181f76862f12e5d5141fe91cfa0ec8b8a47769596b1672fcae8bae
7
- data.tar.gz: efe07cd21cd9144f187ef37e8bc1d34e1034731ec75f1bdda26703a5dad69b4de9f07d3b1411cae3570dfd08dc6580b5f25f390da0718d71ef521821a9a1164b
6
+ metadata.gz: ba7799b236bddd340016ffe52d09f4f7bc489c08d643fc173c0d2a615d9d2a64ef9c71cab921af779467e3acfb9fb33615a301860f7c2a8bf1e92e23d81fc9f6
7
+ data.tar.gz: 951b4832e624681add3ac22b0e9ca1e57d02bd2392e3cf3c822d56feda391710b2a889f364992dafbb67030975c3b9ac4e3bd597fef9382259bfec8ad29854fe
@@ -0,0 +1 @@
1
+ **/*.gem
data/README.md CHANGED
@@ -2,7 +2,10 @@
2
2
 
3
3
  [Fluentd](https://fluentd.org/) filter plugin obfuscate email addresses.
4
4
 
5
- This filter attempts to parse each field in the record, and will replace the "domain" part of the email address with asterisks.
5
+ [![CodeFactor](https://www.codefactor.io/repository/github/JamesJJ/fluent-plugin-email-obfuscate/badge)](https://www.codefactor.io/repository/github/JamesJJ/fluent-plugin-email-obfuscate)
6
+ [![Gem Version](https://badge.fury.io/rb/fluent-plugin-email-obfuscate.svg)](https://badge.fury.io/rb/fluent-plugin-email-obfuscate)
7
+
8
+ This filter attempts to parse each field in the record, and will obfuscate all or part of any email addresses it finds, by replacing with the same number of asterisks.
6
9
 
7
10
  ### For example:
8
11
 
@@ -66,22 +69,39 @@ $ bundle
66
69
 
67
70
  ## Configuration
68
71
 
69
- _CURRENTLY THIS FILTER DOES NOT ACCEPT ANY CONFIGURATION_
70
-
71
- <!---
72
- You can generate configuration template:
72
+ Use `email_obfuscate` filter.
73
73
 
74
74
  ```
75
- $ fluent-plugin-config-format filter email-obfuscate
75
+ <filter **>
76
+ @type email_obfuscate
77
+ mode <mode>
78
+ suffix_whitelist <list>
79
+ </filter>
76
80
  ```
77
81
 
78
- You can copy and paste generated documents here.
79
- -->
82
+ ### mode (default: partial_name)
83
+
84
+ mode | Action | Example
85
+ :-- | :-- | :--
86
+ `domain_only` | Only replace all characters in the domain part | `testuser@*******.***`
87
+ `partial_name` | Replace all characters in domain and partially in the name | `testu***@*******.***`
88
+ `full` | Replace all characters in name and domain part of address | `********@*******.***`
89
+
90
+ _Note: `.` and `@` are never replaced_
91
+
92
+ ### suffix_whitelist (optional)
93
+
94
+ A list of suffixes not to obfuscate. For example, with config `suffix_whitelist [".example.com", "@example.com"]` the result would be:
95
+
96
+ Input | Action
97
+ :-- | :--
98
+ `user@example.com` | no change
99
+ `user@subdomain.example.com` | no change
100
+ `user@example.museum` | obfuscated
80
101
 
81
102
  ## Todo
82
103
 
83
104
  * Add tests!
84
- * Support whitelists of domains not to be obfuscated
85
105
  * Support configuration of which fields to act upon
86
106
  * . . .
87
107
 
@@ -3,7 +3,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
 
4
4
  Gem::Specification.new do |spec|
5
5
  spec.name = "fluent-plugin-email-obfuscate"
6
- spec.version = "0.0.1"
6
+ spec.version = "0.0.3"
7
7
  spec.authors = ["JamesJJ"]
8
8
  spec.email = ["jj@fcg.fyi"]
9
9
 
@@ -19,6 +19,7 @@ Gem::Specification.new do |spec|
19
19
  spec.executables = files.grep(%r{^bin/}) { |f| File.basename(f) }
20
20
  spec.test_files = test_files
21
21
  spec.require_paths = ["lib"]
22
+ spec.required_ruby_version = '>= 2.3.0'
22
23
 
23
24
  spec.add_development_dependency "bundler", "~> 1.14"
24
25
  spec.add_development_dependency "rake", "~> 12.0"
@@ -20,33 +20,82 @@ module Fluent
20
20
  class EmailObfuscateFilter < Fluent::Plugin::Filter
21
21
  Fluent::Plugin.register_filter("email_obfuscate", self)
22
22
 
23
+ config_param :mode, :string, default: 'partial_name',
24
+ desc: <<-DESC
25
+ 'full' will replace all characters.
26
+ 'partial_name' will replace all characters in the 'domain' half of the address, and a subset of the 'name'.
27
+ 'domain_only' will only replace characters in the 'domain' half of the address.
28
+ '.' and '@' are never replaced.
29
+ DESC
30
+
31
+ config_param :suffix_whitelist, :array, default: [],
32
+ desc: <<-DESC
33
+ List of email suffixes not to obfuscate e.g. ['@example.com', '.example.com'] would result in:
34
+ user@example.com => unchanged
35
+ user@subdomain.example.com => unchanged
36
+ user@example.net => obfuscated
37
+ DESC
38
+
39
+ def configure(conf)
40
+ super
41
+
42
+ if conf.has_key?('mode')
43
+ raise ConfigError, "'mode' must be one of: domain_only, full, partial_name" unless
44
+ ['domain_only', 'full', 'partial_name'].include?(conf.dig('mode'))
45
+ end
46
+ end
47
+
48
+ def hide_partial(str)
49
+ case
50
+ when str.length < 5
51
+ len = str.length
52
+ when str.length < 11
53
+ len = (str.length / 2) + 2
54
+ else
55
+ len = (str.length / 3) + 4
56
+ end
57
+ str[0, len] + '*' * (str.length - len)
58
+ end
59
+
23
60
  def obfuscate(str)
24
- str.match(/^([^@]+)(@.+)$/){|m| m[1] + m[2].tr('@.a-zA-Z0-9','@.*') } || str
61
+ strmatch = str.match(/^([^@]+)(@.+)$/) { |m|
62
+ case @mode
63
+ when 'domain_only'
64
+ m[1] + m[2].tr("@.a-zA-Z0-9", "@.*")
65
+ when 'full'
66
+ m[1].gsub(/./, '*') + m[2].tr("@.a-zA-Z0-9", "@.*")
67
+ else
68
+ hide_partial(m[1]) + m[2].tr("@.a-zA-Z0-9", "@.*")
69
+ end
70
+ }
71
+ if strmatch.nil?
72
+ str
73
+ elsif @suffix_whitelist.select{ |a| str.downcase.end_with?(a.downcase)}.empty?
74
+ strmatch
75
+ else
76
+ str
77
+ end
25
78
  end
26
79
 
27
80
  def deep_process(o)
28
-
29
81
  case o
30
82
  when String
31
83
  os = o.scan(/<([^<>]+@[^<>]+)>/)
32
- o = os.length.zero? ? obfuscate(o) : deep_process(os).join(', ')
33
-
84
+ o = os.length.zero? ? obfuscate(o) : deep_process(os).join(", ")
34
85
  when Array
35
86
  o.map! do |obj|
36
87
  deep_process(obj)
37
88
  end
38
-
39
89
  when Hash
40
90
  o.each_pair do |key, value|
41
91
  o[key] = deep_process(value)
42
92
  end
43
-
44
93
  end
45
94
  o
46
95
  end
47
96
 
48
97
  def filter(tag, time, record)
49
- deep_process(record)
98
+ deep_process(record)
50
99
  end
51
100
  end
52
101
  end
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+
3
+ rm -f ./*.gem
4
+ gem build fluent-plugin-email-obfuscate.gemspec && \
5
+ gem push fluent-plugin-email-obfuscate-*.gem
6
+ rm -f ./*.gem
7
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-email-obfuscate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - JamesJJ
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-05-09 00:00:00.000000000 Z
11
+ date: 2018-05-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -79,6 +79,7 @@ executables: []
79
79
  extensions: []
80
80
  extra_rdoc_files: []
81
81
  files:
82
+ - ".gitignore"
82
83
  - Gemfile
83
84
  - LICENSE
84
85
  - README.md
@@ -87,6 +88,7 @@ files:
87
88
  - lib/fluent/plugin/filter_email_obfuscate.rb
88
89
  - test/helper.rb
89
90
  - test/plugin/test_filter_email_obfuscate.rb
91
+ - tool/build_and_push_to_rubygems.sh
90
92
  homepage: https://github.com/JamesJJ/fluent-plugin-email-obfuscate
91
93
  licenses:
92
94
  - Apache-2.0
@@ -99,7 +101,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
99
101
  requirements:
100
102
  - - ">="
101
103
  - !ruby/object:Gem::Version
102
- version: '0'
104
+ version: 2.3.0
103
105
  required_rubygems_version: !ruby/object:Gem::Requirement
104
106
  requirements:
105
107
  - - ">="