Class: Datadog::AppSec::Processor
- Inherits:
-
Object
- Object
- Datadog::AppSec::Processor
show all
- Defined in:
- lib/datadog/appsec/processor.rb
Overview
Processor integrates libddwaf into datadog/appsec
Defined Under Namespace
Classes: AlreadyActiveContextError, Context, NoActiveContextError
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
Returns a new instance of Processor.
66
67
68
69
70
71
72
73
74
75
76
77
78
|
# File 'lib/datadog/appsec/processor.rb', line 66
def initialize
@ruleset_info = nil
@addresses = []
settings = Datadog::AppSec.settings
unless load_libddwaf && load_ruleset(settings) && create_waf_handle(settings)
Datadog.logger.warn { 'AppSec is disabled, see logged errors above' }
return
end
apply_denylist_data(settings)
end
|
Instance Attribute Details
#addresses ⇒ Object
Returns the value of attribute addresses.
64
65
66
|
# File 'lib/datadog/appsec/processor.rb', line 64
def addresses
@addresses
end
|
#ruleset_info ⇒ Object
Returns the value of attribute ruleset_info.
64
65
66
|
# File 'lib/datadog/appsec/processor.rb', line 64
def ruleset_info
@ruleset_info
end
|
Class Method Details
.active_context ⇒ Object
41
42
43
|
# File 'lib/datadog/appsec/processor.rb', line 41
def active_context
Thread.current[:datadog_current_waf_context]
end
|
233
234
235
|
# File 'lib/datadog/appsec/processor.rb', line 233
def libddwaf_platform
libddwaf_spec ? libddwaf_spec.platform.to_s : 'unknown'
end
|
.libddwaf_provides_waf? ⇒ Boolean
check whether libddwaf is required and able to provide the needed feature
208
209
210
|
# File 'lib/datadog/appsec/processor.rb', line 208
def libddwaf_provides_waf?
defined?(Datadog::AppSec::WAF) ? true : false
end
|
.libddwaf_spec ⇒ Object
229
230
231
|
# File 'lib/datadog/appsec/processor.rb', line 229
def libddwaf_spec
Gem.loaded_specs['libddwaf']
end
|
.require_libddwaf ⇒ Object
libddwaf raises a LoadError on unsupported platforms; it may at some point succeed in being required yet not provide a specific needed feature.
214
215
216
217
218
219
220
221
222
223
224
225
226
227
|
# File 'lib/datadog/appsec/processor.rb', line 214
def require_libddwaf
Datadog.logger.debug { "libddwaf platform: #{libddwaf_platform}" }
require 'libddwaf'
true
rescue LoadError => e
Datadog.logger.error do
'libddwaf failed to load,' \
"installed platform: #{libddwaf_platform} ruby platforms: #{ruby_platforms} error: #{e.inspect}"
end
false
end
|
237
238
239
|
# File 'lib/datadog/appsec/processor.rb', line 237
def ruby_platforms
Gem.platforms.map(&:to_s)
end
|
Instance Method Details
#activate_context ⇒ Object
88
89
90
91
92
93
94
95
|
# File 'lib/datadog/appsec/processor.rb', line 88
def activate_context
existing_active_context = Processor.active_context
raise AlreadyActiveContextError if existing_active_context
context = new_context
Processor.send(:active_context=, context)
context
end
|
#deactivate_context ⇒ Object
97
98
99
100
101
102
103
|
# File 'lib/datadog/appsec/processor.rb', line 97
def deactivate_context
context = Processor.active_context
raise NoActiveContextError unless context
Processor.send(:reset_active_context)
context.finalize
end
|
#finalize ⇒ Object
113
114
115
|
# File 'lib/datadog/appsec/processor.rb', line 113
def finalize
@handle.finalize
end
|
#new_context ⇒ Object
84
85
86
|
# File 'lib/datadog/appsec/processor.rb', line 84
def new_context
Context.new(self)
end
|
#ready? ⇒ Boolean
80
81
82
|
# File 'lib/datadog/appsec/processor.rb', line 80
def ready?
!@ruleset.nil? && !@handle.nil?
end
|
#toggle_rules(map) ⇒ Object
109
110
111
|
# File 'lib/datadog/appsec/processor.rb', line 109
def toggle_rules(map)
@handle.toggle_rules(map)
end
|
#update_rule_data(data) ⇒ Object
105
106
107
|
# File 'lib/datadog/appsec/processor.rb', line 105
def update_rule_data(data)
@handle.update_rule_data(data)
end
|