From a0a20ec7428a4b47f4bc11018b5747e0e546b2ba Mon Sep 17 00:00:00 2001 From: Johannes la Poutre Date: Thu, 25 May 2023 00:56:45 +0200 Subject: [PATCH 01/32] feat(i18n): update NL translations --- src/User/resources/i18n/nl/usuario.php | 386 ++++++++++++------------- 1 file changed, 193 insertions(+), 193 deletions(-) diff --git a/src/User/resources/i18n/nl/usuario.php b/src/User/resources/i18n/nl/usuario.php index ee4851b1..4535e619 100644 --- a/src/User/resources/i18n/nl/usuario.php +++ b/src/User/resources/i18n/nl/usuario.php @@ -18,117 +18,117 @@ */ return [ '(not set)' => '(niet ingesteld)', - 'A confirmation message has been sent to your new email address' => 'Er werd een bevestigingsmail naar het nieuwe emailadres verzonden', - 'A message has been sent to your email address. It contains a confirmation link that you must click to complete registration.' => 'Een email met daarin een bevestigingslink werd verzonden naar jouw email adres. Klik op de link om de registratie te vervolledigen.', - 'A new confirmation link has been sent' => 'Een nieuwe bevestigingslink werd verzonden', - 'A password will be generated automatically if not provided' => 'Een wachtwoord zal automatisch gegenereerd worden in het geval dat er geen wachtwoord werd ingegeven', + 'A confirmation message has been sent to your new email address' => 'Er is bevestigings-email naar het nieuwe email-adres verzonden', + 'A message has been sent to your email address. It contains a confirmation link that you must click to complete registration.' => 'Er is een email met een bevestigingslink naar jouw email adres gestuurd. Klik de link om de registratie te bevestigen.', + 'A new confirmation link has been sent' => 'Er is een nieuwe bevestigingslink verstuurd', + 'A password will be generated automatically if not provided' => 'Er wordt automatisch een wachtwoord gegenereerd als er wachtwoord werd ingevuld', 'Account' => 'Account', - 'Account confirmation' => 'Account bevestiging', - 'Account details' => 'Account details', - 'Account details have been updated' => 'Account details werden geupdate', - 'Account settings' => 'Account instellingen', - 'Already registered? Sign in!' => 'Reeds geregistreerd? Log in!', - 'An error occurred processing your request' => 'Een error trad op terwijl we uw aanvraag verwerkten', - 'Are you sure you want to block this user?' => 'Ben je zeker dat je deze gebruiker wil blokkeren?', - 'Are you sure you want to confirm this user?' => 'Ben je zeker dat je deze gebruiker wil bevestigen?', - 'Are you sure you want to delete this user?' => 'Ben je zeker dat je deze gebrukiker wil verwijderen?', - 'Are you sure you want to switch to this user for the rest of this Session?' => 'Ben je zeker dat je naar deze gebruiker wil wisselen tot het einde van deze sessie?', - 'Are you sure you want to unblock this user?' => 'Ben je zeker dat je deze gebruiker wil deblokkeren?', - 'Are you sure you wish the user to change their password at next login?' => 'Ben je zeker dat de gebruiker zijn wachtwoord wijzigd bij de volgende keer dat deze zich inlogt?', - 'Are you sure you wish to send a password recovery email to this user?' => 'Ben je zeker dat je een wachtwoord herstel email naar deze gebruiker wil verzenden?', - 'Are you sure? Deleted user can not be restored' => 'Ben je zeker? Een verwijderde gebruiker kan niet worden hersteld!', - 'Are you sure? There is no going back' => 'Ben je zeker? Er is geen terugweg meer nadien!', + 'Account confirmation' => 'Account-bevestiging', + 'Account details' => 'Account-details', + 'Account details have been updated' => 'Account-details zijn bijgewerkt', + 'Account settings' => 'Account-instellingen', + 'Already registered? Sign in!' => 'Al geregistreerd? Log in!', + 'An error occurred processing your request' => 'Er is een fout opgetreden', + 'Are you sure you want to block this user?' => 'Weet je zeker dat je deze gebruiker wil blokkeren?', + 'Are you sure you want to confirm this user?' => 'Weet je zeker dat je deze gebruiker wil bevestigen?', + 'Are you sure you want to delete this user?' => 'Weet je zeker dat je deze gebruiker wil verwijderen?', + 'Are you sure you want to switch to this user for the rest of this Session?' => 'Weet je zeker dat je als deze gebruiker wil verder gaan tot het einde van deze sessie?', + 'Are you sure you want to unblock this user?' => 'Weet je zeker dat je deze gebruiker wil deblokkeren?', + 'Are you sure you wish the user to change their password at next login?' => 'Weet je zeker dat de gebruiker zijn wachtwoord moet wijzigen bij de volgende keer inloggen?', + 'Are you sure you wish to send a password recovery email to this user?' => 'Weet je zeker dat je een wachtwoord-herstelmail naar deze gebruiker wil verzenden?', + 'Are you sure? Deleted user can not be restored' => 'Weet je het zeker? Een verwijderde gebruiker kan niet worden hersteld!', + 'Are you sure? There is no going back' => 'Weet je het zeker? Dit kan niet ongedaan worden gemaakt!', 'Assignments' => 'Toewijzing', - 'Assignments have been updated' => 'Toewijzingen werden geupdate', - 'Auth item with such name already exists' => 'Auth item met deze naam bestaat reeds', - 'Authentication rule class {0} can not be instantiated' => 'Authenticatie regel klasse {0} can niet worden geïnstantieerd', - 'Authorization item successfully created.' => 'Authorisatie item met succes aangemaakt', - 'Authorization item successfully removed.' => 'Authorisatie item met succes verwijderd', - 'Authorization item successfully updated.' => 'Authorisatie item met succes geupdate', - 'Authorization rule has been added.' => 'Authorisatie regel werd toegevoegd', - 'Authorization rule has been removed.' => 'Authorisatie regel werd verwijderd', - 'Authorization rule has been updated.' => 'Authorisatie regel werd geupdate', - 'Awesome, almost there. Now you need to click the confirmation link sent to your new email address.' => 'Super, bijna klaar. Enkel nog de bevestigingslink aanklikken in de mail die naar jouw nieuw emailadres werd gestuurd', - 'Awesome, almost there. Now you need to click the confirmation link sent to your old email address.' => 'Super, bijna klaar. Enkel nog de bevestigingslink aanklikken in de mail die naar jouw oud emailadres werd gestuurd', - 'Back to privacy settings' => 'Terug naar privcay settings', + 'Assignments have been updated' => 'Toewijzingen zijn bijgewerkt', + 'Auth item with such name already exists' => 'Auth item met deze naam bestaat al', + 'Authentication rule class {0} can not be instantiated' => 'Authenticatie-regel klasse {0} kan niet worden geïnstantieerd', + 'Authorization item successfully created.' => 'Authorisatie-item aangemaakt', + 'Authorization item successfully removed.' => 'Authorisatie-item verwijderd', + 'Authorization item successfully updated.' => 'Authorisatie-item bijgewerkt', + 'Authorization rule has been added.' => 'Authorisatie-regel is toegevoegd', + 'Authorization rule has been removed.' => 'Authorisatie-regel is verwijderd', + 'Authorization rule has been updated.' => 'Authorisatie-regel is bijgewerkt', + 'Awesome, almost there. Now you need to click the confirmation link sent to your new email address.' => 'Super, bijna klaar. Alleen nog de bevestigingslink klikken in de mail die naar jouw nieuwe email-adres is gestuurd', + 'Awesome, almost there. Now you need to click the confirmation link sent to your old email address.' => 'Super, bijna klaar. Alleen nog de bevestigingslink klikken in de mail die naar jouw oude email-adres is gestuurd', + 'Back to privacy settings' => 'Terug naar privacy-instellingen', 'Bio' => 'Bio', 'Block' => 'Blokkeren', - 'Block status' => 'Blokeer status', - 'Blocked at {0, date, MMMM dd, YYYY HH:mm}' => 'Geblokkeerd om {0, date, MMMM dd, YYYY HH:mm}', + 'Block status' => 'Geblokkeerd', + 'Blocked at {0, date, MMMM dd, YYYY HH:mm}' => 'Geblokkeerd op {0, date, MMMM dd, YYYY HH:mm}', 'Cancel' => 'Annuleren', - 'Cannot assign role "{0}" as the AuthManager is not configured on your console application.' => 'Kan rol {0} niet toewijzen doordat de AuthManager niet geconfigureerd is op jouw console applicatie', - 'Change your avatar at Gravatar.com' => 'Wijzig jouw avatar op Gravatar.com', + 'Cannot assign role "{0}" as the AuthManager is not configured on your console application.' => 'Kan rol {0} niet toewijzen doordat de AuthManager niet geconfigureerd is in je console-applicatie', + 'Change your avatar at Gravatar.com' => 'Wijzig je avatar op Gravatar.com', 'Children' => 'Kinderen', 'Class' => 'Klasse', 'Close' => 'Sluiten', - 'Complete password reset on {0}' => 'Vervolledig het resetten van het wachtwoord op {0}', + 'Complete password reset on {0}' => 'Voltooi het herstellen van het wachtwoord op {0}', 'Confirm' => 'Bevestig', 'Confirm account on {0}' => 'Bevestig account op {0}', - 'Confirm email change on {0}' => 'Bevestig email wijziging op {0}', + 'Confirm email change on {0}' => 'Bevestig email-wijziging op {0}', 'Confirmation' => 'Bevestiging', 'Confirmation status' => 'Bevestiging status', 'Confirmation time' => 'Bevestiging tijdstip', 'Confirmed' => 'Bevestigd', 'Confirmed at {0, date, MMMM dd, YYYY HH:mm}' => 'Bevestigd op {0, date, MMMM dd, YYYY HH:mm}', - 'Connect' => 'Connecteren', + 'Connect' => 'Verbinden', 'Continue' => 'Doorgaan', 'Create' => 'Aanmaken', - 'Create a user account' => 'Maak een gebruikers account aan', + 'Create a user account' => 'Maak een gebruikers-account aan', 'Create new permission' => 'Maak een nieuwe machtiging aan', - 'Create new role' => 'Maak een nieuw rol aan', + 'Create new role' => 'Maak een nieuwe rol aan', 'Create new rule' => 'maak een nieuwe regel aan', 'Created at' => 'Gemaakt op', - 'Credentials will be sent to the user by email' => 'Inloggevens word via mail naar de gebruiker verzonden', + 'Credentials will be sent to the user by email' => 'Inloggegevens zijn via email naar de gebruiker verzonden', 'Current password' => 'Huidig wachtwoord', 'Current password is not valid' => 'Huidig wachtwoord is niet geldig', - 'Data processing consent' => 'Data verwerking toestemming', + 'Data processing consent' => 'Data-verwerking toestemming', 'Delete' => 'Verwijderen', 'Delete account' => 'Account verwijderen', 'Delete my account' => 'Verwijder mijn account', 'Delete personal data' => 'Verwijder mijn persoonlijke data', 'Deleted by GDPR request' => 'Verwijder mijn GDPR aanvraag', 'Description' => 'Omschrijving', - 'Didn\'t receive confirmation message?' => 'Geen bevestiging email ontvangen?', + 'Didn\'t receive confirmation message?' => 'Geen bevestigings-email ontvangen?', 'Disable two factor authentication' => 'Tweetraps authenticatie uitschakelen', - 'Disconnect' => 'Verbindig verbreken', + 'Disconnect' => 'Verbinding verbreken', 'Don\'t have an account? Sign up!' => 'Geen account? Meld je aan', 'Download my data' => 'Download mijn data', 'Email' => 'Email', 'Email (public)' => 'Email (publiek)', 'Enable' => 'Inschakelen', - 'Enable two factor authentication' => 'Schakel tweetraps authenticatie in', - 'Error occurred while changing password' => 'Een error deed zich voor tijdens het wijzigen van het wachtwoord', - 'Error occurred while confirming user' => 'Een error deed zich voor tijdens het bevestigen van de gebruiker', - 'Error occurred while deleting user' => 'Een error deed zich voor tijdens het wissen van de gebruiker', - 'Error sending registration message to "{email}". Please try again later.' => 'Een error deed zich voor tijdens het zenden van de regustratie email naar "{email}". Probeer later nog eens.', - 'Error sending welcome message to "{email}". Please try again later.' => 'Een error deed zich voor tijdens het verzenden van de welkom email naar "{email}". Probeer later nog eens.', + 'Enable two factor authentication' => 'Schakel tweefactor-authenticatie in', + 'Error occurred while changing password' => 'Er is een fout opgetreden bij het wijzigen van het wachtwoord', + 'Error occurred while confirming user' => 'Er is een fout opgetreden bij het bevestigen van de gebruiker', + 'Error occurred while deleting user' => 'Er is een fout opgetreden bij het wissen van de gebruiker', + 'Error sending registration message to "{email}". Please try again later.' => 'Er is een fout opgetreden bij het versturen van de registratie-email naar "{email}". Probeer later nog eens.', + 'Error sending welcome message to "{email}". Please try again later.' => 'Er is een fout opgetreden bij het versturen van de welkomst-email naar "{email}". Probeer later nog eens.', 'Export my data' => 'Exporteer mijn data', - 'Finish' => 'beëindig', - 'Force password change at next login' => 'Forceer wachtwoord reset bij volgende login', + 'Finish' => 'Beëindig', + 'Force password change at next login' => 'Forceer wachtwoord-reset bij volgende login', 'Forgot password?' => 'Wachtwoord vergeten?', 'Gravatar email' => 'Gravatar email', 'Hello' => 'Hallo', - 'Here you can download your personal data in a comma separated values format.' => 'Hier kan je al jouw persoonlijke data downloaden in een komma\'s gescheiden formaat.', + 'Here you can download your personal data in a comma separated values format.' => 'Hier kan je al jouw persoonlijke data downloaden in een komma-gescheiden formaat.', 'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => 'Ik ga akkoord met het verwerken van mijn persoonlijke data en het gebruik van cookies om de werking van deze website te vergemakkelijken. Voor meer, lees onze {privacyPolicy}', - 'If you already registered, sign in and connect this account on settings page' => 'Als je reeds geregistreerd bent, meldt je aan en verbind deze account via de instellingen pagina', - 'If you cannot click the link, please try pasting the text into your browser' => 'Als je niet op deze link kan klikken, kopieer en plak de tekst in jouw browser', - 'If you did not make this request you can ignore this email' => 'Als je deze aanvraag niet deed mag je deze email negeren', + 'If you already registered, sign in and connect this account on settings page' => 'Meldt je aan en verbind deze account via de instellingen pagina als he al geregistreerd bent', + 'If you cannot click the link, please try pasting the text into your browser' => 'Als je niet op deze link kan klikken, kopieer en plak de tekst dan in je web-browser', + 'If you did not make this request you can ignore this email' => 'Als je deze aanvraag niet deed kan je deze email negeren', 'Impersonate this user' => 'Doe zich voor als deze gebruiker', - 'In order to complete your registration, please click the link below' => 'Om jouw registratie te vervolledigen, klik op onderstaande link', - 'In order to complete your request, please click the link below' => 'Om jouw aanvraag te vervolledigen, klik op onderstaande link', - 'In order to finish your registration, we need you to enter following fields' => 'Om jouw registratie te beëindigen, dien je volgende velden in te vullen', + 'In order to complete your registration, please click the link below' => 'Klik op onderstaande link om je registratie te bevestigen', + 'In order to complete your request, please click the link below' => 'Klik op onderstaande link om je aanvraag te bevestigen', + 'In order to finish your registration, we need you to enter following fields' => 'De volgende velden moeten worden ingevuld om je registratie te beëindigen', 'Information' => 'Informatie', 'Invalid login or password' => 'Ongeldige login of wachtwoord', 'Invalid or expired link' => 'Ongeldige of vervallen link', 'Invalid password' => 'Ongeldig wachtwoord', - 'Invalid two factor authentication code' => 'Ongeldige tweetraps authenticatie code', + 'Invalid two factor authentication code' => 'Ongeldige tweefactor-authenticatie code', 'Invalid value' => 'Ongeldige waarde', 'It will be deleted forever' => 'Het zal voor altijd verwijderd worden', 'Items' => 'Items', - 'Joined on {0, date}' => 'Toegetreden op {0, date}', + 'Joined on {0, date}' => 'Geregistreerd op {0, date}', 'Last login IP' => 'Laatste login IP', - 'Last login time' => 'Laatste login tijdstip', - 'Last password change' => 'Laatste wachtwoord wijziging', + 'Last login time' => 'Laatste login-tijdstip', + 'Last password change' => 'Laatste wachtwoordwijziging', 'Location' => 'Locatie', 'Login' => 'Log in', 'Logout' => 'Log uit', @@ -144,178 +144,178 @@ 'New user' => 'Nieuwe gebruiker', 'Not blocked' => 'Niet geblokkeerd', 'Not found' => 'Niet gevonden', - 'Once you delete your account, there is no going back' => 'Wanneer je jouw account verwijderd, is er geen terugkeren meer mogelijk', - 'Once you have deleted your data, you will not longer be able to sign in with this account.' => 'Wanneer je jouw data verwijderd is inloggen met deze account niet meer mogelijk.', + 'Once you delete your account, there is no going back' => 'Als je jouw account verwijderd kan dit niet hersteld worden', + 'Once you have deleted your data, you will not longer be able to sign in with this account.' => 'Als je jouw data verwijderd is inloggen met deze account niet meer mogelijk.', 'Password' => 'Wachtwoord', - 'Password age' => 'Wachtwoord leeftijd', - 'Password has been changed' => 'Wachtwoord werd gewijzigd', + 'Password age' => 'Wachtwoord ouderdom', + 'Password has been changed' => 'Wachtwoord is gewijzigd', 'Permissions' => 'Machtigingen', - 'Please be certain' => 'Gelieve zeker te zijn', - 'Please click the link below to complete your password reset' => 'Klik op onderstaande link om jouw wachtwoord reset te vervolledigen', - 'Please fix following errors:' => 'Gelieve volgende fouten op te lossen:', + 'Please be certain' => 'Weet je het zeker?', + 'Please click the link below to complete your password reset' => 'Klik op onderstaande link om je wachtwoord-reset te bevestigen', + 'Please fix following errors:' => 'Los de volgende fouten op:', 'Privacy' => 'Privacy', - 'Privacy settings' => 'Privacy instellingen', + 'Privacy settings' => 'Privacy-instellingen', 'Profile' => 'Profiel', - 'Profile details' => 'Profiel details', - 'Profile details have been updated' => 'Profiel details werden geupdate', - 'Profile settings' => 'Profiel instellingen', + 'Profile details' => 'Profielgegevens', + 'Profile details have been updated' => 'Profielgegevens zijn bijgewerkt', + 'Profile settings' => 'Profiel-instellingen', 'Recover your password' => 'Herstel je wachtwoord', - 'Recovery link is invalid or expired. Please try requesting a new one.' => 'Herstel link is ongeldig of vervallen. Gelieve een nieuwe aan te vragen', - 'Recovery message sent' => 'Herstel bericht verzonden', + 'Recovery link is invalid or expired. Please try requesting a new one.' => 'De herstel-link is ongeldig of vervallen. Vraag een nieuwe aan', + 'Recovery message sent' => 'Herstel-bericht verzonden', 'Registration IP' => 'Registratie IP', 'Registration on this website is disabled' => 'Registratie is gedeactiveerd op deze website', - 'Registration time' => 'Registratie tijdstip', - 'Remember me next time' => 'Onthou me', - 'Request new confirmation message' => 'Vraag een nieuw bevestigings bericht aan', + 'Registration time' => 'Registratie-tijdstip', + 'Remember me next time' => 'Onthou mijn login', + 'Request new confirmation message' => 'Vraag een nieuwe bevestigings-email aan', 'Required "key" cannot be empty.' => 'Verplicht veld "key" kan niet leeg zijn.', 'Required "secret" cannot be empty.' => 'Verplicht veld "geheim" kan niet leeg zijn.', - 'Reset your password' => 'Reset jouw wachtwoord', - 'Role "{0}" not found. Creating it.' => 'Rol "{0}" kan niet worden gevonden. Het wordt aangemaakt', + 'Reset your password' => 'Reset je wachtwoord', + 'Role "{0}" not found. Creating it.' => 'Rol "{0}" kan niet worden gevonden. Deze wordt aangemaakt', 'Roles' => 'Rollen', 'Rule' => 'Regel', - 'Rule class must extend "yii\\rbac\\Rule".' => 'Regel classe moet "yii\\rbac\\Rule" extenden.', + 'Rule class must extend "yii\\rbac\\Rule".' => 'Regel subclass van "yii\\rbac\\Rule" zijn.', 'Rule name' => 'Regel naam', 'Rule name {0} is already in use' => 'Regel met naam "{0}" is al in gebruik', 'Rule {0} does not exists' => 'Regel {0} bestaat niet', - 'Rule {0} not found.' => 'Regel {0} werd niet gevonden', + 'Rule {0} not found.' => 'Regel {0} niet gevonden', 'Rules' => 'Regels', 'Save' => 'Opslaan', - 'Scan the QrCode with Google Authenticator App, then insert its temporary code on the box and submit.' => 'Scan de QR coe met Google Authenticator (of andere) en geef vervolgens de tijdelijke code in en klik hierna op verzenden.', - 'Send password recovery email' => 'Verzend wachtwoord herstel email', + 'Scan the QrCode with Google Authenticator App, then insert its temporary code on the box and submit.' => 'Scan de QR code met Google Authenticator (of andere), voer de tijdelijke code in en klik op verzenden.', + 'Send password recovery email' => 'Verzend wachtwoord-herstel email', 'Sign in' => 'Aanmelden', 'Sign up' => 'Registreren', 'Something went wrong' => 'Er ging iets mis', 'Switch identities is disabled.' => 'Identiteiten wisselen is niet ingeschakeld', - 'Thank you for signing up on {0}' => 'Bedankt om je te registreren op "{0}"', - 'Thank you, registration is now complete.' => 'Bedankt, jouw registratie is voltooid.', + 'Thank you for signing up on {0}' => 'Bedankt voor je registratie op "{0}"', + 'Thank you, registration is now complete.' => 'Bedankt, jouw registratie is klaar.', 'The "recaptcha" component must be configured.' => 'De "recaptcha" component moet worden geconfigureerd.', - 'The confirmation link is invalid or expired. Please try requesting a new one.' => 'De bevestigings link is ongeludig of vervallen. Gelieve een nieuwe aan te vragen.', + 'The confirmation link is invalid or expired. Please try requesting a new one.' => 'De bevestigings-link is ongeldig of vervallen. Vraag een nieuwe aan.', 'The verification code is incorrect.' => 'De bevestigingscode is ongeldig', 'There is neither role nor permission with name "{0}"' => 'Er is geen rol of machtiging met de naam "{0}"', - 'There was an error in saving user' => 'Er was een fout bij het opslaan van de gebruiker', + 'There was an error in saving user' => 'Er ging iets fout bij het opslaan van de gebruiker', 'This account has already been connected to another user' => 'Dit account is al verbonden met een andere gebruiker', - 'This email address has already been taken' => 'Dit emailadres is al in gebruik', + 'This email address has already been taken' => 'Dit email-adres is al in gebruik', 'This username has already been taken' => 'Deze gebruikersnaam is al in gebruik', - 'This will disable two factor authentication. Are you sure?' => 'Dit zal de tweetraps authenticatie uitschakelen. Ben je zeker?', - 'This will remove your personal data from this site. You will no longer be able to sign in.' => 'Dit zal jouw persoonlijke data van de website wissen. Je zal niet langer kunnen inloggen.', - 'Time zone' => 'Tijd zonde', - 'Time zone is not valid' => 'Tijd zone is niet geldig', - 'Two Factor Authentication (2FA)' => 'Tweetraps authenticatie (2FA)', - 'Two factor authentication code' => 'Tweetraps authenticatie code', - 'Two factor authentication has been disabled.' => 'Tweetraps authenticatie is uitgeschakeld', - 'Two factor authentication successfully enabled.' => 'Tweetraps authenticatie met succes ingeschakeld', + 'This will disable two factor authentication. Are you sure?' => 'Dit zal de tweetraps authenticatie uitschakelen. Weet je het zeker?', + 'This will remove your personal data from this site. You will no longer be able to sign in.' => 'Dit zal jouw persoonlijke data van de website wissen. Je kan niet langer inloggen.', + 'Time zone' => 'Tijdzone', + 'Time zone is not valid' => 'Tijdzone is niet geldig', + 'Two Factor Authentication (2FA)' => 'Tweefactor-authenticatie (2FA)', + 'Two factor authentication code' => 'Tweefactor-authenticatiecode', + 'Two factor authentication has been disabled.' => 'Tweefactor-authenticatie is uitgeschakeld', + 'Two factor authentication successfully enabled.' => 'Tweefactor-authenticatie met succes ingeschakeld', 'Unable to confirm user. Please, try again.' => 'Onmogelijk om de gebruiker te bevestigen. Probeer opnieuw.', 'Unable to create an account.' => 'Onmogelijk om een account aan te maken.', - 'Unable to create authorization item.' => 'Onmogelijk om een authorisatie item aan te maken', - 'Unable to create new authorization rule.' => 'Onmogelijk om een authorisatie regel aan te maken', + 'Unable to create authorization item.' => 'Onmogelijk om een authorisatie-item aan te maken', + 'Unable to create new authorization rule.' => 'Onmogelijk om een authorisatie-regel aan te maken', 'Unable to delete user. Please, try again later.' => 'Onmogelijk om de gebruiker te wissen. Probeer later opnieuw.', - 'Unable to disable Two factor authentication.' => 'Onmogelijk om de tweetraps authenticatie uit te schakelen.', - 'Unable to remove authorization item.' => 'Onmogelijk om het authorisatie item te wissen.', + 'Unable to disable Two factor authentication.' => 'Onmogelijk om de tweefactor-authenticatie uit te schakelen.', + 'Unable to remove authorization item.' => 'Onmogelijk om het authorisatie-item te wissen.', 'Unable to send confirmation link' => 'Onmogelijk om de bevestigingsmail te versturen', - 'Unable to send recovery message to the user' => 'Onmogelijk om de herstel email naar de gebruiker te versturen', - 'Unable to update authorization item.' => 'Onmogelijk om het authorisatie item aan te passen.', - 'Unable to update authorization rule.' => 'Onmogelijk om de authorisatie regel aan te passen.', - 'Unable to update block status.' => 'Onmogelijk om het geblokkeerd status aan te passen', + 'Unable to send recovery message to the user' => 'Onmogelijk om de herstel-email naar de gebruiker te versturen', + 'Unable to update authorization item.' => 'Onmogelijk om het authorisatie-item aan te passen.', + 'Unable to update authorization rule.' => 'Onmogelijk om de authorisatie-regel aan te passen.', + 'Unable to update block status.' => 'Onmogelijk om de blokkering te wijzigen', 'Unblock' => 'Deblokkeren', 'Unconfirmed' => 'Niet bevestigd', - 'Update' => 'Update', - 'Update assignments' => 'Update toewijzingen', - 'Update permission' => 'Update machtigingen', - 'Update role' => 'Update rol', - 'Update rule' => 'Update regel', - 'Update user account' => 'Update gebruikersaccount', - 'Updated at' => 'Geupdate op', - 'User account could not be created.' => 'Gebruikers account kon niet worden aangemaakt.', - 'User block status has been updated.' => 'Gebruikers blokkeringstatus werd aangepast.', + 'Update' => 'Bijwerken', + 'Update assignments' => 'Toewijzingen bijwerken', + 'Update permission' => 'Machtigingen bijwerken', + 'Update role' => 'Rol bijwerken', + 'Update rule' => 'Regel bijwerken', + 'Update user account' => 'Gebruikersaccount bijwerken', + 'Updated at' => 'Bijgewerkt op', + 'User account could not be created.' => 'Gebruikers-account kan niet worden aangemaakt.', + 'User block status has been updated.' => 'Blokkering is aangepast.', 'User could not be registered.' => 'Gebruiker kon niet worden geregistreerd.', - 'User has been confirmed' => 'Gebruiker werd bevestigd', - 'User has been created' => 'Gebruiker werd aangemaakt', - 'User has been deleted' => 'Gebruiker werd verwijderd', - 'User is not found' => 'Gebruiker werd niet gevonden', + 'User has been confirmed' => 'Gebruiker is bevestigd', + 'User has been created' => 'Gebruiker is aangemaakt', + 'User has been deleted' => 'Gebruiker is verwijderd', + 'User is not found' => 'Gebruiker niet gevonden', 'User not found.' => 'Gebruiker niet gevonden', 'User will be required to change password at next login' => 'Gebruiker zal verplicht worden zijn wachtwoord aan te passen bij volgende login', 'Username' => 'Gebruikersnaam', 'Users' => 'Gebruikers', 'VKontakte' => 'VKontakte', - 'Verification failed. Please, enter new code.' => 'Bevestiging gefaald. Geef een nieuwe code in.', - 'We couldn\'t re-send the mail to confirm your address. Please, verify is the correct email or if it has been confirmed already.' => 'We konden geen nieuwe email sturen om jouw adres te bevestigen? Kijk het email adres en controleer of het niet al bevestigd is.', - 'We have generated a password for you' => 'Wij genereerden een wachtwoord voor jou', - 'We have received a request to change the email address for your account on {0}' => 'We ontvingen een aanvraag om jouw email adres te wijzigen voor jouw account op {0}', - 'We have received a request to reset the password for your account on {0}' => 'Wij ontvingen een aanvraag om jouw wachtwoord te resetten voor jouw account op {0}', - 'We have sent confirmation links to both old and new email addresses. You must click both links to complete your request.' => 'We hebben een bevestigingslink naar zowel jouw oud als nieuw email adres gestuurd. Je moet beiden links aanklikken om de aanvraag te voltooien.', + 'Verification failed. Please, enter new code.' => 'Bevestiging mislukt. Geef een nieuwe code in.', + 'We couldn\'t re-send the mail to confirm your address. Please, verify is the correct email or if it has been confirmed already.' => 'We konden geen nieuwe email sturen om jouw adres te bevestigen. Controleer het email-adres en controleer of het niet al bevestigd is.', + 'We have generated a password for you' => 'Er is een nieuw wachtwoord voor je gegenereerd', + 'We have received a request to change the email address for your account on {0}' => 'We ontvingen een aanvraag om je email adres te wijzigen voor je account op {0}', + 'We have received a request to reset the password for your account on {0}' => 'Wij ontvingen een aanvraag om je wachtwoord te resetten voor je account op {0}', + 'We have sent confirmation links to both old and new email addresses. You must click both links to complete your request.' => 'We hebben een bevestigingslink naar zowel jouw oud als nieuw email-adres gestuurd. Je moet beide links aanklikken om de aanvraag te bevestigen.', 'Website' => 'Website', 'Welcome to {0}' => 'Welkom op {0}', 'Yandex' => 'Yandex', - 'You are about to delete all your personal data from this site.' => 'Je staat op het punt om al jouw persoonlijke dat te wissen van deze website', - 'You can assign multiple roles or permissions to user by using the form below' => 'Je kan meerder rollen of machtigingen toewijzen aan de gebruiker door middel van onderstaand formulier', - 'You can connect multiple accounts to be able to log in using them' => 'Je kan met meerder accounts verbinden om met deze accounts in te loggen', - 'You cannot remove your own account' => 'Wij kunnen je eigen account niet verwijderen.', - 'You need to confirm your email address' => 'Je moet je email adres bevestigen', - 'Your account details have been updated' => 'Je account details werden gewijzigd', - 'Your account has been blocked' => 'Jouw account werd geblokkeerd', - 'Your account has been blocked.' => 'Jouw account werd geblokkeerd.', - 'Your account has been completely deleted' => 'Jouw account werd volledig verwijderd', - 'Your account has been connected' => 'Jouw account werd verbonden', - 'Your account has been created' => 'Jouw account werd aangemaakt', - 'Your account has been created and a message with further instructions has been sent to your email' => 'Jouw account werd aangemaakt en een email met verdere instructies werd naar jouw email adres verzonden', - 'Your account on {0} has been created' => 'Jouw account op {0} werd aangemaakt', - 'Your confirmation token is invalid or expired' => 'Je bevestigingstoken is ongeldig of vervallen', - 'Your consent is required to register' => 'Jouw toestemming is verplicht om te registreren', - 'Your email address has been changed' => 'Jouw email adres werd gewijzigd', - 'Your password has expired, you must change it now' => 'Jouw wachtwoord is vervallen. Gelieve het onmiddelijk te wijzigen', - 'Your personal information has been removed' => 'Jouw persoonlijke gegevens werden verwijderd', - 'Your profile has been updated' => 'Jouw profiel werd geupdate', + 'You are about to delete all your personal data from this site.' => 'Je staat op het punt om al je persoonlijke dat te wissen van deze website', + 'You can assign multiple roles or permissions to user by using the form below' => 'Je kan meerdere rollen of machtigingen toewijzen aan de gebruiker in dit formulier', + 'You can connect multiple accounts to be able to log in using them' => 'Je kan met meerdere accounts verbinden om met deze accounts in te loggen', + 'You cannot remove your own account' => 'Je kan je eigen account niet verwijderen.', + 'You need to confirm your email address' => 'Je moet je email-adres bevestigen', + 'Your account details have been updated' => 'Je account-details zijn gewijzigd', + 'Your account has been blocked' => 'Je account is geblokkeerd', + 'Your account has been blocked.' => 'Je account is geblokkeerd.', + 'Your account has been completely deleted' => 'Je account is volledig verwijderd', + 'Your account has been connected' => 'Je account is verbonden', + 'Your account has been created' => 'Je account is aangemaakt', + 'Your account has been created and a message with further instructions has been sent to your email' => 'Je account is aangemaakt en een email met verdere instructies is naar je email-adres verzonden', + 'Your account on {0} has been created' => 'Je account op {0} is aangemaakt', + 'Your confirmation token is invalid or expired' => 'Je bevestigingscode is ongeldig of vervallen', + 'Your consent is required to register' => 'Je toestemming is verplicht om te registreren', + 'Your email address has been changed' => 'Je email-adres is gewijzigd', + 'Your password has expired, you must change it now' => 'Je wachtwoord is vervallen, je moet een nieuw wachtwoord aanmaken', + 'Your personal information has been removed' => 'Je persoonlijke gegevens zijn verwijderd', + 'Your profile has been updated' => 'Je profiel is bijgewerkt', 'privacy policy' => 'privacy policy', '{0, date, MMM dd, YYYY HH:mm}' => '{0, date, MMM dd, YYYY HH:mm}', '{0, date, MMMM dd, YYYY HH:mm}' => '{0, date, MMMM dd, YYYY HH:mm}\'', - '{0} cannot be blank.' => '{0} kan niet leeg zijn.', - 'According to the European General Data Protection Regulation (GDPR) we need your consent to work with your personal data.' => '', + '{0} cannot be blank.' => '{0} mag niet leeg zijn.', + 'According to the European General Data Protection Regulation (GDPR) we need your consent to work with your personal data.' => 'In verband met de General Data Protection Regulation (GDPR) moeten we je toestemming hebben voor het gebruiken van je gegevens', 'Active' => '', - 'An email with instructions to create a new password has been sent to {email} if it is associated with an {appName} account. Your existing password has not been changed.' => '', - 'Application not configured for two factor authentication.' => '', - 'Code for two factor authentication on {0}' => '', - 'Current' => '', - 'Data privacy' => '', - 'Error while enabling SMS two factor authentication. Please reload the page.' => '', - 'Google Authenticator' => '', - 'IP' => '', - 'If you haven\'t received a password, you can reset it at' => '', - 'Inactive' => '', - 'Insert' => '', - 'Insert the code you received by SMS.' => '', - 'Insert the code you received by email.' => '', - 'Insert the mobile phone number where you want to receive text message in international format' => '', - 'Last activity' => '', - 'Mobile phone number' => '', - 'Mobile phone number successfully enabled.' => '', - 'Please, enter the right code. The code is valid for {0} seconds. If you want to get a new code, please click on \'Cancel\' and repeat the login request.' => '', - 'Please, enter the right code. The code is valid for {0} seconds. If you want to get a new code, please close this window and repeat the enabling request.' => '', - 'Rule class name' => '', - 'Select rule...' => '', - 'Session ID' => '', - 'Session history' => '', - 'Status' => '', - 'Submit' => '', - 'Terminate all sessions' => '', - 'Text message' => '', - 'The email address set is: "{0}".' => '', - 'The email sending failed, please check your configuration.' => '', - 'The phone number set is: "{0}".' => '', - 'The requested page does not exist.' => '', - 'The sms sending failed, please check your configuration.' => '', - 'This is the code to insert to enable two factor authentication' => '', - 'Two factor authentication code by SMS' => '', - 'Two factor authentication code by email' => '', - 'Two factor authentication protects you in case of stolen credentials' => '', - 'Unfortunately, you can not work with this site without giving us consent to process your data.' => '', - 'User ID' => '', - 'User agent' => '', - 'User does not have sufficient permissions.' => '', - 'You cannot block your own account.' => '', - 'You cannot remove your own account.' => '', - 'You received this email because someone, possibly you or someone on your behalf, have created an account at {app_name}' => '', - 'Your consent is required to work with this site' => '', - 'Your role requires 2FA, you won\'t be able to use the application until you enable it' => '', - 'Your two factor authentication method is based on "{0}".' => '', - 'Mobile phone not found, please check your profile' => '@@@@', + 'An email with instructions to create a new password has been sent to {email} if it is associated with an {appName} account. Your existing password has not been changed.' => 'Er is een email met instructies verstuurd naar {email} als dit is verbonden mat je {appName} account; je bestaande wachtwoord is niet gewijzigd.', + 'Application not configured for two factor authentication.' => 'App niet geconfigureerd voor tweefactor-authenticatie', + 'Code for two factor authentication on {0}' => 'Code voor tweefactor-authenticatie', + 'Current' => 'Bestaande', + 'Data privacy' => 'Gegevens-privacy', + 'Error while enabling SMS two factor authentication. Please reload the page.' => 'Fout met het instellen van SMS authenticatie, laad deze pagina opnieuw', + 'Google Authenticator' => 'Google Authenticator', + 'IP' => 'IP', + 'If you haven\'t received a password, you can reset it at' => 'ALs je geen wachtwoord hebt ontvangen kan je het herstellen op', + 'Inactive' => 'Inactief', + 'Insert' => 'Voer in', + 'Insert the code you received by SMS.' => 'Voer de code in die je per SMS ontvangen hebt', + 'Insert the code you received by email.' => 'Voer de code in die je per email ontvangen hebt', + 'Insert the mobile phone number where you want to receive text message in international format' => 'Voer je mobiele telefoonnummer in waar je de SMS wil ontvangen (internationaal formaat)', + 'Last activity' => 'Laatste activiteit', + 'Mobile phone number' => 'Mobiel telefoonnummer', + 'Mobile phone number successfully enabled.' => 'Mobiel telefoonnummer geactiveerd', + 'Please, enter the right code. The code is valid for {0} seconds. If you want to get a new code, please click on \'Cancel\' and repeat the login request.' => 'Voer de code in, deze is geldig voor {0} seconden. Kies \'Annuleer\' en herhaal het verzoek om een nieuwe code te ontvangen.', + 'Please, enter the right code. The code is valid for {0} seconds. If you want to get a new code, please close this window and repeat the enabling request.' => 'Voer de code in, deze is geldig voor {0} seconden. Sluit dit venster en herhaal het verzoek om een nieuwe code te ontvangen.', + 'Rule class name' => 'Regel class-naam', + 'Select rule...' => 'Selecteer regel', + 'Session ID' => 'Sessie-ID', + 'Session history' => 'Sessie-geschiedenis', + 'Status' => 'Status', + 'Submit' => 'Verstuur', + 'Terminate all sessions' => 'Verwijder alle sessies', + 'Text message' => 'SMS', + 'The email address set is: "{0}".' => 'Het ingestelde email-adres is: "{0}".', + 'The email sending failed, please check your configuration.' => 'E-mail versturen mislukt, controleer je instellingen', + 'The phone number set is: "{0}".' => 'Het ingestelde telefoonnummer is: "{0}".', + 'The requested page does not exist.' => 'De opgevraagde pagina bestaat niet.', + 'The sms sending failed, please check your configuration.' => 'SMS versturen mislukt, controleer je instellingen', + 'This is the code to insert to enable two factor authentication' => 'Dit is de code die ingevoerd moet worden voor het activeren van tweefactor-authenticatie', + 'Two factor authentication code by SMS' => 'Twee-factor code per SMS', + 'Two factor authentication code by email' => 'Twee-factor code per email', + 'Two factor authentication protects you in case of stolen credentials' => 'Twee-factor authenticatie beschermt je tegen misbruik als je login gegevens gestolen zijn', + 'Unfortunately, you can not work with this site without giving us consent to process your data.' => 'Je kan deze site niet bezoeken zonder je toestemming te geven voor het verwerken van je gegevens', + 'User ID' => 'Gebruikers-ID', + 'User agent' => 'User Agent', + 'User does not have sufficient permissions.' => 'Gebruiker heeft onvoldoende rechten', + 'You cannot block your own account.' => 'Je kan je eigen account niet blokkeren.', + 'You cannot remove your own account.' => 'e kan je eigen account niet verwijderen.', + 'You received this email because someone, possibly you or someone on your behalf, have created an account at {app_name}' => 'Je ontvangt deze email omdat iemand (waarschijnlijk jijzelf) een account heeft aangemaakt op {app_name}', + 'Your consent is required to work with this site' => 'Je toestemming is nodig om deze site te bezoeken', + 'Your role requires 2FA, you won\'t be able to use the application until you enable it' => 'Voor deze rol is 2FA vereist, je kan niet verder gan zonder tweefactor-authenticatie in te schakelen', + 'Your two factor authentication method is based on "{0}".' => 'Je tweefactor-authenticatie methode is gebaseerd op "{0}".', + 'Mobile phone not found, please check your profile' => 'Mobiel telefoonnummer niet gevonden, controleer je profiel-gegevens', ]; From cfd83ca8589a18005aea850a82e759c32c29d307 Mon Sep 17 00:00:00 2001 From: Johannes la Poutre Date: Thu, 25 May 2023 12:40:46 +0200 Subject: [PATCH 02/32] chore: update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6eb79d23..5716b649 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## dev +- Fix: update Dutch (nl) translations (squio) - Enh: possibility to limit the depth of the recursion when getting user ids from roles (mp1509) ## 1.6.1 March 4th, 2023 From 40a76b1edab648481e32773c42db68ec3f982b1c Mon Sep 17 00:00:00 2001 From: Wenceslaus Dsilva Date: Thu, 25 May 2023 21:01:42 +0530 Subject: [PATCH 03/32] =?UTF-8?q?=F0=9F=90=9B=20fix(2FA):=20Two=20Factor?= =?UTF-8?q?=20Authentication=20-=20Filter=20-=20Blocks=20even=20when=20two?= =?UTF-8?q?=20factor=20authentication=20is=20enabled=20=F0=9F=90=9B=20fix(?= =?UTF-8?q?email):=20add=20error=20logging=20when=20email=20sending=20fail?= =?UTF-8?q?s=20=F0=9F=94=92=20chore(2FA):=20fix=20TwoFactorEmailValidator?= =?UTF-8?q?=20to=20pass=20user=20as=20an=20array=20The=20TwoFactorAuthenti?= =?UTF-8?q?cationEnforceFilter=20was=20blocking=20users=20even=20when=20tw?= =?UTF-8?q?o=20factor=20authentication=20was=20enabled.=20The=20filter=20n?= =?UTF-8?q?ow=20checks=20if=20the=20user=20has=20two=20factor=20authentica?= =?UTF-8?q?tion=20enabled=20before=20blocking=20them.=20The=20MailService?= =?UTF-8?q?=20now=20logs=20an=20error=20when=20email=20sending=20fails.=20?= =?UTF-8?q?The=20TwoFactorEmailValidator=20now=20passes=20the=20user=20as?= =?UTF-8?q?=20an=20array=20to=20the=20TwoFactorEmailCodeGeneratorService.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + src/User/Filter/TwoFactorAuthenticationEnforceFilter.php | 4 +++- src/User/Service/MailService.php | 8 +++++++- src/User/Validator/TwoFactorEmailValidator.php | 2 +- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5716b649..7833d501 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## dev +- Fix: Two Factor Authentication - Filter - Blocks even when two factor authentication is enabled - Fix: update Dutch (nl) translations (squio) - Enh: possibility to limit the depth of the recursion when getting user ids from roles (mp1509) diff --git a/src/User/Filter/TwoFactorAuthenticationEnforceFilter.php b/src/User/Filter/TwoFactorAuthenticationEnforceFilter.php index bcb09dc8..537e1c48 100644 --- a/src/User/Filter/TwoFactorAuthenticationEnforceFilter.php +++ b/src/User/Filter/TwoFactorAuthenticationEnforceFilter.php @@ -38,8 +38,10 @@ public function beforeAction($action) } $permissions = $module->twoFactorAuthenticationForcedPermissions; + + $user = Yii::$app->user->identity; $itemsByUser = array_keys($this->getAuthManager()->getItemsByUser(Yii::$app->user->identity->id)); - if (!empty(array_intersect($permissions, $itemsByUser))) { + if (!empty(array_intersect($permissions, $itemsByUser)) && !$user->auth_tf_enabled) { Yii::$app->session->setFlash('warning', Yii::t('usuario', 'Your role requires 2FA, you won\'t be able to use the application until you enable it')); return Yii::$app->response->redirect(['/user/settings/account'])->send(); } diff --git a/src/User/Service/MailService.php b/src/User/Service/MailService.php index 39b52ee2..0e9ac491 100644 --- a/src/User/Service/MailService.php +++ b/src/User/Service/MailService.php @@ -83,11 +83,17 @@ public function getType() */ public function run() { - return $this->mailer + + $result = $this->mailer ->compose(['html' => $this->view, 'text' => "text/{$this->view}"], $this->params) ->setFrom($this->from) ->setTo($this->to) ->setSubject($this->subject) ->send(); + + if (!$result) { + Yii::error("Email sending failed to '{$this->to}'.", 'mailer'); + } + return $result; } } diff --git a/src/User/Validator/TwoFactorEmailValidator.php b/src/User/Validator/TwoFactorEmailValidator.php index 37bedcef..9466a05e 100644 --- a/src/User/Validator/TwoFactorEmailValidator.php +++ b/src/User/Validator/TwoFactorEmailValidator.php @@ -111,6 +111,6 @@ public function getUnsuccessLoginMessage($codeDurationTime) */ public function generateCode() { - return $this->make(TwoFactorEmailCodeGeneratorService::class, $this->user)->run(); + return $this->make(TwoFactorEmailCodeGeneratorService::class, [$this->user])->run(); } } From bbfa6e8a9538120465130539646a1834949cff45 Mon Sep 17 00:00:00 2001 From: Johannes la Poutre Date: Tue, 20 Jun 2023 23:06:39 +0200 Subject: [PATCH 04/32] chore: fix typos and improve grammar --- src/User/resources/i18n/nl/usuario.php | 224 ++++++++++++------------- 1 file changed, 112 insertions(+), 112 deletions(-) diff --git a/src/User/resources/i18n/nl/usuario.php b/src/User/resources/i18n/nl/usuario.php index 4535e619..dcb57f02 100644 --- a/src/User/resources/i18n/nl/usuario.php +++ b/src/User/resources/i18n/nl/usuario.php @@ -18,29 +18,29 @@ */ return [ '(not set)' => '(niet ingesteld)', - 'A confirmation message has been sent to your new email address' => 'Er is bevestigings-email naar het nieuwe email-adres verzonden', - 'A message has been sent to your email address. It contains a confirmation link that you must click to complete registration.' => 'Er is een email met een bevestigingslink naar jouw email adres gestuurd. Klik de link om de registratie te bevestigen.', + 'A confirmation message has been sent to your new email address' => 'Er is een bevestigings-e-mail naar het nieuwe e-mail-adres verzonden', + 'A message has been sent to your email address. It contains a confirmation link that you must click to complete registration.' => 'Er is een e-mail met een bevestigingslink naar jouw e-mail adres gestuurd. Open deze link om de registratie te bevestigen.', 'A new confirmation link has been sent' => 'Er is een nieuwe bevestigingslink verstuurd', - 'A password will be generated automatically if not provided' => 'Er wordt automatisch een wachtwoord gegenereerd als er wachtwoord werd ingevuld', + 'A password will be generated automatically if not provided' => 'Er wordt automatisch een wachtwoord gegenereerd als hier niets wordt ingevuld', 'Account' => 'Account', 'Account confirmation' => 'Account-bevestiging', 'Account details' => 'Account-details', 'Account details have been updated' => 'Account-details zijn bijgewerkt', 'Account settings' => 'Account-instellingen', 'Already registered? Sign in!' => 'Al geregistreerd? Log in!', - 'An error occurred processing your request' => 'Er is een fout opgetreden', - 'Are you sure you want to block this user?' => 'Weet je zeker dat je deze gebruiker wil blokkeren?', - 'Are you sure you want to confirm this user?' => 'Weet je zeker dat je deze gebruiker wil bevestigen?', - 'Are you sure you want to delete this user?' => 'Weet je zeker dat je deze gebruiker wil verwijderen?', - 'Are you sure you want to switch to this user for the rest of this Session?' => 'Weet je zeker dat je als deze gebruiker wil verder gaan tot het einde van deze sessie?', - 'Are you sure you want to unblock this user?' => 'Weet je zeker dat je deze gebruiker wil deblokkeren?', - 'Are you sure you wish the user to change their password at next login?' => 'Weet je zeker dat de gebruiker zijn wachtwoord moet wijzigen bij de volgende keer inloggen?', - 'Are you sure you wish to send a password recovery email to this user?' => 'Weet je zeker dat je een wachtwoord-herstelmail naar deze gebruiker wil verzenden?', + 'An error occurred processing your request' => 'Helaas, er is iets misgegaan', + 'Are you sure you want to block this user?' => 'Weet je zeker dat je deze gebruiker wilt blokkeren?', + 'Are you sure you want to confirm this user?' => 'Weet je zeker dat je deze gebruiker wilt bevestigen?', + 'Are you sure you want to delete this user?' => 'Weet je zeker dat je deze gebruiker wilt verwijderen?', + 'Are you sure you want to switch to this user for the rest of this Session?' => 'Weet je zeker dat je als deze gebruiker wilt verder gaan (tot het einde van deze sessie)?', + 'Are you sure you want to unblock this user?' => 'Weet je zeker dat je deze gebruiker wilt deblokkeren?', + 'Are you sure you wish the user to change their password at next login?' => 'Weet je zeker dat je deze gebruiker zijn wachtwoord wilt laten wijzigen bij de volgende keer inloggen?', + 'Are you sure you wish to send a password recovery email to this user?' => 'Weet je zeker dat je een wachtwoord-herstelmail naar deze gebruiker wilt sturen?', 'Are you sure? Deleted user can not be restored' => 'Weet je het zeker? Een verwijderde gebruiker kan niet worden hersteld!', 'Are you sure? There is no going back' => 'Weet je het zeker? Dit kan niet ongedaan worden gemaakt!', 'Assignments' => 'Toewijzing', 'Assignments have been updated' => 'Toewijzingen zijn bijgewerkt', - 'Auth item with such name already exists' => 'Auth item met deze naam bestaat al', + 'Auth item with such name already exists' => 'Authorisatie-item met deze naam bestaat al', 'Authentication rule class {0} can not be instantiated' => 'Authenticatie-regel klasse {0} kan niet worden geïnstantieerd', 'Authorization item successfully created.' => 'Authorisatie-item aangemaakt', 'Authorization item successfully removed.' => 'Authorisatie-item verwijderd', @@ -48,78 +48,78 @@ 'Authorization rule has been added.' => 'Authorisatie-regel is toegevoegd', 'Authorization rule has been removed.' => 'Authorisatie-regel is verwijderd', 'Authorization rule has been updated.' => 'Authorisatie-regel is bijgewerkt', - 'Awesome, almost there. Now you need to click the confirmation link sent to your new email address.' => 'Super, bijna klaar. Alleen nog de bevestigingslink klikken in de mail die naar jouw nieuwe email-adres is gestuurd', - 'Awesome, almost there. Now you need to click the confirmation link sent to your old email address.' => 'Super, bijna klaar. Alleen nog de bevestigingslink klikken in de mail die naar jouw oude email-adres is gestuurd', + 'Awesome, almost there. Now you need to click the confirmation link sent to your new email address.' => 'Super, bijna klaar. Alleen nog de bevestigingslink klikken in de mail die naar jouw nieuwe e-mail-adres is gestuurd', + 'Awesome, almost there. Now you need to click the confirmation link sent to your old email address.' => 'Super, bijna klaar. Alleen nog de bevestigingslink klikken in de mail die naar jouw oude e-mail-adres is gestuurd', 'Back to privacy settings' => 'Terug naar privacy-instellingen', - 'Bio' => 'Bio', + 'Bio' => 'Biografie', 'Block' => 'Blokkeren', 'Block status' => 'Geblokkeerd', 'Blocked at {0, date, MMMM dd, YYYY HH:mm}' => 'Geblokkeerd op {0, date, MMMM dd, YYYY HH:mm}', 'Cancel' => 'Annuleren', - 'Cannot assign role "{0}" as the AuthManager is not configured on your console application.' => 'Kan rol {0} niet toewijzen doordat de AuthManager niet geconfigureerd is in je console-applicatie', + 'Cannot assign role "{0}" as the AuthManager is not configured on your console application.' => 'Kan rol {0} niet toewijzen omdat de AuthManager niet geconfigureerd is in je console-applicatie', 'Change your avatar at Gravatar.com' => 'Wijzig je avatar op Gravatar.com', 'Children' => 'Kinderen', 'Class' => 'Klasse', 'Close' => 'Sluiten', - 'Complete password reset on {0}' => 'Voltooi het herstellen van het wachtwoord op {0}', + 'Complete password reset on {0}' => 'Voltooi het wachtwoordherstel op {0}', 'Confirm' => 'Bevestig', 'Confirm account on {0}' => 'Bevestig account op {0}', - 'Confirm email change on {0}' => 'Bevestig email-wijziging op {0}', + 'Confirm email change on {0}' => 'Bevestig e-mail-wijziging op {0}', 'Confirmation' => 'Bevestiging', - 'Confirmation status' => 'Bevestiging status', - 'Confirmation time' => 'Bevestiging tijdstip', + 'Confirmation status' => 'Status bevestiging', + 'Confirmation time' => 'Tijdstip bevestiging', 'Confirmed' => 'Bevestigd', 'Confirmed at {0, date, MMMM dd, YYYY HH:mm}' => 'Bevestigd op {0, date, MMMM dd, YYYY HH:mm}', - 'Connect' => 'Verbinden', - 'Continue' => 'Doorgaan', - 'Create' => 'Aanmaken', + 'Connect' => 'Verbind', + 'Continue' => 'Ga door', + 'Create' => 'Maak aan', 'Create a user account' => 'Maak een gebruikers-account aan', 'Create new permission' => 'Maak een nieuwe machtiging aan', 'Create new role' => 'Maak een nieuwe rol aan', - 'Create new rule' => 'maak een nieuwe regel aan', + 'Create new rule' => 'Maak een nieuwe regel aan', 'Created at' => 'Gemaakt op', - 'Credentials will be sent to the user by email' => 'Inloggegevens zijn via email naar de gebruiker verzonden', + 'Credentials will be sent to the user by email' => 'Inloggegevens zijn via e-mail naar de gebruiker verzonden', 'Current password' => 'Huidig wachtwoord', 'Current password is not valid' => 'Huidig wachtwoord is niet geldig', 'Data processing consent' => 'Data-verwerking toestemming', - 'Delete' => 'Verwijderen', - 'Delete account' => 'Account verwijderen', + 'Delete' => 'Verwijder', + 'Delete account' => 'Verwijder account', 'Delete my account' => 'Verwijder mijn account', 'Delete personal data' => 'Verwijder mijn persoonlijke data', - 'Deleted by GDPR request' => 'Verwijder mijn GDPR aanvraag', - 'Description' => 'Omschrijving', - 'Didn\'t receive confirmation message?' => 'Geen bevestigings-email ontvangen?', - 'Disable two factor authentication' => 'Tweetraps authenticatie uitschakelen', - 'Disconnect' => 'Verbinding verbreken', + 'Deleted by GDPR request' => 'Verwijderd op versoek (AVG/GDPR)', + 'Description' => 'Beschrijving', + 'Didn\'t receive confirmation message?' => 'Geen bevestigings-e-mail ontvangen?', + 'Disable two factor authentication' => 'Schakel tweetraps-authenticatie uit', + 'Disconnect' => 'Verbreek verbinding', 'Don\'t have an account? Sign up!' => 'Geen account? Meld je aan', - 'Download my data' => 'Download mijn data', - 'Email' => 'Email', - 'Email (public)' => 'Email (publiek)', - 'Enable' => 'Inschakelen', + 'Download my data' => 'Download mijn gegevens', + 'Email' => 'E-mail', + 'Email (public)' => 'E-mail (publiek)', + 'Enable' => 'Schakel in', 'Enable two factor authentication' => 'Schakel tweefactor-authenticatie in', - 'Error occurred while changing password' => 'Er is een fout opgetreden bij het wijzigen van het wachtwoord', - 'Error occurred while confirming user' => 'Er is een fout opgetreden bij het bevestigen van de gebruiker', - 'Error occurred while deleting user' => 'Er is een fout opgetreden bij het wissen van de gebruiker', - 'Error sending registration message to "{email}". Please try again later.' => 'Er is een fout opgetreden bij het versturen van de registratie-email naar "{email}". Probeer later nog eens.', - 'Error sending welcome message to "{email}". Please try again later.' => 'Er is een fout opgetreden bij het versturen van de welkomst-email naar "{email}". Probeer later nog eens.', - 'Export my data' => 'Exporteer mijn data', + 'Error occurred while changing password' => 'Er is iets fout gegaan bij het wijzigen van het wachtwoord', + 'Error occurred while confirming user' => 'Er is iets fout gegaan bij het bevestigen van de gebruiker', + 'Error occurred while deleting user' => 'Er is iets fout gegaan bij het wissen van de gebruiker', + 'Error sending registration message to "{email}". Please try again later.' => 'Er is iets fout gegaan bij het versturen van de registratie-e-mail naar "{email}". Probeer later nog eens.', + 'Error sending welcome message to "{email}". Please try again later.' => 'Er is iets fout gegaan bij het versturen van de welkomst-e-mail naar "{email}". Probeer later nog eens.', + 'Export my data' => 'Exporteer mijn gegevens', 'Finish' => 'Beëindig', 'Force password change at next login' => 'Forceer wachtwoord-reset bij volgende login', 'Forgot password?' => 'Wachtwoord vergeten?', - 'Gravatar email' => 'Gravatar email', + 'Gravatar email' => 'Gravatar e-mail', 'Hello' => 'Hallo', - 'Here you can download your personal data in a comma separated values format.' => 'Hier kan je al jouw persoonlijke data downloaden in een komma-gescheiden formaat.', - 'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => 'Ik ga akkoord met het verwerken van mijn persoonlijke data en het gebruik van cookies om de werking van deze website te vergemakkelijken. Voor meer, lees onze {privacyPolicy}', - 'If you already registered, sign in and connect this account on settings page' => 'Meldt je aan en verbind deze account via de instellingen pagina als he al geregistreerd bent', + 'Here you can download your personal data in a comma separated values format.' => 'Hier kan je al jouw persoonlijke gegevens downloaden in een komma-gescheiden formaat.', + 'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => 'Ik ga akkoord met het verwerken van mijn persoonlijke gegevens en het gebruik van cookies om de werking van deze website te vergemakkelijken. Voor meer, lees de {privacyPolicy}', + 'If you already registered, sign in and connect this account on settings page' => 'Meld je aan en verbind deze account via de instellingen-pagina als je al geregistreerd bent', 'If you cannot click the link, please try pasting the text into your browser' => 'Als je niet op deze link kan klikken, kopieer en plak de tekst dan in je web-browser', - 'If you did not make this request you can ignore this email' => 'Als je deze aanvraag niet deed kan je deze email negeren', - 'Impersonate this user' => 'Doe zich voor als deze gebruiker', + 'If you did not make this request you can ignore this email' => 'Als je deze aanvraag niet deed kan je deze e-mail negeren', + 'Impersonate this user' => 'Doe je voor als deze gebruiker', 'In order to complete your registration, please click the link below' => 'Klik op onderstaande link om je registratie te bevestigen', 'In order to complete your request, please click the link below' => 'Klik op onderstaande link om je aanvraag te bevestigen', 'In order to finish your registration, we need you to enter following fields' => 'De volgende velden moeten worden ingevuld om je registratie te beëindigen', 'Information' => 'Informatie', 'Invalid login or password' => 'Ongeldige login of wachtwoord', - 'Invalid or expired link' => 'Ongeldige of vervallen link', + 'Invalid or expired link' => 'Ongeldige- of vervallen link', 'Invalid password' => 'Ongeldig wachtwoord', 'Invalid two factor authentication code' => 'Ongeldige tweefactor-authenticatie code', 'Invalid value' => 'Ongeldige waarde', @@ -132,11 +132,11 @@ 'Location' => 'Locatie', 'Login' => 'Log in', 'Logout' => 'Log uit', - 'Manage users' => 'Gebruikers beheren', + 'Manage users' => 'Beheer gebruikers', 'Name' => 'Naam', 'Networks' => 'Netwerken', 'Never' => 'Nooit', - 'New email' => 'Nieuwe email', + 'New email' => 'Nieuwe e-mail', 'New password' => 'Nieuw wachtwoord', 'New permission' => 'Nieuwe machtiging', 'New role' => 'Nieuwe rol', @@ -145,7 +145,7 @@ 'Not blocked' => 'Niet geblokkeerd', 'Not found' => 'Niet gevonden', 'Once you delete your account, there is no going back' => 'Als je jouw account verwijderd kan dit niet hersteld worden', - 'Once you have deleted your data, you will not longer be able to sign in with this account.' => 'Als je jouw data verwijderd is inloggen met deze account niet meer mogelijk.', + 'Once you have deleted your data, you will not longer be able to sign in with this account.' => 'Als je jouw gegevens verwijderd is inloggen met deze account niet meer mogelijk.', 'Password' => 'Wachtwoord', 'Password age' => 'Wachtwoord ouderdom', 'Password has been changed' => 'Wachtwoord is gewijzigd', @@ -165,65 +165,65 @@ 'Registration IP' => 'Registratie IP', 'Registration on this website is disabled' => 'Registratie is gedeactiveerd op deze website', 'Registration time' => 'Registratie-tijdstip', - 'Remember me next time' => 'Onthou mijn login', - 'Request new confirmation message' => 'Vraag een nieuwe bevestigings-email aan', - 'Required "key" cannot be empty.' => 'Verplicht veld "key" kan niet leeg zijn.', - 'Required "secret" cannot be empty.' => 'Verplicht veld "geheim" kan niet leeg zijn.', - 'Reset your password' => 'Reset je wachtwoord', + 'Remember me next time' => 'Onthoud mijn login', + 'Request new confirmation message' => 'Vraag een nieuwe bevestigings-e-mail aan', + 'Required "key" cannot be empty.' => 'Verplicht veld "key" mag niet leeg zijn.', + 'Required "secret" cannot be empty.' => 'Verplicht veld "secret" mag niet leeg zijn.', + 'Reset your password' => 'Herstel je wachtwoord', 'Role "{0}" not found. Creating it.' => 'Rol "{0}" kan niet worden gevonden. Deze wordt aangemaakt', 'Roles' => 'Rollen', 'Rule' => 'Regel', - 'Rule class must extend "yii\\rbac\\Rule".' => 'Regel subclass van "yii\\rbac\\Rule" zijn.', - 'Rule name' => 'Regel naam', + 'Rule class must extend "yii\\rbac\\Rule".' => 'Regel moet subclass van "yii\\rbac\\Rule" zijn.', + 'Rule name' => 'Regel-naam', 'Rule name {0} is already in use' => 'Regel met naam "{0}" is al in gebruik', 'Rule {0} does not exists' => 'Regel {0} bestaat niet', 'Rule {0} not found.' => 'Regel {0} niet gevonden', 'Rules' => 'Regels', 'Save' => 'Opslaan', - 'Scan the QrCode with Google Authenticator App, then insert its temporary code on the box and submit.' => 'Scan de QR code met Google Authenticator (of andere), voer de tijdelijke code in en klik op verzenden.', - 'Send password recovery email' => 'Verzend wachtwoord-herstel email', - 'Sign in' => 'Aanmelden', - 'Sign up' => 'Registreren', - 'Something went wrong' => 'Er ging iets mis', + 'Scan the QrCode with Google Authenticator App, then insert its temporary code on the box and submit.' => 'Scan de QR code met Google Authenticator (of vergelijkbaar), voer de tijdelijke code in en klik op verzenden.', + 'Send password recovery email' => 'Verzend wachtwoord-herstel e-mail', + 'Sign in' => 'Log in', + 'Sign up' => 'Registreer', + 'Something went wrong' => 'Er is iets mis gegaan', 'Switch identities is disabled.' => 'Identiteiten wisselen is niet ingeschakeld', 'Thank you for signing up on {0}' => 'Bedankt voor je registratie op "{0}"', - 'Thank you, registration is now complete.' => 'Bedankt, jouw registratie is klaar.', + 'Thank you, registration is now complete.' => 'Bedankt, je registratie is klaar.', 'The "recaptcha" component must be configured.' => 'De "recaptcha" component moet worden geconfigureerd.', 'The confirmation link is invalid or expired. Please try requesting a new one.' => 'De bevestigings-link is ongeldig of vervallen. Vraag een nieuwe aan.', 'The verification code is incorrect.' => 'De bevestigingscode is ongeldig', 'There is neither role nor permission with name "{0}"' => 'Er is geen rol of machtiging met de naam "{0}"', 'There was an error in saving user' => 'Er ging iets fout bij het opslaan van de gebruiker', 'This account has already been connected to another user' => 'Dit account is al verbonden met een andere gebruiker', - 'This email address has already been taken' => 'Dit email-adres is al in gebruik', + 'This email address has already been taken' => 'Dit e-mail-adres is al in gebruik', 'This username has already been taken' => 'Deze gebruikersnaam is al in gebruik', 'This will disable two factor authentication. Are you sure?' => 'Dit zal de tweetraps authenticatie uitschakelen. Weet je het zeker?', - 'This will remove your personal data from this site. You will no longer be able to sign in.' => 'Dit zal jouw persoonlijke data van de website wissen. Je kan niet langer inloggen.', + 'This will remove your personal data from this site. You will no longer be able to sign in.' => 'Dit zal jouw persoonlijke gegevens van de website wissen. Je kan niet langer inloggen.', 'Time zone' => 'Tijdzone', 'Time zone is not valid' => 'Tijdzone is niet geldig', 'Two Factor Authentication (2FA)' => 'Tweefactor-authenticatie (2FA)', 'Two factor authentication code' => 'Tweefactor-authenticatiecode', 'Two factor authentication has been disabled.' => 'Tweefactor-authenticatie is uitgeschakeld', - 'Two factor authentication successfully enabled.' => 'Tweefactor-authenticatie met succes ingeschakeld', - 'Unable to confirm user. Please, try again.' => 'Onmogelijk om de gebruiker te bevestigen. Probeer opnieuw.', - 'Unable to create an account.' => 'Onmogelijk om een account aan te maken.', - 'Unable to create authorization item.' => 'Onmogelijk om een authorisatie-item aan te maken', - 'Unable to create new authorization rule.' => 'Onmogelijk om een authorisatie-regel aan te maken', - 'Unable to delete user. Please, try again later.' => 'Onmogelijk om de gebruiker te wissen. Probeer later opnieuw.', - 'Unable to disable Two factor authentication.' => 'Onmogelijk om de tweefactor-authenticatie uit te schakelen.', - 'Unable to remove authorization item.' => 'Onmogelijk om het authorisatie-item te wissen.', - 'Unable to send confirmation link' => 'Onmogelijk om de bevestigingsmail te versturen', - 'Unable to send recovery message to the user' => 'Onmogelijk om de herstel-email naar de gebruiker te versturen', - 'Unable to update authorization item.' => 'Onmogelijk om het authorisatie-item aan te passen.', - 'Unable to update authorization rule.' => 'Onmogelijk om de authorisatie-regel aan te passen.', - 'Unable to update block status.' => 'Onmogelijk om de blokkering te wijzigen', + 'Two factor authentication successfully enabled.' => 'Tweefactor-authenticatie is ingeschakeld', + 'Unable to confirm user. Please, try again.' => 'Niet mogelijk om de gebruiker te bevestigen. Probeer opnieuw.', + 'Unable to create an account.' => 'Niet mogelijk om een account aan te maken.', + 'Unable to create authorization item.' => 'Niet mogelijk om een authorisatie-item aan te maken', + 'Unable to create new authorization rule.' => 'Niet mogelijk om een authorisatie-regel aan te maken', + 'Unable to delete user. Please, try again later.' => 'Niet mogelijk om de gebruiker te verwijderen. Probeer later opnieuw.', + 'Unable to disable Two factor authentication.' => 'Niet mogelijk om de tweefactor-authenticatie uit te schakelen.', + 'Unable to remove authorization item.' => 'Niet mogelijk om het authorisatie-item te verwijderen.', + 'Unable to send confirmation link' => 'Niet mogelijk om de bevestigingsmail te versturen', + 'Unable to send recovery message to the user' => 'Niet mogelijk om de herstel-e-mail naar de gebruiker te versturen', + 'Unable to update authorization item.' => 'Niet mogelijk om het authorisatie-item aan te passen.', + 'Unable to update authorization rule.' => 'Niet mogelijk om de authorisatie-regel aan te passen.', + 'Unable to update block status.' => 'Niet mogelijk om de blokkering te wijzigen', 'Unblock' => 'Deblokkeren', 'Unconfirmed' => 'Niet bevestigd', - 'Update' => 'Bijwerken', - 'Update assignments' => 'Toewijzingen bijwerken', - 'Update permission' => 'Machtigingen bijwerken', - 'Update role' => 'Rol bijwerken', - 'Update rule' => 'Regel bijwerken', - 'Update user account' => 'Gebruikersaccount bijwerken', + 'Update' => 'Werk bij', + 'Update assignments' => 'Werk toewijzingen bij', + 'Update permission' => 'Werk machtigingen bij', + 'Update role' => 'Werk rol bij', + 'Update rule' => 'Werk regel bij', + 'Update user account' => 'Werk Gebruikersaccount bij', 'Updated at' => 'Bijgewerkt op', 'User account could not be created.' => 'Gebruikers-account kan niet worden aangemaakt.', 'User block status has been updated.' => 'Blokkering is aangepast.', @@ -233,45 +233,45 @@ 'User has been deleted' => 'Gebruiker is verwijderd', 'User is not found' => 'Gebruiker niet gevonden', 'User not found.' => 'Gebruiker niet gevonden', - 'User will be required to change password at next login' => 'Gebruiker zal verplicht worden zijn wachtwoord aan te passen bij volgende login', + 'User will be required to change password at next login' => 'Gebruiker wordt verplicht zijn wachtwoord te veranderen bij volgende login', 'Username' => 'Gebruikersnaam', 'Users' => 'Gebruikers', 'VKontakte' => 'VKontakte', - 'Verification failed. Please, enter new code.' => 'Bevestiging mislukt. Geef een nieuwe code in.', - 'We couldn\'t re-send the mail to confirm your address. Please, verify is the correct email or if it has been confirmed already.' => 'We konden geen nieuwe email sturen om jouw adres te bevestigen. Controleer het email-adres en controleer of het niet al bevestigd is.', + 'Verification failed. Please, enter new code.' => 'Bevestiging mislukt. Voer een nieuwe code in.', + 'We couldn\'t re-send the mail to confirm your address. Please, verify is the correct email or if it has been confirmed already.' => 'Versturen van e-mail om jouw adres te bevestigen is mislukt. Controleer het e-mail-adres en controleer of het niet al bevestigd is.', 'We have generated a password for you' => 'Er is een nieuw wachtwoord voor je gegenereerd', - 'We have received a request to change the email address for your account on {0}' => 'We ontvingen een aanvraag om je email adres te wijzigen voor je account op {0}', - 'We have received a request to reset the password for your account on {0}' => 'Wij ontvingen een aanvraag om je wachtwoord te resetten voor je account op {0}', - 'We have sent confirmation links to both old and new email addresses. You must click both links to complete your request.' => 'We hebben een bevestigingslink naar zowel jouw oud als nieuw email-adres gestuurd. Je moet beide links aanklikken om de aanvraag te bevestigen.', + 'We have received a request to change the email address for your account on {0}' => 'We ontvingen een aanvraag om je e-mail adres te wijzigen voor je account op {0}', + 'We have received a request to reset the password for your account on {0}' => 'Wij ontvingen een aanvraag om je wachtwoord te herstellen voor je account op {0}', + 'We have sent confirmation links to both old and new email addresses. You must click both links to complete your request.' => 'Er is een bevestigingslink naar jouw oude en nieuwe e-mail-adres gestuurd. Je moet beide links openen om de aanvraag te bevestigen.', 'Website' => 'Website', 'Welcome to {0}' => 'Welkom op {0}', 'Yandex' => 'Yandex', - 'You are about to delete all your personal data from this site.' => 'Je staat op het punt om al je persoonlijke dat te wissen van deze website', - 'You can assign multiple roles or permissions to user by using the form below' => 'Je kan meerdere rollen of machtigingen toewijzen aan de gebruiker in dit formulier', + 'You are about to delete all your personal data from this site.' => 'Je staat op het punt om al je persoonlijke gegevens te wissen van deze website', + 'You can assign multiple roles or permissions to user by using the form below' => 'In dit formulier kan je meerdere rollen of machtigingen toewijzen aan de gebruiker', 'You can connect multiple accounts to be able to log in using them' => 'Je kan met meerdere accounts verbinden om met deze accounts in te loggen', 'You cannot remove your own account' => 'Je kan je eigen account niet verwijderen.', - 'You need to confirm your email address' => 'Je moet je email-adres bevestigen', + 'You need to confirm your email address' => 'Je moet je e-mail-adres bevestigen', 'Your account details have been updated' => 'Je account-details zijn gewijzigd', 'Your account has been blocked' => 'Je account is geblokkeerd', 'Your account has been blocked.' => 'Je account is geblokkeerd.', 'Your account has been completely deleted' => 'Je account is volledig verwijderd', 'Your account has been connected' => 'Je account is verbonden', 'Your account has been created' => 'Je account is aangemaakt', - 'Your account has been created and a message with further instructions has been sent to your email' => 'Je account is aangemaakt en een email met verdere instructies is naar je email-adres verzonden', + 'Your account has been created and a message with further instructions has been sent to your email' => 'Je account is aangemaakt en een e-mail met verdere instructies is naar je e-mail-adres verzonden', 'Your account on {0} has been created' => 'Je account op {0} is aangemaakt', 'Your confirmation token is invalid or expired' => 'Je bevestigingscode is ongeldig of vervallen', 'Your consent is required to register' => 'Je toestemming is verplicht om te registreren', - 'Your email address has been changed' => 'Je email-adres is gewijzigd', + 'Your email address has been changed' => 'Je e-mail-adres is gewijzigd', 'Your password has expired, you must change it now' => 'Je wachtwoord is vervallen, je moet een nieuw wachtwoord aanmaken', 'Your personal information has been removed' => 'Je persoonlijke gegevens zijn verwijderd', 'Your profile has been updated' => 'Je profiel is bijgewerkt', 'privacy policy' => 'privacy policy', '{0, date, MMM dd, YYYY HH:mm}' => '{0, date, MMM dd, YYYY HH:mm}', - '{0, date, MMMM dd, YYYY HH:mm}' => '{0, date, MMMM dd, YYYY HH:mm}\'', + '{0, date, MMMM dd, YYYY HH:mm}' => '{0, date, MMMM dd, YYYY HH:mm}', '{0} cannot be blank.' => '{0} mag niet leeg zijn.', - 'According to the European General Data Protection Regulation (GDPR) we need your consent to work with your personal data.' => 'In verband met de General Data Protection Regulation (GDPR) moeten we je toestemming hebben voor het gebruiken van je gegevens', + 'According to the European General Data Protection Regulation (GDPR) we need your consent to work with your personal data.' => 'In verband met de Algemene Verordening Gegevensbescherming (AVG/GDPR) hebben wij je toestemming nodig voor het gebruiken van je gegevens', 'Active' => '', - 'An email with instructions to create a new password has been sent to {email} if it is associated with an {appName} account. Your existing password has not been changed.' => 'Er is een email met instructies verstuurd naar {email} als dit is verbonden mat je {appName} account; je bestaande wachtwoord is niet gewijzigd.', + 'An email with instructions to create a new password has been sent to {email} if it is associated with an {appName} account. Your existing password has not been changed.' => 'Er is een e-mail met instructies verstuurd naar {email} als dit is verbonden mat je {appName} account; je bestaande wachtwoord is niet gewijzigd.', 'Application not configured for two factor authentication.' => 'App niet geconfigureerd voor tweefactor-authenticatie', 'Code for two factor authentication on {0}' => 'Code voor tweefactor-authenticatie', 'Current' => 'Bestaande', @@ -279,17 +279,17 @@ 'Error while enabling SMS two factor authentication. Please reload the page.' => 'Fout met het instellen van SMS authenticatie, laad deze pagina opnieuw', 'Google Authenticator' => 'Google Authenticator', 'IP' => 'IP', - 'If you haven\'t received a password, you can reset it at' => 'ALs je geen wachtwoord hebt ontvangen kan je het herstellen op', + 'If you haven\'t received a password, you can reset it at' => 'ALs je geen wachtwoord hebt ontvangen kan je het wijzigen op', 'Inactive' => 'Inactief', 'Insert' => 'Voer in', 'Insert the code you received by SMS.' => 'Voer de code in die je per SMS ontvangen hebt', - 'Insert the code you received by email.' => 'Voer de code in die je per email ontvangen hebt', - 'Insert the mobile phone number where you want to receive text message in international format' => 'Voer je mobiele telefoonnummer in waar je de SMS wil ontvangen (internationaal formaat)', + 'Insert the code you received by email.' => 'Voer de code in die je per e-mail ontvangen hebt', + 'Insert the mobile phone number where you want to receive text message in international format' => 'Voer je mobiele telefoonnummer in waar je de SMS wilt ontvangen (internationaal formaat)', 'Last activity' => 'Laatste activiteit', 'Mobile phone number' => 'Mobiel telefoonnummer', 'Mobile phone number successfully enabled.' => 'Mobiel telefoonnummer geactiveerd', - 'Please, enter the right code. The code is valid for {0} seconds. If you want to get a new code, please click on \'Cancel\' and repeat the login request.' => 'Voer de code in, deze is geldig voor {0} seconden. Kies \'Annuleer\' en herhaal het verzoek om een nieuwe code te ontvangen.', - 'Please, enter the right code. The code is valid for {0} seconds. If you want to get a new code, please close this window and repeat the enabling request.' => 'Voer de code in, deze is geldig voor {0} seconden. Sluit dit venster en herhaal het verzoek om een nieuwe code te ontvangen.', + 'Please, enter the right code. The code is valid for {0} seconds. If you want to get a new code, please click on \'Cancel\' and repeat the login request.' => 'Voer de code in, deze is geldig gedurende {0} seconden. Kies \'Annuleer\' en herhaal het verzoek om een nieuwe code te ontvangen.', + 'Please, enter the right code. The code is valid for {0} seconds. If you want to get a new code, please close this window and repeat the enabling request.' => 'Voer de code in, deze is geldig gedurende {0} seconden. Sluit dit venster en herhaal het verzoek om een nieuwe code te ontvangen.', 'Rule class name' => 'Regel class-naam', 'Select rule...' => 'Selecteer regel', 'Session ID' => 'Sessie-ID', @@ -298,24 +298,24 @@ 'Submit' => 'Verstuur', 'Terminate all sessions' => 'Verwijder alle sessies', 'Text message' => 'SMS', - 'The email address set is: "{0}".' => 'Het ingestelde email-adres is: "{0}".', + 'The email address set is: "{0}".' => 'Het ingestelde e-mail-adres is: "{0}".', 'The email sending failed, please check your configuration.' => 'E-mail versturen mislukt, controleer je instellingen', 'The phone number set is: "{0}".' => 'Het ingestelde telefoonnummer is: "{0}".', 'The requested page does not exist.' => 'De opgevraagde pagina bestaat niet.', 'The sms sending failed, please check your configuration.' => 'SMS versturen mislukt, controleer je instellingen', 'This is the code to insert to enable two factor authentication' => 'Dit is de code die ingevoerd moet worden voor het activeren van tweefactor-authenticatie', - 'Two factor authentication code by SMS' => 'Twee-factor code per SMS', - 'Two factor authentication code by email' => 'Twee-factor code per email', - 'Two factor authentication protects you in case of stolen credentials' => 'Twee-factor authenticatie beschermt je tegen misbruik als je login gegevens gestolen zijn', + 'Two factor authentication code by SMS' => 'Tweefactor code per SMS', + 'Two factor authentication code by email' => 'Tweefactor code per e-mail', + 'Two factor authentication protects you in case of stolen credentials' => 'Tweefactor authenticatie beschermt je tegen misbruik als je login-gegevens gestolen zijn', 'Unfortunately, you can not work with this site without giving us consent to process your data.' => 'Je kan deze site niet bezoeken zonder je toestemming te geven voor het verwerken van je gegevens', 'User ID' => 'Gebruikers-ID', 'User agent' => 'User Agent', 'User does not have sufficient permissions.' => 'Gebruiker heeft onvoldoende rechten', 'You cannot block your own account.' => 'Je kan je eigen account niet blokkeren.', - 'You cannot remove your own account.' => 'e kan je eigen account niet verwijderen.', - 'You received this email because someone, possibly you or someone on your behalf, have created an account at {app_name}' => 'Je ontvangt deze email omdat iemand (waarschijnlijk jijzelf) een account heeft aangemaakt op {app_name}', + 'You cannot remove your own account.' => 'Je kan je eigen account niet verwijderen.', + 'You received this email because someone, possibly you or someone on your behalf, have created an account at {app_name}' => 'Je ontvangt deze e-mail omdat iemand (waarschijnlijk jijzelf) een account heeft aangemaakt op {app_name}', 'Your consent is required to work with this site' => 'Je toestemming is nodig om deze site te bezoeken', - 'Your role requires 2FA, you won\'t be able to use the application until you enable it' => 'Voor deze rol is 2FA vereist, je kan niet verder gan zonder tweefactor-authenticatie in te schakelen', + 'Your role requires 2FA, you won\'t be able to use the application until you enable it' => 'Voor deze rol is 2FA vereist, je kan niet verder gaan zonder tweefactor-authenticatie in te schakelen', 'Your two factor authentication method is based on "{0}".' => 'Je tweefactor-authenticatie methode is gebaseerd op "{0}".', 'Mobile phone not found, please check your profile' => 'Mobiel telefoonnummer niet gevonden, controleer je profiel-gegevens', ]; From 6effd2cc7362216f0e37255aa7226b1b69816e1e Mon Sep 17 00:00:00 2001 From: Johannes la Poutre Date: Tue, 20 Jun 2023 23:12:24 +0200 Subject: [PATCH 05/32] chore: consistency --- src/User/resources/i18n/nl/usuario.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/User/resources/i18n/nl/usuario.php b/src/User/resources/i18n/nl/usuario.php index dcb57f02..e27a6b39 100644 --- a/src/User/resources/i18n/nl/usuario.php +++ b/src/User/resources/i18n/nl/usuario.php @@ -89,7 +89,7 @@ 'Deleted by GDPR request' => 'Verwijderd op versoek (AVG/GDPR)', 'Description' => 'Beschrijving', 'Didn\'t receive confirmation message?' => 'Geen bevestigings-e-mail ontvangen?', - 'Disable two factor authentication' => 'Schakel tweetraps-authenticatie uit', + 'Disable two factor authentication' => 'Schakel tweefactor-authenticatie uit', 'Disconnect' => 'Verbreek verbinding', 'Don\'t have an account? Sign up!' => 'Geen account? Meld je aan', 'Download my data' => 'Download mijn gegevens', @@ -196,7 +196,7 @@ 'This account has already been connected to another user' => 'Dit account is al verbonden met een andere gebruiker', 'This email address has already been taken' => 'Dit e-mail-adres is al in gebruik', 'This username has already been taken' => 'Deze gebruikersnaam is al in gebruik', - 'This will disable two factor authentication. Are you sure?' => 'Dit zal de tweetraps authenticatie uitschakelen. Weet je het zeker?', + 'This will disable two factor authentication. Are you sure?' => 'Dit zal de tweefactor authenticatie uitschakelen. Weet je het zeker?', 'This will remove your personal data from this site. You will no longer be able to sign in.' => 'Dit zal jouw persoonlijke gegevens van de website wissen. Je kan niet langer inloggen.', 'Time zone' => 'Tijdzone', 'Time zone is not valid' => 'Tijdzone is niet geldig', From 8c7e91f6497168a9c95768ebb3475cec45662afc Mon Sep 17 00:00:00 2001 From: Alain Rollmann Date: Sat, 9 Sep 2023 17:42:22 +0200 Subject: [PATCH 06/32] Update usuario.php Added missing French translations --- src/User/resources/i18n/fr/usuario.php | 90 +++++++++++++------------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/src/User/resources/i18n/fr/usuario.php b/src/User/resources/i18n/fr/usuario.php index d165c4ee..6221caf7 100644 --- a/src/User/resources/i18n/fr/usuario.php +++ b/src/User/resources/i18n/fr/usuario.php @@ -272,50 +272,50 @@ 'privacy policy' => 'politique de confidentialité', '{0, date, MMMM dd, YYYY HH:mm}' => '{0, date, dd MMMM YYYY HH:mm}', '{0} cannot be blank.' => '{0} ne peut être vide.', - 'According to the European General Data Protection Regulation (GDPR) we need your consent to work with your personal data.' => '', - 'Active' => '', - 'Application not configured for two factor authentication.' => '', - 'Code for two factor authentication on {0}' => '', - 'Current' => '', - 'Data privacy' => '', - 'Error while enabling SMS two factor authentication. Please reload the page.' => '', - 'Google Authenticator' => '', - 'IP' => '', - 'If you haven\'t received a password, you can reset it at' => '', - 'Inactive' => '', - 'Insert' => '', - 'Insert the code you received by SMS.' => '', - 'Insert the code you received by email.' => '', - 'Insert the mobile phone number where you want to receive text message in international format' => '', - 'Last activity' => '', - 'Mobile phone number' => '', - 'Mobile phone number successfully enabled.' => '', - 'Please, enter the right code. The code is valid for {0} seconds. If you want to get a new code, please click on \'Cancel\' and repeat the login request.' => '', - 'Please, enter the right code. The code is valid for {0} seconds. If you want to get a new code, please close this window and repeat the enabling request.' => '', - 'Session ID' => '', - 'Session history' => '', - 'Status' => '', - 'Submit' => '', - 'Terminate all sessions' => '', - 'Text message' => '', - 'The email address set is: "{0}".' => '', - 'The email sending failed, please check your configuration.' => '', - 'The phone number set is: "{0}".' => '', - 'The requested page does not exist.' => '', - 'The sms sending failed, please check your configuration.' => '', - 'This is the code to insert to enable two factor authentication' => '', - 'Two factor authentication code by SMS' => '', - 'Two factor authentication code by email' => '', - 'Unfortunately, you can not work with this site without giving us consent to process your data.' => '', - 'User ID' => '', - 'User agent' => '', - 'User does not have sufficient permissions.' => '', - 'You cannot block your own account.' => '', - 'You cannot remove your own account.' => '', - 'You received this email because someone, possibly you or someone on your behalf, have created an account at {app_name}' => '', - 'Your consent is required to work with this site' => '', - 'Your role requires 2FA, you won\'t be able to use the application until you enable it' => '', - 'Your two factor authentication method is based on "{0}".' => '', + 'According to the European General Data Protection Regulation (GDPR) we need your consent to work with your personal data.' => 'Conformément au Règlement général européen sur la protection des données (RGPD), nous avons besoin de votre consentement pour traiter vos données personnelles.', + 'Active' => 'Actif', + 'Application not configured for two factor authentication.' => 'Application non configurée pour l\'authentification à deux facteurs.', + 'Code for two factor authentication on {0}' => 'Code pour l\'authentification à deux facteurs sur {0}', + 'Current' => 'Actuel', + 'Data privacy' => 'Confidentialité des données', + 'Error while enabling SMS two factor authentication. Please reload the page.' => 'Erreur lors de l\'activation de l\'authentification SMS à deux facteurs. Veuillez recharger la page.', + 'Google Authenticator' => 'Google Authenticator', + 'IP' => 'IP', + 'If you haven\'t received a password, you can reset it at' => 'Si vous n\'avez pas reçu de mot de passe, vous pouvez le réinitialiser à ', + 'Inactive' => 'Inactif', + 'Insert' => 'Insérer', + 'Insert the code you received by SMS.' => 'Insérez le code que vous avez reçu par SMS.', + 'Insert the code you received by email.' => 'Insérez le code que vous avez reçu par email.', + 'Insert the mobile phone number where you want to receive text message in international format' => 'Insérez le numéro de téléphone mobile sur lequel vous souhaitez recevoir les SMS au format international', + 'Last activity' => 'Dernière Activité', + 'Mobile phone number' => 'Numéro de téléphone portable', + 'Mobile phone number successfully enabled.' => 'Numéro de téléphone mobile activé avec succès.', + 'Please, enter the right code. The code is valid for {0} seconds. If you want to get a new code, please click on \'Cancel\' and repeat the login request.' => 'SVP, entrez le code correct. Le code est valide pendant {0} secondes. Si vous souhaitez obtenir un nouveau code, veuillez cliquer sur \'Annuler\' et répéter la demande de connexion.', + 'Please, enter the right code. The code is valid for {0} seconds. If you want to get a new code, please close this window and repeat the enabling request.' => 'SVP, entrez le code correct. Le code est valide pendant {0} secondes. Si vous souhaitez obtenir un nouveau code, veuillez fermer cette fenêtre et répéter la demande d\'activation.', + 'Session ID' => 'ID de session', + 'Session history' => 'Historique de session', + 'Status' => 'Statut', + 'Submit' => 'Envoyer', + 'Terminate all sessions' => 'Clôturer toutes les sessions', + 'Text message' => 'Message texte', + 'The email address set is: "{0}".' => 'L\'adresse e-mail définie est : "{0}".', + 'The email sending failed, please check your configuration.' => 'L\'envoi de l\'e-mail a échoué, veuillez vérifier votre configuration.', + 'The phone number set is: "{0}".' => 'Le numéro de téléphone défini est : "{0}".', + 'The requested page does not exist.' => 'La page demandée n\'existe pas.', + 'The sms sending failed, please check your configuration.' => 'L\'envoi du SMS a échoué, veuillez vérifier votre configuration.', + 'This is the code to insert to enable two factor authentication' => 'Voici le code à insérer pour activer l\'authentification à deux facteurs', + 'Two factor authentication code by SMS' => 'Code d\'authentification à deux facteurs par SMS', + 'Two factor authentication code by email' => 'Code d\'authentification à deux facteurs par email', + 'Unfortunately, you can not work with this site without giving us consent to process your data.' => 'Malheureusement, vous ne pouvez pas travailler avec ce site sans nous donner votre consentement au traitement de vos données.', + 'User ID' => 'ID de l\'utilisateur', + 'User agent' => 'Agent utilisateur', + 'User does not have sufficient permissions.' => 'L\'utilisateur ne dispose pas des autorisations suffisantes.', + 'You cannot block your own account.' => 'Vous ne pouvez pas bloquer votre propre compte.', + 'You cannot remove your own account.' => 'Vous ne pouvez pas supprimer votre propre compte.', + 'You received this email because someone, possibly you or someone on your behalf, have created an account at {app_name}' => 'Vous avez reçu cet e-mail parce que quelqu\'un, peut-être vous-même ou quelqu\'un en votre nom, a créé un compte sur {app_name}', + 'Your consent is required to work with this site' => 'Votre consentement est requis pour travailler avec ce site', + 'Your role requires 2FA, you won\'t be able to use the application until you enable it' => 'Votre rôle nécessite 2FA, vous ne pourrez pas utiliser l\'application tant que vous ne l\'aurez pas activée', + 'Your two factor authentication method is based on "{0}".' => 'Votre méthode d\'authentification à deux facteurs est basée sur "{0}".', '{0, date, MMM dd, YYYY HH:mm}' => '', - 'Mobile phone not found, please check your profile' => '@@@@', + 'Mobile phone not found, please check your profile' => 'Téléphone portable introuvable, veuillez vérifier votre profil', ]; From 4b1536f9348cf0bdf0a549f4da4cc008d04c5396 Mon Sep 17 00:00:00 2001 From: Wenceslaus Dsilva Date: Sun, 24 Sep 2023 16:10:44 +0530 Subject: [PATCH 07/32] fix(TwoFactorAuthenticationEnforceFilter.php): use $user variable instead of accessing Yii::$app->user->identity multiple times for better readability and performance fix(MailService.php): remove unnecessary whitespace before $this->mailer to improve code formatting --- src/User/Filter/TwoFactorAuthenticationEnforceFilter.php | 2 +- src/User/Service/MailService.php | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/User/Filter/TwoFactorAuthenticationEnforceFilter.php b/src/User/Filter/TwoFactorAuthenticationEnforceFilter.php index 537e1c48..f0d07092 100644 --- a/src/User/Filter/TwoFactorAuthenticationEnforceFilter.php +++ b/src/User/Filter/TwoFactorAuthenticationEnforceFilter.php @@ -40,7 +40,7 @@ public function beforeAction($action) $permissions = $module->twoFactorAuthenticationForcedPermissions; $user = Yii::$app->user->identity; - $itemsByUser = array_keys($this->getAuthManager()->getItemsByUser(Yii::$app->user->identity->id)); + $itemsByUser = array_keys($this->getAuthManager()->getItemsByUser($user->id)); if (!empty(array_intersect($permissions, $itemsByUser)) && !$user->auth_tf_enabled) { Yii::$app->session->setFlash('warning', Yii::t('usuario', 'Your role requires 2FA, you won\'t be able to use the application until you enable it')); return Yii::$app->response->redirect(['/user/settings/account'])->send(); diff --git a/src/User/Service/MailService.php b/src/User/Service/MailService.php index 0e9ac491..4e99d443 100644 --- a/src/User/Service/MailService.php +++ b/src/User/Service/MailService.php @@ -83,8 +83,7 @@ public function getType() */ public function run() { - - $result = $this->mailer + $result = $this->mailer ->compose(['html' => $this->view, 'text' => "text/{$this->view}"], $this->params) ->setFrom($this->from) ->setTo($this->to) From bbd206ac1c25c2f0c81d40d7438d24efb1c0da28 Mon Sep 17 00:00:00 2001 From: "enrico.degaudenzi@connectorly.io" Date: Fri, 6 Oct 2023 15:49:31 +0100 Subject: [PATCH 08/32] #524 Two Factor - Authenticator App - now offers the end-user a "Can't scan?" fallback --- src/User/Controller/SettingsController.php | 2 +- src/User/resources/i18n/es/usuario.php | 1 + src/User/resources/i18n/fr/usuario.php | 1 + src/User/resources/i18n/it/usuario.php | 1 + src/User/resources/views/settings/two-factor.php | 7 +++++++ 5 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/User/Controller/SettingsController.php b/src/User/Controller/SettingsController.php index 7d476f3e..a96040bc 100644 --- a/src/User/Controller/SettingsController.php +++ b/src/User/Controller/SettingsController.php @@ -473,7 +473,7 @@ public function actionTwoFactor($id) switch ($choice) { case 'google-authenticator': $uri = $this->make(TwoFactorQrCodeUriGeneratorService::class, [$user])->run(); - return $this->renderAjax('two-factor', ['id' => $id, 'uri' => $uri]); + return $this->renderAjax('two-factor', ['id' => $id, 'uri' => $uri, 'user' => $user]); case 'email': $emailCode = $this->make(TwoFactorEmailCodeGeneratorService::class, [$user])->run(); return $this->renderAjax('two-factor-email', ['id' => $id, 'code' => $emailCode]); diff --git a/src/User/resources/i18n/es/usuario.php b/src/User/resources/i18n/es/usuario.php index 28394d28..3360803b 100644 --- a/src/User/resources/i18n/es/usuario.php +++ b/src/User/resources/i18n/es/usuario.php @@ -57,6 +57,7 @@ 'Block' => 'Bloquear', 'Block status' => 'Estado de bloqueo', 'Blocked at {0, date, MMMM dd, YYYY HH:mm}' => 'Bloqueado el {0, date, dd MMMM, YYYY HH:mm}', + 'Can\'t scan? Copy the code instead.' => '¿No puedes escanear? Copie el código.', 'Cancel' => 'Cancelar', 'Cannot assign role "{0}" as the AuthManager is not configured on your console application.' => 'No se puede asignar rol "{0}" ya que AuthManager no ha sido configurado en su aplicación de consola.', 'Change your avatar at Gravatar.com' => 'Cambie su avatar en Gravatar.com', diff --git a/src/User/resources/i18n/fr/usuario.php b/src/User/resources/i18n/fr/usuario.php index d165c4ee..8a8051ce 100644 --- a/src/User/resources/i18n/fr/usuario.php +++ b/src/User/resources/i18n/fr/usuario.php @@ -56,6 +56,7 @@ 'Block' => 'Verrouiller', 'Block status' => 'État du verrouillage', 'Blocked at {0, date, MMMM dd, YYYY HH:mm}' => 'Verrouillé depuis le {0, date, dd MMMM YYYY HH:mm}', + 'Can\'t scan? Copy the code instead.' => 'Ne peut pas numériser? Copiez le code.', 'Cancel' => 'Annuler', 'Cannot assign role "{0}" as the AuthManager is not configured on your console application.' => 'Impossible d\'assigner le rôle {0} tant que l\'AuthManager n\'est pas configuré depuis la console de l\'application.', 'Change your avatar at Gravatar.com' => 'Changez votre avatar depuis Gravatar.com', diff --git a/src/User/resources/i18n/it/usuario.php b/src/User/resources/i18n/it/usuario.php index 9ed2e712..668cf106 100644 --- a/src/User/resources/i18n/it/usuario.php +++ b/src/User/resources/i18n/it/usuario.php @@ -53,6 +53,7 @@ 'Authorization rule has been updated.' => 'Regola di autorizzazione modificata.', 'Awesome, almost there. Now you need to click the confirmation link sent to your new email address.' => 'Fantastico, ci siamo quasi. Ora devi solo visitare il collegamento di conferma che è stato inviato al tuo nuovo indirizzo email.', 'Awesome, almost there. Now you need to click the confirmation link sent to your old email address.' => 'Fantastico, ci siamo quasi. Ora devi solo visitare il collegamento di conferma che è stato inviato al tuo vecchio indirizzo email.', + 'Can\'t scan? Copy the code instead.' => 'Non puoi scansionare? Copia il codice.', 'Back to privacy settings' => 'Torna alle impostazioni di privacy', 'Bio' => 'Bio', 'Block' => 'Blocca', diff --git a/src/User/resources/views/settings/two-factor.php b/src/User/resources/views/settings/two-factor.php index 6434396a..439b82e0 100644 --- a/src/User/resources/views/settings/two-factor.php +++ b/src/User/resources/views/settings/two-factor.php @@ -10,6 +10,7 @@ /** @var string $id */ /** @var string $uri */ +/** @var Da\User\Model\User $user */ ?>
@@ -26,6 +27,12 @@
+
+
+ +
auth_tf_key ?>
+
+
From cd7d74d9a1bdd8f3ba4c97160b667b91fef8fb28 Mon Sep 17 00:00:00 2001 From: liviuk2 Date: Mon, 16 Oct 2023 11:03:28 +0200 Subject: [PATCH 09/32] UserSearch avoid fields name conflict if joined with other tables --- src/User/Search/UserSearch.php | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/User/Search/UserSearch.php b/src/User/Search/UserSearch.php index ae462d9a..b9367660 100644 --- a/src/User/Search/UserSearch.php +++ b/src/User/Search/UserSearch.php @@ -11,7 +11,9 @@ namespace Da\User\Search; +use Da\User\Model\User; use Da\User\Query\UserQuery; +use Da\User\Traits\ContainerAwareTrait; use Yii; use yii\base\InvalidParamException; use yii\base\Model; @@ -19,6 +21,8 @@ class UserSearch extends Model { + use ContainerAwareTrait; + /** * @var string */ @@ -106,21 +110,23 @@ public function search($params) return $dataProvider; } + $userClass = $this->getClassMap()->get(User::class); + if ($this->created_at !== null) { $date = strtotime($this->created_at); - $query->andFilterWhere(['between', 'created_at', $date, $date + 3600 * 24]); + $query->andFilterWhere(['between', $userClass::tableName().'.created_at', $date, $date + 3600 * 24]); } if ($this->last_login_at !== null) { $date = strtotime($this->last_login_at); - $query->andFilterWhere(['between', 'last_login_at', $date, $date + 3600 * 24]); + $query->andFilterWhere(['between', $userClass::tableName().'.last_login_at', $date, $date + 3600 * 24]); } $query - ->andFilterWhere(['like', 'username', $this->username]) - ->andFilterWhere(['like', 'email', $this->email]) - ->andFilterWhere(['registration_ip' => $this->registration_ip]) - ->andFilterWhere(['last_login_ip' => $this->last_login_ip]); + ->andFilterWhere(['like', $userClass::tableName().'.username', $this->username]) + ->andFilterWhere(['like', $userClass::tableName().'.email', $this->email]) + ->andFilterWhere([$userClass::tableName().'.registration_ip' => $this->registration_ip]) + ->andFilterWhere([$userClass::tableName().'.last_login_ip' => $this->last_login_ip]); return $dataProvider; } From 214eef6f16502fa77b36f94efc75b911d2279696 Mon Sep 17 00:00:00 2001 From: liviuk2 Date: Mon, 16 Oct 2023 11:03:57 +0200 Subject: [PATCH 10/32] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5716b649..79d39d9c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ - Fix: update Dutch (nl) translations (squio) - Enh: possibility to limit the depth of the recursion when getting user ids from roles (mp1509) +- Fix: UserSearch avoid fields name conflict if joined with other tables (liviuk2) ## 1.6.1 March 4th, 2023 From 0b6a78f0cb19e7ea76c0fc687246aaa1ecf7295d Mon Sep 17 00:00:00 2001 From: "enrico.degaudenzi@connectorly.io" Date: Mon, 13 Nov 2023 12:10:08 +0000 Subject: [PATCH 11/32] 530 Welcome email: reported Password is now HTML-encoded --- src/User/resources/views/mail/welcome.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/User/resources/views/mail/welcome.php b/src/User/resources/views/mail/welcome.php index 526f0795..8efa10a9 100644 --- a/src/User/resources/views/mail/welcome.php +++ b/src/User/resources/views/mail/welcome.php @@ -27,7 +27,7 @@

