public function processRequest()
 {
     $request = $this->getRequest();
     $this->pages = array('account' => 'Account', 'profile' => 'Profile', 'email' => 'Email', 'password' => 'Password', 'preferences' => 'Preferences', 'conduit' => 'Conduit Certificate');
     if (!PhabricatorEnv::getEnvConfig('account.editable') || !PhabricatorEnv::getEnvConfig('auth.password-auth-enabled')) {
         unset($this->pages['password']);
     }
     if (PhabricatorUserSSHKeysSettingsPanelController::isEnabled()) {
         $this->pages['sshkeys'] = 'SSH Public Keys';
     }
     $oauth_providers = PhabricatorOAuthProvider::getAllProviders();
     foreach ($oauth_providers as $provider) {
         if (!$provider->isProviderEnabled()) {
             continue;
         }
         $key = $provider->getProviderKey();
         $name = $provider->getProviderName();
         $this->pages[$key] = $name . ' Account';
     }
     if (empty($this->pages[$this->page])) {
         $this->page = key($this->pages);
     }
     switch ($this->page) {
         case 'account':
             $delegate = new PhabricatorUserAccountSettingsPanelController($request);
             break;
         case 'profile':
             $delegate = new PhabricatorUserProfileSettingsPanelController($request);
             break;
         case 'email':
             $delegate = new PhabricatorUserEmailSettingsPanelController($request);
             break;
         case 'password':
             $delegate = new PhabricatorUserPasswordSettingsPanelController($request);
             break;
         case 'conduit':
             $delegate = new PhabricatorUserConduitSettingsPanelController($request);
             break;
         case 'sshkeys':
             $delegate = new PhabricatorUserSSHKeysSettingsPanelController($request);
             break;
         case 'preferences':
             $delegate = new PhabricatorUserPreferenceSettingsPanelController($request);
             break;
         default:
             if (empty($this->pages[$this->page])) {
                 return new Aphront404Response();
             }
             $delegate = new PhabricatorUserOAuthSettingsPanelController($request);
             $delegate->setOAuthProvider($oauth_providers[$this->page]);
     }
     $response = $this->delegateToController($delegate);
     if ($response instanceof AphrontView) {
         $sidenav = $this->renderSideNav();
         $sidenav->appendChild($response);
         return $this->buildStandardPageResponse($sidenav, array('title' => 'Account Settings'));
     } else {
         return $response;
     }
 }
 private function renderSideNav($oauth_providers)
 {
     $sidenav = new AphrontSideNavFilterView();
     $sidenav->setBaseURI(new PhutilURI('/settings/page/'))->addLabel('Account Information')->addFilter('account', 'Account')->addFilter('profile', 'Profile')->addSpacer()->addLabel('Email')->addFilter('email', 'Email Address')->addFilter('emailpref', 'Email Preferences')->addSpacer()->addLabel('Authentication');
     if (PhabricatorEnv::getEnvConfig('account.editable') && PhabricatorEnv::getEnvConfig('auth.password-auth-enabled')) {
         $sidenav->addFilter('password', 'Password');
     }
     $sidenav->addFilter('conduit', 'Conduit Certificate');
     if (PhabricatorUserSSHKeysSettingsPanelController::isEnabled()) {
         $sidenav->addFilter('sshkeys', 'SSH Public Keys');
     }
     $sidenav->addSpacer();
     $sidenav->addLabel('Application Settings');
     $sidenav->addFilter('preferences', 'Display Preferences');
     $sidenav->addFilter('search', 'Search Preferences');
     $items = array();
     foreach ($oauth_providers as $provider) {
         if (!$provider->isProviderEnabled()) {
             continue;
         }
         $key = $provider->getProviderKey();
         $name = $provider->getProviderName();
         $items[$key] = $name . ' Account';
     }
     if ($items) {
         $sidenav->addSpacer();
         $sidenav->addLabel('Linked Accounts');
         foreach ($items as $key => $name) {
             $sidenav->addFilter($key, $name);
         }
     }
     return $sidenav;
 }