tcell_agent 0.2.8 → 0.2.9

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 38bd348af6afc0394baa2b21028297f52c8bd869
4
- data.tar.gz: 3a0cd72fe8d1c792a13a4a73492da78d2b773b13
3
+ metadata.gz: ffa24423fa841f2a9bdb3b19d44b1250ba2bc4ff
4
+ data.tar.gz: ae260430c31ff45f822cf49efd0735664a181a8c
5
5
  SHA512:
6
- metadata.gz: cd5eb354fe88c5822692bb5e74194d56f67645d92910e14f24d07d27c128735b5750d84a567e7a9dd4a2558c5af1b71f41ec92c47c9db1e5f4e1efc6c731d7f2
7
- data.tar.gz: c570a523bdb36c1aebe4fcf457ececc053e3395cb56bc7f3fbc59d8100897fcda06a8a4fe0447f62acdee239ca4fba601c93892b92ea3d4a1a7c9f952915c9cb
6
+ metadata.gz: bfd43837abf1c1ee7297c09d6960f1bb37673ad0b3dd805b93980bed531f216e57e54384f532e74f3c1f5d435564b177925070d0ab24354fc68dfc06122f0f18
7
+ data.tar.gz: 0b745e26beb71868ede7f5703a7292462d07c830a3374a0e2a98a3ddedb655695a7b2320a0bbf222926bd3bbeba7dc8462621cd52d465e3295e25a69d25a66e6
@@ -51,6 +51,13 @@ module TCellAgent
51
51
  @event_processor_thread && @event_processor_thread.alive?
52
52
  end
53
53
 
54
+ def stop_event_processor
55
+ TCellAgent.logger.debug("Stopping event processor thread")
56
+ if @event_processor_thread && @event_processor_thread.alive?
57
+ @event_processor_thread.exit
58
+ end
59
+ end
60
+
54
61
  def start_event_processor(send_empties=true)
55
62
  return if TCellAgent.configuration.should_start_event_manager? == false
56
63
 
@@ -247,6 +254,13 @@ module TCellAgent
247
254
  @start_metrics_event_thread && @start_metrics_event_thread.alive?
248
255
  end
249
256
 
257
+ def stop_metrics_event_thread
258
+ TCellAgent.logger.debug("Stopping metrics event thread")
259
+ if @start_metrics_event_thread && @start_metrics_event_thread.alive?
260
+ @start_metrics_event_thread.exit
261
+ end
262
+ end
263
+
250
264
  def start_metrics_event_thread
251
265
  return if TCellAgent.configuration.should_consume_event? == false
252
266
  @metrics_event_thread = Thread.new do
@@ -42,6 +42,13 @@ module TCellAgent
42
42
  @policy_polling_thread && @policy_polling_thread.alive?
43
43
  end
44
44
 
45
+ def stop_policy_polling
46
+ TCellAgent.logger.debug("Stopping policy polling thread")
47
+ if @policy_polling_thread && @policy_polling_thread.alive?
48
+ @policy_polling_thread.exit
49
+ end
50
+ end
51
+
45
52
  def start_policy_polling
46
53
  if TCellAgent.configuration.should_start_policy_poll? == true
47
54
  TCellAgent.logger.debug("Starting policy polling thread")
@@ -89,7 +96,7 @@ module TCellAgent
89
96
 
90
97
  if policy_jsons.key?("data")
91
98
  policy_data = policy_jsons["data"]
92
- end
99
+ end
93
100
 
94
101
  TCellAgent::PolicyTypes::ClassMap.each do | policy_type, policy_class |
95
102
  if (policy_jsons.key?(policy_type))
@@ -108,42 +115,66 @@ module TCellAgent
108
115
  end # end of processPolicyJson
109
116
 
110
117
  def cache(policy_name, policy)
