diff --git a/var/www/cron.php b/var/www/cron.php index f33a82f..05f786a 100644 --- a/var/www/cron.php +++ b/var/www/cron.php @@ -62,8 +62,8 @@ $nginx="server { listen unix:/var/run/nginx/$onion; root /home/$onion.onion/www; server_name $onion.onion *.$onion.onion; - access_log /var/log/nginx/access_$onion.onion.log custom buffer=32k flush=1m; - access_log /home/$onion.onion/logs/access.log custom buffer=32k flush=1m; + access_log /var/log/nginx/access_$onion.onion.log custom buffer=16k flush=1m; + access_log /home/$onion.onion/logs/access.log custom buffer=16k flush=1m; error_log /var/log/nginx/error_$onion.onion.log notice; error_log /home/$onion.onion/logs/error.log notice; disable_symlinks on from=/home/$onion.onion/www; @@ -124,7 +124,7 @@ php_admin_value[session.save_path] = /home/$onion.onion/tmp //delete old accounts $del=$db->prepare("DELETE FROM users WHERE onion=?"); -$stmt=$db->query("SELECT onion FROM users WHERE todelete=1 LIMIT 100;"); +$stmt=$db->query("SELECT onion, id, mysql_user FROM users WHERE todelete=1 LIMIT 100;"); $onions=$stmt->fetchAll(PDO::FETCH_NUM); foreach($onions as $onion){ $firstchar=substr($onion[0], 0, 1); @@ -164,6 +164,7 @@ foreach($reload as $key => $val){ } //continue deleting old accounts +$stmt=$db->prepare('SELECT mysql_database FROM mysql_databases WHERE user_id=?;'); foreach($onions as $onion){ //kill processes of the user to allow deleting system users exec("skill -u $onion[0].onion"); @@ -172,8 +173,11 @@ foreach($onions as $onion){ //delete all log files exec("rm -f /var/log/nginx/*$onion[0].onion.log*"); //delete user from database - $db->exec("DROP USER '$onion[0].onion'@'%';"); - $db->exec("DROP DATABASE IF EXISTS `$onion[0]`;"); + $db->exec("DROP USER '$onion[2]'@'%';"); + $stmt->execute([$onion[1]]); + while($tmp=$stmt->fetch(PDO::FETCH_NUM)){ + $db->exec("DROP DATABASE IF EXISTS `$tmp[0]`;"); + } $db->exec('FLUSH PRIVILEGES;'); //delete user from user database $del->execute([$onion[0]]); diff --git a/var/www/find_old.php b/var/www/find_old.php index 7b3c738..cea4d7d 100644 --- a/var/www/find_old.php +++ b/var/www/find_old.php @@ -10,25 +10,27 @@ try{ exec('find /home -path "/home/*.onion/tmp/*" -cmin +1440 -delete'); //delete unused accounts older than 30 days -$all=scandir('/home'); -$stmt=$db->prepare('UPDATE users SET todelete=1 WHERE onion=?;'); +$del=$db->prepare('UPDATE users SET todelete=1 WHERE onion=?;'); +$stmt=$db->prepare('SELECT onion FROM users WHERE dateadded;'); +$stmt->execute([time()-60*60*24*30]); +$all=$stmt->fetchAll(PDO::FETCH_NUM); foreach($all as $tmp){ - if(!preg_match('~^[a-z2-7]{16}\.onion$~', $tmp)){ - continue; - } + $tmp=$tmp[0].'.onion'; if(filemtime("/home/$tmp")>time()-60*60*24*30){ continue; } + $count_www=count(scandir("/home/$tmp/www/")); //check data empty and www no more than 1 file - if(count(scandir("/home/$tmp/data/"))>2 || count(scandir("/home/$tmp/www/"))>3){ + if($count_www>3 || count(scandir("/home/$tmp/data/"))>2){ continue; } //check www empty or index unmodified - if(count(scandir("/home/$tmp/www/"))===3){ + if($count_www===3){ if(!file_exists("/home/$tmp/www/index.hosting.html") || !in_array(md5_file("/home/$tmp/www/index.hosting.html"), INDEX_MD5S)){ continue; } } //no data found, safe to delete - $stmt->execute([substr($tmp, 0, 16)]); +// $del->execute([substr($tmp, 0, 16)]); +var_dump($tmp); } diff --git a/var/www/html/register.php b/var/www/html/register.php index 3d19a6f..41dabc6 100644 --- a/var/www/html/register.php +++ b/var/www/html/register.php @@ -102,11 +102,13 @@ if($_SERVER['REQUEST_METHOD']==='POST'){ echo '
To prevent abuse a site can only be registered every 60 seconds, but one has already been registered within the last 60 seconds. Please try again.
'; $ok=false; }elseif($ok){ - $stmt=$db->prepare('INSERT INTO users (username, password, onion, private_key, dateadded, public, php, autoindex) VALUES (?, ?, ?, ?, ?, ?, ?, ?);'); - $stmt->execute([$_POST['username'], $hash, $onion, $priv_key, time(), $public, $php, $autoindex]); + $stmt=$db->prepare('INSERT INTO users (username, password, onion, private_key, dateadded, public, php, autoindex, mysql_user) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);'); + $stmt->execute([$_POST['username'], $hash, $onion, $priv_key, time(), $public, $php, $autoindex, "$onion.onion"]); $stmt=$db->prepare('SELECT id FROM users WHERE username=?;'); $stmt->execute([$_POST['username']]); $user_id=$stmt->fetch(PDO::FETCH_NUM)[0]; + $stmt=$db->prepare('INSERT INTO mysql_databases (user_id, mysql_database) VALUES (?, ?);'); + $stmt->execute([$user_id, $onion]); $create_user=$db->prepare("CREATE USER '$onion.onion'@'%' IDENTIFIED BY ?;"); $create_user->execute([$_POST['pass']]); $db->exec("CREATE DATABASE IF NOT EXISTS `$onion`;"); diff --git a/var/www/setup.php b/var/www/setup.php index f624343..95f79c5 100644 --- a/var/www/setup.php +++ b/var/www/setup.php @@ -22,9 +22,10 @@ $version; if(!@$version=$db->query("SELECT value FROM settings WHERE setting='version';")){ //create tables $db->exec('CREATE TABLE captcha (id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, time int(11) NOT NULL, code char(5) COLLATE latin1_bin NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_bin;'); - $db->exec('CREATE TABLE users (id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, onion char(16) COLLATE latin1_bin NOT NULL UNIQUE, username varchar(50) COLLATE latin1_bin NOT NULL UNIQUE, password varchar(255) COLLATE latin1_bin NOT NULL, private_key varchar(1000) COLLATE latin1_bin NOT NULL, dateadded int(10) unsigned NOT NULL, public tinyint(3) unsigned NOT NULL, php tinyint(1) unsigned NOT NULL, autoindex tinyint(1) unsigned NOT NULL, todelete tinyint(1) UNSIGNED NOT NULL, KEY public (public), KEY dateadded (dateadded), KEY todelete (todelete)) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_bin;'); + $db->exec('CREATE TABLE users (id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, onion char(16) COLLATE latin1_bin NOT NULL UNIQUE, username varchar(50) COLLATE latin1_bin NOT NULL UNIQUE, password varchar(255) COLLATE latin1_bin NOT NULL, private_key varchar(1000) COLLATE latin1_bin NOT NULL, dateadded int(10) unsigned NOT NULL, public tinyint(3) unsigned NOT NULL, php tinyint(1) unsigned NOT NULL, autoindex tinyint(1) unsigned NOT NULL, todelete tinyint(1) UNSIGNED NOT NULL, mysql_user varchar(32) NOT NULL, KEY public (public), KEY dateadded (dateadded), KEY todelete (todelete)) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_bin;'); $db->exec('CREATE TABLE new_account (user_id int(11) NOT NULL PRIMARY KEY, password varchar(255) COLLATE latin1_bin NOT NULL, approved tinyint(1) UNSIGNED NOT NULL, CONSTRAINT new_account_ibfk_1 FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_bin;'); $db->exec('CREATE TABLE pass_change (user_id int(11) NOT NULL PRIMARY KEY, password varchar(255) COLLATE latin1_bin NOT NULL, CONSTRAINT pass_change_ibfk_1 FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_bin;'); + $db->exec('CREATE TABLE mysql_databases (user_id int(11) NOT NULL KEY, mysql_database varchar(64) COLLATE latin1_bin NOT NULL, CONSTRAINT mysql_database_ibfk_1 FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_bin;'); $db->exec('CREATE TABLE settings (setting varchar(50) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL PRIMARY KEY, value text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_bin;'); $stmt=$db->prepare("INSERT INTO settings (setting, value) VALUES ('version', ?);"); $stmt->execute([DBVERSION]); @@ -65,6 +66,12 @@ if(!@$version=$db->query("SELECT value FROM settings WHERE setting='version';")) $db->exec('INSERT INTO pass_change SELECT users.id, copy_pass_change.password FROM copy_pass_change INNER JOIN users ON (users.onion=copy_pass_change.onion);'); $db->exec('DROP TABLE copy_pass_change;'); } + if($version<5){ + $db->exec('ALTER TABLE users ADD mysql_user varchar(32) NOT NULL;'); + $db->exec("UPDATE users SET mysql_user=CONCAT(onion, '.onion');"); + $db->exec('CREATE TABLE mysql_databases (user_id int(11) NOT NULL KEY, mysql_database varchar(64) COLLATE latin1_bin NOT NULL, CONSTRAINT mysql_database_ibfk_1 FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_bin;'); + $db->exec("INSERT INTO mysql_databases (user_id, mysql_database) SELECT id, onion FROM users;"); + } $stmt=$db->prepare("UPDATE settings SET value=? WHERE setting='version';"); $stmt->execute([DBVERSION]); if(DBVERSION!=$version){