tcell_agent 1.1.3 → 1.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. checksums.yaml +4 -4
  2. data/bin/tcell_agent +10 -2
  3. data/lib/tcell_agent.rb +3 -3
  4. data/lib/tcell_agent/agent.rb +42 -52
  5. data/lib/tcell_agent/agent/event_processor.rb +129 -162
  6. data/lib/tcell_agent/agent/fork_pipe_manager.rb +57 -62
  7. data/lib/tcell_agent/agent/policy_manager.rb +83 -104
  8. data/lib/tcell_agent/agent/policy_types.rb +24 -29
  9. data/lib/tcell_agent/agent/route_manager.rb +36 -46
  10. data/lib/tcell_agent/agent/static_agent.rb +19 -21
  11. data/lib/tcell_agent/api.rb +23 -28
  12. data/lib/tcell_agent/appsensor/injections_reporter.rb +7 -11
  13. data/lib/tcell_agent/authlogic.rb +7 -7
  14. data/lib/tcell_agent/cmdi.rb +22 -23
  15. data/lib/tcell_agent/config/unknown_options.rb +71 -69
  16. data/lib/tcell_agent/configuration.rb +187 -191
  17. data/lib/tcell_agent/devise.rb +13 -15
  18. data/lib/tcell_agent/hooks/login_fraud.rb +1 -1
  19. data/lib/tcell_agent/instrumentation.rb +120 -124
  20. data/lib/tcell_agent/logger.rb +29 -45
  21. data/lib/tcell_agent/patches.rb +5 -5
  22. data/lib/tcell_agent/policies/dataloss_policy.rb +263 -288
  23. data/lib/tcell_agent/policies/http_redirect_policy.rb +25 -37
  24. data/lib/tcell_agent/policies/http_tx_policy.rb +48 -52
  25. data/lib/tcell_agent/policies/login_fraud_policy.rb +15 -20
  26. data/lib/tcell_agent/policies/policy.rb +0 -2
  27. data/lib/tcell_agent/policies/rust_policies.rb +24 -29
  28. data/lib/tcell_agent/rails.rb +2 -3
  29. data/lib/tcell_agent/rails/auth/authlogic.rb +2 -2
  30. data/lib/tcell_agent/rails/auth/devise.rb +2 -2
  31. data/lib/tcell_agent/rails/auth/doorkeeper.rb +2 -2
  32. data/lib/tcell_agent/rails/better_ip.rb +12 -16
  33. data/lib/tcell_agent/rails/csrf_exception.rb +4 -7
  34. data/lib/tcell_agent/rails/dlp.rb +208 -107
  35. data/lib/tcell_agent/rails/dlp/process_request.rb +37 -47
  36. data/lib/tcell_agent/rails/dlp_handler.rb +9 -11
  37. data/lib/tcell_agent/rails/js_agent_insert.rb +11 -14
  38. data/lib/tcell_agent/rails/middleware/body_filter_middleware.rb +8 -7
  39. data/lib/tcell_agent/rails/middleware/context_middleware.rb +4 -5
  40. data/lib/tcell_agent/rails/middleware/global_middleware.rb +5 -8
  41. data/lib/tcell_agent/rails/middleware/headers_middleware.rb +24 -27
  42. data/lib/tcell_agent/rails/on_start.rb +5 -5
  43. data/lib/tcell_agent/rails/responses.rb +7 -9
  44. data/lib/tcell_agent/rails/routes.rb +62 -81
  45. data/lib/tcell_agent/rails/routes/grape.rb +25 -30
  46. data/lib/tcell_agent/rails/routes/route_id.rb +9 -14
  47. data/lib/tcell_agent/rails/settings_reporter.rb +44 -33
  48. data/lib/tcell_agent/rails/tcell_body_proxy.rb +15 -18
  49. data/lib/tcell_agent/routes/table.rb +31 -33
  50. data/lib/tcell_agent/rust/{libtcellagent-1.3.0.dylib → libtcellagent-1.3.1.dylib} +0 -0
  51. data/lib/tcell_agent/rust/{libtcellagent-1.3.0.so → libtcellagent-1.3.1.so} +0 -0
  52. data/lib/tcell_agent/rust/{libtcellagent-alpine-1.3.0.so → libtcellagent-alpine-1.3.1.so} +0 -0
  53. data/lib/tcell_agent/rust/models.rb +32 -37
  54. data/lib/tcell_agent/rust/tcellagent-1.3.1.dll +0 -0
  55. data/lib/tcell_agent/rust/whisperer.rb +101 -104
  56. data/lib/tcell_agent/sensor_events/app_config.rb +7 -7
  57. data/lib/tcell_agent/sensor_events/appsensor_event.rb +26 -27
  58. data/lib/tcell_agent/sensor_events/appsensor_meta_event.rb +20 -88
  59. data/lib/tcell_agent/sensor_events/command_injection.rb +52 -80
  60. data/lib/tcell_agent/sensor_events/discovery.rb +27 -27
  61. data/lib/tcell_agent/sensor_events/dlp.rb +50 -56
  62. data/lib/tcell_agent/sensor_events/honeytokens.rb +9 -9
  63. data/lib/tcell_agent/sensor_events/metrics.rb +20 -21
  64. data/lib/tcell_agent/sensor_events/patches.rb +10 -12
  65. data/lib/tcell_agent/sensor_events/sensor.rb +32 -36
  66. data/lib/tcell_agent/sensor_events/server_agent.rb +130 -127
  67. data/lib/tcell_agent/sensor_events/util/sanitizer_utilities.rb +60 -80
  68. data/lib/tcell_agent/sensor_events/util/utils.rb +3 -5
  69. data/lib/tcell_agent/servers/passenger.rb +5 -9
  70. data/lib/tcell_agent/servers/puma.rb +18 -27
  71. data/lib/tcell_agent/servers/rails_server.rb +5 -9
  72. data/lib/tcell_agent/servers/thin.rb +2 -4
  73. data/lib/tcell_agent/servers/unicorn.rb +18 -27
  74. data/lib/tcell_agent/servers/webrick.rb +2 -4
  75. data/lib/tcell_agent/settings_reporter.rb +126 -0
  76. data/lib/tcell_agent/sinatra.rb +24 -26
  77. data/lib/tcell_agent/start_background_thread.rb +21 -142
  78. data/lib/tcell_agent/system_info.rb +4 -3
  79. data/lib/tcell_agent/tcell_context.rb +150 -0
  80. data/lib/tcell_agent/userinfo.rb +3 -3
  81. data/lib/tcell_agent/utils/io.rb +19 -24
  82. data/lib/tcell_agent/utils/params.rb +9 -15
  83. data/lib/tcell_agent/utils/queue_with_timeout.rb +26 -32
  84. data/lib/tcell_agent/utils/strings.rb +4 -6
  85. data/lib/tcell_agent/version.rb +1 -1
  86. data/spec/lib/tcell_agent/agent/policy_manager_spec.rb +5 -5
  87. data/spec/lib/tcell_agent/agent/static_agent_spec.rb +7 -7
  88. data/spec/lib/tcell_agent/cmdi_spec.rb +21 -21
  89. data/spec/lib/tcell_agent/hooks/login_fraud_spec.rb +29 -24
  90. data/spec/lib/tcell_agent/instrumentation_spec.rb +4 -4
  91. data/spec/lib/tcell_agent/patches_spec.rb +8 -8
  92. data/spec/lib/tcell_agent/policies/appsensor_policy_spec.rb +23 -23
  93. data/spec/lib/tcell_agent/policies/patches_policy_spec.rb +2 -2
  94. data/spec/lib/tcell_agent/rails/csrf_exception_spec.rb +69 -0
  95. data/spec/lib/tcell_agent/rails/dlp_spec.rb +1039 -0
  96. data/spec/lib/tcell_agent/rails/js_agent_insert_spec.rb +271 -0
  97. data/spec/lib/tcell_agent/rails/logger_spec.rb +5 -5
  98. data/spec/lib/tcell_agent/rails/middleware/appsensor_middleware_spec.rb +3 -3
  99. data/spec/lib/tcell_agent/rails/middleware/dlp_middleware_spec.rb +4 -4
  100. data/spec/lib/tcell_agent/rails/middleware/global_middleware_spec.rb +5 -5
  101. data/spec/lib/tcell_agent/rails/middleware/redirect_middleware_spec.rb +1 -1
  102. data/spec/lib/tcell_agent/rails/middleware/tcell_body_proxy_spec.rb +11 -8
  103. data/spec/lib/tcell_agent/rails/responses_spec.rb +2 -2
  104. data/spec/lib/tcell_agent/rails/routes/grape_spec.rb +2 -2
  105. data/spec/lib/tcell_agent/rails/routes/route_id_spec.rb +1 -1
  106. data/spec/lib/tcell_agent/rails/routes/routes_spec.rb +4 -4
  107. data/spec/lib/tcell_agent/rust/models_spec.rb +83 -75
  108. data/spec/lib/tcell_agent/rust/whisperer_spec.rb +14 -14
  109. data/spec/lib/tcell_agent/sensor_events/appsensor_meta_event_spec.rb +19 -70
  110. data/spec/lib/tcell_agent/sensor_events/sessions_metric_spec.rb +1 -1
  111. data/spec/lib/tcell_agent/settings_reporter_spec.rb +162 -0
  112. data/spec/lib/tcell_agent/tcell_context_spec.rb +154 -0
  113. data/spec/spec_helper.rb +5 -0
  114. metadata +18 -10
  115. data/lib/tcell_agent/appsensor/meta_data.rb +0 -132
  116. data/lib/tcell_agent/patches/meta_data.rb +0 -59
  117. data/lib/tcell_agent/rust/tcellagent-1.3.0.dll +0 -0
  118. data/spec/lib/tcell_agent/appsensor/meta_data_spec.rb +0 -71
