Author: sevein
Date: Fri Jan 27 23:37:57 2012
New Revision: 10762

Log:
Add optional setting to require SSL for admin funcionality, fixes issue 2226

Added:
   trunk/lib/filter/QubitSslRequirementFilter.class.php
Modified:
   trunk/apps/qubit/config/filters.yml
   trunk/apps/qubit/modules/settings/actions/listAction.class.php
   trunk/apps/qubit/modules/sfInstallPlugin/config/filters.yml
   trunk/data/fixtures/settings.yml
   trunk/lib/form/SettingsGlobalForm.class.php
   trunk/plugins/qtSwordPlugin/modules/qtSwordPlugin/config/filters.yml

Modified: trunk/apps/qubit/config/filters.yml
==============================================================================
--- trunk/apps/qubit/config/filters.yml Fri Jan 27 21:59:41 2012        (r10761)
+++ trunk/apps/qubit/config/filters.yml Fri Jan 27 23:37:57 2012        (r10762)
@@ -14,5 +14,9 @@
 settings:
   class: QubitSettingsFilter
 
+# Must be executed after QubitSettingsFilter
+QubitSslRequirement:
+  class: QubitSslRequirementFilter
+
 cache:     ~
 execution: ~

Modified: trunk/apps/qubit/modules/settings/actions/listAction.class.php
==============================================================================
--- trunk/apps/qubit/modules/settings/actions/listAction.class.php      Fri Jan 
27 21:59:41 2012        (r10761)
+++ trunk/apps/qubit/modules/settings/actions/listAction.class.php      Fri Jan 
27 23:37:57 2012        (r10762)
@@ -219,6 +219,7 @@
     $showTooltips = QubitSetting::getSettingByName('show_tooltips');
     $defaultPubStatus = QubitSetting::getSettingByName('defaultPubStatus');
     $swordDepositDir = QubitSetting::getSettingByName('sword_deposit_dir');
+    $requireSslAdmin = QubitSetting::getSettingByName('require_ssl_admin');
 
     // Set defaults for global form
     $this->globalForm->setDefaults(array(
@@ -236,7 +237,8 @@
       'explode_multipage_files' => (isset($explodeMultipageFiles)) ? 
intval($explodeMultipageFiles->getValue(array('sourceCulture'=>true))) : 1,
       'show_tooltips' => (isset($showTooltips)) ? 
intval($showTooltips->getValue(array('sourceCulture'=>true))) : 1,
       'defaultPubStatus' => (isset($defaultPubStatus)) ? 
$defaultPubStatus->getValue(array('sourceCulture'=>true)) : 
QubitTerm::PUBLICATION_STATUS_DRAFT_ID,
-      'sword_deposit_dir' => (isset($swordDepositDir)) ? 
$swordDepositDir->getValue(array('sourceCulture'=>true)) : null
+      'sword_deposit_dir' => (isset($swordDepositDir)) ? 
$swordDepositDir->getValue(array('sourceCulture'=>true)) : null,
+      'require_ssl_admin' => (isset($requireSslAdmin)) ? 
intval($requireSslAdmin->getValue(array('sourceCulture'=>true))) : 1,
     ));
   }
 
@@ -410,6 +412,16 @@
       $setting->save();
     }
 
+    // Require SSL for admin funcionality
+    if (null !== $requireSslAdmin = $thisForm->getValue('require_ssl_admin'))
+    {
+      $setting = QubitSetting::getSettingByName('require_ssl_admin');
+
+      // Force sourceCulture update to prevent discrepency in settings between 
cultures
+      $setting->setValue($requireSslAdmin, array('sourceCulture' => true));
+      $setting->save();
+    }
+
     return $this;
   }
 

Modified: trunk/apps/qubit/modules/sfInstallPlugin/config/filters.yml
==============================================================================
--- trunk/apps/qubit/modules/sfInstallPlugin/config/filters.yml Fri Jan 27 
21:59:41 2012        (r10761)
+++ trunk/apps/qubit/modules/sfInstallPlugin/config/filters.yml Fri Jan 27 
23:37:57 2012        (r10762)
@@ -9,5 +9,8 @@
 settings:
   enabled: false
 
+QubitSslRequirement:
+  enabled: false
+
 cache:     ~
 execution: ~

Modified: trunk/data/fixtures/settings.yml
==============================================================================
--- trunk/data/fixtures/settings.yml    Fri Jan 27 21:59:41 2012        (r10761)
+++ trunk/data/fixtures/settings.yml    Fri Jan 27 23:37:57 2012        (r10762)
@@ -369,3 +369,6 @@
   QubitSetting_swordDepositDir:
     name: sword_deposit_dir
     value: '/tmp'
+  QubitSetting_sslRequirementAdmin:
+    name: require_ssl_admin
+    value: 0

