Example #1
0
 /**
  * Check for sufficient permissions to execute
  * @param ApiBase $module An Api module
  */
 protected function checkExecutePermissions($module)
 {
     $user = $this->getUser();
     if ($module->isReadMode() && !User::isEveryoneAllowed('read') && !$user->isAllowed('read')) {
         $this->dieUsageMsg('readrequired');
     }
     if ($module->isWriteMode()) {
         if (!$this->mEnableWrite) {
             $this->dieUsageMsg('writedisabled');
         }
         if (!$user->isAllowed('writeapi')) {
             $this->dieUsageMsg('writerequired');
         }
         if (wfReadOnly()) {
             $this->dieReadOnly();
         }
     }
     // Allow extensions to stop execution for arbitrary reasons.
     $message = false;
     if (!Hooks::run('ApiCheckCanExecute', array($module, $user, &$message))) {
         $this->dieUsageMsg($message);
     }
 }
Example #2
0
 /**
  * Check if the DB is read-only for this user
  * @param ApiBase $module An Api module
  */
 protected function checkReadOnly($module)
 {
     if (wfReadOnly()) {
         $this->dieReadOnly();
     }
     if ($module->isWriteMode() && in_array('bot', $this->getUser()->getGroups()) && wfGetLB()->getServerCount() > 1) {
         // Figure out how many servers have passed the lag threshold
         $numLagged = 0;
         $lagLimit = $this->getConfig()->get('APIMaxLagThreshold');
         foreach (wfGetLB()->getLagTimes() as $lag) {
             if ($lag > $lagLimit) {
                 ++$numLagged;
             }
         }
         // If a majority of slaves are too lagged then disallow writes
         $slaveCount = wfGetLB()->getServerCount() - 1;
         if ($numLagged >= ceil($slaveCount / 2)) {
             $parsed = $this->parseMsg(array('readonlytext'));
             $this->dieUsage($parsed['info'], $parsed['code'], 0, array('readonlyreason' => "Waiting for {$numLagged} lagged database(s)"));
         }
     }
 }
Example #3
0
 /**
  * Set database connection, query, and write expectations given this module request
  * @param ApiBase $module
  */
 protected function setRequestExpectations(ApiBase $module)
 {
     $limits = $this->getConfig()->get('TrxProfilerLimits');
     $trxProfiler = Profiler::instance()->getTransactionProfiler();
     if ($this->getRequest()->wasPosted()) {
         if ($module->isWriteMode()) {
             $trxProfiler->setExpectations($limits['POST'], __METHOD__);
         } else {
             $trxProfiler->setExpectations($limits['POST-nonwrite'], __METHOD__);
         }
     } else {
         $trxProfiler->setExpectations($limits['GET'], __METHOD__);
     }
 }
Example #4
0
 /**
  * Set database connection, query, and write expectations given this module request
  * @param ApiBase $module
  */
 protected function setRequestExpectations(ApiBase $module)
 {
     $limits = $this->getConfig()->get('TrxProfilerLimits');
     $trxProfiler = Profiler::instance()->getTransactionProfiler();
     $trxProfiler->setLogger(LoggerFactory::getInstance('DBPerformance'));
     if ($this->getRequest()->hasSafeMethod()) {
         $trxProfiler->setExpectations($limits['GET'], __METHOD__);
     } elseif ($this->getRequest()->wasPosted() && !$module->isWriteMode()) {
         $trxProfiler->setExpectations($limits['POST-nonwrite'], __METHOD__);
         $this->getRequest()->markAsSafeRequest();
     } else {
         $trxProfiler->setExpectations($limits['POST'], __METHOD__);
     }
 }