@@ -11,25 +11,23 @@ module TCellAgent
11
11
  if defined?(Devise)
12
12
  TCellAgent::UserInformation.class_eval do
13
13
  class << self
14
- alias_method :original_getUserFromRequest, :getUserFromRequest
15
- def getUserFromRequest(request)
16
- orig_user_id = original_getUserFromRequest(request)
14
+ alias_method :original_get_user_from_request, :get_user_from_request
15
+ def get_user_from_request(request)
16
+ orig_user_id = original_get_user_from_request(request)
17
17
  begin
18
- if request.session && request.session.has_key?("warden.user.user.key")
19
- userkey = request.session["warden.user.user.key"]
20
- if (userkey.length == 2)
21
- user_id = userkey[0][0]
22
- else
23
- user_id = userkey[1][0]
24
- end
25
- if user_id.is_a? Integer
26
- return user_id.to_s
27
- end
18
+ if request.session && request.session.key?('warden.user.user.key')
19
+ userkey = request.session['warden.user.user.key']
20
+ user_id = if userkey.length == 2
21
+ userkey[0][0]
22
+ else
23
+ userkey[1][0]
24
+ end
25
+ return user_id.to_s if user_id.is_a? Integer
28
26
  end
29
- rescue StandardError => e
27
+ rescue StandardError
30
28
  return orig_user_id
