[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/settings/panel/ -> PhabricatorSettingsPanelSessions.php (source)

   1  <?php
   2  
   3  final class PhabricatorSettingsPanelSessions
   4    extends PhabricatorSettingsPanel {
   5  
   6    public function getPanelKey() {
   7      return 'sessions';
   8    }
   9  
  10    public function getPanelName() {
  11      return pht('Sessions');
  12    }
  13  
  14    public function getPanelGroup() {
  15      return pht('Sessions and Logs');
  16    }
  17  
  18    public function isEnabled() {
  19      return true;
  20    }
  21  
  22    public function processRequest(AphrontRequest $request) {
  23      $viewer = $request->getUser();
  24  
  25      $accounts = id(new PhabricatorExternalAccountQuery())
  26        ->setViewer($viewer)
  27        ->withUserPHIDs(array($viewer->getPHID()))
  28        ->requireCapabilities(
  29          array(
  30            PhabricatorPolicyCapability::CAN_VIEW,
  31            PhabricatorPolicyCapability::CAN_EDIT,
  32          ))
  33        ->execute();
  34  
  35      $identity_phids = mpull($accounts, 'getPHID');
  36      $identity_phids[] = $viewer->getPHID();
  37  
  38      $sessions = id(new PhabricatorAuthSessionQuery())
  39        ->setViewer($viewer)
  40        ->withIdentityPHIDs($identity_phids)
  41        ->execute();
  42  
  43      $handles = id(new PhabricatorHandleQuery())
  44        ->setViewer($viewer)
  45        ->withPHIDs($identity_phids)
  46        ->execute();
  47  
  48      $current_key = PhabricatorHash::digest(
  49        $request->getCookie(PhabricatorCookies::COOKIE_SESSION));
  50  
  51      $rows = array();
  52      $rowc = array();
  53      foreach ($sessions as $session) {
  54        if ($session->getSessionKey() == $current_key) {
  55          $rowc[] = 'highlighted';
  56          $button = phutil_tag(
  57            'a',
  58            array(
  59              'class' => 'small grey button disabled',
  60            ),
  61            pht('Current'));
  62        } else {
  63          $rowc[] = null;
  64          $button = javelin_tag(
  65            'a',
  66            array(
  67              'href' => '/auth/session/terminate/'.$session->getID().'/',
  68              'class' => 'small grey button',
  69              'sigil' => 'workflow',
  70            ),
  71            pht('Terminate'));
  72        }
  73  
  74        $hisec = ($session->getHighSecurityUntil() - time());
  75  
  76        $rows[] = array(
  77          $handles[$session->getUserPHID()]->renderLink(),
  78          substr($session->getSessionKey(), 0, 6),
  79          $session->getType(),
  80          ($hisec > 0)
  81            ? phutil_format_relative_time($hisec)
  82            : null,
  83          phabricator_datetime($session->getSessionStart(), $viewer),
  84          phabricator_date($session->getSessionExpires(), $viewer),
  85          $button,
  86        );
  87      }
  88  
  89      $table = new AphrontTableView($rows);
  90      $table->setNoDataString(pht("You don't have any active sessions."));
  91      $table->setRowClasses($rowc);
  92      $table->setHeaders(
  93        array(
  94          pht('Identity'),
  95          pht('Session'),
  96          pht('Type'),
  97          pht('HiSec'),
  98          pht('Created'),
  99          pht('Expires'),
 100          pht(''),
 101        ));
 102      $table->setColumnClasses(
 103        array(
 104          'wide',
 105          'n',
 106          '',
 107          'right',
 108          'right',
 109          'right',
 110          'action',
 111        ));
 112  
 113  
 114      $terminate_icon = id(new PHUIIconView())
 115        ->setIconFont('fa-exclamation-triangle');
 116      $terminate_button = id(new PHUIButtonView())
 117        ->setText(pht('Terminate All Sessions'))
 118        ->setHref('/auth/session/terminate/all/')
 119        ->setTag('a')
 120        ->setWorkflow(true)
 121        ->setIcon($terminate_icon);
 122  
 123      $header = id(new PHUIHeaderView())
 124        ->setHeader(pht('Active Login Sessions'))
 125        ->addActionLink($terminate_button);
 126  
 127      $hisec = ($viewer->getSession()->getHighSecurityUntil() - time());
 128      if ($hisec > 0) {
 129        $hisec_icon = id(new PHUIIconView())
 130          ->setIconFont('fa-lock');
 131        $hisec_button = id(new PHUIButtonView())
 132          ->setText(pht('Leave High Security'))
 133          ->setHref('/auth/session/downgrade/')
 134          ->setTag('a')
 135          ->setWorkflow(true)
 136          ->setIcon($hisec_icon);
 137        $header->addActionLink($hisec_button);
 138      }
 139  
 140      $panel = id(new PHUIObjectBoxView())
 141        ->setHeader($header)
 142        ->appendChild($table);
 143  
 144      return $panel;
 145    }
 146  
 147  }


Generated: Sun Nov 30 09:20:46 2014 Cross-referenced by PHPXref 0.7.1