111
- cache_filename = TCellAgent.configuration.cache_filename
112
- FileUtils.mkdir_p(File.dirname(cache_filename))
113
- if TCellAgent.configuration.app_id
114
- cache_filename = cache_filename + '.' + TCellAgent.configuration.app_id
115
- end
116
- policy_cache = policies_from_cachefile()
117
- if !policy_cache
118
- policy_cache = {}
119
- end
120
- policy_cache[policy_name] = policy
118
+ cache_filename = TCellAgent.configuration.cache_filename_with_app_id
119
+
121
120
  begin
122
- File.write(cache_filename, JSON.dump(policy_cache))
121
+
122
+ FileUtils.mkdir_p(File.dirname(cache_filename))
123
+ f1 = open(cache_filename, File::RDWR|File::CREAT)
124
+
125
+ Timeout::timeout(0.100) { f1.flock(File::LOCK_EX) }
126
+
127
+ policy_cache = {}
128
+ existing_policy = f1.read
129
+
130
+ if !existing_policy.nil? && existing_policy != ""
131
+ policy_jsons = JSON.parse(existing_policy)
132
+ if policy_jsons
133
+ if policy_jsons.key?("result")
134
+ policy_cache = policy_jsons["result"]
135
+ else
136
+ policy_cache = policy_jsons
137
+ end
138
+ end
139
+ end
140
+ policy_cache[policy_name] = policy
141
+
142
+ f1.rewind
143
+ f1.puts( JSON.dump(policy_cache) )
144
+
123
145
  rescue Exception => e
124
146
  TCellAgent.logger.error(e.message)
147
+
148
+ ensure
149
+ f1.close unless f1.nil?
125
150
  end
151
+
126
152
  end
127
153
 
128
154
  def policies_from_cachefile
129
- cache_filename = TCellAgent.configuration.cache_filename
130
- if TCellAgent.configuration.app_id
131
- cache_filename = cache_filename + '.' + TCellAgent.configuration.app_id
132
- end
155
+ cache_filename = TCellAgent.configuration.cache_filename_with_app_id
133
156
  cache_exists = File.exist?(cache_filename)
157
+
134
158
  if !cache_exists
135
159
  return nil
136
160
  end
161
+
137
162
  begin
138
- policy_filedata = open(cache_filename).read
163
+ f1 = File.open(cache_filename, File::RDONLY)
164
+ Timeout::timeout(1) { f1.flock( File::LOCK_SH ) }
165
+ policy_filedata = f1.read
166
+ f1.close
167
+
139
168
  policy_jsons = JSON.parse(policy_filedata)
140
169
  if policy_jsons.key?("result")
141
170
  return policy_jsons["result"]
142
171
  end
143
172
  return policy_jsons
173
+
144
174
  rescue Exception => e
145
175
  TCellAgent.logger.error(e.message)
146
176
  end
177
+
147
178
  return nil
148
179
  end
149
180
 
@@ -95,11 +95,14 @@ module TCellAgent
95
95
  @js_agent_api_base_url ||= nil
96
96
  @js_agent_url ||= "https://api.tcell.io/tcellagent.min.js"
97
97
 
98
- begin
99
- @host_identifier = (Socket.gethostname() || "localhost")
100
- rescue Exception
101
- @host_identifier = "host_identifier_not_found"
98
+ if (@host_identifier == nil)
99
+ begin
100
+ @host_identifier = (Socket.gethostname() || "localhost")
101
+ rescue Exception
102
+ @host_identifier = "host_identifier_not_found"
103
+ end
102
104
  end
105
+
103
106
  @uuid = SecureRandom.uuid
104
107
 
105
108
  FileUtils::mkdir_p File.dirname(@cache_filename)
@@ -110,10 +113,19 @@ module TCellAgent
110
113
  end
111
114
  end
112
115
 
116
+ def cache_filename_with_app_id
117
+ if @app_id
118
+ "#{@cache_filename}.#{@app_id}"
119
+ else
120
+ @cache_filename
121
+ end
122
+ end
123
+
113
124
  def read_config_using_env
114
- @app_id = ENV["TCELL_APP_ID"]
115
- @api_key = ENV["TCELL_API_KEY"]
125
+ @app_id = ENV["TCELL_AGENT_APP_ID"]
126
+ @api_key = ENV["TCELL_AGENT_API_KEY"]
116
127
  @hmac_key = ENV["TCELL_HMAC_KEY"]