31
29
  end
32
- return orig_user_id
30
+ orig_user_id
33
31
  end
34
32
  end
35
33
  end
@@ -12,7 +12,7 @@ module TCellAgent
12
12
  user_valid)
13
13
  if TCellAgent.configuration.enabled &&
14
14
  TCellAgent.configuration.should_intercept_requests?
15
- login_fraud_policy = TCellAgent.policy(TCellAgent::PolicyTypes::LoginFraud)
15
+ login_fraud_policy = TCellAgent.policy(TCellAgent::PolicyTypes::LOGINFRAUD)
16
16
 
17
17
  if login_fraud_policy && login_fraud_policy.enabled
18
18
  if tcell_data
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # See the file "LICENSE" for the full license governing this code.
3
2
  require 'tcell_agent/logger'
4
3
  require 'tcell_agent/configuration'
@@ -8,7 +7,7 @@ require 'cgi'
8
7
 
9
8
  module TCellAgent
10
9
  module Instrumentation
11
- TCELL_ID = "tcell.request_data"
10
+ TCELL_ID = 'tcell.request_data'.freeze
12
11
 
13
12
  class ContextFilter
14
13
  attr_accessor :type
@@ -20,198 +19,199 @@ module TCellAgent
20
19
  attr_accessor :table
21
20
  attr_accessor :field
22
21
 
23
- DATABASE = "db"
24
- REQUEST = "request"
22
+ DATABASE = 'db'.freeze
23
+ REQUEST = 'request'.freeze
25
24
 
26
25
  def for_request(context, parameter, rule)
27
26
  self.type = ContextFilter::REQUEST
28
27
  self.context = context
29
28
  self.parameter = parameter
30
29
  self.rule = rule
31
- return self
30
+ self
32
31
  end
32
+
33
33
  def create_hash_value
34
- "#{self.type}#{self.context}#{self.parameter}#{self.database}#{self.schema}#{self.table}#{self.field}#{self.rule}".hash
34
+ "#{type}#{context}#{parameter}#{database}#{schema}#{table}#{field}#{rule}".hash
35
35
  end
