37
37
import threading
38
38
from datetime import timedelta
39
39
40
+ import _hashlib
41
+
40
42
from elasticapm .conf .constants import BASE_SANITIZE_FIELD_NAMES , TRACE_CONTINUATION_STRATEGY
41
43
from elasticapm .utils import compat , starmatch_to_regex
42
44
from elasticapm .utils .logging import get_logger
@@ -220,6 +222,8 @@ class _BoolConfigValue(_ConfigValue):
220
222
def __init__ (self , dict_key , true_string = "true" , false_string = "false" , ** kwargs ) -> None :
221
223
self .true_string = true_string
222
224
self .false_string = false_string
225
+ # this is necessary to have the bool type preserved in _validate
226
+ kwargs ["type" ] = bool
223
227
super (_BoolConfigValue , self ).__init__ (dict_key , ** kwargs )
224
228
225
229
def __set__ (self , instance , value ) -> None :
@@ -228,6 +232,7 @@ def __set__(self, instance, value) -> None:
228
232
value = True
229
233
elif value .lower () == self .false_string :
230
234
value = False
235
+ value = self ._validate (instance , value )
231
236
self ._callback_if_changed (instance , value )
232
237
instance ._values [self .dict_key ] = bool (value )
233
238
@@ -373,6 +378,30 @@ def __call__(self, value, field_name):
373
378
return value
374
379
375
380
381
+ def _in_fips_mode ():
382
+ try :
383
+ return _hashlib .get_fips_mode () == 1
384
+ except AttributeError :
385
+ # versions older of Python3.9 do not have the helper
386
+ return False
387
+
388
+
389
+ class SupportedValueInFipsModeValidator (object ):
390
+ """If FIPS mode is enabled only supported_value is accepted"""
391
+
392
+ def __init__ (self , supported_value ) -> None :
393
+ self .supported_value = supported_value
394
+
395
+ def __call__ (self , value , field_name ):
396
+ if _in_fips_mode ():
397
+ if value != self .supported_value :
398
+ raise ConfigurationError (
399
+ "{}={} must be set to {} if FIPS mode is enabled" .format (field_name , value , self .supported_value ),
400
+ field_name ,
401
+ )
402
+ return value
403
+
404
+
376
405
class EnumerationValidator (object ):
377
406
"""
378
407
Validator which ensures that a given config value is chosen from a list
@@ -579,7 +608,9 @@ class Config(_ConfigBase):
579
608
server_url = _ConfigValue ("SERVER_URL" , default = "http://127.0.0.1:8200" , required = True )
580
609
server_cert = _ConfigValue ("SERVER_CERT" , validators = [FileIsReadableValidator ()])
581
610
server_ca_cert_file = _ConfigValue ("SERVER_CA_CERT_FILE" , validators = [FileIsReadableValidator ()])
582
- verify_server_cert = _BoolConfigValue ("VERIFY_SERVER_CERT" , default = True )
611
+ verify_server_cert = _BoolConfigValue (
612
+ "VERIFY_SERVER_CERT" , default = True , validators = [SupportedValueInFipsModeValidator (supported_value = True )]
613
+ )
583
614
use_certifi = _BoolConfigValue ("USE_CERTIFI" , default = True )
584
615
include_paths = _ListConfigValue ("INCLUDE_PATHS" )
585
616
exclude_paths = _ListConfigValue ("EXCLUDE_PATHS" , default = compat .get_default_library_patters ())
0 commit comments