128
+ @host_identifier = ENV["TCELL_AGENT_HOST_IDENTIFIER"] || @host_identifier
117
129
  @tcell_api_url = ENV["TCELL_API_URL"]
118
130
  @tcell_input_url = ENV["TCELL_INPUT_URL"]
119
131
  @demomode = ENV["TCELL_DEMOMODE"] || @demomode
@@ -163,7 +175,8 @@ module TCellAgent
163
175
  @proxy_password = app_data["proxy_password"]
164
176
 
165
177
  @use_websockets = app_data["use_websockets"]
166
- @host_identifier = app_data["host_identifier"]
178
+
179
+ @host_identifier = @host_identifier || app_data.fetch("host_identifier", @host_identifier)
167
180
  if (@host_identifier == nil)
168
181
  @host_identifier = (Socket.gethostname() || "localhost")
169
182
  end
@@ -41,7 +41,7 @@ module TCellAgent
41
41
  end
42
42
  return true
43
43
  end
44
- def enforce(target_url, current_host, current_path, method, status_code, remote_addr)
44
+ def enforce(target_url, current_host, current_path, method, route_id, status_code, remote_addr, session_id=nil)
45
45
  if @enabled == false
46
46
  return nil
47
47
  end
@@ -51,7 +51,7 @@ module TCellAgent
51
51
  return nil
52
52
  end
53
53
  begin
54
- event = TCellAgent::SensorEvents::TCellRedirectSensorEvent.new(host, current_host, current_path, method, status_code, remote_addr)
54
+ event = TCellAgent::SensorEvents::TCellRedirectSensorEvent.new(host, current_host, current_path, method, route_id, status_code, remote_addr, session_id, nil)
55
55
  TCellAgent.send_event(event)
56
56
  rescue Exception => ie
57
57
  TCellAgent.logger.error("uncaught exception while creating redirect event: #{ie.message}")
@@ -18,7 +18,6 @@ require 'tcell_agent/rails/middleware/context_middleware'
18
18
  require 'tcell_agent/rails/settings_reporter'
19
19
  require 'tcell_agent/rails/dlp'
20
20
 
21
- require 'rails/all'
22
21
 
23
22
  require 'tcell_agent/userinfo'
24
23
  require 'cgi'
@@ -27,7 +26,6 @@ require 'thread'
27
26
  module TCellAgent
28
27
  class Railtie < Rails::Railtie
29
28
  initializer "tcell_agent.insert_middleware" do |app|
30
- if TCellAgent.configuration.should_intercept_requests?
31
29
  app.config.to_prepare do
32
30
  require 'tcell_agent/devise' if defined?(Devise)
33
31
  require 'tcell_agent/rails/auth/devise' if defined?(Devise)
@@ -38,7 +36,6 @@ module TCellAgent
38
36
  app.config.middleware.insert_after(0, "TCellAgent::Instrumentation::Rails::Middleware::HeadersMiddleware")
39
37
  app.config.middleware.use "TCellAgent::Instrumentation::Rails::Middleware::BodyFilterMiddleware"
40
38
  app.config.middleware.use "TCellAgent::Instrumentation::Rails::Middleware::GlobalMiddleware"
41
- end
42
39
  end
43
40
  end
44
41
  end
@@ -5,48 +5,53 @@ require 'tcell_agent/configuration'
5
5
  require 'tcell_agent/instrumentation'
6
6
 
7
7
  module TCellAgent
8
- if defined?(Authlogic)
8
+ if defined?(Authlogic)
9
+ TCellAgent.logger.debug("Instrumenting Authlogic")
10
+ require 'tcell_agent/agent'
11
+ require 'tcell_agent/sensor_events/login_fraud'
12
+ Authlogic::Session::Base.class_eval do
13
+ alias_method :original_save, :save
14
+ def save(&block)
9
15
  if (TCellAgent.configuration.enabled && TCellAgent.configuration.should_intercept_requests?)