36
- def eql?(other_key)
37
- self.hash == other_key.hash
36
+
37
+ def eql?(other)
38
+ hash == other.hash
38
39
  end
40
+
39
41
  def hash
40
- self.create_hash_value
42
+ create_hash_value
41
43
  end
44
+
42
45
  def for_database(database, schema, table, field, rule)
43
- self.type = ContextFilter::DATABASE
44
- self.database = database
45
- self.schema = schema
46
- self.table = table
47
- self.field = field
48
- self.rule = rule
49
- return self
46
+ self.type = ContextFilter::DATABASE
47
+ self.database = database
48
+ self.schema = schema
49
+ self.table = table
50
+ self.field = field
51
+ self.rule = rule
52
+ self
50
53
  end
51
- def for_request(context, parameter, rule)
52
- self.type = ContextFilter::REQUEST
53
- self.context = context
54
- self.parameter = parameter
55
- self.rule = rule
56
- return self
54
+
55
+ def for_request(context, parameter, rule) # rubocop:disable Lint/DuplicateMethods
56
+ self.type = ContextFilter::REQUEST
57
+ self.context = context
58
+ self.parameter = parameter
59
+ self.rule = rule
60
+ self
57
61
  end
58
62
  end
59
63
 
60
-
61
64
  class TCellData
62
65
  attr_accessor :transaction_id, :session_id, :hmac_session_id, :user_id,
63
- :password, :route_id, :path, :uri, :fullpath, :context_filters_by_term,
64
- :database_filters, :ip_address, :user_agent, :request_method,
65
- :path_parameters, :patches_blocking_triggered, :grape_mount_endpoint,
66
- :referrer, :csrf_exception_name, :sql_exceptions, :database_result_sizes
66
+ :password, :route_id, :path, :uri, :fullpath, :context_filters_by_term,
67
+ :database_filters, :ip_address, :user_agent, :request_method,
68
+ :path_parameters, :patches_blocking_triggered, :grape_mount_endpoint,
69
+ :referrer, :csrf_exception_name, :sql_exceptions, :database_result_sizes
67
70
 
68
71
  def self.filterx(sanitize_string, event_flag, replace_flag, term)
69
72
  send_event = false
70
- sanitize_string.gsub!(term) {|m|
73
+ sanitize_string.gsub!(term) do |m|
71
74
  if replace_flag
72
- m = "[redacted]"
75
+ m = '[redacted]'
73
76
  send_event = true
74
77
  elsif event_flag
75
78
  # m = "[hash]"
76
79
  send_event = true
77
80
  end
78
81
  m
79
- }
80
- return send_event
82
+ end
83
+ send_event
81
84
  end
85
+
82
86
  def initialize
83
87
  @patches_blocking_triggered = false
84
- @context_filters_by_term = Hash.new{|h,k| h[k] = Set.new}
88
+ @context_filters_by_term = Hash.new { |h, k| h[k] = Set.new }
85
89
  @sql_exceptions = []
86
90
  @database_result_sizes = []
87
91
  end
88
- def is_valid_term?(term)
89
- if term != nil && term != '' && term.to_s.length >= 5
90
- return true
91
- end
92
- return false
92
+
93
+ def valid_term?(term)
94
+ return true if !term.nil? && term != '' && term.to_s.length >= 5
95
+ false
93
96
  end
97
+
94
98
  def add_response_db_filter(term, action_obj, database, schema, table, field)
95
- if is_valid_term?(term)
96
- self.context_filters_by_term[term.to_s].add((ContextFilter.new).for_database(database, schema, table, field, action_obj))
97
- end
99
+ return unless valid_term?(term)
100
+ context_filters_by_term[term.to_s].add(ContextFilter.new.for_database(database, schema, table, field, action_obj))
98
101
  end
102
+
99
103
  def add_filter_for_request_parameter(term, rule, parameter_name)
100
- if is_valid_term?(term)
101
- self.context_filters_by_term[term.to_s].add((ContextFilter.new).for_request("form", parameter_name, rule))
102
- end
104
+ return unless valid_term?(term)
105
+ context_filters_by_term[term.to_s].add(ContextFilter.new.for_request('form', parameter_name, rule))
103
106
  end
107
+
104
108
  def add_filter_for_header_value(term, rule, header_name)
