* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
-
class BlacklistPlugin extends Plugin
{
- const VERSION = STATUSNET_VERSION;
+ const VERSION = GNUSOCIAL_VERSION;
public $nicknames = array();
public $urls = array();
*
* @return boolean hook value
*/
-
function onCheckSchema()
{
$schema = Schema::get();
// For storing blacklist patterns for nicknames
-
- $schema->ensureTable('nickname_blacklist',
- array(new ColumnDef('pattern',
- 'varchar',
- 255,
- false,
- 'PRI'),
- new ColumnDef('created',
- 'datetime',
- null,
- false)));
-
- $schema->ensureTable('homepage_blacklist',
- array(new ColumnDef('pattern',
- 'varchar',
- 255,
- false,
- 'PRI'),
- new ColumnDef('created',
- 'datetime',
- null,
- false)));
+ $schema->ensureTable('nickname_blacklist', Nickname_blacklist::schemaDef());
+ $schema->ensureTable('homepage_blacklist', Homepage_blacklist::schemaDef());
return true;
}
*
* @return array configuration values
*/
-
function _configArray($section, $setting)
{
$config = common_config($section, $setting);
} else if (is_string($config)) {
return explode("\r\n", $config);
} else {
- throw new Exception("Unknown data type for config $section + $setting");
+ // TRANS: Exception thrown if the Blacklist plugin configuration is incorrect.
+ // TRANS: %1$s is a configuration section, %2$s is a configuration setting.
+ throw new Exception(sprintf(_m('Unknown data type for config %1$s + %2$s.'),$section, $setting));
}
}
*
* @return boolean hook value
*/
-
- function onStartRegistrationTry($action)
+ function onStartRegisterUser(User &$user, Profile &$profile)
{
- $homepage = strtolower($action->trimmed('homepage'));
+ $homepage = strtolower($profile->homepage);
if (!empty($homepage)) {
if (!$this->_checkUrl($homepage)) {
- $msg = sprintf(_m("You may not register with homepage '%s'"),
+ // TRANS: Validation failure for URL. %s is the URL.
+ $msg = sprintf(_m("You may not register with homepage \"%s\"."),
$homepage);
throw new ClientException($msg);
}
}
- $nickname = strtolower($action->trimmed('nickname'));
+ $nickname = strtolower($profile->nickname);
if (!empty($nickname)) {
if (!$this->_checkNickname($nickname)) {
- $msg = sprintf(_m("You may not register with nickname '%s'"),
+ // TRANS: Validation failure for nickname. %s is the nickname.
+ $msg = sprintf(_m("You may not register with nickname \"%s\"."),
$nickname);
throw new ClientException($msg);
}
*
* @return boolean hook value
*/
-
function onStartProfileSaveForm($action)
{
$homepage = strtolower($action->trimmed('homepage'));
if (!empty($homepage)) {
if (!$this->_checkUrl($homepage)) {
- $msg = sprintf(_m("You may not use homepage '%s'"),
+ // TRANS: Validation failure for URL. %s is the URL.
+ $msg = sprintf(_m("You may not use homepage \"%s\"."),
$homepage);
throw new ClientException($msg);
}
if (!empty($nickname)) {
if (!$this->_checkNickname($nickname)) {
- $msg = sprintf(_m("You may not use nickname '%s'"),
+ // TRANS: Validation failure for nickname. %s is the nickname.
+ $msg = sprintf(_m("You may not use nickname \"%s\"."),
$nickname);
throw new ClientException($msg);
}
*
* @return boolean hook value
*/
-
function onStartNoticeSave(&$notice)
{
common_replace_urls_callback($notice->content,
*
* @return boolean hook value
*/
-
function checkNoticeUrl($url)
{
// It comes in special'd, so we unspecial it
$url = htmlspecialchars_decode($url);
if (!$this->_checkUrl($url)) {
- $msg = sprintf(_m("You may not use url '%s' in notices"),
+ // TRANS: Validation failure for URL. %s is the URL.
+ $msg = sprintf(_m("You may not use URL \"%s\" in notices."),
$url);
throw new ClientException($msg);
}
*
* @return boolean true means it's OK, false means it's bad
*/
-
private function _checkUrl($url)
{
$patterns = $this->_getUrlPatterns();
*
* @return boolean true means it's OK, false means it's bad
*/
-
private function _checkNickname($nickname)
{
$patterns = $this->_getNicknamePatterns();
/**
* Add our actions to the URL router
*
- * @param Net_URL_Mapper $m URL mapper for this hit
+ * @param URLMapper $m URL mapper for this hit
*
* @return boolean hook return
*/
-
- function onRouterInitialized($m)
+ public function onRouterInitialized(URLMapper $m)
{
- $m->connect('admin/blacklist', array('action' => 'blacklistadminpanel'));
+ $m->connect('panel/blacklist', array('action' => 'blacklistadminpanel'));
return true;
}
- /**
- * Auto-load our classes if called
- *
- * @param string $cls Class to load
- *
- * @return boolean hook return
- */
-
- function onAutoload($cls)
- {
- switch (strtolower($cls))
- {
- case 'nickname_blacklist':
- case 'homepage_blacklist':
- include_once INSTALLDIR.'/plugins/Blacklist/'.ucfirst($cls).'.php';
- return false;
- case 'blacklistadminpanelaction':
- $base = strtolower(mb_substr($cls, 0, -6));
- include_once INSTALLDIR.'/plugins/Blacklist/'.$base.'.php';
- return false;
- default:
- return true;
- }
- }
-
/**
* Plugin version data
*
*
* @return boolean hook value
*/
-
- function onPluginVersion(&$versions)
+ function onPluginVersion(array &$versions)
{
$versions[] = array('name' => 'Blacklist',
'version' => self::VERSION,
'homepage' =>
'http://status.net/wiki/Plugin:Blacklist',
'description' =>
- _m('Keep a blacklist of forbidden nickname '.
+ // TRANS: Plugin description.
+ _m('Keeps a blacklist of forbidden nickname '.
'and URL patterns.'));
return true;
}
*
* @return boolean hook value
*/
-
function onAdminPanelCheck($name, &$isOK)
{
if ($name == 'blacklist') {
*
* @return boolean hook value
*/
-
function onEndAdminPanelNav($nav)
{
if (AdminPanelAction::canAdmin('blacklist')) {
$action_name = $nav->action->trimmed('action');
$nav->out->menuItem(common_local_url('blacklistadminpanel'),
- _('Blacklist'),
- _('Blacklist configuration'),
+ // TRANS: Menu item in admin panel.
+ _m('MENU','Blacklist'),
+ // TRANS: Tooltip for menu item in admin panel.
+ _m('TOOLTIP','Blacklist configuration.'),
$action_name == 'blacklistadminpanel',
'nav_blacklist_admin_panel');
}
$action->elementStart('li');
$this->checkboxAndText($action,
'blacklistnickname',
- _('Add this nickname pattern to blacklist'),
+ // TRANS: Checkbox label in the blacklist user form.
+ _m('Add this nickname pattern to blacklist'),
'blacklistnicknamepattern',
$this->patternizeNickname($user->nickname));
$action->elementEnd('li');
$action->elementStart('li');
$this->checkboxAndText($action,
'blacklisthomepage',
- _('Add this homepage pattern to blacklist'),
+ // TRANS: Checkbox label in the blacklist user form.
+ _m('Add this homepage pattern to blacklist'),
'blacklisthomepagepattern',
$this->patternizeHomepage($profile->homepage));
$action->elementEnd('li');
$hostname = parse_url($homepage, PHP_URL_HOST);
return $hostname;
}
+
+ function onStartHandleFeedEntry($activity)
+ {
+ return $this->_checkActivity($activity);
+ }
+
+ function onStartHandleSalmon($activity)
+ {
+ return $this->_checkActivity($activity);
+ }
+
+ function _checkActivity($activity)
+ {
+ $actor = $activity->actor;
+
+ if (empty($actor)) {
+ return true;
+ }
+
+ $homepage = strtolower($actor->link);
+
+ if (!empty($homepage)) {
+ if (!$this->_checkUrl($homepage)) {
+ // TRANS: Exception thrown trying to post a notice while having set a blocked homepage URL. %s is the blocked URL.
+ $msg = sprintf(_m("Users from \"%s\" are blocked."),
+ $homepage);
+ throw new ClientException($msg);
+ }
+ }
+
+ if (!empty($actor->poco)) {
+ $nickname = strtolower($actor->poco->preferredUsername);
+
+ if (!empty($nickname)) {
+ if (!$this->_checkNickname($nickname)) {
+ // TRANS: Exception thrown trying to post a notice while having a blocked nickname. %s is the blocked nickname.
+ $msg = sprintf(_m("Notices from nickname \"%s\" are disallowed."),
+ $nickname);
+ throw new ClientException($msg);
+ }
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Check URLs and homepages for blacklisted users.
+ */
+ function onStartSubscribe(Profile $subscriber, Profile $other)
+ {
+ foreach (array($other->profileurl, $other->homepage) as $url) {
+
+ if (empty($url)) {
+ continue;
+ }
+
+ $url = strtolower($url);
+
+ if (!$this->_checkUrl($url)) {
+ // TRANS: Client exception thrown trying to subscribe to a person with a blocked homepage or site URL. %s is the blocked URL.
+ $msg = sprintf(_m("Users from \"%s\" are blocked."),
+ $url);
+ throw new ClientException($msg);
+ }
+ }
+
+ $nickname = $other->nickname;
+
+ if (!empty($nickname)) {
+ if (!$this->_checkNickname($nickname)) {
+ // TRANS: Client exception thrown trying to subscribe to a person with a blocked nickname. %s is the blocked nickname.
+ $msg = sprintf(_m("Cannot subscribe to nickname \"%s\"."),
+ $nickname);
+ throw new ClientException($msg);
+ }
+ }
+
+ return true;
+ }
}