10
- TCellAgent.logger.debug("Instrumenting Authlogic")
11
- require 'tcell_agent/agent'
12
- require 'tcell_agent/sensor_events/login_fraud'
13
- Authlogic::Session::Base.class_eval do
14
- alias_method :original_save, :save
15
- def save(&block)
16
- user_logged_in_before = (user != nil)
17
- success = original_save
18
- user_logged_in_after = (user != nil)
19
- TCellAgent::Instrumentation.safe_block("Authlogic login info") {
16
+ user_logged_in_before = (user != nil)
17
+ success = original_save
18
+ user_logged_in_after = (user != nil)
19
+ TCellAgent::Instrumentation.safe_block("Authlogic login info") {
20
20
 
21
- login_fraud_policy = TCellAgent.policy(TCellAgent::PolicyTypes::LoginFraud)
22
- if (login_fraud_policy && login_fraud_policy.enabled)
23
- user_id = nil
24
- TCellAgent::Instrumentation.safe_block("getting userid for login form") {
25
- user_id = self.send(self.class.login_field.to_sym)
26
- }
27
- if (user_logged_in_before && user_logged_in_after)
28
- #password changed or logged in as another user
29
- elsif (!user_logged_in_before && !user_logged_in_after)
30
- if (login_fraud_policy.login_failed_enabled)
31
- request = Authlogic::Session::Base.controller.request
32
- response = Authlogic::Session::Base.controller.response
33
- hmac_session_id = request.env["tcell.request_data"].hmac_session_id
34
- event = TCellAgent::SensorEvents::LoginFailure.new(request, response, user_id, hmac_session_id)
35
- TCellAgent.send_event(event)
36
- end
37
- elsif (!user_logged_in_before && user_logged_in_after)
38
- if (login_fraud_policy.login_success_enabled)
39
- request = Authlogic::Session::Base.controller.request
40
- response = Authlogic::Session::Base.controller.response
41
- hmac_session_id = request.env["tcell.request_data"].hmac_session_id
42
- event = TCellAgent::SensorEvents::LoginSuccess.new(request, response, user_id, hmac_session_id)
43
- TCellAgent.send_event(event)
44
- end
45
- end
46
- end
47
- }
21
+ login_fraud_policy = TCellAgent.policy(TCellAgent::PolicyTypes::LoginFraud)
22
+ if (login_fraud_policy && login_fraud_policy.enabled)
23
+ user_id = nil
24
+ TCellAgent::Instrumentation.safe_block("getting userid for login form") {
25
+ user_id = self.send(self.class.login_field.to_sym)
26
+ }
27
+ if (user_logged_in_before && user_logged_in_after)
28
+ #password changed or logged in as another user
29
+ elsif (!user_logged_in_before && !user_logged_in_after)
30
+ if (login_fraud_policy.login_failed_enabled)
31
+ request = Authlogic::Session::Base.controller.request
32
+ response = Authlogic::Session::Base.controller.response
33
+ hmac_session_id = request.env["tcell.request_data"].hmac_session_id
34
+ event = TCellAgent::SensorEvents::LoginFailure.new(request, response, user_id, hmac_session_id)
35
+ TCellAgent.send_event(event)
36
+ end
37
+ elsif (!user_logged_in_before && user_logged_in_after)
38
+ if (login_fraud_policy.login_success_enabled)
39
+ request = Authlogic::Session::Base.controller.request
40
+ response = Authlogic::Session::Base.controller.response
41
+ hmac_session_id = request.env["tcell.request_data"].hmac_session_id
42
+ event = TCellAgent::SensorEvents::LoginSuccess.new(request, response, user_id, hmac_session_id)
43
+ TCellAgent.send_event(event)
44
+ end
48
45
  end
49
- end
46
+ end
47
+ }
48
+
49
+ success
50
+
51
+ else
52
+ original_save
50
53
  end # if instrument
51
- end # if Authlogic
52
- end
54
+ end
55
+ end
56
+ end # if Authlogic
57
+ end
@@ -1,24 +1,26 @@
1
1
  module TCellAgent
2
2
  if defined?(Devise)
