From c0c52350809515510649766cae8026552fc7ae6c Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 11 Apr 2011 16:49:50 -0400 Subject: [PATCH] only allow a whitelist of email domains for the site --- .../DomainWhitelist/DomainWhitelistPlugin.php | 110 ++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 plugins/DomainWhitelist/DomainWhitelistPlugin.php diff --git a/plugins/DomainWhitelist/DomainWhitelistPlugin.php b/plugins/DomainWhitelist/DomainWhitelistPlugin.php new file mode 100644 index 0000000000..653b56c400 --- /dev/null +++ b/plugins/DomainWhitelist/DomainWhitelistPlugin.php @@ -0,0 +1,110 @@ +. + * + * @category Cache + * @package StatusNet + * @author Evan Prodromou + * @copyright 2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + // This check helps protect against security problems; + // your code file can't be executed directly from the web. + exit(1); +} + +/** + * Restrict the email addresses to a domain whitelist + * + * @category General + * @package StatusNet + * @author Evan Prodromou + * @copyright 2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +class DomainWhitelistPlugin extends Plugin +{ + function onRequireValidatedEmailPlugin_Override($user, &$knownGood) + { + $knownGood = (!empty($user->email) && $this->matchesWhitelist($user->email)); + return true; + } + + function onStartAddEmailAddress($user, $email) + { + if (!$this->matchesWhitelist($email)) { + throw new Exception(_('That email address is not allowed on this site.')); + } + + return true; + } + + function onEndValidateEmailInvite($user, $email, &$valid) + { + if ($valid) { + $valid = $this->matchesWhitelist($email); + } + + return true; + } + + function matchesWhitelist($email) + { + $whitelist = $this->getWhitelist(); + + if (empty($whitelist)) { + return true; + } + + $parts = explode('@', $email); + + $userDomain = strtolower($parts[1]); + + return in_array($userDomain, $whitelist); + } + + function getWhitelist() + { + $whitelist = common_config('email', 'whitelist'); + + if (is_array($whitelist)) { + return $whitelist; + } else { + return explode('|', $whitelist); + } + } + + function onPluginVersion(&$versions) + { + $versions[] = array('name' => 'DomainWhitelist', + 'version' => STATUSNET_VERSION, + 'author' => 'Evan Prodromou', + 'homepage' => 'http://status.net/wiki/Plugin:DomainWhitelist', + 'rawdescription' => + _m('Restrict domains for email users')); + return true; + } +}