Merge branch 'emailsitesetup' into 1.0.x
This commit is contained in:
		@@ -129,4 +129,15 @@ class Status_network_tag extends Safe_DataObject
 | 
			
		||||
        $this->decache();
 | 
			
		||||
        return $ret;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static function withTag($tag)
 | 
			
		||||
    {
 | 
			
		||||
        $snt = new Status_network_tag();
 | 
			
		||||
 | 
			
		||||
        $snt->tag = $tag;
 | 
			
		||||
 | 
			
		||||
        $snt->find();
 | 
			
		||||
 | 
			
		||||
        return $snt;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -44,7 +44,7 @@ abstract class Installer
 | 
			
		||||
    /** Web site info */
 | 
			
		||||
    public $sitename, $server, $path, $fancy;
 | 
			
		||||
    /** DB info */
 | 
			
		||||
    public $host, $dbname, $dbtype, $username, $password, $db;
 | 
			
		||||
    public $host, $database, $dbtype, $username, $password, $db;
 | 
			
		||||
    /** Administrator info */
 | 
			
		||||
    public $adminNick, $adminPass, $adminEmail, $adminUpdates;
 | 
			
		||||
    /** Should we skip writing the configuration file? */
 | 
			
		||||
@@ -509,7 +509,9 @@ abstract class Installer
 | 
			
		||||
        $this->updateStatus("Initializing...");
 | 
			
		||||
        ini_set('display_errors', 1);
 | 
			
		||||
        error_reporting(E_ALL);
 | 
			
		||||
        if (!defined('STATUSNET')) {
 | 
			
		||||
            define('STATUSNET', 1);
 | 
			
		||||
        }
 | 
			
		||||
        require_once INSTALLDIR . '/lib/framework.php';
 | 
			
		||||
        StatusNet::initDefaults($this->server, $this->path);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										24
									
								
								lib/util.php
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								lib/util.php
									
									
									
									
									
								
							@@ -1860,6 +1860,30 @@ function common_config($main, $sub)
 | 
			
		||||
            array_key_exists($sub, $config[$main])) ? $config[$main][$sub] : false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function common_config_set($main, $sub, $value)
 | 
			
		||||
{
 | 
			
		||||
    global $config;
 | 
			
		||||
    if (!array_key_exists($main, $config)) {
 | 
			
		||||
        $config[$main] = array();
 | 
			
		||||
    }
 | 
			
		||||
    $config[$main][$sub] = $value;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function common_config_append($main, $sub, $value)
 | 
			
		||||
{
 | 
			
		||||
    global $config;
 | 
			
		||||
    if (!array_key_exists($main, $config)) {
 | 
			
		||||
        $config[$main] = array();
 | 
			
		||||
    }
 | 
			
		||||
    if (!array_key_exists($sub, $config[$main])) {
 | 
			
		||||
        $config[$main][$sub] = array();
 | 
			
		||||
    }
 | 
			
		||||
    if (!is_array($config[$main][$sub])) {
 | 
			
		||||
        $config[$main][$sub] = array($config[$main][$sub]);
 | 
			
		||||
    }
 | 
			
		||||
    array_push($config[$main][$sub], $value);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Pull arguments from a GET/POST/REQUEST array with first-level input checks:
 | 
			
		||||
 * strips "magic quotes" slashes if necessary, and kills invalid UTF-8 strings.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										195
									
								
								plugins/DomainStatusNetwork/DomainStatusNetworkPlugin.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										195
									
								
								plugins/DomainStatusNetwork/DomainStatusNetworkPlugin.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,195 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * StatusNet - the distributed open-source microblogging tool
 | 
			
		||||
 * 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
 | 
			
		||||
 * it under the terms of the GNU Affero General Public License as published by
 | 
			
		||||
 * the Free Software Foundation, either version 3 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU Affero General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU Affero General Public License
 | 
			
		||||
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 *
 | 
			
		||||
 * @category  DomainStatusNetwork
 | 
			
		||||
 * @package   StatusNet
 | 
			
		||||
 * @author    Evan Prodromou <evan@status.net>
 | 
			
		||||
 * @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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
$_dir = dirname(__FILE__);
 | 
			
		||||
 | 
			
		||||
require_once $_dir . '/extlib/effectiveTLDs.inc.php';
 | 
			
		||||
require_once $_dir . '/extlib/regDomain.inc.php';
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Tools to map one status_network to one email domain in a multi-site
 | 
			
		||||
 * installation.
 | 
			
		||||
 *
 | 
			
		||||
 * @category  DomainStatusNetwork
 | 
			
		||||
 * @package   StatusNet
 | 
			
		||||
 * @author    Evan Prodromou <evan@status.net>
 | 
			
		||||
 * @copyright 2011 StatusNet, Inc.
 | 
			
		||||
 * @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;
 | 
			
		||||
 | 
			
		||||
    function initialize()
 | 
			
		||||
    {
 | 
			
		||||
        // For various reasons this gets squished
 | 
			
		||||
 | 
			
		||||
        global $tldTree;
 | 
			
		||||
        
 | 
			
		||||
        if (empty($tldTree)) {
 | 
			
		||||
            if (!empty(self::$_thetree)) {
 | 
			
		||||
                $tldTree = self::$_thetree;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $nickname = StatusNet::currentSite();
 | 
			
		||||
 | 
			
		||||
        if (empty($nickname)) {
 | 
			
		||||
            $this->log(LOG_WARNING, "No current site");
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
            $sn = Status_network::staticGet('nickname', $nickname);
 | 
			
		||||
        } catch (Exception $e) {
 | 
			
		||||
            $this->log(LOG_ERR, $e->getMessage());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $tags = $sn->getTags();
 | 
			
		||||
 | 
			
		||||
        foreach ($tags as $tag) {
 | 
			
		||||
            if (strncmp($tag, 'domain=', 7) == 0) {
 | 
			
		||||
                $domain = substr($tag, 7);
 | 
			
		||||
                $this->log("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);
 | 
			
		||||
 | 
			
		||||
        if (count($parts) == 1) {
 | 
			
		||||
            $domain = $parts[0];
 | 
			
		||||
        } else {
 | 
			
		||||
            $domain = $parts[1];
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $domain = strtolower(trim($domain));
 | 
			
		||||
 | 
			
		||||
        return $domain;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static function registeredDomain($domain)
 | 
			
		||||
    {
 | 
			
		||||
        return getRegisteredDomain($domain);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static function nicknameAvailable($nickname)
 | 
			
		||||
    {
 | 
			
		||||
        $sn = Status_network::staticGet('nickname', $nickname);
 | 
			
		||||
        return empty($sn);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static function nicknameForDomain($domain)
 | 
			
		||||
    {
 | 
			
		||||
        $registered = self::registeredDomain($domain);
 | 
			
		||||
 | 
			
		||||
        $parts = explode('.', $registered);
 | 
			
		||||
 | 
			
		||||
        $base = $parts[0];
 | 
			
		||||
 | 
			
		||||
        if (self::nicknameAvailable($base)) {
 | 
			
		||||
            return $base;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $domainish = str_replace('.', '-', $registered);
 | 
			
		||||
 | 
			
		||||
        if (self::nicknameAvailable($domainish)) {
 | 
			
		||||
            return $domainish;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $i = 1;
 | 
			
		||||
 | 
			
		||||
        // We don't need to keep doing this forever
 | 
			
		||||
 | 
			
		||||
        while ($i < 1024) {
 | 
			
		||||
            $candidate = $domainish.'-'.$i;
 | 
			
		||||
            if (self::nicknameAvailable($candidate)) {
 | 
			
		||||
                return $candidate;
 | 
			
		||||
            }
 | 
			
		||||
            $i++;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static function siteForDomain($domain)
 | 
			
		||||
    {
 | 
			
		||||
        $snt = Status_network_tag::withTag('domain='.$domain);
 | 
			
		||||
 | 
			
		||||
        while ($snt->fetch()) {
 | 
			
		||||
            $sn = Status_network::staticGet('site_id', $snt->site_id);
 | 
			
		||||
            if (!empty($sn)) {
 | 
			
		||||
                return $sn;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function onPluginVersion(&$versions)
 | 
			
		||||
    {
 | 
			
		||||
        $versions[] = array('name' => 'DomainStatusNetwork',
 | 
			
		||||
                            'version' => STATUSNET_VERSION,
 | 
			
		||||
                            'author' => 'Evan Prodromou',
 | 
			
		||||
                            'homepage' => 'http://status.net/wiki/Plugin:DomainStatusNetwork',
 | 
			
		||||
                            'rawdescription' =>
 | 
			
		||||
                            _m('A plugin that maps a single status_network to an email domain.'));
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// The way addPlugin() works, this global variable gets disappeared.
 | 
			
		||||
// So, we re-appear it.
 | 
			
		||||
 | 
			
		||||
DomainStatusNetworkPlugin::$_thetree = $tldTree;
 | 
			
		||||
							
								
								
									
										276
									
								
								plugins/DomainStatusNetwork/domainstatusnetworkinstaller.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										276
									
								
								plugins/DomainStatusNetwork/domainstatusnetworkinstaller.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,276 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * StatusNet - the distributed open-source microblogging tool
 | 
			
		||||
 * Copyright (C) 2011, StatusNet, Inc.
 | 
			
		||||
 *
 | 
			
		||||
 * Installer class for domain-based multi-homing systems
 | 
			
		||||
 * 
 | 
			
		||||
 * PHP version 5
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU Affero General Public License as published by
 | 
			
		||||
 * the Free Software Foundation, either version 3 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU Affero General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU Affero General Public License
 | 
			
		||||
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 *
 | 
			
		||||
 * @category  DomainStatusNetwork
 | 
			
		||||
 * @package   StatusNet
 | 
			
		||||
 * @author    Evan Prodromou <evan@status.net>
 | 
			
		||||
 * @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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Installer class for domain-based multi-homing systems
 | 
			
		||||
 *
 | 
			
		||||
 * @category  DomainStatusNetwork
 | 
			
		||||
 * @package   StatusNet
 | 
			
		||||
 * @author    Evan Prodromou <evan@status.net>
 | 
			
		||||
 * @copyright 2011 StatusNet, Inc.
 | 
			
		||||
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
 | 
			
		||||
 * @link      http://status.net/
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
class DomainStatusNetworkInstaller extends Installer
 | 
			
		||||
{
 | 
			
		||||
    protected $domain   = null;
 | 
			
		||||
    protected $rootname = null;
 | 
			
		||||
    protected $sitedb   = null;
 | 
			
		||||
    protected $rootpass = null;
 | 
			
		||||
    protected $nickname = null;
 | 
			
		||||
    protected $sn       = null;
 | 
			
		||||
    protected $verbose  = false;
 | 
			
		||||
 | 
			
		||||
    function __construct($domain)
 | 
			
		||||
    {
 | 
			
		||||
        $this->domain = $domain;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Go for it!
 | 
			
		||||
     * @return boolean success
 | 
			
		||||
     */
 | 
			
		||||
    function main()
 | 
			
		||||
    {
 | 
			
		||||
        // We don't check prereqs. Check 'em before setting up a
 | 
			
		||||
        // multi-home system, kthxbi
 | 
			
		||||
        if ($this->prepare()) {
 | 
			
		||||
            return $this->handle();
 | 
			
		||||
        } else {
 | 
			
		||||
            $this->showHelp();
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get our input parameters...
 | 
			
		||||
     * @return boolean success
 | 
			
		||||
     */
 | 
			
		||||
    function prepare()
 | 
			
		||||
    {
 | 
			
		||||
        $config = $this->getConfig();
 | 
			
		||||
 | 
			
		||||
        $this->nickname = DomainStatusNetworkPlugin::nicknameForDomain($this->domain);
 | 
			
		||||
 | 
			
		||||
        // XXX make this configurable
 | 
			
		||||
 | 
			
		||||
        $this->sitename = sprintf('The %s Status Network', $this->domain);
 | 
			
		||||
 | 
			
		||||
        $this->server   = $this->nickname.'.'.$config['WILDCARD'];
 | 
			
		||||
        $this->path     = null;
 | 
			
		||||
        $this->fancy    = true;
 | 
			
		||||
 | 
			
		||||
        $this->host     = $config['DBHOSTNAME'];
 | 
			
		||||
        $this->database = $this->nickname.$config['DBBASE'];
 | 
			
		||||
        $this->dbtype   = 'mysql'; // XXX: support others... someday
 | 
			
		||||
        $this->username = $this->nickname.$config['USERBASE'];
 | 
			
		||||
 | 
			
		||||
        $pwgen = $config['PWDGEN'];
 | 
			
		||||
 | 
			
		||||
        $password = `$pwgen`;
 | 
			
		||||
 | 
			
		||||
        $this->password = trim($password);
 | 
			
		||||
 | 
			
		||||
        // For setting up the database
 | 
			
		||||
 | 
			
		||||
        $this->rootname = $config['ADMIN'];
 | 
			
		||||
        $this->rootpass = $config['ADMINPASS'];
 | 
			
		||||
        $this->sitehost = $config['DBHOST'];
 | 
			
		||||
        $this->sitedb   = $config['SITEDB'];
 | 
			
		||||
 | 
			
		||||
        // Explicitly empty
 | 
			
		||||
 | 
			
		||||
        $this->adminNick    = null;
 | 
			
		||||
        $this->adminPass    = null;
 | 
			
		||||
        $this->adminEmail   = null;
 | 
			
		||||
        $this->adminUpdates = null;
 | 
			
		||||
 | 
			
		||||
        /** Should we skip writing the configuration file? */
 | 
			
		||||
        $this->skipConfig = true;
 | 
			
		||||
 | 
			
		||||
        if (!$this->validateDb()) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function handle()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->doInstall();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function setupDatabase()
 | 
			
		||||
    {
 | 
			
		||||
        $this->createDatabase();
 | 
			
		||||
        parent::setupDatabase();
 | 
			
		||||
        $this->createDirectories();
 | 
			
		||||
        $this->saveStatusNetwork();
 | 
			
		||||
        $this->checkSchema();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function saveStatusNetwork()
 | 
			
		||||
    {
 | 
			
		||||
        Status_network::setupDB($this->sitehost,
 | 
			
		||||
                                $this->rootname,
 | 
			
		||||
                                $this->rootpass,
 | 
			
		||||
                                $this->sitedb, array());
 | 
			
		||||
 | 
			
		||||
        $sn = new Status_network();
 | 
			
		||||
 | 
			
		||||
        $sn->nickname = $this->nickname;
 | 
			
		||||
        $sn->dbhost   = $this->host;
 | 
			
		||||
        $sn->dbuser   = $this->username;
 | 
			
		||||
        $sn->dbpass   = $this->password;
 | 
			
		||||
        $sn->dbname   = $this->database;
 | 
			
		||||
 | 
			
		||||
        $result = $sn->insert();
 | 
			
		||||
 | 
			
		||||
        if (!$result) {
 | 
			
		||||
            throw new ServerException("Couldn't create status_network: " . print_r($sn, true));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $sn->setTags(array('domain='.$this->domain));
 | 
			
		||||
 | 
			
		||||
        $this->sn = $sn;
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    function checkSchema()
 | 
			
		||||
    {
 | 
			
		||||
        $config = $this->getConfig();
 | 
			
		||||
 | 
			
		||||
        Status_network::$wildcard = $config['WILDCARD'];
 | 
			
		||||
 | 
			
		||||
        StatusNet::switchSite($this->nickname);
 | 
			
		||||
 | 
			
		||||
        Event::handle('CheckSchema');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function getStatusNetwork()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->sn;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function createDirectories()
 | 
			
		||||
    {
 | 
			
		||||
        $config = $this->getConfig();
 | 
			
		||||
 | 
			
		||||
        foreach (array('AVATARBASE', 'BACKGROUNDBASE', 'FILEBASE') as $key) {
 | 
			
		||||
            $base = $config[$key];
 | 
			
		||||
            mkdir($base.'/'.$this->nickname, 0777, true);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function createDatabase()
 | 
			
		||||
    {
 | 
			
		||||
        // Create the New DB
 | 
			
		||||
        $res = mysql_connect($this->host, $this->rootname, $this->rootpass);
 | 
			
		||||
        if (!$res) {
 | 
			
		||||
            throw new ServerException("Can't connect to {$this->host} as {$this->rootname}");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        mysql_query("CREATE DATABASE ". mysql_real_escape_string($this->database), $res);
 | 
			
		||||
 | 
			
		||||
        $return = mysql_select_db($this->database, $res);
 | 
			
		||||
 | 
			
		||||
        if (!$return) {
 | 
			
		||||
            throw new ServerException("Unable to connect to {$this->database} on {$this->host}");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        foreach (array('localhost', '%') as $src) {
 | 
			
		||||
            mysql_query("GRANT ALL ON " . 
 | 
			
		||||
                        mysql_real_escape_string($this->database).".* TO '" .
 | 
			
		||||
                        $this->username . "'@'".$src."' ".
 | 
			
		||||
                        "IDENTIFIED BY '".$this->password."'", $res);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        mysql_close($res);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function getConfig()
 | 
			
		||||
    {
 | 
			
		||||
        static $config;
 | 
			
		||||
        
 | 
			
		||||
        $cfg_file = "/etc/statusnet/setup.cfg";
 | 
			
		||||
 | 
			
		||||
        if (empty($config)) {
 | 
			
		||||
            $result = parse_ini_file($cfg_file);
 | 
			
		||||
 | 
			
		||||
            $config = array();
 | 
			
		||||
            foreach ($result as $key => $value) {
 | 
			
		||||
                $key = str_replace('export ', '', $key);
 | 
			
		||||
                $config[$key] = $value;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $config;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function showHelp()
 | 
			
		||||
    {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function warning($message, $submessage='')
 | 
			
		||||
    {
 | 
			
		||||
        print $this->html2text($message) . "\n";
 | 
			
		||||
        if ($submessage != '') {
 | 
			
		||||
            print "  " . $this->html2text($submessage) . "\n";
 | 
			
		||||
        }
 | 
			
		||||
        print "\n";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function updateStatus($status, $error=false)
 | 
			
		||||
    {
 | 
			
		||||
        if ($this->verbose || $error) {
 | 
			
		||||
            if ($error) {
 | 
			
		||||
                print "ERROR: ";
 | 
			
		||||
            }
 | 
			
		||||
            print $this->html2text($status);
 | 
			
		||||
            print "\n";
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private function html2text($html)
 | 
			
		||||
    {
 | 
			
		||||
        // break out any links for text legibility
 | 
			
		||||
        $breakout = preg_replace('/<a[^>+]\bhref="(.*)"[^>]*>(.*)<\/a>/',
 | 
			
		||||
                                 '\2 <\1>',
 | 
			
		||||
                                 $html);
 | 
			
		||||
        return html_entity_decode(strip_tags($breakout), ENT_QUOTES, 'UTF-8');
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										3766
									
								
								plugins/DomainStatusNetwork/extlib/effectiveTLDs.inc.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3766
									
								
								plugins/DomainStatusNetwork/extlib/effectiveTLDs.inc.php
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										83
									
								
								plugins/DomainStatusNetwork/extlib/regDomain.inc.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								plugins/DomainStatusNetwork/extlib/regDomain.inc.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,83 @@
 | 
			
		||||
<?
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Calculate the effective registered domain of a fully qualified domain name.
 | 
			
		||||
 *
 | 
			
		||||
 * <@LICENSE>
 | 
			
		||||
 * Licensed to the Apache Software Foundation (ASF) under one or more
 | 
			
		||||
 * contributor license agreements.  See the NOTICE file distributed with
 | 
			
		||||
 * this work for additional information regarding copyright ownership.
 | 
			
		||||
 * The ASF licenses this file to you under the Apache License, Version 2.0
 | 
			
		||||
 * (the "License"); you may not use this file except in compliance with
 | 
			
		||||
 * the License.  You may obtain a copy of the License at:
 | 
			
		||||
 *
 | 
			
		||||
 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 * </@LICENSE>
 | 
			
		||||
 *
 | 
			
		||||
 * Florian Sager, 25.07.2008, sager@agitos.de
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Remove subdomains from a signing domain to get the registered domain.
 | 
			
		||||
 *
 | 
			
		||||
 * dkim-reputation.org blocks signing domains on the level of registered domains
 | 
			
		||||
 * to rate senders who use e.g. a.spamdomain.tld, b.spamdomain.tld, ... under
 | 
			
		||||
 * the most common identifier - the registered domain - finally.
 | 
			
		||||
 *
 | 
			
		||||
 * This function returns NULL if $signingDomain is TLD itself
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
function getRegisteredDomain($signingDomain) {
 | 
			
		||||
 | 
			
		||||
	global $tldTree;
 | 
			
		||||
 | 
			
		||||
	$signingDomainParts = split('\.', $signingDomain);
 | 
			
		||||
 | 
			
		||||
	$result = findRegisteredDomain($signingDomainParts, $tldTree);
 | 
			
		||||
 | 
			
		||||
	if ($result===NULL || $result=="") {
 | 
			
		||||
		// this is an invalid domain name
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// assure there is at least 1 TLD in the stripped signing domain
 | 
			
		||||
	if (!strpos($result, '.')) {
 | 
			
		||||
		$cnt = count($signingDomainParts);
 | 
			
		||||
		if ($cnt==1 || $signingDomainParts[$cnt-2]=="") return NULL;
 | 
			
		||||
		return $signingDomainParts[$cnt-2].'.'.$signingDomainParts[$cnt-1];
 | 
			
		||||
	}
 | 
			
		||||
	return $result;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// recursive helper method
 | 
			
		||||
function findRegisteredDomain($remainingSigningDomainParts, &$treeNode) {
 | 
			
		||||
 | 
			
		||||
	$sub = array_pop($remainingSigningDomainParts);
 | 
			
		||||
 | 
			
		||||
	$result = NULL;
 | 
			
		||||
	if (isset($treeNode['!'])) {
 | 
			
		||||
		return '#';
 | 
			
		||||
	} else if (is_array($treeNode) && array_key_exists($sub, $treeNode)) {
 | 
			
		||||
		$result = findRegisteredDomain($remainingSigningDomainParts, $treeNode[$sub]);
 | 
			
		||||
	} else if (is_array($treeNode) && array_key_exists('*', $treeNode)) {
 | 
			
		||||
		$result = findRegisteredDomain($remainingSigningDomainParts, $treeNode['*']);
 | 
			
		||||
	} else {
 | 
			
		||||
		return $sub;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// this is a hack 'cause PHP interpretes '' as NULL
 | 
			
		||||
	if ($result == '#') {
 | 
			
		||||
		return $sub;
 | 
			
		||||
	} else if (strlen($result)>0) {
 | 
			
		||||
		return $result.'.'.$sub;
 | 
			
		||||
	}
 | 
			
		||||
	return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
?>
 | 
			
		||||
							
								
								
									
										56
									
								
								plugins/DomainStatusNetwork/scripts/installforemail.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								plugins/DomainStatusNetwork/scripts/installforemail.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,56 @@
 | 
			
		||||
#!/usr/bin/env php
 | 
			
		||||
<?php
 | 
			
		||||
/*
 | 
			
		||||
 * StatusNet - a distributed open-source microblogging tool
 | 
			
		||||
 * Copyright (C) 2011, StatusNet, Inc.
 | 
			
		||||
 *
 | 
			
		||||
 * Script to print out current version of the software
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU Affero General Public License as published by
 | 
			
		||||
 * the Free Software Foundation, either version 3 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU Affero General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU Affero General Public License
 | 
			
		||||
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..'));
 | 
			
		||||
 | 
			
		||||
$helptext = <<<END_OF_INSTALLFOREMAIL_HELP
 | 
			
		||||
installforemail.php [options] <email address>
 | 
			
		||||
 | 
			
		||||
END_OF_INSTALLFOREMAIL_HELP;
 | 
			
		||||
 | 
			
		||||
require_once INSTALLDIR.'/scripts/commandline.inc';
 | 
			
		||||
 | 
			
		||||
$email = $args[0];
 | 
			
		||||
 | 
			
		||||
$domain = DomainStatusNetworkPlugin::toDomain($email);
 | 
			
		||||
 | 
			
		||||
$sn = DomainStatusNetworkPlugin::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);
 | 
			
		||||
 | 
			
		||||
$confirmUrl = common_local_url('register', array('code' => $confirm->code));
 | 
			
		||||
 | 
			
		||||
print $confirmUrl."\n";
 | 
			
		||||
							
								
								
									
										42
									
								
								plugins/DomainStatusNetwork/scripts/proposesite.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								plugins/DomainStatusNetwork/scripts/proposesite.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,42 @@
 | 
			
		||||
#!/usr/bin/env php
 | 
			
		||||
<?php
 | 
			
		||||
/*
 | 
			
		||||
 * StatusNet - a distributed open-source microblogging tool
 | 
			
		||||
 * Copyright (C) 2011, StatusNet, Inc.
 | 
			
		||||
 *
 | 
			
		||||
 * Script to print out current version of the software
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU Affero General Public License as published by
 | 
			
		||||
 * the Free Software Foundation, either version 3 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU Affero General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU Affero General Public License
 | 
			
		||||
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..'));
 | 
			
		||||
 | 
			
		||||
$helptext = <<<END_OF_SITEFORDOMAIN_HELP
 | 
			
		||||
sitefordomain.php [options] <email address|domain>
 | 
			
		||||
Prints site information for the domain given
 | 
			
		||||
 | 
			
		||||
END_OF_SITEFORDOMAIN_HELP;
 | 
			
		||||
 | 
			
		||||
require_once INSTALLDIR.'/scripts/commandline.inc';
 | 
			
		||||
 | 
			
		||||
$domain   = DomainStatusNetworkPlugin::toDomain($args[0]);
 | 
			
		||||
 | 
			
		||||
$nickname = DomainStatusNetworkPlugin::nicknameForDomain($domain);
 | 
			
		||||
 | 
			
		||||
if (empty($nickname)) {
 | 
			
		||||
    throw new ClientException("No candidate found.");
 | 
			
		||||
} else {
 | 
			
		||||
    print $nickname;
 | 
			
		||||
    print "\n";
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										43
									
								
								plugins/DomainStatusNetwork/scripts/sitefordomain.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								plugins/DomainStatusNetwork/scripts/sitefordomain.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,43 @@
 | 
			
		||||
#!/usr/bin/env php
 | 
			
		||||
<?php
 | 
			
		||||
/*
 | 
			
		||||
 * StatusNet - a distributed open-source microblogging tool
 | 
			
		||||
 * Copyright (C) 2011, StatusNet, Inc.
 | 
			
		||||
 *
 | 
			
		||||
 * Script to print out current version of the software
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU Affero General Public License as published by
 | 
			
		||||
 * the Free Software Foundation, either version 3 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU Affero General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU Affero General Public License
 | 
			
		||||
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..'));
 | 
			
		||||
 | 
			
		||||
$helptext = <<<END_OF_SITEFORDOMAIN_HELP
 | 
			
		||||
sitefordomain.php [options] <email address|domain>
 | 
			
		||||
Prints site information for the domain given
 | 
			
		||||
 | 
			
		||||
END_OF_SITEFORDOMAIN_HELP;
 | 
			
		||||
 | 
			
		||||
require_once INSTALLDIR.'/scripts/commandline.inc';
 | 
			
		||||
 | 
			
		||||
$domain = DomainStatusNetworkPlugin::toDomain($args[0]);
 | 
			
		||||
 | 
			
		||||
$sn = DomainStatusNetworkPlugin::siteForDomain($domain);
 | 
			
		||||
 | 
			
		||||
if (empty($sn)) {
 | 
			
		||||
    exit(1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
print $sn->nickname."\n";
 | 
			
		||||
exit(0);
 | 
			
		||||
 | 
			
		||||
@@ -98,7 +98,7 @@ class DomainWhitelistPlugin extends Plugin
 | 
			
		||||
    {
 | 
			
		||||
        $whitelist = $this->getWhitelist();
 | 
			
		||||
 | 
			
		||||
        if (empty($whitelist)) {
 | 
			
		||||
        if (empty($whitelist) || empty($whitelist[0])) {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user