3
- if (TCellAgent.configuration.enabled && TCellAgent.configuration.should_intercept_requests?)
4
- TCellAgent.logger.debug("Instrumenting Devise")
5
3
 
6
- require 'tcell_agent/agent'
7
- require 'tcell_agent/sensor_events/login_fraud'
8
- require 'tcell_agent/sensor_events/app_sensor'
9
- require 'tcell_agent/policies/appsensor_policy'
4
+ TCellAgent.logger.debug("Instrumenting Devise")
10
5
 
11
- Devise::SessionsController.class_eval do
6
+ require 'tcell_agent/agent'
7
+ require 'tcell_agent/sensor_events/login_fraud'
8
+ require 'tcell_agent/sensor_events/app_sensor'
9
+ require 'tcell_agent/policies/appsensor_policy'
12
10
 
13
- after_filter :log_failed_login, :only => :new
14
- alias_method :original_new, :new
15
- def new
16
- original_new
17
- end
11
+ Devise::SessionsController.class_eval do
12
+
13
+ after_filter :log_failed_login, :only => :new
14
+ alias_method :original_new, :new
15
+ def new
16
+ original_new
17
+ end
18
+
19
+ alias_method :original_create, :create
20
+ def create(&block)
21
+ results = original_create(&block)
18
22
 
19
- alias_method :original_create, :create
20
- def create(&block)
21
- results = original_create(&block)
23
+ if (TCellAgent.configuration.enabled && TCellAgent.configuration.should_intercept_requests?)
22
24
  TCellAgent::Instrumentation.safe_block("Devise login successful") {
23
25
  tcell_username = _get_tcell_username
24
26
  login_fraud_policy = TCellAgent.policy(TCellAgent::PolicyTypes::LoginFraud)
@@ -27,30 +29,33 @@ module TCellAgent
27
29
  request.env["tcell.request_data"].user_id = TCellAgent::UserInformation.getUserFromRequest(request)
28
30
  user_id = tcell_username || request.env["tcell.request_data"].user_id
29
31
  event = TCellAgent::SensorEvents::LoginSuccess.new(request, response, user_id, hmac_session_id)
30
- TCellAgent.send_event(event)
32
+ TCellAgent.send_event(event)
31
33
  end
32
34
  }
33
- results
34
35
  end
35
36
 
36
- def _get_tcell_username
37
- _tcell_username = nil
38
- TCellAgent::Instrumentation.safe_block("devise login - get username") {
39
- keys = resource_class.authentication_keys.dup
40
- user_params = request.POST.fetch("user",{})
41
- keys.each do |key|
42
- next_usename = user_params.fetch(key, nil)
43
- if next_usename
44
- _tcell_username ||= ""
45
- _tcell_username += next_usename
46
- end
37
+ results
38
+ end
39
+
40
+ def _get_tcell_username
41
+ _tcell_username = nil
42
+ TCellAgent::Instrumentation.safe_block("devise login - get username") {
43
+ keys = resource_class.authentication_keys.dup
44
+ user_params = request.POST.fetch("user",{})
45
+ keys.each do |key|
46
+ next_usename = user_params.fetch(key, nil)
47
+ if next_usename
48
+ _tcell_username ||= ""
49
+ _tcell_username += next_usename
47
50
  end
48
- }
49
- _tcell_username
50
- end
51
+ end
52
+ }
53
+ _tcell_username
54
+ end
51
55
 
52
- private
53
- def log_failed_login
56
+ private
57
+ def log_failed_login
58
+ if (TCellAgent.configuration.enabled && TCellAgent.configuration.should_intercept_requests?)
54
59
  TCellAgent::Instrumentation.safe_block("Devise login failed") {
55
60
  tcell_username = _get_tcell_username
56
61
  login_fraud_policy = TCellAgent.policy(TCellAgent::PolicyTypes::LoginFraud)
@@ -78,12 +83,13 @@ module TCellAgent
78
83
  TCellAgent.send_event(event)
79
84
  end
80
85
  }
81
- end
86
+ end
87
+ end
82
88
 