105
- if is_valid_term?(term)
106
- self.context_filters_by_term[term.to_s].add((ContextFilter.new).for_request("header", header_name, rule))
107
- end
108
- end
109
+ return unless valid_term?(term)
110
+ context_filters_by_term[term.to_s].add(ContextFilter.new.for_request('header', header_name, rule))
111
+ end
112
+
109
113
  def add_filter_for_cookie_value(term, rule, cookie_name)
110
- if is_valid_term?(term)
111
- self.context_filters_by_term[term.to_s].add((ContextFilter.new).for_request("cookie", cookie_name, rule))
112
- end
114
+ return unless valid_term?(term)
115
+ context_filters_by_term[term.to_s].add(ContextFilter.new.for_request('cookie', cookie_name, rule))
113
116
  end
114
117
 
115
118
  def filter_body!(body)
116
- dlp_policy = TCellAgent.policy(TCellAgent::PolicyTypes::DataLoss)
117
- if dlp_policy && self.session_id
119
+ dlp_policy = TCellAgent.policy(TCellAgent::PolicyTypes::DATALOSS)
120
+ if dlp_policy && session_id
118
121
  session_id_actions = dlp_policy.get_actions_for_session_id
119
122
  if session_id_actions
120
- send_flag = TCellData.filterx(body, session_id_actions.body_event, session_id_actions.body_redact, self.session_id)
123
+ send_flag = TCellData.filterx(body, session_id_actions.body_event, session_id_actions.body_redact, session_id)
121
124
  if send_flag
122
125
  TCellAgent.send_event(
123
126
  TCellAgent::SensorEvents::DlpEvent.new(
124
- self.route_id,
125
- self.uri,
127
+ route_id,
128
+ uri,
126
129
  TCellAgent::SensorEvents::DlpEvent::FOUND_IN_BODY,
127
130
  session_id_actions.action_id
128
- ).for_framework(TCellAgent::SensorEvents::DlpEvent::FRAMEWORK_VARIABLE_SESSION_ID)
131
+ ).for_framework(TCellAgent::SensorEvents::DlpEvent::FRAMEWORK_VARIABLE_SESSION_ID)
129
132
  )
130
133
 
131
134
  end
132
135
  end
133
136
  end
134
- self.context_filters_by_term.sort_by {|term,context_filters| -term.length }.each do |term, context_filters|
135
- replace_filters = (context_filters.select {|context_filter| context_filter.rule.body_redact == true })
136
- event_filters = (context_filters.select {|context_filter| (context_filter.rule.body_redact != true && context_filter.rule.body_event == true) })
137
- send_flag = TCellData.filterx(body, event_filters.length > 0, replace_filters.length > 0, term)
138
- send_flag = send_flag || TCellData.filterx(body, event_filters.length > 0, replace_filters.length > 0, CGI.escapeHTML(term))
139
- if send_flag
140
- (replace_filters + event_filters).each { |filter|
141
- base_event = TCellAgent::SensorEvents::DlpEvent.new(
142
- self.route_id,
143
- self.uri,
144
- TCellAgent::SensorEvents::DlpEvent::FOUND_IN_BODY,
145
- filter.rule.action_id
137
+ context_filters_by_term.sort_by { |term, _context_filters| -term.length }.each do |term, context_filters|
138
+ replace_filters = (context_filters.select { |context_filter| context_filter.rule.body_redact == true })
139
+ event_filters = (context_filters.select { |context_filter| (context_filter.rule.body_redact != true && context_filter.rule.body_event == true) })
140
+ send_flag = TCellData.filterx(body, !event_filters.empty?, !replace_filters.empty?, term)
141
+ send_flag ||= TCellData.filterx(body, !event_filters.empty?, !replace_filters.empty?, CGI.escapeHTML(term))
142
+ next unless send_flag
143
+ (replace_filters + event_filters).each do |filter|
144
+ base_event = TCellAgent::SensorEvents::DlpEvent.new(
145
+ route_id,
146
+ uri,
147
+ TCellAgent::SensorEvents::DlpEvent::FOUND_IN_BODY,
148
+ filter.rule.action_id
149
+ )
150
+ if filter.type == ContextFilter::DATABASE
151
+ TCellAgent.send_event(
152
+ base_event.for_database(filter.database, filter.schema, filter.table, filter.field)
153
+ )
154
+ elsif filter.type == ContextFilter::REQUEST
155
+ TCellAgent.send_event(
156
+ base_event.for_request(filter.context, filter.parameter)
146
157
  )
147
- if filter.type == ContextFilter::DATABASE
148
- TCellAgent.send_event(
149
- base_event.for_database(filter.database, filter.schema, filter.table, filter.field)
150
- )
151
- elsif filter.type == ContextFilter::REQUEST
152
- TCellAgent.send_event(
153
- base_event.for_request(filter.context, filter.parameter)
154
- )
155
- end
156
- }
158
+ end
157
159
  end
158
160
  end
159
- return body
161
+ body
160
162
  end
161
163
 
162
164
  def filter_log(log_msg)
163
- dlp_policy = TCellAgent.policy(TCellAgent::PolicyTypes::DataLoss)
164
- if dlp_policy && self.session_id
165
+ dlp_policy = TCellAgent.policy(TCellAgent::PolicyTypes::DATALOSS)
166
+ if dlp_policy && session_id
165
167
  session_id_actions = dlp_policy.get_actions_for_session_id
166
168
  if session_id_actions
167
- send_flag = TCellData.filterx(log_msg, session_id_actions.log_event, session_id_actions.log_redact, self.session_id)
169
+ send_flag = TCellData.filterx(log_msg, session_id_actions.log_event, session_id_actions.log_redact, session_id)
168
170
  if send_flag
169
171
  TCellAgent.send_event(
170
172
  TCellAgent::SensorEvents::DlpEvent.new(
171
- self.route_id,
172
- self.uri,
173
+ route_id,
174
+ uri,
173
175
  TCellAgent::SensorEvents::DlpEvent::FOUND_IN_LOG,
174
176
  session_id_actions.action_id
175
- ).for_framework(TCellAgent::SensorEvents::DlpEvent::FRAMEWORK_VARIABLE_SESSION_ID)
177
+ ).for_framework(TCellAgent::SensorEvents::DlpEvent::FRAMEWORK_VARIABLE_SESSION_ID)
176
178
  )
