From a1c3cf1cf4fd0cf8b2855bf53b668a4ffcf83833 Mon Sep 17 00:00:00 2001 From: Sam Minnee Date: Fri, 14 Feb 2014 15:37:16 +1300 Subject: [PATCH 01/39] Removed use of assertCount() from this test as it causes infinite loops on Travis. --- tests/model/SQLQueryTest.php | 49 +++++++++++++++++++++++------------- 1 file changed, 32 insertions(+), 17 deletions(-) diff --git a/tests/model/SQLQueryTest.php b/tests/model/SQLQueryTest.php index 7572f8f86..bcf1e341a 100755 --- a/tests/model/SQLQueryTest.php +++ b/tests/model/SQLQueryTest.php @@ -293,7 +293,6 @@ class SQLQueryTest extends SapphireTest { ); } - public function testSetWhereAny() { $query = new SQLQuery(); $query->setFrom('MyTable'); @@ -303,17 +302,18 @@ class SQLQueryTest extends SapphireTest { } public function testSelectFirst() { - // Test first from sequence $query = new SQLQuery(); $query->setFrom('"SQLQueryTest_DO"'); $query->setOrderBy('"Name"'); $result = $query->firstRow()->execute(); - $this->assertCount(1, $result); + $count = 0; foreach($result as $row) { $this->assertEquals('Object 1', $row['Name']); + $count++; } + $this->assertEquals(1, $count); // Test first from empty sequence $query = new SQLQuery(); @@ -321,51 +321,66 @@ class SQLQueryTest extends SapphireTest { $query->setOrderBy('"Name"'); $query->setWhere(array("\"Name\" = 'Nonexistent Object'")); $result = $query->firstRow()->execute(); - $this->assertCount(0, $result); - + + $count = 0; + foreach($query->lastRow()->execute() as $row) { + $count++; + } + $this->assertEquals(0, $count); + // Test that given the last item, the 'first' in this list matches the last $query = new SQLQuery(); $query->setFrom('"SQLQueryTest_DO"'); $query->setOrderBy('"Name"'); $query->setLimit(1, 1); $result = $query->firstRow()->execute(); - $this->assertCount(1, $result); + + $count = 0; foreach($result as $row) { $this->assertEquals('Object 2', $row['Name']); + $count++; } + $this->assertEquals(1, $count); } public function testSelectLast() { - // Test last in sequence $query = new SQLQuery(); $query->setFrom('"SQLQueryTest_DO"'); $query->setOrderBy('"Name"'); - $result = $query->lastRow()->execute(); - - $this->assertCount(1, $result); - foreach($result as $row) { + + $count = 0; + foreach($query->lastRow()->execute() as $row) { $this->assertEquals('Object 2', $row['Name']); + $count++; } - + $this->assertEquals(1, $count); + // Test last from empty sequence $query = new SQLQuery(); $query->setFrom('"SQLQueryTest_DO"'); $query->setOrderBy('"Name"'); $query->setWhere(array("\"Name\" = 'Nonexistent Object'")); - $result = $query->lastRow()->execute(); - $this->assertCount(0, $result); + + $count = 0; + foreach($query->lastRow()->execute() as $row) { + $count++; + } + $this->assertEquals(0, $count); + // Test that given the first item, the 'last' in this list matches the first $query = new SQLQuery(); $query->setFrom('"SQLQueryTest_DO"'); $query->setOrderBy('"Name"'); $query->setLimit(1); - $result = $query->lastRow()->execute(); - $this->assertCount(1, $result); - foreach($result as $row) { + + $count = 0; + foreach($query->lastRow()->execute() as $row) { $this->assertEquals('Object 1', $row['Name']); + $count++; } + $this->assertEquals(1, $count); } /** From d91c7d14b84d8b3caed948b0bbab94d254ea2b96 Mon Sep 17 00:00:00 2001 From: Loz Calver Date: Sun, 16 Feb 2014 19:36:51 +0000 Subject: [PATCH 02/39] FIX: Rewrite Member getCMSFields to ensure updateCMSFields is only run once (fixes #2827) Fix usage of inside closure Can't use self:: in closure either Basic unit tests to check extensions are applied correctly --- security/Member.php | 221 +++++++++++++++++----------------- tests/security/MemberTest.php | 28 +++++ 2 files changed, 138 insertions(+), 111 deletions(-) diff --git a/security/Member.php b/security/Member.php index 0f5b0f0d5..6fe8278e8 100644 --- a/security/Member.php +++ b/security/Member.php @@ -1202,125 +1202,124 @@ class Member extends DataObject implements TemplateGlobalProvider { * editing this member. */ public function getCMSFields() { - require_once('Zend/Date.php'); - - $fields = parent::getCMSFields(); + require_once 'Zend/Date.php'; - $mainFields = $fields->fieldByName("Root")->fieldByName("Main")->Children; + $self = $this; + $this->beforeUpdateCMSFields(function($fields) use ($self) { + $mainFields = $fields->fieldByName("Root")->fieldByName("Main")->Children; - $password = new ConfirmedPasswordField( - 'Password', - null, - null, - null, - true // showOnClick - ); - $password->setCanBeEmpty(true); - if(!$this->ID) $password->showOnClick = false; - $mainFields->replaceField('Password', $password); - - $mainFields->replaceField('Locale', new DropdownField( - "Locale", - _t('Member.INTERFACELANG', "Interface Language", 'Language of the CMS'), - i18n::get_existing_translations() - )); - - $mainFields->removeByName('RememberLoginToken'); - $mainFields->removeByName('AutoLoginHash'); - $mainFields->removeByName('AutoLoginExpired'); - $mainFields->removeByName('PasswordEncryption'); - $mainFields->removeByName('PasswordExpiry'); - $mainFields->removeByName('LockedOutUntil'); - - if(!self::config()->lock_out_after_incorrect_logins) { - $mainFields->removeByName('FailedLoginCount'); - } - - $mainFields->removeByName('Salt'); - $mainFields->removeByName('NumVisit'); - - $mainFields->makeFieldReadonly('LastVisited'); - - $fields->removeByName('Subscriptions'); - - // Groups relation will get us into logical conflicts because - // Members are displayed within group edit form in SecurityAdmin - $fields->removeByName('Groups'); - - if(Permission::check('EDIT_PERMISSIONS')) { - $groupsMap = array(); - foreach(Group::get() as $group) { - // Listboxfield values are escaped, use ASCII char instead of » - $groupsMap[$group->ID] = $group->getBreadcrumbs(' > '); - } - asort($groupsMap); - $fields->addFieldToTab('Root.Main', - ListboxField::create('DirectGroups', singleton('Group')->i18n_plural_name()) - ->setMultiple(true) - ->setSource($groupsMap) - ->setAttribute( - 'data-placeholder', - _t('Member.ADDGROUP', 'Add group', 'Placeholder text for a dropdown') - ) + $password = new ConfirmedPasswordField( + 'Password', + null, + null, + null, + true // showOnClick ); + $password->setCanBeEmpty(true); + if( ! $self->ID) $password->showOnClick = false; + $mainFields->replaceField('Password', $password); - // Add permission field (readonly to avoid complicated group assignment logic). - // This should only be available for existing records, as new records start - // with no permissions until they have a group assignment anyway. - if($this->ID) { - $permissionsField = new PermissionCheckboxSetField_Readonly( - 'Permissions', - false, - 'Permission', - 'GroupID', - // we don't want parent relationships, they're automatically resolved in the field - $this->getManyManyComponents('Groups') - ); - $fields->findOrMakeTab('Root.Permissions', singleton('Permission')->i18n_plural_name()); - $fields->addFieldToTab('Root.Permissions', $permissionsField); + $mainFields->replaceField('Locale', new DropdownField( + "Locale", + _t('Member.INTERFACELANG', "Interface Language", 'Language of the CMS'), + i18n::get_existing_translations() + )); + + $mainFields->removeByName('RememberLoginToken'); + $mainFields->removeByName('AutoLoginHash'); + $mainFields->removeByName('AutoLoginExpired'); + $mainFields->removeByName('PasswordEncryption'); + $mainFields->removeByName('PasswordExpiry'); + $mainFields->removeByName('LockedOutUntil'); + + if( ! $self->config()->lock_out_after_incorrect_logins) { + $mainFields->removeByName('FailedLoginCount'); } - } + + $mainFields->removeByName('Salt'); + $mainFields->removeByName('NumVisit'); - $permissionsTab = $fields->fieldByName("Root")->fieldByName('Permissions'); - if($permissionsTab) $permissionsTab->addExtraClass('readonly'); - - $defaultDateFormat = Zend_Locale_Format::getDateFormat(new Zend_Locale($this->Locale)); - $dateFormatMap = array( - 'MMM d, yyyy' => Zend_Date::now()->toString('MMM d, yyyy'), - 'yyyy/MM/dd' => Zend_Date::now()->toString('yyyy/MM/dd'), - 'MM/dd/yyyy' => Zend_Date::now()->toString('MM/dd/yyyy'), - 'dd/MM/yyyy' => Zend_Date::now()->toString('dd/MM/yyyy'), - ); - $dateFormatMap[$defaultDateFormat] = Zend_Date::now()->toString($defaultDateFormat) - . sprintf(' (%s)', _t('Member.DefaultDateTime', 'default')); - $mainFields->push( - $dateFormatField = new MemberDatetimeOptionsetField( - 'DateFormat', - $this->fieldLabel('DateFormat'), - $dateFormatMap - ) - ); - $dateFormatField->setValue($this->DateFormat); - - $defaultTimeFormat = Zend_Locale_Format::getTimeFormat(new Zend_Locale($this->Locale)); - $timeFormatMap = array( - 'h:mm a' => Zend_Date::now()->toString('h:mm a'), - 'H:mm' => Zend_Date::now()->toString('H:mm'), - ); - $timeFormatMap[$defaultTimeFormat] = Zend_Date::now()->toString($defaultTimeFormat) - . sprintf(' (%s)', _t('Member.DefaultDateTime', 'default')); - $mainFields->push( - $timeFormatField = new MemberDatetimeOptionsetField( - 'TimeFormat', - $this->fieldLabel('TimeFormat'), - $timeFormatMap - ) - ); - $timeFormatField->setValue($this->TimeFormat); + $mainFields->makeFieldReadonly('LastVisited'); - $this->extend('updateCMSFields', $fields); + $fields->removeByName('Subscriptions'); + + // Groups relation will get us into logical conflicts because + // Members are displayed within group edit form in SecurityAdmin + $fields->removeByName('Groups'); + + if(Permission::check('EDIT_PERMISSIONS')) { + $groupsMap = array(); + foreach(Group::get() as $group) { + // Listboxfield values are escaped, use ASCII char instead of » + $groupsMap[$group->ID] = $group->getBreadcrumbs(' > '); + } + asort($groupsMap); + $fields->addFieldToTab('Root.Main', + ListboxField::create('DirectGroups', singleton('Group')->i18n_plural_name()) + ->setMultiple(true) + ->setSource($groupsMap) + ->setAttribute( + 'data-placeholder', + _t('Member.ADDGROUP', 'Add group', 'Placeholder text for a dropdown') + ) + ); + + // Add permission field (readonly to avoid complicated group assignment logic). + // This should only be available for existing records, as new records start + // with no permissions until they have a group assignment anyway. + if($self->ID) { + $permissionsField = new PermissionCheckboxSetField_Readonly( + 'Permissions', + false, + 'Permission', + 'GroupID', + // we don't want parent relationships, they're automatically resolved in the field + $self->getManyManyComponents('Groups') + ); + $fields->findOrMakeTab('Root.Permissions', singleton('Permission')->i18n_plural_name()); + $fields->addFieldToTab('Root.Permissions', $permissionsField); + } + } + + $permissionsTab = $fields->fieldByName("Root")->fieldByName('Permissions'); + if($permissionsTab) $permissionsTab->addExtraClass('readonly'); + + $defaultDateFormat = Zend_Locale_Format::getDateFormat(new Zend_Locale($self->Locale)); + $dateFormatMap = array( + 'MMM d, yyyy' => Zend_Date::now()->toString('MMM d, yyyy'), + 'yyyy/MM/dd' => Zend_Date::now()->toString('yyyy/MM/dd'), + 'MM/dd/yyyy' => Zend_Date::now()->toString('MM/dd/yyyy'), + 'dd/MM/yyyy' => Zend_Date::now()->toString('dd/MM/yyyy'), + ); + $dateFormatMap[$defaultDateFormat] = Zend_Date::now()->toString($defaultDateFormat) + . sprintf(' (%s)', _t('Member.DefaultDateTime', 'default')); + $mainFields->push( + $dateFormatField = new MemberDatetimeOptionsetField( + 'DateFormat', + $self->fieldLabel('DateFormat'), + $dateFormatMap + ) + ); + $dateFormatField->setValue($self->DateFormat); + + $defaultTimeFormat = Zend_Locale_Format::getTimeFormat(new Zend_Locale($self->Locale)); + $timeFormatMap = array( + 'h:mm a' => Zend_Date::now()->toString('h:mm a'), + 'H:mm' => Zend_Date::now()->toString('H:mm'), + ); + $timeFormatMap[$defaultTimeFormat] = Zend_Date::now()->toString($defaultTimeFormat) + . sprintf(' (%s)', _t('Member.DefaultDateTime', 'default')); + $mainFields->push( + $timeFormatField = new MemberDatetimeOptionsetField( + 'TimeFormat', + $self->fieldLabel('TimeFormat'), + $timeFormatMap + ) + ); + $timeFormatField->setValue($self->TimeFormat); + }); - return $fields; + return parent::getCMSFields(); } /** diff --git a/tests/security/MemberTest.php b/tests/security/MemberTest.php index 013d54903..f058a755f 100644 --- a/tests/security/MemberTest.php +++ b/tests/security/MemberTest.php @@ -613,6 +613,22 @@ class MemberTest extends FunctionalTest { 'Adding new admin group relation is allowed for admin members' ); } + + /** + * Test that extensions using updateCMSFields() are applied correctly + */ + public function testUpdateCMSFields() { + Member::add_extension('MemberTest_FieldsExtension'); + + $member = singleton('Member'); + $fields = $member->getCMSFields(); + + $this->assertNotNull($fields->dataFieldByName('Email'), 'Scaffolded fields are retained'); + $this->assertNull($fields->dataFieldByName('Salt'), 'Field modifications run correctly'); + $this->assertNotNull($fields->dataFieldByName('TestMemberField'), 'Extension is applied correctly'); + + Member::remove_extension('MemberTest_FieldsExtension'); + } /** * Test that all members are returned @@ -827,6 +843,18 @@ class MemberTest_ViewingDeniedExtension extends DataExtension implements TestOnl } } +/** + * @package framework + * @subpackage tests + */ +class MemberTest_FieldsExtension extends DataExtension implements TestOnly { + + public function updateCMSFields(FieldList $fields) { + $fields->addFieldToTab('Root.Main', new TextField('TestMemberField', 'Test')); + } + +} + /** * @package framework * @subpackage tests From 80997171cc01423e4a10dd2bb146fa507c5d5890 Mon Sep 17 00:00:00 2001 From: Sriram Venkatesh Date: Tue, 18 Feb 2014 10:21:07 +1300 Subject: [PATCH 03/39] Updated Expand CMS Panel to find first visible panel and added new test file --- .../Framework/Test/Behaviour/CmsUiContext.php | 16 ++++++++-------- tests/behat/features/files/document.pdf | Bin 0 -> 18810 bytes 2 files changed, 8 insertions(+), 8 deletions(-) create mode 100644 tests/behat/features/files/document.pdf diff --git a/tests/behat/features/bootstrap/SilverStripe/Framework/Test/Behaviour/CmsUiContext.php b/tests/behat/features/bootstrap/SilverStripe/Framework/Test/Behaviour/CmsUiContext.php index 14a2e383f..41fc7e0d0 100644 --- a/tests/behat/features/bootstrap/SilverStripe/Framework/Test/Behaviour/CmsUiContext.php +++ b/tests/behat/features/bootstrap/SilverStripe/Framework/Test/Behaviour/CmsUiContext.php @@ -184,15 +184,15 @@ class CmsUiContext extends BehatContext { * @When /^I expand the "([^"]*)" CMS Panel$/ */ public function iExpandTheCmsPanel() { - // TODO Make dynamic, currently hardcoded to first panel + //Tries to find the first visiable toggle in the page $page = $this->getSession()->getPage(); - - $panel_toggle_element = $page->find('css', '.cms-content > .cms-panel > .cms-panel-toggle > .toggle-expand'); - assertNotNull($panel_toggle_element, 'Panel toggle not found'); - - if ($panel_toggle_element->isVisible()) { - $panel_toggle_element->click(); - } + $toggle_elements = $page->findAll('css', '.toggle-expand'); + assertNotNull($toggle_elements, 'Panel toggle not found'); + foreach($toggle_elements as $toggle){ + if($toggle->isVisible()){ + $toggle->click(); + } + } } /** diff --git a/tests/behat/features/files/document.pdf b/tests/behat/features/files/document.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c01805e89c1684e79130151abc23bb80401583a9 GIT binary patch literal 18810 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 literal 0 HcmV?d00001 From f2568f8489303b7cdeb63e2f7234ab295acb9c64 Mon Sep 17 00:00:00 2001 From: Tom Densham Date: Fri, 14 Feb 2014 13:29:54 +0000 Subject: [PATCH 04/39] FIX Requirement documentation of MySQL driver Currently the documentation states that the `mysql` module for PHP is required, however as of #84 (over 2 years ago) this is no longer the case and the required module is now `mysqli`. --- docs/en/installation/server-requirements.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/installation/server-requirements.md b/docs/en/installation/server-requirements.md index d735e5b98..f8c45ba96 100644 --- a/docs/en/installation/server-requirements.md +++ b/docs/en/installation/server-requirements.md @@ -11,7 +11,7 @@ Our web-based [PHP installer](/installation) can check if you meet the requireme * PHP 5.3.2+ * We recommend using a PHP accelerator or opcode cache, such as [xcache](http://xcache.lighttpd.net/) or [WinCache](http://www.iis.net/download/wincacheforphp). * Allocate at least 48MB of memory to each PHP process. (SilverStripe can be resource hungry for some intensive operations.) - * Required modules: dom, gd2, fileinfo, hash, iconv, mbstring, mysql (or other database driver), session, simplexml, tokenizer, xml. + * Required modules: dom, gd2, fileinfo, hash, iconv, mbstring, mysqli (or other database driver), session, simplexml, tokenizer, xml. * Recommended configuration safe_mode = Off From a6f794c3b999a63cd6f74525177024349697577a Mon Sep 17 00:00:00 2001 From: Ingo Schommer Date: Wed, 19 Feb 2014 15:20:24 +1300 Subject: [PATCH 05/39] Added 3.0.9-rc1 changelog --- docs/en/changelogs/rc/3.0.9-rc1.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 docs/en/changelogs/rc/3.0.9-rc1.md diff --git a/docs/en/changelogs/rc/3.0.9-rc1.md b/docs/en/changelogs/rc/3.0.9-rc1.md new file mode 100644 index 000000000..24dc8fe83 --- /dev/null +++ b/docs/en/changelogs/rc/3.0.9-rc1.md @@ -0,0 +1,15 @@ +# 3.0.9-rc1 (2014-02-19) + +## Overview + + * Security: Require ADMIN for ?flush=1&isDev=1 ([SS-2014-001](http://www.silverstripe.org/ss-2014-001-require-admin-for-flush1-and-isdev1)) + * Security: XSS in third party library (SWFUpload) ([SS-2014-002](http://www.silverstripe.org/ss-2014-002-xss-in-third-party-library-swfupload/)) + * Security: SiteTree.ExtraMeta allows JavaScript for malicious CMS authors ([SS-2014-003](http://www.silverstripe.org/ss-2014-003-extrameta-allows-javascript-for-malicious-cms-authors-/)) + +## Upgrading + +### SiteTree.ExtraMeta allows JavaScript for malicious CMS authors + +If you have previously used the `SiteTree.ExtraMeta` field for `` markup +other than its intended use case (`` and ``), please consult +[SS-2014-003](http://www.silverstripe.org/ss-2014-003-extrameta-allows-javascript-for-malicious-cms-authors-/). \ No newline at end of file From ec02df216007cdb9a76f7bb1c9d2439f586d77c3 Mon Sep 17 00:00:00 2001 From: Ingo Schommer Date: Wed, 19 Feb 2014 15:22:12 +1300 Subject: [PATCH 06/39] Removed SS-2014-002 from changelog, not backported to 3.0 --- docs/en/changelogs/rc/3.0.9-rc1.md | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/docs/en/changelogs/rc/3.0.9-rc1.md b/docs/en/changelogs/rc/3.0.9-rc1.md index 24dc8fe83..6ca75cbcb 100644 --- a/docs/en/changelogs/rc/3.0.9-rc1.md +++ b/docs/en/changelogs/rc/3.0.9-rc1.md @@ -3,13 +3,4 @@ ## Overview * Security: Require ADMIN for ?flush=1&isDev=1 ([SS-2014-001](http://www.silverstripe.org/ss-2014-001-require-admin-for-flush1-and-isdev1)) - * Security: XSS in third party library (SWFUpload) ([SS-2014-002](http://www.silverstripe.org/ss-2014-002-xss-in-third-party-library-swfupload/)) - * Security: SiteTree.ExtraMeta allows JavaScript for malicious CMS authors ([SS-2014-003](http://www.silverstripe.org/ss-2014-003-extrameta-allows-javascript-for-malicious-cms-authors-/)) - -## Upgrading - -### SiteTree.ExtraMeta allows JavaScript for malicious CMS authors - -If you have previously used the `SiteTree.ExtraMeta` field for `` markup -other than its intended use case (`` and ``), please consult -[SS-2014-003](http://www.silverstripe.org/ss-2014-003-extrameta-allows-javascript-for-malicious-cms-authors-/). \ No newline at end of file + * Security: XSS in third party library (SWFUpload) ([SS-2014-002](http://www.silverstripe.org/ss-2014-002-xss-in-third-party-library-swfupload/)) \ No newline at end of file From 4af711613fc9cce2f53f743bd722087d78f50ffe Mon Sep 17 00:00:00 2001 From: Ingo Schommer Date: Wed, 19 Feb 2014 15:23:42 +1300 Subject: [PATCH 07/39] 3.1.3-rc1 changelog --- docs/en/changelogs/3.1.3.md | 16 ---------------- docs/en/changelogs/rc/3.1.3-rc1.md | 22 ++++++++++++++++------ 2 files changed, 16 insertions(+), 22 deletions(-) delete mode 100644 docs/en/changelogs/3.1.3.md diff --git a/docs/en/changelogs/3.1.3.md b/docs/en/changelogs/3.1.3.md deleted file mode 100644 index 7cb25627a..000000000 --- a/docs/en/changelogs/3.1.3.md +++ /dev/null @@ -1,16 +0,0 @@ -# 3.1.3 - -## Overview - - * Better loading performance when using multiple `UploadField` instances - * Option for `force_js_to_bottom` on `Requirements` class (ignoring inline `