Version 5.3.5
Fixes a privilege escalation. On sites with
allowAdminChangeson, any logged-in user could change Porter's settings. Review yours after upgrading.
Security
- Plugin settings could be saved by any logged-in user, including front-end members.
porter/settings/saveonly required a POST, and assigned posted values unsafely. It now requires an admin in the control panel, and only accepts known settings. Sites withallowAdminChangesoff were not writable, as Craft refuses the change - The settings page was readable by any logged-in user, exposing every configured value. It now requires an admin in the control panel. This applied whatever
allowAdminChangeswas set to - Removed a redundant
allowAnonymousfrom the delete account controller. Not exploitable, as the action only acts on the signed-in user
Changed
- The
Porterutility uses its own icon
Version 5.3.4
Burner email blocking no longer uses the Verifier API, and
emailsBurnersVerifierApiKeyhas been removed. The check now runs against a domain list on your own server instead of a third-party service.
Added
- Burner email blocking works without an API key or an account. A list of 75,000+ disposable domains is downloaded when you switch the feature on, alongside syntax and MX checks (#13)
porter/burner-emails/updaterefreshes the list from disposable/disposable-email-domains, which is regenerated daily- A button in the
Porterutility to update the list without the command line
Changed
- Checking an address no longer leaves the server. The domain list is a file in
storage/porter/, read from disk Password Retentionand the disposable domain list are now sections of a singlePorterutility, rather than a utility each
Removed
- The Verifier API and its
emailsBurnersVerifierApiKeysetting. The service was unreliable, sign up was reportedly impossible, and no equivalent is free and sustainable
Fixed
- Burner email checking failed closed. If the Verifier API was unreachable or the key was rejected, every address was refused and the site quietly stopped accepting registrations
- Burner email checking ran on every user save, so editing any user in the control panel sent their address to a third party. It only runs when the address is new or changed
Version 5.3.3
Security
- Magic link tokens are now stored as a SHA-256 digest. A copy of the database is no longer a set of usable sign in links. Links already sent keep working
- Magic link requests are capped per email address, so the form can't be used to mail bomb someone. Set
magicLinkThrottleLimitandmagicLinkThrottleWindowinconfig/porter.php - Requesting a link now answers the same way whether or not the address has an account, so the form can no longer be used to find out who has one
- Requests also take the same time to answer either way. Sending an email is slower than not sending one, and the difference was enough to tell the two apart. Tune with
magicLinkMinResponseMsinconfig/porter.php
Changed
- A magic link now activates a pending account. Someone who registered but never clicked Craft's activation email can finish through the link instead of being stuck
- Magic link registration creates the account as pending, and the link activates it. A sign up nobody confirms no longer leaves a live account behind. Set
purgePendingUsersDurationinconfig/general.phpto have Craft clear them away, as it defaults to off
Version 5.3.2
Added
- Magic link registration, so an unrecognised email creates the account and signs the user in. No password is ever chosen (#7)
New User Redirect, where brand new accounts land. Override it per form withnewUserRedirect
Version 5.3.1
Inactive Account Cleanup now deletes accounts instead of deactivating them, and
inactiveAccountDeactivateDaysis nowinactiveAccountDeleteDays. Check your threshold after upgrading.
Added
- Confirm password field, so a typo can't be saved unnoticed. Added automatically to Craft's set password screen and the control panel; add a
confirmPasswordfield to your own forms Sign in with a magic linkon the control panel login screen, with its own sign in page
Changed
- Magic links now run the same checks as a normal sign in. Suspended, locked, pending and password-reset-required accounts are refused, as are accounts using two-step verification, which a link can't satisfy
- Inactive Account Cleanup deletes accounts rather than deactivating them. They go to the trash and can be restored for 30 days
- The reminder email says the account will be deleted, and
Account Deletedfires instead ofAccount Deactivated
Version 5.3.0
Added
- Password Policy settings tab, with each feature switched on separately
- Have I Been Pwned checking, so passwords found in a data breach are rejected
- Password strength indicator for the control panel, the set password screen and the front end, with an optional minimum strength
- Blocklist, to reject passwords containing the user's own details, the site name or your own banned words
- Password history, so old passwords can't be reused
- Password expiry, with
porter/passwords/retentionto run from cron and aPassword Retentionutility Password Expiring SoonandPassword Expiredemails- Exemptions for admins and chosen user groups
- Twig helpers for the strength indicator, the rules, password strength and expiry dates
Force reset expired passwordspermission
Changed
- Password errors now appear inline on the field, and work in the console and queue
- Porter's minimum length replaces Craft's six character rule instead of sitting alongside it
- The
Email & Passwordtab is nowEmail, with passwords moved to a newPassword Policytab - All four
Redirectsettings share the same label, instructions and placeholder
Fixed
- Static analysis wasn't running, due to a typo in
phpstan.neon
Version 5.2.2
Fixed
- Deactivate account form now returns proper JSON responses when called via AJAX
Version 5.2.1
Added
- Inactive Account Reminder email and
porter/users/cleanup-inactiveconsole command (defaults: warn after 365 days of inactivity, deactivate after 395) - Reactivating a user automatically clears their
lastLoginDate, so the cleanup gives them a fresh inactivity clock
Changed
- Settings tabs reorganised, with section headings and action-style toggle labels
Version 5.2.0
The legacy
Send Confirmation Emailtoggles and their system messages have been removed. EnableAccount DeletedandAccount DeactivatedunderPorter > Notificationsto keep sending confirmation emails, and re-apply any customisations toporter_account_deleted_email/porter_account_deactivated_email.
Added
- Welcome email when a user’s account is activated
- New Device Login email when a sign in is detected from a new IP or user agent
- Password Changed email
- Email Address Changed email, sent to the user’s previous address
- Account Suspended and Account Restored emails
- Account Deactivated and Account Deleted emails, fired on any path
- Failed Login Attempts email when failures cross a configurable threshold (default 3)
- Responsive HTML email layout at
src/templates/email/_layout.twig - System messages for each notification, editable under
Settings > System Messages porter_user_loginstable tracking the last known IP/UA hash per user
Removed
deleteAccountConfirmationEmail/deactivateAccountConfirmationEmailsettingsporter_delete_account_confirmation_email/porter_deactivate_account_confirmation_emailsystem messages
Fixed
- Template-level
redirectoverride on the deactivate account form was ignored on submit
Version 5.1.2
Changed
- Removed leftover debug code and unused imports
Version 5.1.1
Fixed
- Magic link JSON response incorrectly returned success when it failed
- Password policy checks were running each rule twice unnecessarily
- Delete account confirmation field could error if the field name was invalid
Changed
- Logging now uses Craft's built-in Monolog logger instead of a custom log file
Version 5.1.0
If you copied the deactivate account template into your project, you'll need to update it to use a
<form>with a POST request instead of a plain<a>link. SeedeactivateAccountForm.twigfor the updated markup.
Fixed
- Password maximum length rule was never being applied
- Magic link request could error if the email address didn't belong to any user
- Magic link could error if the user account was deleted after the link was sent
- Deactivate account action was not protected against cross-site request forgery (CSRF)
- Email verifier API errors were being output directly instead of being logged
- Email verifier API could hang indefinitely if the service was unresponsive
- Email verifier could error if the service returned an unexpected response
Changed
- Deactivate account form now uses a proper form submission instead of a plain link
- Added a database index on magic link tokens for faster lookups
Version 5.0.2
Fixed
- If password field is blank when saving a user in the CP, skip password validation
Version 5.0.1
Changed
- Icon to a new shiny (literally) icon
Version 5.0.0
Changed
- Craft 5 compatibility
Version 1.0.4
Fixed
- Blank errors appearing when matching password rules
Added
- Passwords changed in the CP now go through the password rules
Version 1.0.3
Added
porter.phpconfig file example.
Version 1.0.2
Added
craft.porter.deleteAccountFormProperties()variable to get default delete account form template properties in Twig.craft.porter.deactivateAccountFormProperties()variable to get default deactivate account form template properties in Twig.craft.porter.magicLinkFormProperties()variable to get default magic link form template properties in Twig.
Version 1.0.0
Added
- Initial release