Password Field

The password field is automatically hashed with the default algorithm that is configured in TYPO3.

The hashed password is saved to the table tx_powermail_domain_model_answers. It is possible to deactivate hashing with an EventListener listening to MailFactoryBeforePasswordIsHashedEvent and setting the property passwordShouldBeHashed to true.

In all Mails you can access the original value with the placeholder {passwordfieldname_originalValue}.

In the Finisher SaveToAnyTableFinisher you can use the field passwordfieldname_originalValue in the typoscript configuration and the plaintext password will be saved to the table.

In your own Finisher you can use the field passwordfieldname_originalValue to do whatever you want to do with the plaintext value.

Restoring the old (insecure) behaviour

If you want to restore the old behaviour, to store the password in plaintext, you can apply the following changes.

1. Change Typoscript

This changes are all based upon the default configuration of powermail, if you have your own configuration applied you should change it accordingly.

plugin.tx_powermail.settings.setup {
  excludeFromPowermailAllMarker {
    receiverMail {
      excludeFromFieldTypes >
    }
    senderMail {
      excludeFromFieldTypes >
    }
    optinMail {
      excludeFromFieldTypes >
    }
  }
}
Copied!

2. Integrate an Event Listener

<?php

declare(strict_types=1);

namespace Vendor\Ext\EventListener;

use In2code\Powermail\Domain\Model\Answer;
use In2code\Powermail\Events\MailFactoryBeforePasswordIsHashedEvent;

final class DontHashPasswordEventListener
{
    public function dontHash(MailFactoryBeforePasswordIsHashedEvent $event): void
    {
        if ($event->getAnswer()->getValueType() === Answer::VALUE_TYPE_PASSWORD) {
            $event->setPasswordShouldBeHashed(false);
        }
    }
}
Copied!

3. Add EventListener to services.yaml

services:
  Vendor\Ext\EventListener\DontHashPasswordEventListener:
    tags:
      - name: 'event.listener'
        identifier: 'vendor-ext/dont-hash-password'
        method: 'dontHash'
Copied!

After this changes the password will be stored in plaintext again in the answer table.