* @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;
*
* @return boolean hook value
*/
-
function onCheckSchema()
{
$schema = Schema::get();
// For storing blacklist patterns for nicknames
-
$schema->ensureTable('nickname_blacklist',
array(new ColumnDef('pattern',
'varchar',
*
* @return array configuration values
*/
-
function _configArray($section, $setting)
{
$config = common_config($section, $setting);
*
* @return boolean hook value
*/
-
function onStartRegistrationTry($action)
{
$homepage = strtolower($action->trimmed('homepage'));
if (!empty($homepage)) {
if (!$this->_checkUrl($homepage)) {
- $msg = sprintf(_m("You may not register with homepage '%s'"),
+ $msg = sprintf(_m("You may not register with homepage '%s'."),
$homepage);
throw new ClientException($msg);
}
if (!empty($nickname)) {
if (!$this->_checkNickname($nickname)) {
- $msg = sprintf(_m("You may not register with nickname '%s'"),
+ $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'"),
+ $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'"),
+ $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"),
+ $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();
*
* @return boolean hook return
*/
-
function onRouterInitialized($m)
{
$m->connect('admin/blacklist', array('action' => 'blacklistadminpanel'));
*
* @return boolean hook return
*/
-
function onAutoload($cls)
{
switch (strtolower($cls))
*
* @return boolean hook value
*/
-
function onPluginVersion(&$versions)
{
$versions[] = array('name' => 'Blacklist',
'homepage' =>
'http://status.net/wiki/Plugin:Blacklist',
'description' =>
- _m('Keep a blacklist of forbidden nickname '.
+ _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'),
+ _m('Blacklist'),
+ _m('Blacklist configuration'),
$action_name == 'blacklistadminpanel',
'nav_blacklist_admin_panel');
}
$action->elementStart('li');
$this->checkboxAndText($action,
'blacklistnickname',
- _('Add this nickname pattern to blacklist'),
+ _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'),
+ _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)) {
+ $msg = sprintf(_m("Users from '%s' blocked."),
+ $homepage);
+ throw new ClientException($msg);
+ }
+ }
+
+ $nickname = strtolower($actor->poco->preferredUsername);
+
+ if (!empty($nickname)) {
+ if (!$this->_checkNickname($nickname)) {
+ $msg = sprintf(_m("Posts from nickname '%s' disallowed."),
+ $nickname);
+ throw new ClientException($msg);
+ }
+ }
+
+ return true;
+ }
}