mirror of
https://github.com/YunoHost/yunohost.git
synced 2024-09-03 20:06:10 +02:00
Add redacting mechanism for secrets, using a custom Formatter
This commit is contained in:
parent
158aa08022
commit
37274a9e54
1 changed files with 19 additions and 2 deletions
|
@ -289,6 +289,19 @@ def is_unit_operation(entities=['app', 'domain', 'service', 'user'],
|
||||||
return decorate
|
return decorate
|
||||||
|
|
||||||
|
|
||||||
|
class RedactingFormatter(Formatter):
|
||||||
|
|
||||||
|
def __init__(self, format_string, data_to_redact):
|
||||||
|
super(RedactingFormatter, self).__init__(format_string)
|
||||||
|
self.data_to_redact = data_to_redact
|
||||||
|
|
||||||
|
def format(self, record):
|
||||||
|
msg = super(RedactingFormatter, self).format(record)
|
||||||
|
for data in self.data_to_redact:
|
||||||
|
msg = msg.replace(data, "**********")
|
||||||
|
return msg
|
||||||
|
|
||||||
|
|
||||||
class OperationLogger(object):
|
class OperationLogger(object):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
@ -309,6 +322,7 @@ class OperationLogger(object):
|
||||||
self.ended_at = None
|
self.ended_at = None
|
||||||
self.logger = None
|
self.logger = None
|
||||||
self._name = None
|
self._name = None
|
||||||
|
self.data_to_redact = []
|
||||||
|
|
||||||
self.path = OPERATIONS_PATH
|
self.path = OPERATIONS_PATH
|
||||||
|
|
||||||
|
@ -345,9 +359,12 @@ class OperationLogger(object):
|
||||||
Register log with a handler connected on log system
|
Register log with a handler connected on log system
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# TODO add a way to not save password on app installation
|
|
||||||
self.file_handler = FileHandler(self.log_path)
|
self.file_handler = FileHandler(self.log_path)
|
||||||
self.file_handler.formatter = Formatter('%(asctime)s: %(levelname)s - %(message)s')
|
# We use a custom formatter that's able to redact all stuff in self.data_to_redact
|
||||||
|
# N.B. : the stubtle thing here is that the class will remember a pointer to the list,
|
||||||
|
# so we can directly append stuff to self.data_to_redact and that'll be automatically
|
||||||
|
# propagated to the RedactingFormatter
|
||||||
|
self.file_handler.formatter = RedactingFormatter('%(asctime)s: %(levelname)s - %(message)s', self.data_to_redact)
|
||||||
|
|
||||||
# Listen to the root logger
|
# Listen to the root logger
|
||||||
self.logger = getLogger('yunohost')
|
self.logger = getLogger('yunohost')
|
||||||
|
|
Loading…
Add table
Reference in a new issue