177
179
  end
178
180
  end
179
181
  end
180
- self.context_filters_by_term.sort_by {|term,context_filters| -term.length }.each do |term, context_filters|
181
- replace_filters = (context_filters.select {|context_filter| context_filter.rule.log_redact == true })
182
- event_filters = (context_filters.select {|context_filter| (context_filter.rule.log_redact != true && context_filter.rule.log_event == true) })
183
- send_flag = TCellData.filterx(log_msg, event_filters.length > 0, replace_filters.length > 0, term)
184
- if send_flag
185
- (replace_filters + event_filters).each { |filter|
186
- base_event = TCellAgent::SensorEvents::DlpEvent.new(
187
- self.route_id,
188
- self.uri,
189
- TCellAgent::SensorEvents::DlpEvent::FOUND_IN_LOG,
190
- filter.rule.action_id
182
+ context_filters_by_term.sort_by { |term, _context_filters| -term.length }.each do |term, context_filters|
183
+ replace_filters = (context_filters.select { |context_filter| context_filter.rule.log_redact == true })
184
+ event_filters = (context_filters.select { |context_filter| (context_filter.rule.log_redact != true && context_filter.rule.log_event == true) })
185
+ send_flag = TCellData.filterx(log_msg, !event_filters.empty?, !replace_filters.empty?, term)
186
+ next unless send_flag
187
+ (replace_filters + event_filters).each do |filter|
188
+ base_event = TCellAgent::SensorEvents::DlpEvent.new(
189
+ route_id,
190
+ uri,
191
+ TCellAgent::SensorEvents::DlpEvent::FOUND_IN_LOG,
192
+ filter.rule.action_id
193
+ )
194
+ if filter.type == ContextFilter::DATABASE
195
+ TCellAgent.send_event(
196
+ base_event.for_database(filter.database, filter.schema, filter.table, filter.field)
191
197
  )
192
- if filter.type == ContextFilter::DATABASE
193
- TCellAgent.send_event(
194
- base_event.for_database(filter.database, filter.schema, filter.table, filter.field)
195
- )
196
- elsif filter.type == ContextFilter::REQUEST
197
- TCellAgent.send_event(
198
- base_event.for_request(filter.context, filter.parameter)
199
- )
200
- end
201
- }
198
+ elsif filter.type == ContextFilter::REQUEST
199
+ TCellAgent.send_event(
200
+ base_event.for_request(filter.context, filter.parameter)
201
+ )
202
+ end
202
203
  end
203
204
  end
204
- return log_msg
205
+ log_msg
205
206
  end
206
207
 
207
208
  def to_s
208
- "<#{self.class.name} transaction_id: #{transaction_id} session_id: #{session_id} " +
209
- "hmac_session_id: #{hmac_session_id} user_id: #{user_id} route_id: #{route_id} " +
210
- "uri: #{uri} context_filters_by_term: #{context_filters_by_term} " +
211
- "database_filters: #{database_filters} ip_address: #{ip_address} user_agent: #{user_agent} " +
209
+ "<#{self.class.name} transaction_id: #{transaction_id} session_id: #{session_id} " \
210
+ "hmac_session_id: #{hmac_session_id} user_id: #{user_id} route_id: #{route_id} " \
211
+ "uri: #{uri} context_filters_by_term: #{context_filters_by_term} " \
212
+ "database_filters: #{database_filters} ip_address: #{ip_address} user_agent: #{user_agent} " \
212
213
  "request_method: #{@request_method} path_parameters: #{@path_parameters}>"
213
214
  end
214
-
215
215
  end
216
216
 
217
217
  def self.instrument_frameworks
@@ -222,20 +222,16 @@ module TCellAgent
222
222
  end
223
223
 
224
224
  def self.safe_block(message, &block)
225
- begin
226
- block.call()
227
-
228
- rescue StandardError => ex
229
- TCellAgent.logger.debug "Exception in safe_block #{message}: #{ex.class} happened, message is #{ex.message}"
230
- TCellAgent.logger.debug(ex.backtrace)
231
- end
225
+ block.call
226
+ rescue StandardError => ex
227
+ TCellAgent.logger.debug "Exception in safe_block #{message}: #{ex.class} happened, message is #{ex.message}"
228
+ TCellAgent.logger.debug(ex.backtrace)
232
229
  end
233
230
 
234
- def self.safe_block_no_log(message, &block)
235
- begin
236
- block.call()
237
- rescue StandardError
238
- end
231
+ def self.safe_block_no_log(_message, &block)
232
+ block.call
233
+ rescue StandardError # rubocop:disable Lint/HandleExceptions
234
+ # do nothing
239
235
  end
240
236
  end
241
237
  end
@@ -5,7 +5,6 @@ require 'tcell_agent/configuration'
5
5
  require 'tcell_agent/utils/io'
6
6
 
7
7
  module TCellAgent
8
-
9
8
  class TaggedLogger
10
9
  def initialize(tag, logger)
11
10
  @tag = tag
@@ -38,11 +37,9 @@ module TCellAgent
38
37
  end
39
38
 
40
39
  class NullLoger < Logger
41
- def initialize(*args)
42
- end
40
+ def initialize(*args); end
43
41
 
44
- def add(*args, &block)
45
- end
42
+ def add(*args, &block); end
46
43
  end
47
44
 
48
45
  class TCellLogDevice < Logger::LogDevice
@@ -58,26 +55,18 @@ module TCellAgent
58
55
  @@logger_pid = Process.pid
59
56
  @null_logger = TCellAgent::NullLoger.new
60
57
 
61
- def self.loggingLevelFromString(levelString)
62
- if (levelString == "DEBUG")
63
- return Logger::DEBUG
64
- elsif (levelString == "WARN")
65
- return Logger::WARN
66
- elsif (levelString == "INFO")
67
- return Logger::INFO
68
- elsif (levelString == "ERROR")
69
- return Logger::ERROR
70
- elsif (levelString == "FATAL")
71
- return Logger::FATAL
72
- end
58
+ def self.logging_level_from_string(level_string)
59
+ return Logger::DEBUG if level_string == 'DEBUG'
60
+ return Logger::WARN if level_string == 'WARN'
61
+ return Logger::INFO if level_string == 'INFO'
62
+ return Logger::ERROR if level_string == 'ERROR'
63
+ return Logger::FATAL if level_string == 'FATAL'
73
64
 
74
- return Logger::INFO
65
+ Logger::INFO
75
66
  end
76
67
 
77
68
  def self.appfirewall_payloads_logger
78
- if TCellAgent.configuration.enabled == false
79
- return @null_logger
80
- end
69
+ return @null_logger unless TCellAgent.configuration.enabled
81
70
 
82
71
  if defined?(@paylods_logger) && @logger_pid == Process.pid
83
72
  return @payloads_logger
@@ -96,34 +85,30 @@ module TCellAgent
96
85
 
97
86
  log_device = TCellLogDevice.new(
98
87
  TCellAgent.configuration.appfirewall_payloads_log_filename,
99
- :shift_age => 9, :shift_size => 5242880
88
+ :shift_age => 9, :shift_size => 5_242_880
100
89
  )
101
90
  @payloads_logger = Logger.new(log_device)
102
91
  @payloads_logger.level = Logger::INFO
103
- @payloads_logger.formatter = proc do |severity, datetime, progname, msg|
104
- date_format = datetime.strftime("%Y-%m-%dT%H:%M:%S.%L%:z")
105
- "#{date_format} - #{msg}\n"
92
+ @payloads_logger.formatter = proc do |_severity, datetime, _progname, msg|
93
+ date_format = datetime.strftime('%Y-%m-%dT%H:%M:%S.%L%:z')
94
+ "#{date_format} - #{msg}\n"
106
95
  end
107
96
 
108
- return @payloads_logger
97
+ @payloads_logger
109
98
  end
110
99
 
111
100
  def self.logger
112
- if TCellAgent.configuration.enabled == false
113
- return @null_logger
114
- end
101
+ return @null_logger unless TCellAgent.configuration.enabled
115
102
 
116
- if defined?(@logger) && @logger_pid == Process.pid
117
- return @logger
118
- end
103
+ return @logger if defined?(@logger) && @logger_pid == Process.pid
119
104
 
120
105
  if TCellAgent.configuration.logger
121
106
  @logger_pid = Process.pid
122
- if TCellAgent.configuration.log_tag
123
- @logger = TCellAgent::TaggedLogger.new(TCellAgent.configuration.log_tag, TCellAgent.configuration.logger)
124
- else
125
- @logger = TCellAgent.configuration.logger
126
- end
107
+ @logger = if TCellAgent.configuration.log_tag
108
+ TCellAgent::TaggedLogger.new(TCellAgent.configuration.log_tag, TCellAgent.configuration.logger)
109
+ else
110
+ TCellAgent.configuration.logger
111
+ end
127
112
 
128
113
  return @logger
129
114
  end
@@ -131,23 +116,23 @@ module TCellAgent
131
116
  @logger_pid = Process.pid
132
117
  logging_options = TCellAgent.configuration.logging_options || {}
133
118
 
134
- use_default_setting = !logging_options.has_key?(:enabled) && !logging_options.has_key?("enabled")
119
+ use_default_setting = !logging_options.key?(:enabled) && !logging_options.key?('enabled')
135
120
 
136
- if use_default_setting || logging_options[:enabled] || logging_options["enabled"]
121
+ if use_default_setting || logging_options[:enabled] || logging_options['enabled']
137
122
  logging_file = TCellAgent.configuration.log_filename
138
123
  logging_directory = File.dirname(logging_file)
139
124
  TCellAgent::Utils::IO.create_directory(logging_directory, TCellAgent.configuration.agent_home_owner.to_s)
140
125
 
141
- log_device = TCellLogDevice.new(logging_file, :shift_age => 9, :shift_size => 5242880)
126
+ log_device = TCellLogDevice.new(logging_file, :shift_age => 9, :shift_size => 5_242_880)
142
127
 
143
- level = loggingLevelFromString(logging_options[:level] || logging_options["level"])
128
+ level = logging_level_from_string(logging_options[:level] || logging_options['level'])
144
129
  # limit the total log file to about 9 * 5 = 45 mb
145
130
  @logger = Logger.new(log_device)
146
131
  @logger.level = level
147
- @logger.formatter = proc do |severity, datetime, progname, msg|
132
+ @logger.formatter = proc do |severity, datetime, _progname, msg|
148
133
  # ISO 8601 format
149
- date_format = datetime.strftime("%Y-%m-%dT%H:%M:%S.%L%:z")
150
- "#{date_format} - [#{TCellAgent::VERSION}] - #{severity}[#{@logger_pid}]: #{msg}\n"
134
+ date_format = datetime.strftime('%Y-%m-%dT%H:%M:%S.%L%:z')
135
+ "#{date_format} - [#{TCellAgent::VERSION}] - #{severity}[#{@logger_pid}]: #{msg}\n"
151
136
  end
152
137
 
153
138
  return @logger
@@ -162,5 +147,4 @@ module TCellAgent
162
147
  def self.logger=(logger)
163
148
  @logger = logger
164
149
  end
165
-
166
150
  end