83
- def failed_login?
84
- (options = env["warden.options"]) && options[:action] == "unauthenticated"
85
- end
89
+ def failed_login?
90
+ (options = env["warden.options"]) && options[:action] == "unauthenticated"
86
91
  end
87
- end # if instrument
92
+ end
93
+
88
94
  end #if defined devise
89
- end
95
+ end
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'tcell_agent/authlogic' if defined?(Authlogic)
4
4
  require 'tcell_agent/devise' if defined?(Devise)
5
-
5
+
6
6
  require 'rails'
7
7
  require 'uri'
8
8
  require 'tcell_agent/logger'
@@ -22,9 +22,6 @@ require 'tcell_agent/rails/middleware/context_middleware'
22
22
 
23
23
  require 'tcell_agent/rails/routes'
24
24
  require 'tcell_agent/rails/settings_reporter'
25
- require 'tcell_agent/rails/dlp'
26
-
27
- require 'rails/all'
28
25
 
29
26
  require 'tcell_agent/userinfo'
30
27
  require 'cgi'
@@ -53,55 +50,82 @@ require 'thread'
53
50
 
54
51
  require 'tcell_agent/configuration'
55
52
 
56
- if TCellAgent.configuration.enabled && TCellAgent.configuration.should_instrument? && TCellAgent.configuration.should_intercept_requests?
57
53
 
54
+
55
+ module TCellAgent
56
+ class MyRailtie < Rails::Railtie
57
+ initializer 'activeservice.autoload', :after => :set_autoload_paths do |app|
58
+ def database_exists?
59
+ database_yaml = "#{Rails.root}/config/database.yml"
60
+ File.exists?database_yaml
61
+ end
62
+
63
+ if (database_exists?)
58
64
  class ActiveRecord::Base
59
65
  # after_initialize do |user|
60
66
  # puts "You have initialized an object!"
61
67
  # puts "ASDF"
62
68
  # end
63
69
  after_find do |record|
64
- database_name = self.class.connection_config().fetch(:database,"*").split('/').last
65
- dlp_policy = TCellAgent.policy(TCellAgent::PolicyTypes::DataLoss)
66
- if dlp_policy
67
- request_env = TCellAgent::Instrumentation::Rails::Middleware::ContextMiddleware::THREADS.fetch(Thread.current.object_id, nil)
68
- if request_env
69
- tcell_context = request_env[TCellAgent::Instrumentation::Rails::Middleware::TCELL_ID]
70
- if tcell_context
71
- model = record.class
72
- column_names = model.columns.map { |col| col.name }
73
- if (dlp_policy.database_discovery_enabled)
74
- TCellAgent.discover_database_fields(tcell_context.route_id, database_name,"*",model.table_name, column_names)
75
- end
76
- model.columns.each do |col|
77
- #puts "#{model.table_name} .. #{col.name}"
78
- action_objs = dlp_policy.get_actions_for_table(database_name, "*", model.table_name, col.name, tcell_context.route_id)
79
- if action_objs
80
- action_objs.each do |action_obj|
81
- tcell_context.add_response_db_filter(record[col.name.to_sym], action_obj, database_name, "*", model.table_name, col.name)
70
+ if TCellAgent.configuration.enabled &&
71
+ TCellAgent.configuration.should_instrument? &&
72
+ TCellAgent.configuration.should_intercept_requests?
73
+
74
+ database_name = self.class.connection_config().fetch(:database,"*").split('/').last
75
+ dlp_policy = TCellAgent.policy(TCellAgent::PolicyTypes::DataLoss)
76
+ if dlp_policy
77
+ request_env = TCellAgent::Instrumentation::Rails::Middleware::ContextMiddleware::THREADS.fetch(Thread.current.object_id, nil)
78
+ if request_env
79
+ tcell_context = request_env[TCellAgent::Instrumentation::Rails::Middleware::TCELL_ID]
80
+ if tcell_context
81
+ model = record.class
82
+ column_names = model.columns.map { |col| col.name }
83
+ if (dlp_policy.database_discovery_enabled)
84
+ TCellAgent.discover_database_fields(tcell_context.route_id, database_name,"*",model.table_name, column_names)
85
+ end
86
+ model.columns.each do |col|
87
+ #puts "#{model.table_name} .. #{col.name}"
88
+ action_objs = dlp_policy.get_actions_for_table(database_name, "*", model.table_name, col.name, tcell_context.route_id)
89
+ if action_objs
90
+ action_objs.each do |action_obj|
91
+ tcell_context.add_response_db_filter(record[col.name.to_sym], action_obj, database_name, "*", model.table_name, col.name)
92
+ end
82
93
  end
