X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FDomainStatusNetwork%2FDomainStatusNetworkPlugin.php;h=2443139af6b02b0e6df1471674de529f1481bdb6;hb=d6b28c64830f632bb2f4b6f3c9369b9e56ad217a;hp=aa7929ef0247f5bbb98884aee29a409ebd37389b;hpb=f24af19b79c71865113ae2959af7d20aa52fca18;p=quix0rs-gnu-social.git diff --git a/plugins/DomainStatusNetwork/DomainStatusNetworkPlugin.php b/plugins/DomainStatusNetwork/DomainStatusNetworkPlugin.php index aa7929ef02..2443139af6 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,14 +59,14 @@ class DomainStatusNetworkPlugin extends Plugin // For various reasons this gets squished global $tldTree; - + if (empty($tldTree)) { if (!empty(self::$_thetree)) { $tldTree = self::$_thetree; } } - $nickname = StatusNet::currentSite(); + $nickname = GNUsocial::currentSite(); if (empty($nickname)) { $this->log(LOG_WARNING, "No current site"); @@ -75,9 +74,10 @@ class DomainStatusNetworkPlugin extends Plugin } try { - $sn = Status_network::staticGet('nickname', $nickname); + $sn = Status_network::getKV('nickname', $nickname); } catch (Exception $e) { $this->log(LOG_ERR, $e->getMessage()); + return; } $tags = $sn->getTags(); @@ -85,26 +85,12 @@ 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); } } } - function onAutoload($cls) - { - $dir = dirname(__FILE__); - - switch ($cls) - { - case 'DomainStatusNetworkInstaller': - include_once $dir . '/' . strtolower($cls) . '.php'; - return false; - default: - return true; - } - } - static function toDomain($raw) { $parts = explode('@', $raw); @@ -127,8 +113,35 @@ class DomainStatusNetworkPlugin extends Plugin static function nicknameAvailable($nickname) { - $sn = Status_network::staticGet('nickname', $nickname); - return empty($sn); + $sn = Status_network::getKV('nickname', $nickname); + if (!empty($sn)) { + return false; + } + $usn = Unavailable_status_network::getKV('nickname', $nickname); + if (!empty($usn)) { + return false; + } + return true; + } + + function onRouterInitialized(URLMapper $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) @@ -169,7 +182,7 @@ class DomainStatusNetworkPlugin extends Plugin $snt = Status_network_tag::withTag('domain='.$domain); while ($snt->fetch()) { - $sn = Status_network::staticGet('site_id', $snt->site_id); + $sn = Status_network::getKV('site_id', $snt->site_id); if (!empty($sn)) { return $sn; } @@ -177,16 +190,118 @@ class DomainStatusNetworkPlugin extends Plugin return null; } - function onPluginVersion(&$versions) + function onPluginVersion(array &$versions) { $versions[] = array('name' => 'DomainStatusNetwork', - 'version' => STATUSNET_VERSION, + 'version' => GNUSOCIAL_VERSION, '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; + } + + GNUsocial::switchSite($sn->nickname); + + $user = User::getKV('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']; + } + + GNUsocial::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.")); + } + + GNUsocial::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)); + } + + GNUsocial::switchSite($sn->nickname); + + $user = User::getKV('email', $email); + + if (empty($user)) { + throw new ClientException(_('No such user.')); + } + } } // The way addPlugin() works, this global variable gets disappeared.