Fix instance not always being enqueued for reloading

This commit is contained in:
Daniel Winzen
2020-02-02 11:42:51 +01:00
parent 3a53ea59f8
commit 35e0a27774
3 changed files with 16 additions and 11 deletions

View File

@ -729,16 +729,22 @@ function del_user_db(int $user_id, string $mysql_db) {
} }
} }
function get_new_tor_instance(){ function get_new_tor_instance(string $type = 'onion') : string {
$db = get_db_instance(); $db = get_db_instance();
if($type === 'onion'){
$stmt = $db->query('SELECT s.ID FROM service_instances AS s LEFT JOIN onions AS o ON (s.ID = o.instance) GROUP BY s.ID ORDER BY count(s.ID) LIMIT 1;'); $stmt = $db->query('SELECT s.ID FROM service_instances AS s LEFT JOIN onions AS o ON (s.ID = o.instance) GROUP BY s.ID ORDER BY count(s.ID) LIMIT 1;');
} else {
$stmt = $db->query('SELECT s.ID FROM service_instances AS s LEFT JOIN users AS u ON (s.ID = u.instance) GROUP BY s.ID ORDER BY count(s.ID) LIMIT 1;');
}
return $stmt->fetch(PDO::FETCH_NUM)[0]; return $stmt->fetch(PDO::FETCH_NUM)[0];
} }
function add_user_onion(int $user_id, string $onion, string $priv_key, int $onion_version) { function add_user_onion(int $user_id, string $onion, string $priv_key, int $onion_version) {
$db = get_db_instance(); $db = get_db_instance();
$stmt=$db->prepare('INSERT INTO onions (user_id, onion, private_key, version, enabled, enable_smtp, instance) VALUES (?, ?, ?, ?, 1, 0, ?);'); $stmt=$db->prepare('INSERT INTO onions (user_id, onion, private_key, version, enabled, enable_smtp, instance) VALUES (?, ?, ?, ?, 1, 0, ?);');
$stmt->execute([$user_id, $onion, $priv_key, $onion_version, get_new_tor_instance()]); $instance = get_new_tor_instance();
$stmt->execute([$user_id, $onion, $priv_key, $onion_version, $instance]);
enqueue_instance_reload($instance);
} }
function del_user_onion(int $user_id, string $onion) { function del_user_onion(int $user_id, string $onion) {
@ -776,6 +782,7 @@ function add_user_domain(int $user_id, string $domain) : string {
} }
$stmt = $db->prepare("INSERT INTO domains (user_id, domain, enabled) VALUES (?, ?, 1);"); $stmt = $db->prepare("INSERT INTO domains (user_id, domain, enabled) VALUES (?, ?, 1);");
$stmt->execute([$user_id, $domain]); $stmt->execute([$user_id, $domain]);
enqueue_instance_reload();
return ''; return '';
} }
@ -786,6 +793,7 @@ function del_user_domain(int $user_id, string $domain) {
if($stmt->fetch()){ if($stmt->fetch()){
$stmt = $db->prepare("DELETE FROM domains WHERE user_id = ? AND domain = ?;"); $stmt = $db->prepare("DELETE FROM domains WHERE user_id = ? AND domain = ?;");
$stmt->execute([$user_id, $domain]); $stmt->execute([$user_id, $domain]);
enqueue_instance_reload();
} }
} }

View File