83
94
  end
84
95
  end
85
96
  end
86
- end
97
+ end # /if dlp_policy
98
+ end # /enabled
99
+ end # /after_find
100
+ end # /class
101
+ end
102
+
87
103
  end
88
104
  end
89
105
  end
90
106
 
91
- # - Request
92
- # - Session Id event
93
- # - Session Id redact
94
- # - Session Id hash
95
- # - Session Id mask
96
- # - Database-Stuff - [event, redact]
97
- #
98
- # - Log
99
- #
100
107
 
101
- module TCellAgent
102
- module Policies
103
- class DataLossPolicy
104
- def log_enforce(tcell_context, sanitize_string)
108
+
109
+
110
+
111
+ # - Request
112
+ # - Session Id event
113
+ # - Session Id redact
114
+ # - Session Id hash
115
+ # - Session Id mask
116
+ # - Database-Stuff - [event, redact]
117
+ #
118
+ # - Log
119
+ #
120
+
121
+ module TCellAgent
122
+ module Policies
123
+ class DataLossPolicy
124
+
125
+ def log_enforce(tcell_context, sanitize_string)
126
+ if TCellAgent.configuration.enabled &&
127
+ TCellAgent.configuration.should_instrument? &&
128
+ TCellAgent.configuration.should_intercept_requests? &&
105
129
  if (tcell_context && tcell_context.session_id)
106
130
  session_id_actions = self.get_actions_for_session_id
107
131
  if session_id_actions
@@ -121,17 +145,23 @@ if TCellAgent.configuration.enabled && TCellAgent.configuration.should_instrumen
121
145
  if send_event
122
146
  TCellAgent.send_event(
123
147
  TCellAgent::SensorEvents::DlpEvent.new(
124
- tcell_context.route_id,
125
- tcell_context.uri,
148
+ tcell_context.route_id,
149
+ tcell_context.uri,
126
150
  TCellAgent::SensorEvents::DlpEvent::FOUND_IN_LOG
127
151
  ).for_framework(TCellAgent::SensorEvents::DlpEvent::FRAMEWORK_VARIABLE_SESSION_ID)
128
152
  )
129
153
  end
130
154
  end
131
155
  end
132
- sanitize_string
133
156
  end
134
- def response_body_enforce(tcell_context, sanitize_string)
157
+
158
+ sanitize_string
159
+ end
160
+
161
+ def response_body_enforce(tcell_context, sanitize_string)
162
+ if TCellAgent.configuration.enabled &&
163
+ TCellAgent.configuration.should_instrument? &&
164
+ TCellAgent.configuration.should_intercept_requests? &&
135
165
  if (tcell_context && tcell_context.session_id)
136
166
  session_id_actions = self.get_actions_for_session_id
137
167
  if session_id_actions
@@ -152,67 +182,79 @@ if TCellAgent.configuration.enabled && TCellAgent.configuration.should_instrumen
152
182
  if send_event
153
183
  TCellAgent.send_event(
154
184
  TCellAgent::SensorEvents::DlpEvent.new(
155
- tcell_context.route_id,
156
- tcell_context.uri,
185
+ tcell_context.route_id,
186
+ tcell_context.uri,
157
187
  TCellAgent::SensorEvents::DlpEvent::FOUND_IN_BODY
158
188
  ).for_framework(TCellAgent::SensorEvents::DlpEvent::FRAMEWORK_VARIABLE_SESSION_ID)
159
189
  )
160
190
  end
