From ebfab45e23c1bc1dcfcb17f74d761f6c39251256 Mon Sep 17 00:00:00 2001 From: Robbie Averill Date: Mon, 5 Nov 2018 13:47:47 +0100 Subject: [PATCH 1/3] API LoginForm::authentiator_class is now deprecated, use getters or setters instead --- src/Security/LoginForm.php | 34 +++++++++++++++---- .../CMSMemberLoginForm.php | 4 +-- .../MemberAuthenticator/MemberLoginForm.php | 6 ++-- 3 files changed, 33 insertions(+), 11 deletions(-) diff --git a/src/Security/LoginForm.php b/src/Security/LoginForm.php index f1622f5e1..467a0437b 100644 --- a/src/Security/LoginForm.php +++ b/src/Security/LoginForm.php @@ -15,19 +15,30 @@ use SilverStripe\Forms\Form; */ abstract class LoginForm extends Form { - /** - * Authenticator class to use with this login form - * - * Set this variable to the authenticator class to use with this login - * form. + * @deprecated 4.4.0:5.0.0 Use getAuthenticatorClass() or setAuthenticatorClass() instead * @var string */ protected $authenticator_class; + /** + * Authenticator class to use with this login form + * + * Set this variable to the authenticator class to use with this login form. + * + * @var string + */ + protected $authenticatorClass; + + /** + * Set the authenticator class name to use + * + * @param string $class + * @return $this + */ public function setAuthenticatorClass($class) { - $this->authenticator_class = $class; + $this->authenticatorClass = $class; $authenticatorField = $this->Fields()->dataFieldByName('AuthenticationMethod'); if ($authenticatorField) { $authenticatorField->setValue($class); @@ -35,6 +46,17 @@ abstract class LoginForm extends Form return $this; } + /** + * Returns the authenticator class name to use + * + * @return string + */ + public function getAuthenticatorClass() + { + // B/C for deprecated authenticator_class property + return $this->authenticator_class ?: $this->authenticatorClass; + } + /** * Return the title of the form for use in the frontend * For tabs with multiple login methods, for example. diff --git a/src/Security/MemberAuthenticator/CMSMemberLoginForm.php b/src/Security/MemberAuthenticator/CMSMemberLoginForm.php index 636df9f1f..361677931 100644 --- a/src/Security/MemberAuthenticator/CMSMemberLoginForm.php +++ b/src/Security/MemberAuthenticator/CMSMemberLoginForm.php @@ -30,7 +30,7 @@ class CMSMemberLoginForm extends MemberLoginForm { $this->controller = $controller; - $this->authenticator_class = $authenticatorClass; + $this->setAuthenticatorClass($authenticatorClass); $fields = $this->getFormFields(); @@ -48,7 +48,7 @@ class CMSMemberLoginForm extends MemberLoginForm { // Set default fields $fields = FieldList::create([ - HiddenField::create("AuthenticationMethod", null, $this->authenticator_class, $this), + HiddenField::create("AuthenticationMethod", null, $this->getAuthenticatorClass(), $this), HiddenField::create('tempid', null, $this->controller->getRequest()->requestVar('tempid')), PasswordField::create("Password", _t('SilverStripe\\Security\\Member.PASSWORD', 'Password')) ]); diff --git a/src/Security/MemberAuthenticator/MemberLoginForm.php b/src/Security/MemberAuthenticator/MemberLoginForm.php index e3d345e28..f60fb68b4 100644 --- a/src/Security/MemberAuthenticator/MemberLoginForm.php +++ b/src/Security/MemberAuthenticator/MemberLoginForm.php @@ -77,7 +77,7 @@ class MemberLoginForm extends BaseLoginForm $checkCurrentUser = true ) { $this->setController($controller); - $this->authenticator_class = $authenticatorClass; + $this->setAuthenticatorClass($authenticatorClass); $customCSS = project() . '/css/member_login.css'; if (Director::fileExists($customCSS)) { @@ -88,7 +88,7 @@ class MemberLoginForm extends BaseLoginForm // @todo find a more elegant way to handle this $logoutAction = Security::logout_url(); $fields = FieldList::create( - HiddenField::create('AuthenticationMethod', null, $this->authenticator_class, $this) + HiddenField::create('AuthenticationMethod', null, $this->getAuthenticatorClass(), $this) ); $actions = FieldList::create( FormAction::create('logout', _t( @@ -133,7 +133,7 @@ class MemberLoginForm extends BaseLoginForm $label = Member::singleton()->fieldLabel(Member::config()->get('unique_identifier_field')); $fields = FieldList::create( - HiddenField::create("AuthenticationMethod", null, $this->authenticator_class, $this), + HiddenField::create("AuthenticationMethod", null, $this->getAuthenticatorClass(), $this), // Regardless of what the unique identifer field is (usually 'Email'), it will be held in the // 'Email' value, below: // @todo Rename the field to a more generic covering name From 7775f82584236a441262e1ec6164556567c00cbd Mon Sep 17 00:00:00 2001 From: Robbie Averill Date: Mon, 5 Nov 2018 14:16:28 +0100 Subject: [PATCH 2/3] FIX Handle falsy return value when setting form field value in setAuthenticatorClass() --- src/Security/LoginForm.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/Security/LoginForm.php b/src/Security/LoginForm.php index 467a0437b..a927915a9 100644 --- a/src/Security/LoginForm.php +++ b/src/Security/LoginForm.php @@ -39,10 +39,18 @@ abstract class LoginForm extends Form public function setAuthenticatorClass($class) { $this->authenticatorClass = $class; - $authenticatorField = $this->Fields()->dataFieldByName('AuthenticationMethod'); + + /** @var FieldList|null $fields */ + $fields = $this->Fields(); + if (!$fields) { + return $this; + } + + $authenticatorField = $fields->dataFieldByName('AuthenticationMethod'); if ($authenticatorField) { $authenticatorField->setValue($class); } + return $this; } From b2b4ff0be28bff6dbfb4c49d6165468a4443bb82 Mon Sep 17 00:00:00 2001 From: Maxime Rainville Date: Fri, 1 Feb 2019 19:41:15 +0300 Subject: [PATCH 3/3] MINOR Add LoginForm->authenticator_class deprecation reference to .upgrade.yml --- .upgrade.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.upgrade.yml b/.upgrade.yml index d57c41765..a2fec5e91 100644 --- a/.upgrade.yml +++ b/.upgrade.yml @@ -1325,6 +1325,8 @@ warnings: replacement: 'writeJavascriptToBody' 'SilverStripe\Forms\Formfield->dontEscape': message: 'FormField::$dontEscape has been removed. Escaping is now managed on a class by class basis.' + 'SilverStripe\Security\LoginForm->authenticator_class': + message: 'authenticator_class is deprecated. Use getAuthenticatorClass/setAuthenticatorClass.' 'SilverStripe\Security\Permission::$declared_permissions': message: 'Deprecated' 'SilverStripe\Security\Permission::$declared_permissions_list': @@ -1387,4 +1389,4 @@ warnings: url: 'https://docs.silverstripe.org/en/4/changelogs/4.4.0#resources-dir' replacement: 'RESOURCES_DIR' renameWarnings: - - Form \ No newline at end of file + - Form