Changeset View
Changeset View
Standalone View
Standalone View
support/startup/PhabricatorClientRateLimit.php
- This file was added.
<?php | |||||
final class PhabricatorClientRateLimit | |||||
extends PhabricatorClientLimit { | |||||
protected function getBucketDuration() { | |||||
return 60; | |||||
} | |||||
protected function getBucketCount() { | |||||
return 5; | |||||
} | |||||
protected function shouldRejectConnection($score) { | |||||
$limit = $this->getLimit(); | |||||
// Reject connections if the average score across all buckets exceeds the | |||||
// limit. | |||||
$average_score = $score / $this->getBucketCount(); | |||||
return ($average_score > $limit); | |||||
} | |||||
protected function getConnectScore() { | |||||
return 0; | |||||
} | |||||
protected function getPenaltyScore() { | |||||
return 1; | |||||
} | |||||
protected function getDisconnectScore(array $request_state) { | |||||
$score = 1; | |||||
// If the user was logged in, let them make more requests. | |||||
if (isset($request_state['viewer'])) { | |||||
$viewer = $request_state['viewer']; | |||||
if ($viewer->isLoggedIn()) { | |||||
$score = 0.25; | |||||
} | |||||
} | |||||
return $score; | |||||
} | |||||
protected function getRateLimitReason($score) { | |||||
$client_key = $this->getClientKey(); | |||||
// NOTE: This happens before we load libraries, so we can not use pht() | |||||
// here. | |||||
return | |||||
"TOO MANY REQUESTS\n". | |||||
"You (\"{$client_key}\") are issuing too many requests ". | |||||
"too quickly.\n"; | |||||
} | |||||
} |