@ -114,8 +114,6 @@ if(isset($_POST['action']) && $_POST['action']==='add_domain' && !empty($_POST['
$error = add_user_domain($user['id'], $_POST['domain']); $error = add_user_domain($user['id'], $_POST['domain']);
if(!empty($error)){ if(!empty($error)){
$msg = "<p style=\"color:red;\">$error</p>"; $msg = "<p style=\"color:red;\">$error</p>";
}else{
enqueue_instance_reload();
} }
} }
if(isset($_POST['action']) && $_POST['action']==='del_domain' && !empty($_POST['domain'])){ if(isset($_POST['action']) && $_POST['action']==='del_domain' && !empty($_POST['domain'])){
@ -143,22 +141,21 @@ if(isset($_POST['action']) && $_POST['action']==='del_domain_2' && !empty($_POST
die($error); die($error);
} }
del_user_domain($user['id'], $_POST['domain']); del_user_domain($user['id'], $_POST['domain']);
enqueue_instance_reload();
} }
if(isset($_REQUEST['action']) && isset($_REQUEST['onion']) && $_REQUEST['action']==='edit_onion'){ if(isset($_REQUEST['action']) && isset($_REQUEST['onion']) && $_REQUEST['action']==='edit_onion'){
if($error=check_csrf_error()){ if($error=check_csrf_error()){
die($error); die($error);
} }
$stmt=$db->prepare('SELECT onions.version FROM onions INNER JOIN users ON (users.id=onions.user_id) WHERE onions.onion = ? AND users.id = ? AND onions.enabled IN (0, 1);'); $stmt=$db->prepare('SELECT onions.version, onions.instance FROM onions INNER JOIN users ON (users.id=onions.user_id) WHERE onions.onion = ? AND users.id = ? AND onions.enabled IN (0, 1);');
$stmt->execute([$_REQUEST['onion'], $user['id']]); $stmt->execute([$_REQUEST['onion'], $user['id']]);
if($onion=$stmt->fetch(PDO::FETCH_NUM)){ if($onion=$stmt->fetch(PDO::FETCH_ASSOC)){
$stmt=$db->prepare('UPDATE onions SET enabled = ?, enable_smtp = ?, num_intros = ?, max_streams = ? WHERE onion = ?;'); $stmt=$db->prepare('UPDATE onions SET enabled = ?, enable_smtp = ?, num_intros = ?, max_streams = ? WHERE onion = ?;');
$enabled = isset($_REQUEST['enabled']) ? 1 : 0; $enabled = isset($_REQUEST['enabled']) ? 1 : 0;
$enable_smtp = isset($_REQUEST['enable_smtp']) ? 1 : 0; $enable_smtp = isset($_REQUEST['enable_smtp']) ? 1 : 0;
$num_intros = intval($_REQUEST['num_intros']); $num_intros = intval($_REQUEST['num_intros']);
if($num_intros<3){ if($num_intros<3){
$num_intros = 3; $num_intros = 3;
}elseif($onion[0]==2 && $num_intros>10){ }elseif($onion['version']==2 && $num_intros>10){
$num_intros = 10; $num_intros = 10;
}elseif($num_intros>20){ }elseif($num_intros>20){
$num_intros = 20; $num_intros = 20;
@ -170,7 +167,7 @@ if(isset($_REQUEST['action']) && isset($_REQUEST['onion']) && $_REQUEST['action'
$max_streams = 65535; $max_streams = 65535;
} }
$stmt->execute([$enabled, $enable_smtp, $num_intros, $max_streams, $_REQUEST['onion']]); $stmt->execute([$enabled, $enable_smtp, $num_intros, $max_streams, $_REQUEST['onion']]);
enqueue_instance_reload(substr($_REQUEST['onion'], 0, 1)); enqueue_instance_reload($onion['instance']);
} }
} }
if(isset($_REQUEST['action']) && isset($_POST['domain']) && $_POST['action']==='edit_domain'){ if(isset($_REQUEST['action']) && isset($_POST['domain']) && $_POST['action']==='edit_domain'){

View File

@ -104,7 +104,7 @@ if($_SERVER['REQUEST_METHOD']==='POST'){
}elseif($ok){ }elseif($ok){
$mysql_user = add_mysql_user($_POST['pass']); $mysql_user = add_mysql_user($_POST['pass']);
$stmt=$db->prepare('INSERT INTO users (username, system_account, password, dateadded, public, php, autoindex, mysql_user, instance) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);'); $stmt=$db->prepare('INSERT INTO users (username, system_account, password, dateadded, public, php, autoindex, mysql_user, instance) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);');
$stmt->execute([$_POST['username'], substr("$onion.onion", 0, 32), $hash, time(), $public_list, $php, $autoindex, $mysql_user, get_new_tor_instance()]); $stmt->execute([$_POST['username'], substr("$onion.onion", 0, 32), $hash, time(), $public_list, $php, $autoindex, $mysql_user, get_new_tor_instance('system')]);
$user_id = $db->lastInsertId(); $user_id = $db->lastInsertId();
$stmt = $db->prepare('INSERT INTO disk_quota (user_id, quota_size, quota_files) VALUES (?, ?, ?);'); $stmt = $db->prepare('INSERT INTO disk_quota (user_id, quota_size, quota_files) VALUES (?, ?, ?);');
$stmt->execute([$user_id, DEFAULT_QUOTA_SIZE, DEFAULT_QUOTA_FILES]); $stmt->execute([$user_id, DEFAULT_QUOTA_SIZE, DEFAULT_QUOTA_FILES]);