コード例 #1
0
 public function executeSignin(dmWebRequest $request)
 {
     if ($this->getUser()->isAuthenticated()) {
         return $this->redirect('@homepage');
     }
     $this->setLayout(realpath(dirname(__FILE__) . '/..') . '/templates/layout');
     if ($request->getParameter('skip_browser_detection')) {
         $this->getService('browser_check')->markAsChecked();
     } elseif (!$this->getService('browser_check')->check()) {
         return 'Browser';
     }
     $this->form = new DmSigninAdminForm();
     if ($request->isMethod('post')) {
         if ($request->getReferer() != '') {
             if (!strpos($request->getReferer(), $request->getHost(), 0) > -1) {
                 $this->getResponse()->setStatusCode(403);
                 return;
             }
         } else {
             $this->getResponse()->setStatusCode(403);
             return;
         }
         $this->form->bindRequest($request);
         if ($this->form->isValid()) {
             $this->getUser()->signin($this->form->getValue('user'), $this->form->getValue('remember'));
             if ($this->getUser()->can('admin')) {
                 $redirectUrl = $this->getUser()->getReferer($request->getReferer());
                 $this->redirect($redirectUrl ? $redirectUrl : '@homepage');
             } else {
                 try {
                     $this->redirect($this->getService('script_name_resolver')->get('front'));
                 } catch (dmException $e) {
                     // user can't go in admin, and front script_name can't be found.
                     $this->redirect('@homepage');
                 }
             }
         }
     } else {
         if ($request->isXmlHttpRequest()) {
             $this->getResponse()->setHeaderOnly(true);
             $this->getResponse()->setStatusCode(401);
             return sfView::NONE;
         }
         // if we have been forwarded, then the referer is the current URL
         // if not, this is the referer of the current request
         $this->getUser()->setReferer($this->getContext()->getActionStack()->getSize() > 1 ? $request->getUri() : $request->getReferer());
         $module = sfConfig::get('sf_login_module');
         if ($this->getModuleName() != $module) {
             return $this->redirect($module . '/' . sfConfig::get('sf_login_action'));
         }
         $this->getResponse()->setStatusCode(401);
     }
 }