Lukas Kahwe Smith wrote:
> Hi,
> 
> I have some questions regarding sfSslRequirement [1]:
> - Is there a reason why it was not implemented to not redirect to https 
> in development mode?
> 
> - Is there a reason why the redirction is not only done on isFirstCall()?
> 
> - Why is the code structured to not just have a $filterChain->execute(); 
> call at the end, since the redirect should stop execution anyways?
> 
> The above issues do not seem to be the case with the following solution:
> http://blog.phpdeveloper.co.nz/2006/10/25/ssl-redirect-filter-for-symfony/
> 
> However its not as cleanly implemented in other areas and it seems like 
> Fabien had his fingers on sfSslRequirement, so I am just wondering of 
> these were oversights or if I am missing something.
> 
> regards,
> Lukas
> 
> [1] http://www.symfony-project.com/trac/wiki/sfSslRequirementPlugin

So Fabien told me to just commit to the plugin. But I would prefer to 
hear from existing users before I go ahead with changes.

On thing before I show the code:
"If an action is not secured and allow_ssl is false, then all HTTPS 
request will be redirected to HTTP."

I think there is a typo there and "not secured" should read "secured"


However I think the following steps would be better:
I) only execute once per request and when not in dev environment
  A) if not posting
   1) if secured
    a) then check if its allowed else redirect from https to http
    b) else if secured required redirect from http to https

Anyways here is a quick implementation that should be more efficient, 
that I have not yet tested.

   public function execute ($filterChain)
   {
     // execute only once and only if we are not in the development 
environment
     if ($this->isFirstCall() && SF_ENVIRONMENT != 'dev')
     {
       // get the cool stuff
       $context    = $this->getContext();
       $request    = $context->getRequest();

       // only redirect if not posting
       if ($request->getMethod() != sfRequest::POST) {
         $controller = $context->getController();

         // get the current action instance
         $actionEntry    = $controller->getActionStack()->getLastEntry();
         $actionInstance = $actionEntry->getActionInstance();

         // request is SSL secured
         if ($request->isSecure())
         {
           // but SSL is not allowed
           if (!$actionInstance->sslAllowed())
           {
             $controller->redirect(str_replace('https', 'http', 
$request->getUri()));
           }
         }
         // request is not SSL secured, but SSL is required
         else if ($actionInstance->sslRequired())
         {
           $controller->redirect(str_replace('http', 'https', 
$request->getUri()));
         }
       }
     }
     $filterChain->execute();
   }

regards,
Lukas


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"symfony developers" 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/symfony-devs?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to