161
191
  end
162
- sanitize_string
163
192
  end
193
+
194
+ sanitize_string
164
195
  end
165
196
  end
166
197
  end
198
+ end
199
+
200
+ module TCellAgent
201
+ ActiveSupport.on_load(:action_controller) do
202
+ ActionController::Base.class_eval do
203
+ around_filter :global_request_logging
204
+ def global_request_logging
205
+ begin
206
+
207
+ yield
208
+
209
+ if TCellAgent.configuration.enabled &&
210
+ TCellAgent.configuration.should_instrument? &&
211
+ TCellAgent.configuration.should_intercept_requests?
212
+
213
+ TCellAgent::Instrumentation.safe_block("Running DLP Logging Filters") {
214
+ tcell_context = request.env[TCellAgent::Instrumentation::Rails::Middleware::TCELL_ID]
215
+ if tcell_context
216
+ response.body = tcell_context.filter_body(response.body)
217
+ end
218
+ }
167
219
 
168
- module TCellAgent
169
- ActiveSupport.on_load(:action_controller) do
170
- ActionController::Base.class_eval do
171
- around_filter :global_request_logging
172
- def global_request_logging
173
- begin
174
- yield
175
- TCellAgent::Instrumentation.safe_block("Running DLP Logging Filters") {
176
- tcell_context = request.env[TCellAgent::Instrumentation::Rails::Middleware::TCELL_ID]
177
- if tcell_context
178
- response.body = tcell_context.filter_body(response.body)
179
- end
180
- }
181
- end
182
220
  end
183
221
  end
184
222
  end
223
+ end
185
224
  end
225
+ end
186
226
 
187
- class Logger
188
- alias_method :tcell_old_add, :add
189
- def add(severity, message = nil, progname = nil, &block)
190
- if severity < self.level
191
- tcell_old_add(severity, message, progname)
192
-
193
- else
194
- progname ||= @progname
195
- if message.nil?
196
- if block_given?
197
- message = yield
198
- else
199
- message = progname
200
- progname = @progname
201
- end
227
+
228
+ class Logger
229
+ alias_method :tcell_old_add, :add
230
+ def add(severity, message = nil, progname = nil, &block)
231
+ if TCellAgent.configuration.enabled &&
232
+ TCellAgent.configuration.should_instrument? &&
233
+ TCellAgent.configuration.should_intercept_requests? &&
234
+ severity >= self.level
235
+
236
+ progname ||= @progname
237
+ if message.nil?
238
+ if block_given?
239
+ message = yield
240
+ else
241
+ message = progname
242
+ progname = @progname
202
243
  end
244
+ end
203
245
 
204
- TCellAgent::Instrumentation.safe_block_no_log("Handling JSAgent add") {
205
- dlp_policy = TCellAgent.policy(TCellAgent::PolicyTypes::DataLoss)
206
- request_env = TCellAgent::Instrumentation::Rails::Middleware::ContextMiddleware::THREADS.fetch(Thread.current.object_id, nil)
207
- if message && dlp_policy && request_env
208
- tcell_context = request_env[TCellAgent::Instrumentation::Rails::Middleware::TCELL_ID]
209
- if tcell_context
210
- tcell_context.filter_log(message)
211
- end
246
+ TCellAgent::Instrumentation.safe_block_no_log("Handling JSAgent add") {
247
+ dlp_policy = TCellAgent.policy(TCellAgent::PolicyTypes::DataLoss)
248
+ request_env = TCellAgent::Instrumentation::Rails::Middleware::ContextMiddleware::THREADS.fetch(Thread.current.object_id, nil)
249
+ if message && dlp_policy && request_env
250
+ tcell_context = request_env[TCellAgent::Instrumentation::Rails::Middleware::TCELL_ID]
251
+ if tcell_context
252
+ tcell_context.filter_log(message)
212
253
  end
213
- }
214
- tcell_old_add(severity, message, progname)
215
- end
254
+ end
255
+ }
216
256
  end
257
+
258
+ tcell_old_add(severity, message, progname)
217
259
  end
218
260
  end