Add processor to monolog handler
< service id = "shopmacher.payment.logger.handler" class = "Monolog\Handler\StreamHandler" >
//...
< call method = "pushProcessor" >
< argument type = "service" id = "service_processor.payment_logger_filtering" />
</ call >
</ service >
class PaymentLoggerFiltering
{
/**
* @var EventDispatcherInterface
*/
private $eventDispatcher ;
/**
* PaymentLoggerFiltering constructor.
* @param EventDispatcherInterface $eventDispatcher
*/
public function __construct ( EventDispatcherInterface $eventDispatcher )
{
$this - > eventDispatcher = $eventDispatcher ;
}
/**
* @param array $record
* @return array
*/
public function __invoke ( array $record )
{
$event = new PaymentLoggerFilteringEvent ( $record ) ;
$this - > eventDispatcher - > dispatch ( PaymentLoggerFilteringEvent ::NAME , $event ) ;
return $event - > getRecord ( ) ;
}
}
public static function getSubscribedEvents ( )
{
return [
PaymentLoggerFilteringEvent ::NAME => [ 'maskData' , 128 ]
] ;
}
/**
* @param PaymentLoggerFilteringEvent $event
*/
public function maskData ( PaymentLoggerFilteringEvent $event )
{
$record = $event - > getRecord ( ) ;
$record [ 'context' ] = $this - > maskCreditCardInfo ( $record [ 'context' ] ) ;
$record [ 'context' ] = $this - > maskIBAN ( $record [ 'context' ] ) ;
$event - > setRecord ( $record ) ;
}
/**
* Class DataMasker
*/
class DataMasker
{
//...
protected function maskText ( string $text )
{
$len = \strlen ( $text ) ;
$unmaskedLen = self ::UNMASKED_LEN * 2 ;
if ( $len > self ::MAX_LEN ) {
$firstChars = substr ( $text , 0 , self ::UNMASKED_LEN ) ;
$lastChars = substr ( $text , $len - self ::UNMASKED_LEN , self ::UNMASKED_LEN ) ;
$hiddenChars = str_repeat ( self ::MASKING_CHAR , $len - $unmaskedLen ) ;
return $firstChars . $hiddenChars . $lastChars ;
}
return str_repeat ( self ::MASKING_CHAR , $len ) ;
}
}