* 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
* @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 $rootpass = null;
protected $nickname = null;
protected $sn = null;
- protected $verbose = false;
+
+ public $verbose = false;
function __construct($domain)
{
$this->path = null;
$this->fancy = true;
+ $datanick = $this->databaseize($this->nickname);
+
$this->host = $config['DBHOSTNAME'];
- $this->database = $this->nickname.$config['DBBASE'];
+ $this->database = $datanick.$config['DBBASE'];
$this->dbtype = 'mysql'; // XXX: support others... someday
- $this->username = $this->nickname.$config['USERBASE'];
+ $this->username = $datanick.$config['USERBASE'];
+
+ // Max size for MySQL
+
+ if (strlen($this->username) > 16) {
+ $this->username = sprintf('%s%08x', substr($this->username, 0, 8), crc32($this->username));
+ }
$pwgen = $config['PWDGEN'];
function setupDatabase()
{
+ $this->updateStatus('Creating database...');
$this->createDatabase();
parent::setupDatabase();
+ $this->updateStatus('Creating file directories...');
$this->createDirectories();
+ $this->updateStatus('Saving status network...');
$this->saveStatusNetwork();
+ $this->updateStatus('Checking schema for plugins...');
$this->checkSchema();
}
$sn->dbuser = $this->username;
$sn->dbpass = $this->password;
$sn->dbname = $this->database;
+ $sn->sitename = $this->sitename;
$result = $sn->insert();
if (!$result) {
- throw new ServerException("Couldn't create status_network: " . print_r($sn, true));
+ throw new ServerException("Could not create status_network: " . print_r($sn, true));
}
$sn->setTags(array('domain='.$this->domain));
$this->sn = $sn;
}
-
+
function checkSchema()
{
$config = $this->getConfig();
// 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}");
+ throw new ServerException("Cannot 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}");
+ throw new ServerException("Unable to connect to {$this->database} on {$this->host}.");
}
foreach (array('localhost', '%') as $src) {
- mysql_query("GRANT ALL ON " .
+ mysql_query("GRANT ALL ON " .
mysql_real_escape_string($this->database).".* TO '" .
$this->username . "'@'".$src."' ".
"IDENTIFIED BY '".$this->password."'", $res);
function getConfig()
{
static $config;
-
+
$cfg_file = "/etc/statusnet/setup.cfg";
if (empty($config)) {
$html);
return html_entity_decode(strip_tags($breakout), ENT_QUOTES, 'UTF-8');
}
+
+ function databaseize($nickname)
+ {
+ $nickname = str_replace('-', '_', $nickname);
+ return $nickname;
+ }
}