name) ?>. generatePasswords): ?> - : password ?> + : password) ?> allowPasswordRecovery): ?> : From 3d8c4c747d1f8cc249f8bba2da68097dfa9a73b8 Mon Sep 17 00:00:00 2001 From: niciz Date: Tue, 21 Nov 2023 14:19:17 +0100 Subject: [PATCH 12/32] Update PasswordExpireService.php Fix PasswordExpireService return error when user model attribute "password_changed_at" is already set at null. --- src/User/Service/PasswordExpireService.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/User/Service/PasswordExpireService.php b/src/User/Service/PasswordExpireService.php index bfec3f7c..77470450 100644 --- a/src/User/Service/PasswordExpireService.php +++ b/src/User/Service/PasswordExpireService.php @@ -25,8 +25,11 @@ public function __construct(User $model) public function run() { - return $this->model->updateAttributes([ - 'password_changed_at' => null, - ]); + if ($this->model->password_changed_at !== null) { + return $this->model->updateAttributes([ + 'password_changed_at' => null, + ]); + } + return true; } } From 2ca349964f32157cabeec349091c87a79171ac33 Mon Sep 17 00:00:00 2001 From: niciz Date: Fri, 15 Dec 2023 13:54:27 +0100 Subject: [PATCH 13/32] Update PasswordExpireService.php remove useless if statement --- src/User/Service/PasswordExpireService.php | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/User/Service/PasswordExpireService.php b/src/User/Service/PasswordExpireService.php index 77470450..38190e58 100644 --- a/src/User/Service/PasswordExpireService.php +++ b/src/User/Service/PasswordExpireService.php @@ -25,11 +25,9 @@ public function __construct(User $model) public function run() { - if ($this->model->password_changed_at !== null) { - return $this->model->updateAttributes([ - 'password_changed_at' => null, - ]); - } + $this->model->updateAttributes([ + 'password_changed_at' => null, + ]); return true; } } From d46bff1195e3891b762bf1a1a9b048489ae867d3 Mon Sep 17 00:00:00 2001 From: niciz Date: Fri, 15 Dec 2023 18:33:24 +0100 Subject: [PATCH 14/32] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 63dfca19..b1aa6634 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - Fix: update Dutch (nl) translations (squio) - Enh: possibility to limit the depth of the recursion when getting user ids from roles (mp1509) - Fix: UserSearch avoid fields name conflict if joined with other tables (liviuk2) +- Fix: PasswordExpireService return false when user model attribute "password_changed_at" is already set at null. ## 1.6.1 March 4th, 2023 From ba84dd8e92d0a798975ebd27c7f36363f84a1617 Mon Sep 17 00:00:00 2001 From: Lorenzo Milesi Date: Mon, 18 Dec 2023 17:37:57 +0100 Subject: [PATCH 15/32] GH: fix MariaDB to v10 --- .github/workflows/php.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml index 4e67fd00..d4676482 100644 --- a/.github/workflows/php.yml +++ b/.github/workflows/php.yml @@ -18,7 +18,7 @@ jobs: services: mariadb: - image: mariadb:latest + image: mariadb:10 ports: - 3306:3306 env: From 2c34fc5df4caf423c5dc6bc8e570302448215210 Mon Sep 17 00:00:00 2001 From: "enrico.degaudenzi@connectorly.io" Date: Fri, 22 Dec 2023 14:26:53 +0000 Subject: [PATCH 16/32] #524 Added changelog entry --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b1aa6634..027708a6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ - Enh: possibility to limit the depth of the recursion when getting user ids from roles (mp1509) - Fix: UserSearch avoid fields name conflict if joined with other tables (liviuk2) - Fix: PasswordExpireService return false when user model attribute "password_changed_at" is already set at null. +- Enh #524: Two Factor - Authenticator App - offer a "Can't scan?" fallback ## 1.6.1 March 4th, 2023 From 7e01f45dc7ae94bf2b41b464e310d37cf63fb37d Mon Sep 17 00:00:00 2001 From: "enrico.degaudenzi@connectorly.io" Date: Fri, 22 Dec 2023 14:31:57 +0000 Subject: [PATCH 17/32] #530 Added changelog entry --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b1aa6634..5952922f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ - Enh: possibility to limit the depth of the recursion when getting user ids from roles (mp1509) - Fix: UserSearch avoid fields name conflict if joined with other tables (liviuk2) - Fix: PasswordExpireService return false when user model attribute "password_changed_at" is already set at null. +- Fix #530: Welcome email: reported Password is now HTML-encoded ## 1.6.1 March 4th, 2023 From d6c0c8e722ee9cae144e30ad286732547a1a9461 Mon Sep 17 00:00:00 2001 From: Lorenzo Milesi Date: Thu, 4 Jan 2024 05:31:45 +0100 Subject: [PATCH 18/32] Update changelog for 1.6.2 --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index eabf7a00..226c9bc1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## dev +## 1.6.2 Jan 4th, 2024 + - Fix: Two Factor Authentication - Filter - Blocks even when two factor authentication is enabled - Fix: update Dutch (nl) translations (squio) - Enh: possibility to limit the depth of the recursion when getting user ids from roles (mp1509) @@ -9,6 +11,7 @@ - Fix: PasswordExpireService return false when user model attribute "password_changed_at" is already set at null. - Enh #524: Two Factor - Authenticator App - offer a "Can't scan?" fallback - Fix #530: Welcome email: reported Password is now HTML-encoded +- Ehn: updated french translation by @arollmann ## 1.6.1 March 4th, 2023 From a7e044febf6d5ae0548043569f056cfdfb02f88a Mon Sep 17 00:00:00 2001 From: Elias Luhr Date: Fri, 5 Jan 2024 14:56:15 +0100 Subject: [PATCH 19/32] Make user id attribute for social network authentification configurable --- src/User/Contracts/AuthClientInterface.php | 10 ++++++++-- .../Service/SocialNetworkAccountConnectService.php | 2 +- src/User/Service/SocialNetworkAuthenticateService.php | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/User/Contracts/AuthClientInterface.php b/src/User/Contracts/AuthClientInterface.php index 6aad0348..84e284b6 100644 --- a/src/User/Contracts/AuthClientInterface.php +++ b/src/User/Contracts/AuthClientInterface.php @@ -14,8 +14,9 @@ use yii\authclient\ClientInterface; /** - * @property-read string $email - * @property-read string $username + * @property-read string|null $email + * @property-read string|null $userName + * @property-read mixed|null $userId */ interface AuthClientInterface extends ClientInterface { @@ -28,4 +29,9 @@ public function getEmail(); * @return string|null username */ public function getUserName(); + + /** + * @return mixed|null user id + */ + public function getUserId(); } diff --git a/src/User/Service/SocialNetworkAccountConnectService.php b/src/User/Service/SocialNetworkAccountConnectService.php index 2d6a7a59..366c5f89 100644 --- a/src/User/Service/SocialNetworkAccountConnectService.php +++ b/src/User/Service/SocialNetworkAccountConnectService.php @@ -83,7 +83,7 @@ protected function getSocialNetworkAccount() [], [ 'provider' => $this->client->getId(), - 'client_id' => $data['id'], + 'client_id' => $this->client->getUserId(), 'data' => json_encode($data), ] ); diff --git a/src/User/Service/SocialNetworkAuthenticateService.php b/src/User/Service/SocialNetworkAuthenticateService.php index ded5f478..b9906701 100644 --- a/src/User/Service/SocialNetworkAuthenticateService.php +++ b/src/User/Service/SocialNetworkAuthenticateService.php @@ -97,7 +97,7 @@ protected function createAccount() [], [ 'provider' => $this->client->getId(), - 'client_id' => $data['id'], + 'client_id' => $this->client->getUserId(), 'data' => json_encode($data), 'username' => $this->client->getUserName(), 'email' => $this->client->getEmail(), From edfbc44c52966c662862e113c790ff90d3472dd0 Mon Sep 17 00:00:00 2001 From: Elias Luhr Date: Fri, 5 Jan 2024 15:05:26 +0100 Subject: [PATCH 20/32] Add separate property for social network registration --- docs/install/configuration-options.md | 5 +++++ src/User/Module.php | 4 ++++ src/User/Service/SocialNetworkAuthenticateService.php | 2 +- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/docs/install/configuration-options.md b/docs/install/configuration-options.md index f448a70d..7cdf9edb 100755 --- a/docs/install/configuration-options.md +++ b/docs/install/configuration-options.md @@ -143,6 +143,11 @@ List of urls that does not require explicit data processing consent to be access Setting this attribute allows the registration process. If you set it to `false`, the module won't allow users to register by throwing a `NotFoundHttpException` if the `RegistrationController::actionRegister()` is accessed. +#### enableSocialNetworkRegistration (type: `boolean`, default: `true`) + +Setting this attribute allows the registration process via social networks. If you set it to `false`, the module won't allow users to +register. + #### enableEmailConfirmation (type: `boolean`, default: `true`) If `true`, the module will send an email with a confirmation link that user needs to click through to complete its diff --git a/src/User/Module.php b/src/User/Module.php index 0e00f587..f160d025 100755 --- a/src/User/Module.php +++ b/src/User/Module.php @@ -117,6 +117,10 @@ class Module extends BaseModule * @var bool whether to allow registration process or not */ public $enableRegistration = true; + /** + * @var bool whether to allow registration process for social network or not + */ + public $enableSocialNetworkRegistration = true; /** * @var bool whether to force email confirmation to */ diff --git a/src/User/Service/SocialNetworkAuthenticateService.php b/src/User/Service/SocialNetworkAuthenticateService.php index b9906701..fad08e0f 100644 --- a/src/User/Service/SocialNetworkAuthenticateService.php +++ b/src/User/Service/SocialNetworkAuthenticateService.php @@ -48,7 +48,7 @@ public function __construct( public function run() { $account = $this->socialNetworkAccountQuery->whereClient($this->client)->one(); - if (!$this->controller->module->enableRegistration && ($account === null || $account->user === null)) { + if (!$this->controller->module->enableSocialNetworkRegistration && ($account === null || $account->user === null)) { Yii::$app->session->setFlash('danger', Yii::t('usuario', 'Registration on this website is disabled')); $this->authAction->setSuccessUrl(Url::to(['/user/security/login'])); From 8f18c51cf2860ef663fa761f8df5f96c04e5bdd5 Mon Sep 17 00:00:00 2001 From: Elias Luhr Date: Fri, 5 Jan 2024 15:26:40 +0100 Subject: [PATCH 21/32] Use new property to enable social network registration in registration controller --- src/User/Controller/RegistrationController.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/User/Controller/RegistrationController.php b/src/User/Controller/RegistrationController.php index 6abb039a..c1c11f64 100644 --- a/src/User/Controller/RegistrationController.php +++ b/src/User/Controller/RegistrationController.php @@ -152,6 +152,10 @@ public function actionRegister() */ public function actionConnect($code) { + if (!$this->module->enableSocialNetworkRegistration) { + throw new NotFoundHttpException(); + } + /** @var SocialNetworkAccount $account */ $account = $this->socialNetworkAccountQuery->whereCode($code)->one(); if ($account === null || $account->getIsConnected()) { From 9aea9c76c08fa9aaf412caef45c1ee415916189c Mon Sep 17 00:00:00 2001 From: Elias Luhr Date: Fri, 5 Jan 2024 15:27:13 +0100 Subject: [PATCH 22/32] Always save the user account when created via the social network authenticate service --- src/User/Service/SocialNetworkAuthenticateService.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/User/Service/SocialNetworkAuthenticateService.php b/src/User/Service/SocialNetworkAuthenticateService.php index fad08e0f..c96298c7 100644 --- a/src/User/Service/SocialNetworkAuthenticateService.php +++ b/src/User/Service/SocialNetworkAuthenticateService.php @@ -106,7 +106,10 @@ protected function createAccount() if (($user = $this->getUser($account)) instanceof User) { $account->user_id = $user->id; - $account->save(false); + } + + if ($account->save(false)) { + return null; } return $account; From e5d5ea426d553cf90385dc3a843993cf50a4dd6a Mon Sep 17 00:00:00 2001 From: Elias Luhr Date: Fri, 5 Jan 2024 15:39:19 +0100 Subject: [PATCH 23/32] Always save the user account when created via the social network authenticate service --- src/User/Service/SocialNetworkAuthenticateService.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/User/Service/SocialNetworkAuthenticateService.php b/src/User/Service/SocialNetworkAuthenticateService.php index c96298c7..c2626848 100644 --- a/src/User/Service/SocialNetworkAuthenticateService.php +++ b/src/User/Service/SocialNetworkAuthenticateService.php @@ -107,8 +107,8 @@ protected function createAccount() if (($user = $this->getUser($account)) instanceof User) { $account->user_id = $user->id; } - - if ($account->save(false)) { + + if (!$account->save(false)) { return null; } From 8a81ad7c4233be8a164b7ae37f5ba2519332aaaa Mon Sep 17 00:00:00 2001 From: Elias Luhr Date: Fri, 5 Jan 2024 15:49:25 +0100 Subject: [PATCH 24/32] Add optional to control wether a welcome mail should be send after a registration by social network --- docs/install/configuration-options.md | 4 ++++ src/User/Controller/RegistrationController.php | 7 ++++++- src/User/Module.php | 4 ++++ src/User/Service/UserCreateService.php | 4 ++-- 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/docs/install/configuration-options.md b/docs/install/configuration-options.md index 7cdf9edb..ba775e1c 100755 --- a/docs/install/configuration-options.md +++ b/docs/install/configuration-options.md @@ -148,6 +148,10 @@ register by throwing a `NotFoundHttpException` if the `RegistrationController::a Setting this attribute allows the registration process via social networks. If you set it to `false`, the module won't allow users to register. +#### sendWelcomeMailAfterSocialNetworkRegistration (type: `boolean`, default: `true`) + +Setting this attribute controls wether a confirmation mail should be send or not. + #### enableEmailConfirmation (type: `boolean`, default: `true`) If `true`, the module will send an email with a confirmation link that user needs to click through to complete its diff --git a/src/User/Controller/RegistrationController.php b/src/User/Controller/RegistrationController.php index c1c11f64..0cfe1953 100644 --- a/src/User/Controller/RegistrationController.php +++ b/src/User/Controller/RegistrationController.php @@ -17,6 +17,7 @@ use Da\User\Factory\MailFactory; use Da\User\Form\RegistrationForm; use Da\User\Form\ResendForm; +use Da\User\Helper\SecurityHelper; use Da\User\Model\SocialNetworkAccount; use Da\User\Model\User; use Da\User\Query\SocialNetworkAccountQuery; @@ -175,7 +176,11 @@ public function actionConnect($code) if ($user->load(Yii::$app->request->post()) && $user->validate()) { $this->trigger(SocialNetworkConnectEvent::EVENT_BEFORE_CONNECT, $event); - $mailService = MailFactory::makeWelcomeMailerService($user); + if ($this->module->sendWelcomeMailAfterSocialNetworkRegistration) { + $mailService = MailFactory::makeWelcomeMailerService($user); + } else { + $mailService = null; + } if ($this->make(UserCreateService::class, [$user, $mailService])->run()) { $account->connect($user); $this->trigger(SocialNetworkConnectEvent::EVENT_AFTER_CONNECT, $event); diff --git a/src/User/Module.php b/src/User/Module.php index f160d025..d8b4e03d 100755 --- a/src/User/Module.php +++ b/src/User/Module.php @@ -121,6 +121,10 @@ class Module extends BaseModule * @var bool whether to allow registration process for social network or not */ public $enableSocialNetworkRegistration = true; + /** + * @var bool whether to send a welcome mail after the registration process for social network + */ + public $sendWelcomeMailAfterSocialNetworkRegistration = true; /** * @var bool whether to force email confirmation to */ diff --git a/src/User/Service/UserCreateService.php b/src/User/Service/UserCreateService.php index 74ecc73d..491873e0 100644 --- a/src/User/Service/UserCreateService.php +++ b/src/User/Service/UserCreateService.php @@ -31,7 +31,7 @@ class UserCreateService implements ServiceInterface protected $securityHelper; protected $mailService; - public function __construct(User $model, MailService $mailService, SecurityHelper $securityHelper) + public function __construct(User $model, ?MailService $mailService, SecurityHelper $securityHelper) { $this->model = $model; $this->mailService = $mailService; @@ -70,7 +70,7 @@ public function run() } $model->trigger(UserEvent::EVENT_AFTER_CREATE, $event); - if (!$this->sendMail($model)) { + if ($this->mailService instanceof MailService && !$this->sendMail($model)) { $error_msg = Yii::t( 'usuario', 'Error sending welcome message to "{email}". Please try again later.', From dc4097486868896558af0b573f9651197930d9f9 Mon Sep 17 00:00:00 2001 From: Elias Luhr Date: Fri, 5 Jan 2024 16:52:26 +0100 Subject: [PATCH 25/32] Add trait to support new interface in a backward compatible way --- src/User/AuthClient/Facebook.php | 4 ++++ src/User/AuthClient/GitHub.php | 2 ++ src/User/AuthClient/Google.php | 2 ++ src/User/AuthClient/LinkedIn.php | 3 +++ src/User/AuthClient/Twitter.php | 3 +++ src/User/AuthClient/VKontakte.php | 3 +++ src/User/AuthClient/Yandex.php | 3 +++ src/User/Traits/AuthClientUserIdTrait.php | 14 ++++++++++++++ 8 files changed, 34 insertions(+) create mode 100644 src/User/Traits/AuthClientUserIdTrait.php diff --git a/src/User/AuthClient/Facebook.php b/src/User/AuthClient/Facebook.php index b910539f..6a2cf7e4 100644 --- a/src/User/AuthClient/Facebook.php +++ b/src/User/AuthClient/Facebook.php @@ -12,10 +12,14 @@ namespace Da\User\AuthClient; use Da\User\Contracts\AuthClientInterface; +use Da\User\Traits\AuthClientUserIdTrait; use yii\authclient\clients\Facebook as BaseFacebook; class Facebook extends BaseFacebook implements AuthClientInterface { + + use AuthClientUserIdTrait; + /** * {@inheritdoc} */ diff --git a/src/User/AuthClient/GitHub.php b/src/User/AuthClient/GitHub.php index 1a298df5..19ccae62 100644 --- a/src/User/AuthClient/GitHub.php +++ b/src/User/AuthClient/GitHub.php @@ -12,10 +12,12 @@ namespace Da\User\AuthClient; use Da\User\Contracts\AuthClientInterface; +use Da\User\Traits\AuthClientUserIdTrait; use yii\authclient\clients\GitHub as BaseGitHub; class GitHub extends BaseGitHub implements AuthClientInterface { + use AuthClientUserIdTrait; /** * {@inheritdoc} */ diff --git a/src/User/AuthClient/Google.php b/src/User/AuthClient/Google.php index 42c24956..13fb6fec 100644 --- a/src/User/AuthClient/Google.php +++ b/src/User/AuthClient/Google.php @@ -12,10 +12,12 @@ namespace Da\User\AuthClient; use Da\User\Contracts\AuthClientInterface; +use Da\User\Traits\AuthClientUserIdTrait; use yii\authclient\clients\Google as BaseGoogle; class Google extends BaseGoogle implements AuthClientInterface { + use AuthClientUserIdTrait; /** * {@inheritdoc} */ diff --git a/src/User/AuthClient/LinkedIn.php b/src/User/AuthClient/LinkedIn.php index b0fc422e..fe5db731 100644 --- a/src/User/AuthClient/LinkedIn.php +++ b/src/User/AuthClient/LinkedIn.php @@ -12,10 +12,13 @@ namespace Da\User\AuthClient; use Da\User\Contracts\AuthClientInterface; +use Da\User\Traits\AuthClientUserIdTrait; use yii\authclient\clients\LinkedIn as BaseLinkedIn; class LinkedIn extends BaseLinkedIn implements AuthClientInterface { + use AuthClientUserIdTrait; + /** * {@inheritdoc} */ diff --git a/src/User/AuthClient/Twitter.php b/src/User/AuthClient/Twitter.php index 5a9f0a8e..166bb9ca 100644 --- a/src/User/AuthClient/Twitter.php +++ b/src/User/AuthClient/Twitter.php @@ -12,10 +12,13 @@ namespace Da\User\AuthClient; use Da\User\Contracts\AuthClientInterface; +use Da\User\Traits\AuthClientUserIdTrait; use yii\authclient\clients\Twitter as BaseTwitter; class Twitter extends BaseTwitter implements AuthClientInterface { + use AuthClientUserIdTrait; + /** * @return string */ diff --git a/src/User/AuthClient/VKontakte.php b/src/User/AuthClient/VKontakte.php index 69faa059..ac516c4d 100644 --- a/src/User/AuthClient/VKontakte.php +++ b/src/User/AuthClient/VKontakte.php @@ -12,11 +12,14 @@ namespace Da\User\AuthClient; use Da\User\Contracts\AuthClientInterface; +use Da\User\Traits\AuthClientUserIdTrait; use Yii; use yii\authclient\clients\VKontakte as BaseVKontakte; class VKontakte extends BaseVKontakte implements AuthClientInterface { + use AuthClientUserIdTrait; + /** * {@inheritdoc} */ diff --git a/src/User/AuthClient/Yandex.php b/src/User/AuthClient/Yandex.php index 35f3dfe2..262ec328 100644 --- a/src/User/AuthClient/Yandex.php +++ b/src/User/AuthClient/Yandex.php @@ -12,11 +12,14 @@ namespace Da\User\AuthClient; use Da\User\Contracts\AuthClientInterface; +use Da\User\Traits\AuthClientUserIdTrait; use Yii; use yii\authclient\clients\Yandex as BaseYandex; class Yandex extends BaseYandex implements AuthClientInterface { + use AuthClientUserIdTrait; + /** * {@inheritdoc} */ diff --git a/src/User/Traits/AuthClientUserIdTrait.php b/src/User/Traits/AuthClientUserIdTrait.php new file mode 100644 index 00000000..c1166fe1 --- /dev/null +++ b/src/User/Traits/AuthClientUserIdTrait.php @@ -0,0 +1,14 @@ +getUserAttributes()['id'] ?? null; + } +} From 86c31c30218b9e3f37fa2e9181ce2c53ff1bc152 Mon Sep 17 00:00:00 2001 From: Elias Luhr Date: Wed, 10 Jan 2024 15:40:12 +0100 Subject: [PATCH 26/32] Updated changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 226c9bc1..d3dd6073 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## dev +- Fix: Social Network Auth (eluhr) + ## 1.6.2 Jan 4th, 2024 - Fix: Two Factor Authentication - Filter - Blocks even when two factor authentication is enabled From 484e025014d5ad06f8d29b1e4c5759c1c3335394 Mon Sep 17 00:00:00 2001 From: Elias Luhr Date: Fri, 9 Feb 2024 11:55:10 +0100 Subject: [PATCH 27/32] Fix client_id value by using the correct method --- src/User/Query/SocialNetworkAccountQuery.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/User/Query/SocialNetworkAccountQuery.php b/src/User/Query/SocialNetworkAccountQuery.php index eee6d348..d90ae72d 100644 --- a/src/User/Query/SocialNetworkAccountQuery.php +++ b/src/User/Query/SocialNetworkAccountQuery.php @@ -26,7 +26,7 @@ public function whereClient(AuthClientInterface $client) return $this->andWhere( [ 'provider' => $client->getId(), - 'client_id' => (string)$client->getUserAttributes()['id'], + 'client_id' => (string)$client->getUserId(), ] ); } From da59707f3854fb533ab7ff9001bade01b2958f87 Mon Sep 17 00:00:00 2001 From: Elias Luhr Date: Fri, 9 Feb 2024 14:26:13 +0100 Subject: [PATCH 28/32] Added auth client for keycloak --- src/User/AuthClient/Keycloak.php | 35 ++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/User/AuthClient/Keycloak.php diff --git a/src/User/AuthClient/Keycloak.php b/src/User/AuthClient/Keycloak.php new file mode 100644 index 00000000..42a3cd7c --- /dev/null +++ b/src/User/AuthClient/Keycloak.php @@ -0,0 +1,35 @@ +getUserAttributes()['email'] ?? null; + } + + /** + * {@inheritdoc} + */ + public function getUserName() + { + // claim from profile scope + return $this->getUserAttributes()['preferred_username'] ?? $this->getEmail(); + } + + /** + * {@inheritdoc} + */ + public function getUserId() + { + return $this->getUserAttributes()['sub'] ?? null; + } +} From 5e697e2ad503398aedad8d7efa5c2c0c9c9e02af Mon Sep 17 00:00:00 2001 From: Elias Luhr Date: Fri, 9 Feb 2024 14:27:32 +0100 Subject: [PATCH 29/32] Added Keycloak as one of the supported clients in the docs --- docs/guides/social-network-authentication.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/guides/social-network-authentication.md b/docs/guides/social-network-authentication.md index b8d927ad..9a518021 100644 --- a/docs/guides/social-network-authentication.md +++ b/docs/guides/social-network-authentication.md @@ -46,6 +46,7 @@ The following is the list of clients supported by the module: - **Facebook** - `Da\User\AuthClient\Facebook` - **Github** - `Da\User\AuthClient\Github` - **Google** - `Da\User\AuthClient\Google` +- **Keycloak** - `Da\User\AuthClient\Keycloak` - **LinkedIn** - `Da\User\AuthClient\LinkedIn` - **Twitter** - `Da\User\AuthClient\Twitter` - **VKontakte** - `Da\User\AuthClient\VKontakte` From 6056be8f86beec357842f8ffe5a76be7bfa42e7e Mon Sep 17 00:00:00 2001 From: Elias Luhr Date: Fri, 9 Feb 2024 14:28:16 +0100 Subject: [PATCH 30/32] Updated changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d3dd6073..65e1d172 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## dev +- Enh: Keycloak auth client (e.luhr) - Fix: Social Network Auth (eluhr) ## 1.6.2 Jan 4th, 2024 From 888bc4c0e5f834f081ecdad33b42b8f6e80e0521 Mon Sep 17 00:00:00 2001 From: Elias Luhr Date: Fri, 9 Feb 2024 14:43:51 +0100 Subject: [PATCH 31/32] Added configuration example in keycloak auth client --- src/User/AuthClient/Keycloak.php | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/User/AuthClient/Keycloak.php b/src/User/AuthClient/Keycloak.php index 42a3cd7c..52463835 100644 --- a/src/User/AuthClient/Keycloak.php +++ b/src/User/AuthClient/Keycloak.php @@ -5,6 +5,26 @@ use Da\User\Contracts\AuthClientInterface; use yii\authclient\OpenIdConnect; +/** + * Example application configuration: + * + * ```php + * 'components' => [ + * 'authClientCollection' => [ + * 'class' => 'yii\authclient\Collection', + * 'clients' => [ + * 'github' => [ + * 'class' => 'yii\authclient\clients\Keycloak', + * 'clientId' => 'keycloak_client_id', + * 'clientSecret' => 'keycloak_client_secret', + * 'issuerUrl' => 'http://keycloak/realms/your-realm', + * ], + * ], + * ] + * // ... + * ] + * ``` +*/ class Keycloak extends OpenIdConnect implements AuthClientInterface { /** From a6e249291b7a641a107318ce70507fa483969c57 Mon Sep 17 00:00:00 2001 From: Elias Luhr Date: Fri, 9 Feb 2024 14:45:15 +0100 Subject: [PATCH 32/32] copy & paste fix --- src/User/AuthClient/Keycloak.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/User/AuthClient/Keycloak.php b/src/User/AuthClient/Keycloak.php index 52463835..78943dca 100644 --- a/src/User/AuthClient/Keycloak.php +++ b/src/User/AuthClient/Keycloak.php @@ -13,7 +13,7 @@ * 'authClientCollection' => [ * 'class' => 'yii\authclient\Collection', * 'clients' => [ - * 'github' => [ + * 'keycloak' => [ * 'class' => 'yii\authclient\clients\Keycloak', * 'clientId' => 'keycloak_client_id', * 'clientSecret' => 'keycloak_client_secret',