Added: trunk/lib/filter/QubitSslRequirementFilter.class.php
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ trunk/lib/filter/QubitSslRequirementFilter.class.php        Fri Jan 27 
23:37:57 2012        (r10762)
@@ -0,0 +1,47 @@
+<?php
+
+/*
+ * This file is part of Qubit Toolkit.
+ *
+ * Qubit Toolkit is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Qubit Toolkit is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Qubit Toolkit.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+class QubitSslRequirementFilter extends sfFilter
+{
+  public function execute($filterChain)
+  {
+    $context = $this->getContext();
+    $request = $context->getRequest();
+
+    if ($context->getConfiguration()->isDebug() ||
+        $request->isSecure() ||
+        !sfConfig::get('app_require_ssl_admin'))
+    {
+      return $filterChain->execute();
+    }
+
+    if ($context->user->isAuthenticated() ||
+        ('user' == $request->getParameter('module') &&
+          'login' == $request->getParameter('action')))
+    {
+      $secure_url = str_replace('http', 'https', $request->getUri());
+
+      return $context->getController()->redirect($secure_url);
+    }
+    else
+    {
+      $filterChain->execute();
+    }
+  }
+}

Modified: trunk/lib/form/SettingsGlobalForm.class.php
==============================================================================
--- trunk/lib/form/SettingsGlobalForm.class.php Fri Jan 27 21:59:41 2012        
(r10761)
+++ trunk/lib/form/SettingsGlobalForm.class.php Fri Jan 27 23:37:57 2012        
(r10762)
@@ -53,7 +53,8 @@
       'explode_multipage_files' => new 
sfWidgetFormSelectRadio(array('choices'=>array(1=>'yes', 0=>'no')), 
array('class'=>'radio')),
       'show_tooltips' => new 
sfWidgetFormSelectRadio(array('choices'=>array(1=>'yes', 0=>'no')), 
array('class'=>'radio')),
       'defaultPubStatus' => new 
sfWidgetFormSelectRadio(array('choices'=>array(QubitTerm::PUBLICATION_STATUS_DRAFT_ID=>__('Draft'),
 QubitTerm::PUBLICATION_STATUS_PUBLISHED_ID=>__('Published'))), 
array('class'=>'radio')),
-      'sword_deposit_dir' => new sfWidgetFormInput
+      'sword_deposit_dir' => new sfWidgetFormInput,
+      'require_ssl_admin' => new 
sfWidgetFormSelectRadio(array('choices'=>array(1=>'yes', 0=>'no')), 
array('class'=>'radio'))
     ));
 
     // Add labels
@@ -72,7 +73,8 @@
       'explode_multipage_files' => __('Upload multi-page files as multiple 
descriptions'),
       'show_tooltips' => __('Show tooltips'),
       'defaultPubStatus' => __('Default publication status'),
-      'sword_deposit_dir' => __('SWORD deposit directory')
+      'sword_deposit_dir' => __('SWORD deposit directory'),
+      'require_ssl_admin' => __('Require SSL for all administrator 
funcionality')
     ));
 
     // Add helper text
@@ -92,6 +94,7 @@
       // 'explode_multipage_files' => __('')
       // 'show_tooltips' => __('')
       // 'sword_deposit_dir' => __('')
+      // 'require_ssl_admin' => __('')
     ));
 
     // Reference image max. width validator
@@ -137,6 +140,7 @@
     $this->validatorSchema['show_tooltips'] = new 
sfValidatorInteger(array('required' => false));
     $this->validatorSchema['defaultPubStatus'] = new 
sfValidatorChoice(array('choices' => 
array(QubitTerm::PUBLICATION_STATUS_DRAFT_ID, 
QubitTerm::PUBLICATION_STATUS_PUBLISHED_ID)));
     $this->validatorSchema['sword_deposit_dir'] = new 
sfValidatorString(array('required' => false));
+    $this->validatorSchema['require_ssl_admin'] = new 
sfValidatorInteger(array('required' => false));
 
     // Set decorator
     $decorator = new QubitWidgetFormSchemaFormatterList($this->widgetSchema);

Modified: trunk/plugins/qtSwordPlugin/modules/qtSwordPlugin/config/filters.yml
==============================================================================
--- trunk/plugins/qtSwordPlugin/modules/qtSwordPlugin/config/filters.yml        
Fri Jan 27 21:59:41 2012        (r10761)
+++ trunk/plugins/qtSwordPlugin/modules/qtSwordPlugin/config/filters.yml        
Fri Jan 27 23:37:57 2012        (r10762)
@@ -16,6 +16,10 @@
   class: QubitSettingsFilter
   enabled: off
 
+QubitSslRequirement:
+  class: QubitSslRequirementFilter
+  enabled: off
+
 rendering: ~
 security: ~
 cache:     ~

-- 
You received this message because you are subscribed to the Google Groups 
"Qubit Toolkit Commits" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/qubit-commits?hl=en.

Reply via email to