* @link http://status.net/
*/
-if (!defined('STATUSNET')) {
- exit(1);
-}
+if (!defined('GNUSOCIAL')) { exit(1); }
/**
* Throttle registration by IP address
*
* Default is 3 registrations per hour, 5 per day, 10 per week.
*/
-
public $regLimits = array(604800 => 10, // per week
86400 => 5, // per day
3600 => 3); // per hour
* Disallow registration if a silenced user has registered from
* this IP address.
*/
-
public $silenced = true;
/**
* Whether we're enabled; prevents recursion.
*/
-
static private $enabled = true;
/**
*
* @return boolean hook value; true means continue processing, false means stop.
*/
-
- function onCheckSchema()
+ public function onCheckSchema()
{
$schema = Schema::get();
// For storing user-submitted flags on profiles
-
- $schema->ensureTable('registration_ip',
- array(new ColumnDef('user_id', 'integer', null,
- false, 'PRI'),
- new ColumnDef('ipaddress', 'varchar', 15, false, 'MUL'),
- new ColumnDef('created', 'timestamp', null, false, 'MUL')));
-
+ $schema->ensureTable('registration_ip', Registration_ip::schemaDef());
return true;
}
- /**
- * Load related modules when needed
- *
- * @param string $cls Name of the class to be loaded
- *
- * @return boolean hook value; true means continue processing, false means stop.
- */
-
- function onAutoload($cls)
- {
- $dir = dirname(__FILE__);
-
- switch ($cls)
- {
- case 'Registration_ip':
- include_once $dir . '/'.$cls.'.php';
- return false;
- default:
- return true;
- }
- }
-
/**
* Called when someone tries to register.
*
* @param Action $action Action that is being executed
*
* @return boolean hook value
- *
*/
- function onStartRegistrationTry($action)
+ public function onStartRegistrationTry($action)
{
$ipaddress = $this->_getIpAddress();
if (empty($ipaddress)) {
+ // TRANS: Server exception thrown when no IP address can be found for a registation attempt.
throw new ServerException(_m('Cannot find IP address.'));
}
$now = time();
$this->debug("Comparing {$regtime} to {$now}");
if ($now - $regtime < $seconds) {
- throw new Exception(_m("Too many registrations. Take a break and try again later."));
+ // TRANS: Exception thrown when too many user have registered from one IP address within a given time frame.
+ throw new Exception(_m('Too many registrations. Take a break and try again later.'));
}
}
}
if ($this->silenced) {
$ids = Registration_ip::usersByIP($ipaddress);
foreach ($ids as $id) {
- $profile = Profile::staticGet('id', $id);
+ $profile = Profile::getKV('id', $id);
if ($profile && $profile->isSilenced()) {
- throw new Exception(_("A banned user has registered from this address."));
+ // TRANS: Exception thrown when attempting to register from an IP address from which silenced users have registered.
+ throw new Exception(_m('A banned user has registered from this address.'));
}
}
}
}
/**
- * Called after someone registers.
+ * Called after someone registers, by any means.
*
* We record the successful registration and IP address.
*
- * @param Action $action Action that is being executed
+ * @param Profile $profile new user's profile
*
* @return boolean hook value
- *
*/
-
- function onEndRegistrationTry($action)
+ public function onEndUserRegister(Profile $profile)
{
$ipaddress = $this->_getIpAddress();
if (empty($ipaddress)) {
- throw new ServerException(_m('Cannot find IP address.'));
- }
-
- $user = common_current_user();
-
- if (empty($user)) {
- throw new ServerException(_m('Cannot find user after successful registration.'));
+ // User registration can happen from command-line scripts etc.
+ return true;
}
$reg = new Registration_ip();
- $reg->user_id = $user->id;
+ $reg->user_id = $profile->id;
$reg->ipaddress = $ipaddress;
+ $reg->created = common_sql_now();
$result = $reg->insert();
- if (!$result) {
+ if ($result === false) {
common_log_db_error($reg, 'INSERT', __FILE__);
// @todo throw an exception?
}
*
* @return boolean hook value
*/
-
- function onPluginVersion(&$versions)
+ public function onPluginVersion(&$versions)
{
$versions[] = array('name' => 'RegisterThrottle',
- 'version' => STATUSNET_VERSION,
+ 'version' => GNUSOCIAL_VERSION,
'author' => 'Evan Prodromou',
'homepage' => 'http://status.net/wiki/Plugin:RegisterThrottle',
'description' =>
+ // TRANS: Plugin description.
_m('Throttles excessive registration from a single IP address.'));
return true;
}
*
* @return string IP address or null if not found.
*/
-
private function _getIpAddress()
{
$keys = array('HTTP_X_FORWARDED_FOR',
+ 'HTTP_X_CLIENT',
'CLIENT-IP',
'REMOTE_ADDR');
*
* @return Registration_ip nth registration or null if not found.
*/
-
private function _getNthReg($ipaddress, $n)
{
$reg = new Registration_ip();
*
* @return boolean hook value
*/
-
- function onEndGrantRole($profile, $role)
+ public function onEndGrantRole($profile, $role)
{
if (!self::$enabled) {
return true;
return true;
}
- $ri = Registration_ip::staticGet('user_id', $profile->id);
+ $ri = Registration_ip::getKV('user_id', $profile->id);
if (empty($ri)) {
return true;
$ids = Registration_ip::usersByIP($ri->ipaddress);
foreach ($ids as $id) {
-
if ($id == $profile->id) {
continue;
}
- $other = Profile::staticGet('id', $id);
+ $other = Profile::getKV('id', $id);
if (empty($other)) {
continue;