tcell_agent 1.1.3 → 1.1.4

Sign up to get free protection for your applications and to get access to all the features.
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