X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FDomainStatusNetwork%2FDomainStatusNetworkPlugin.php;h=10208cfbe7376d4263fc6df5de8ea0e2ecaa5eaa;hb=25198a8d4cee5b2182f1ecb99192a4108a01afa4;hp=5debb5ef76984b79498f01c79d67809c3cecbf66;hpb=cb6b5b2cc6197091b9d831ffeec695cf5ab8713a;p=quix0rs-gnu-social.git diff --git a/plugins/DomainStatusNetwork/DomainStatusNetworkPlugin.php b/plugins/DomainStatusNetwork/DomainStatusNetworkPlugin.php index 5debb5ef76..10208cfbe7 100644 --- a/plugins/DomainStatusNetwork/DomainStatusNetworkPlugin.php +++ b/plugins/DomainStatusNetwork/DomainStatusNetworkPlugin.php @@ -4,7 +4,7 @@ * Copyright (C) 2011, StatusNet, Inc. * * One status_network per email domain - * + * * PHP version 5 * * This program is free software: you can redistribute it and/or modify @@ -50,7 +50,6 @@ require_once $_dir . '/extlib/regDomain.inc.php'; * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 * @link http://status.net/ */ - class DomainStatusNetworkPlugin extends Plugin { static $_thetree = null; @@ -60,7 +59,7 @@ class DomainStatusNetworkPlugin extends Plugin // For various reasons this gets squished global $tldTree; - + if (empty($tldTree)) { if (!empty(self::$_thetree)) { $tldTree = self::$_thetree; @@ -78,6 +77,7 @@ class DomainStatusNetworkPlugin extends Plugin $sn = Status_network::staticGet('nickname', $nickname); } catch (Exception $e) { $this->log(LOG_ERR, $e->getMessage()); + return; } $tags = $sn->getTags(); @@ -85,7 +85,7 @@ class DomainStatusNetworkPlugin extends Plugin foreach ($tags as $tag) { if (strncmp($tag, 'domain=', 7) == 0) { $domain = substr($tag, 7); - $this->log("Setting email domain to {$domain}"); + $this->log(LOG_INFO, "Setting email domain to {$domain}"); common_config_append('email', 'whitelist', $domain); } } @@ -97,8 +97,15 @@ class DomainStatusNetworkPlugin extends Plugin switch ($cls) { + case 'GlobalregisterAction': + case 'GloballoginAction': + case 'GlobalrecoverAction': + include_once $dir . '/actions/' . strtolower(mb_substr($cls, 0, -6)) . '.php'; + return false; case 'DomainStatusNetworkInstaller': - include_once $dir . '/' . strtolower($cls) . '.php'; + case 'GlobalApiAction': + case 'FreeEmail': + include_once $dir . '/lib/' . strtolower($cls) . '.php'; return false; default: return true; @@ -138,6 +145,26 @@ class DomainStatusNetworkPlugin extends Plugin return true; } + function onRouterInitialized($m) + { + if (common_config('globalapi', 'enabled')) { + foreach (array('register', 'login', 'recover') as $method) { + $m->connect('api/statusnet/global/'.$method, + array('action' => 'global'.$method)); + } + } + return true; + } + + function onLoginAction($action, &$login) { + $this->debug($action); + if (in_array($action, array('globalregister', 'globallogin', 'globalrecover'))) { + $login = true; + return false; + } + return true; + } + static function nicknameForDomain($domain) { $registered = self::registeredDomain($domain); @@ -191,9 +218,111 @@ class DomainStatusNetworkPlugin extends Plugin 'author' => 'Evan Prodromou', 'homepage' => 'http://status.net/wiki/Plugin:DomainStatusNetwork', 'rawdescription' => + // TRANS: Plugin description. _m('A plugin that maps a single status_network to an email domain.')); return true; } + + static function userExists($email) + { + $domain = self::toDomain($email); + + $sn = self::siteForDomain($domain); + + if (empty($sn)) { + return false; + } + + StatusNet::switchSite($sn->nickname); + + $user = User::staticGet('email', $email); + + return !empty($user); + } + + static function registerEmail($email) + { + $domain = self::toDomain($email); + + if (FreeEmail::isFree($domain)) { + throw new ClientException(_("Use your work email.")); + } + + $sn = self::siteForDomain($domain); + + if (empty($sn)) { + $installer = new DomainStatusNetworkInstaller($domain); + + // Do the thing + $installer->main(); + + $sn = $installer->getStatusNetwork(); + + $config = $installer->getConfig(); + + Status_network::$wildcard = $config['WILDCARD']; + } + + StatusNet::switchSite($sn->nickname); + + $confirm = EmailRegistrationPlugin::registerEmail($email); + + return $confirm; + } + + static function login($email, $password) + { + $domain = self::toDomain($email); + + $sn = self::siteForDomain($domain); + + if (empty($sn)) { + throw new ClientException(_("No such site.")); + } + + StatusNet::switchSite($sn->nickname); + + $user = common_check_user($email, $password); + + if (empty($user)) { + // TRANS: Form validation error displayed when trying to log in with incorrect credentials. + throw new ClientException(_('Incorrect username or password.')); + } + + $loginToken = Login_token::makeNew($user); + + if (empty($loginToken)) { + throw new ServerException(sprintf(_('Could not create new login token for user %s'), $user->nickname)); + } + + $url = common_local_url('otp', array('user_id' => $loginToken->user_id, + 'token' => $loginToken->token)); + + if (empty($url)) { + throw new ServerException(sprintf(_('Could not create new OTP URL for user %s'), $user->nickname)); + } + + return $url; + } + + static function recoverPassword($email) + { + $domain = self::toDomain($email); + + $sn = self::siteForDomain($domain); + + if (empty($sn)) { + throw new NoSuchUserException(array('email' => $email)); + } + + StatusNet::switchSite($sn->nickname); + + $user = User::staticGet('email', $email); + + if (empty($user)) { + throw new ClientException(_('No such user.')); + } + } } // The way addPlugin() works, this global variable gets disappeared.