Пример #1
0
function exec_ogp_module()
{
    echo "<h2>" . get_lang('ban_list') . "</h2>";
    global $db;
    if (isset($_POST['unban'])) {
        unset($_POST['unban']);
        foreach ($_POST as $name => $ip) {
            $db->query("UPDATE `OGP_DB_PREFIXban_list` SET logging_attempts='0', banned_until='0' WHERE client_ip = '{$ip}';");
        }
    }
    $ban_list = $db->resultQuery("SELECT logging_attempts, banned_until, client_ip FROM `OGP_DB_PREFIXban_list`;");
    $ban_qty = 0;
    $ban_table = '';
    foreach ($ban_list as $ban) {
        if ($ban['logging_attempts'] >= 3) {
            $ban_table .= "<tr><td><input type=checkbox name='" . $ban_qty . "' value='" . $ban['client_ip'] . "' /></td><td>" . $ban['client_ip'] . "</td><td>" . date("r", $ban['banned_until']) . "</td></tr>\n";
            $ban_qty++;
        } else {
            continue;
        }
    }
    if ($ban_qty == 0) {
        print_failure(get_lang('no_banned_ips'));
    } else {
        echo "<form method=post >\n" . "<table><tr><th><span id=check >" . get_lang('unban') . "</span></th><th>" . get_lang('client_ip') . "</th><th>" . get_lang('banned_until') . "</th></tr>\n" . $ban_table . "</table>\n" . "<input type=submit name=unban value='" . get_lang('unban_selected_ips') . "' /></form>";
        ?>
		<script type="text/javascript" src="js/jquery-1.7.1.min.js"></script>
		<script type="text/javascript">
		$('span#check').css({'cursor':'pointer','color':'blue'});
		$('span#check').click(function(){
			$('input[type=checkbox]').each(function( ){
				if( this.checked )
				{
					$(this).attr('checked', false);
				}
				else
				{
					$(this).attr('checked', true);
				}
			});
		});
		</script>
		<?php 
    }
    echo create_back_button($_GET['m'], "main");
}
function exec_ogp_module()
{
    global $db;
    global $view;
    $pieces = explode("-", $_GET['home_id-mod_id-ip-port']);
    $home_id = $pieces[0];
    $mod_id = $pieces[1];
    $ip = $pieces[2];
    $port = $pieces[3];
    $user_id = $_SESSION['user_id'];
    $isAdmin = $db->isAdmin($user_id);
    if ($isAdmin) {
        $home_info = $db->getGameHome($home_id);
    } else {
        $home_info = $db->getUserGameHome($user_id, $home_id);
    }
    if ($home_info === FALSE) {
        print_failure(get_lang('no_access_to_home'));
        return;
    }
    $server_xml = read_server_config(SERVER_CONFIG_LOCATION . "/" . $home_info['home_cfg_file']);
    if (!$server_xml) {
        echo create_back_button($_GET['m'], 'game_monitor&home_id-mod_id-ip-port=' . $_GET['home_id-mod_id-ip-port']);
        return;
    }
    require_once 'includes/lib_remote.php';
    $remote = new OGPRemoteLibrary($home_info['agent_ip'], $home_info['agent_port'], $home_info['encryption_key']);
    $home_log = "";
    if (isset($server_xml->console_log)) {
        $log_retval = $remote->remote_readfile($home_info['home_path'] . '/' . $server_xml->console_log, $home_log);
    } else {
        $log_retval = $remote->get_log(OGP_SCREEN_TYPE_HOME, $home_info['home_id'], clean_path($home_info['home_path'] . "/" . $server_xml->exe_location), $home_log);
    }
    if ($log_retval == 0) {
        print_failure(get_lang('agent_offline'));
        echo create_back_button($_GET['m'], 'game_monitor&home_id-mod_id-ip-port=' . $_GET['home_id-mod_id-ip-port']);
    } elseif ($log_retval == 1 || $log_retval == 2) {
        // Using the refreshed class
        if (isset($_GET['refreshed'])) {
            echo "<pre class='log'>" . $home_log . "</pre>";
        } else {
            echo "<h2>" . $home_info['home_name'] . "</h2>";
            require_once "includes/refreshed.php";
            $control = '<form method="POST" >
						<input type="submit" name="';
            if (isset($_POST['full'])) {
                $height = "100%";
                $control .= 'default" value="-';
            } else {
                $height = "500px";
                $control .= 'full" value="+';
            }
            $control .= '" /></form><br />';
            $intervals = array("4s" => "4000", "8s" => "8000", "30s" => "30000", "2m" => "120000", "5m" => "300000");
            $intSel = '<form action="" method="GET" >
					   <input type="hidden" name="m" value="gamemanager" />
					   <input type="hidden" name="p" value="log" />
					   <input type="hidden" name="home_id-mod_id-ip-port" value="' . $_GET['home_id-mod_id-ip-port'] . '" />' . get_lang('refresh_interval') . ':<select name="setInterval" onchange="this.form.submit();">';
            foreach ($intervals as $interval => $value) {
                $selected = "";
                if (isset($_GET['setInterval']) and $_GET['setInterval'] == $value) {
                    $selected = 'selected="selected"';
                }
                $intSel .= '<option value="' . $value . '" ' . $selected . ' >' . $interval . '</option>';
            }
            $intSel .= "</select></form>";
            $setInterval = $_GET['setInterval'] ? $_GET['setInterval'] : 4000;
            $refresh = new refreshed();
            $pos = $refresh->add("home.php?m=gamemanager&p=log&type=cleared&refreshed&home_id-mod_id-ip-port=" . $_GET['home_id-mod_id-ip-port']);
            echo $refresh->getdiv($pos, "height:" . $height . ";overflow:auto;max-width:1600px;");
            ?>
<script type="text/javascript">$(document).ready(function(){ <?php 
            echo $refresh->build("{$setInterval}");
            ?>
} ); </script><?php 
            echo "<table class='center' ><tr><td>{$intSel}</td><td>{$control}</td></tr></table>";
            if ($remote->is_screen_running(OGP_SCREEN_TYPE_HOME, $home_info['home_id']) != 1) {
                print_failure(get_lang('server_not_running'));
            } else {
                if ($server_xml->control_protocol == 'rcon' or $server_xml->control_protocol == 'rcon2' or @$server_xml->gameq_query_name == "minecraft" or $server_xml->control_protocol == 'lcon' or isset($server_xml->lgsl_query_name) and $server_xml->lgsl_query_name == "7dtd") {
                    require 'modules/gamemanager/rcon.php';
                }
            }
            echo create_back_button($_GET['m'], 'game_monitor&home_id-mod_id-ip-port=' . $_GET['home_id-mod_id-ip-port']);
        }
    } else {
        print_failure(get_lang_f('unable_to_get_log', $log_retval));
        echo create_back_button($_GET['m'], 'game_monitor&home_id-mod_id-ip-port=' . $_GET['home_id-mod_id-ip-port']);
    }
}
Пример #3
0
function exec_ogp_module()
{
    global $db;
    $isAdmin = $db->isAdmin($_SESSION['user_id']);
    if (isset($_REQUEST['user_id']) && !$isAdmin) {
        echo "<p class='note'>" . get_lang('not_available') . "</p>";
        return;
    }
    if (isset($_REQUEST['group_id']) && !$isAdmin) {
        $result = $db->getUserGroupList($_SESSION['user_id']);
        foreach ($result as $row) {
            if ($row['group_id'] == $_REQUEST['group_id']) {
                $own_group = TRUE;
            }
        }
    }
    if (!$isAdmin && !isset($own_group)) {
        echo "<p class='note'>" . get_lang('not_available') . "</p>";
        return;
    }
    if (!isset($_REQUEST['user_id']) && !isset($_REQUEST['group_id'])) {
        print_failure(get_lang("invalid_url"));
        return;
    }
    /// \todo We might want to save this information to XML file?
    $selections = array("allow_updates" => "u", "allow_file_management" => "f", "allow_parameter_usage" => "p", "allow_extra_params" => "e", "allow_ftp" => "t", "allow_custom_fields" => "c");
    if (isset($_REQUEST['user_id'])) {
        $assign_id = $_REQUEST['user_id'];
        $id_type = "user";
        $user = $db->getUserById($assign_id);
        $assign_name = $user['users_login'];
    } else {
        if (isset($_REQUEST['group_id'])) {
            $assign_id = $_REQUEST['group_id'];
            $id_type = "group";
            $group = $db->getGroupById($assign_id);
            $assign_name = $group['group_name'];
        }
    }
    $submit = isset($_POST['submit']) ? $_POST['submit'] : "";
    if (isset($_REQUEST['assign'])) {
        $access_rights = "";
        foreach ($selections as $selection => $flag) {
            if (isset($_REQUEST[$selection])) {
                $access_rights .= $flag;
            }
        }
        $hacker = FALSE;
        if (!$isAdmin) {
            $home_info = $db->getUserGameHome($_SESSION['user_id'], $_REQUEST['home_id']);
            if (!$home_info) {
                print_failure(get_lang_f("failed_to_assign_game_for", $id_type, "(Hacking attempt)"));
                $hacker = TRUE;
            } else {
                foreach ($selections as $selection => $flag) {
                    if (isset($_REQUEST[$selection])) {
                        if (!preg_match("/{$flag}/", $home_info['access_rights'])) {
                            print_failure(get_lang_f("failed_to_assign_game_for", $id_type, "(Hacking attempt)"));
                            $hacker = TRUE;
                        }
                    }
                }
            }
        }
        if (!$hacker) {
            if ($db->assignHomeTo($id_type, $assign_id, $_REQUEST['home_id'], $access_rights) === TRUE) {
                print_success(get_lang_f("assigned_home_to_" . $id_type, $_REQUEST['home_id'], $assign_name));
                $db->logger(get_lang_f("assigned_home_to_" . $id_type, $_REQUEST['home_id'], $assign_name));
            } else {
                print_failure(get_lang_f("failed_to_assign_game_for_", $id_type, $db->getError()));
            }
        }
        unset($_POST['home_id']);
    } else {
        if (isset($_REQUEST['unassign'])) {
            if ($db->unassignHomeFrom($id_type, $assign_id, $_REQUEST['home_id']) === TRUE) {
                print_success(get_lang_f("unassigned_home_from_" . $id_type, $_REQUEST['home_id'], $assign_name));
                $db->logger(get_lang_f("unassigned_home_from_" . $id_type, $_REQUEST['home_id'], $assign_name));
            } else {
                print_failure(get_lang_f("failed_to_assign_game_from_", $id_type));
            }
        }
    }
    $remote_servers = $db->getRemoteServers();
    if (empty($remote_servers)) {
        print_failure(get_lang("no_remote_servers_available_please_add_at_least_one"));
        echo "<p><a href='?m=server'>" . get_lang('add_remote_server') . "</a></p>";
        return;
    }
    if ($isAdmin) {
        $available_homes = $db->getAvailableHomesFor($id_type, $assign_id);
    } else {
        $available_homes = $db->getAvailableUserHomesFor($id_type, $assign_id, $_SESSION['user_id']);
    }
    if (!empty($available_homes)) {
        echo "<h2>" . get_lang_f('assign_new_home_to_' . $id_type, $assign_name) . "</h2>";
        echo "<form action='?m=user_games&amp;p=assign' method='post'>";
        echo "<input name='" . $id_type . "_id' value='" . $assign_id . "' type='hidden' />\n";
        echo "<table class='center'><tr><td align='right'><label for='home_id'>" . get_lang('select_home') . ":</label></td>";
        echo '<td align="left"><select id="home_id" name="home_id" onchange="this.form.submit();">';
        echo "<option></option>\n";
        foreach ($available_homes as $home) {
            if (isset($_POST['home_id']) && $_POST['home_id'] == $home['home_id']) {
                $selected = "selected='selected'";
            } else {
                $selected = "";
            }
            echo "<option value='" . $home['home_id'] . "' {$selected} >" . $home['home_name'] . "</option>\n";
        }
        echo "</select></td>\n";
        if (isset($_POST['home_id']) and !empty($_POST['home_id'])) {
            if ($isAdmin) {
                $access_rights = "ufpetc";
            } else {
                $home_info = $db->getUserGameHome($_SESSION['user_id'], $_POST['home_id']);
                $access_rights = $home_info['access_rights'];
            }
            foreach ($selections as $selection => $flag) {
                echo create_selection($selection, $flag, $access_rights);
            }
            echo "<tr><td colspan='2'><input type='submit' name='assign' value='" . get_lang('assign') . "' /></td></tr>";
        }
        echo "</table></form>";
    } else {
        echo "<h2>" . get_lang("no_more_homes_available_that_can_be_assigned_for_this_{$id_type}") . "</h2>";
        //print_lang('you_can_add_a_new_game_server_from');
        //echo "<a href='?m=user_games'>".get_lang('game_servers')."</a>.</p>";
        if ($isAdmin) {
            echo get_lang_f("you_can_add_a_new_game_server_from", "<a href='?m=user_games'>" . get_lang('game_servers') . "</a>") . "</p>";
        }
    }
    // View servers for use if there are any.
    $game_homes = $db->getHomesFor($id_type, $assign_id);
    if (empty($game_homes)) {
        echo "<h3>" . get_lang_f("no_homes_assigned_to_" . $id_type, $assign_name) . "</h3>";
    } else {
        echo "<h2>" . get_lang('assigned_homes') . "</h2>";
        echo '<table class="center">';
        echo "<tr><th>" . get_lang('home_id') . "</th><th>" . get_lang('game_server') . "</th>\n            <th>" . get_lang('game_type') . "</th>\n            <th align='center'>" . get_lang('game_home') . "</th>\n            <th>" . get_lang('game_home_name') . "</th><th>" . get_lang('access_rights') . "</th>\n            <th>" . get_lang('actions') . "</th></tr>";
        foreach ($game_homes as $row) {
            echo "<tr><td>{$row['home_id']}</td>\n                <td>" . $row['agent_ip'] . " (Agent)</td>\n                <td>{$row['game_name']}</td>\n                <td>{$row['home_path']}</td>\n                <td>{$row['home_name']}</td>\n                <td>";
            echo empty($row['access_rights']) ? "-" : $row['access_rights'];
            echo "</td>\n                <td>\n                <form action='?m=user_games&amp;p=assign' method='post'>\n                <input name='" . $id_type . "_id' value='{$assign_id}' type='hidden' />\n                <input name='home_id' value='" . $row['home_id'] . "' type='hidden' />\n                <input type='submit' name='unassign' value='" . get_lang('unassign') . "' /></form></td>\n                </tr>";
        }
        echo "</table>";
    }
    if ($id_type === "group") {
        echo create_back_button('user_admin', 'show_groups');
    } else {
        echo create_back_button('user_admin');
    }
}
function exec_ogp_module()
{
    global $db;
    global $view;
    $home_cfg_id = isset($_REQUEST['home_cfg_id']) ? $_REQUEST['home_cfg_id'] : "";
    $home_id = isset($_REQUEST['home_id']) ? $_REQUEST['home_id'] : "";
    $addon_id = isset($_REQUEST['addon_id']) ? $_REQUEST['addon_id'] : "";
    $isAdmin = $db->isAdmin($_SESSION['user_id']);
    if ($isAdmin) {
        $home_info = $db->getGameHome($home_id);
    } else {
        $home_info = $db->getUserGameHome($_SESSION['user_id'], $home_id);
    }
    if ($home_info === FALSE) {
        print_failure(get_lang('no_rights'));
        echo create_back_button("addonsmanager", "user_addons");
        return;
    }
    $server_xml = read_server_config(SERVER_CONFIG_LOCATION . "/" . $home_info['home_cfg_file']);
    $state = isset($_REQUEST['state']) ? $_REQUEST['state'] : "";
    $pid = isset($_REQUEST['pid']) ? $_REQUEST['pid'] : -1;
    if (!empty($state)) {
        $remote = new OGPRemoteLibrary($home_info['agent_ip'], $home_info['agent_port'], $home_info['encryption_key']);
        $addons_rows = $db->resultQuery("SELECT url, path, post_script FROM OGP_DB_PREFIXaddons WHERE addon_id=" . $addon_id);
        $addon_info = $addons_rows[0];
        $url = $addon_info['url'];
        $filename = basename($url);
        #### This makes replacements to the bash script:
        if (isset($addon_info['post_script']) and !empty($addon_info['post_script']) and $addon_info['post_script'] != "") {
            $check_passed = FALSE;
            $address_at_post = $_POST['ip'] . ":" . $_POST['port'];
            $ip_ports = $db->getHomeIpPorts($home_info["home_id"]);
            foreach ($ip_ports as $ip_port) {
            }
            $address_owned = $ip_port['ip'] . ":" . $ip_port['port'];
            if ($address_owned == $address_at_post) {
                $check_passed = TRUE;
                break;
            }
            $ip = $ip_port['ip'];
            $port = $ip_port['port'];
            $home_info["ip"] = $check_passed ? $_POST['ip'] : $ip;
            $home_info["port"] = $check_passed ? $_POST['port'] : $port;
            if (isset($server_xml->gameq_query_name)) {
                $home_info["query_port"] = get_query_port($server_xml, $home_info['port']);
            } elseif (isset($server_xml->lgsl_query_name)) {
                $get_q_and_s = lgsl_port_conversion((string) $server_xml->lgsl_query_name, $home_info['port'], "", "");
                $home_info["query_port"] = $get_q_and_s['1'];
            }
            $home_info["incremental"] = $db->incrementalNumByHomeId($home_info["home_id"], $home_info["mod_cfg_id"], $home_info["remote_server_id"]);
            $post_script = preg_replace("/\\%home_path\\%/i", $home_info["home_path"], $addon_info['post_script']);
            $post_script = preg_replace("/\\%home_name\\%/i", $home_info["home_name"], $post_script);
            $post_script = preg_replace("/\\%control_password\\%/i", $home_info["control_password"], $post_script);
            $post_script = preg_replace("/\\%max_players\\%/i", $home_info["max_players"], $post_script);
            $post_script = preg_replace("/\\%ip\\%/i", $home_info["ip"], $post_script);
            $post_script = preg_replace("/\\%port\\%/i", $home_info["port"], $post_script);
            $post_script = preg_replace("/\\%query_port\\%/i", $home_info["query_port"], $post_script);
            $post_script = preg_replace("/\\%incremental\\%/i", $home_info["incremental"], $post_script);
        } else {
            $post_script = "";
        }
        #### end of replacememnts
        if ($state == "start" and $addon_id != "") {
            $pid = $remote->start_file_download($addon_info['url'], $home_info['home_path'] . "/" . $addon_info['path'], $filename, "uncompress", $post_script);
        }
        $headers = get_headers($url, 1);
        $download_available = !$headers ? FALSE : TRUE;
        // Check if any error occured
        if ($download_available) {
            $bytes = is_array($headers['Content-Length']) ? $headers['Content-Length'][1] : $headers['Content-Length'];
            // Display the File Size
            $totalsize = $bytes / 1024;
            clearstatcache();
        }
        $kbytes = $remote->rsync_progress($home_info['home_path'] . "/" . $addon_info['path'] . "/" . $filename);
        list($totalsize, $mbytes, $pct) = explode(";", do_progress($kbytes, $totalsize));
        $totalmbytes = round($totalsize / 1024, 2);
        $pct = $pct > 100 ? 100 : $pct;
        echo "<h2>" . $home_info['home_name'] . "</h2>";
        echo '<div class="dragbox bloc rounded" style="background-color:#dce9f2;" >
				<h4>' . get_lang('install') . " " . $filename . " {$mbytes}MB/{$totalmbytes}MB</h4>\n\t\t\t  <div style='background-color:#dce9f2;' >\n\t\t\t  ";
        $bar = '';
        for ($i = 1; $i <= $pct; $i++) {
            $bar .= '<img style="width:0.92%;vertical-align:middle;" src="images/progressBar.png">';
        }
        echo "<center>{$bar} <b style='vertical-align:top;display:inline;font-size:1.2em;color:red;' >{$pct}%</b></center>\n\t\t\t\t</div>\n\t\t\t  </div>";
        if (($pct == "100" or !$download_available) and $post_script != "") {
            $log_retval = $remote->get_log("post_script", $pid, clean_path($home_info['home_path'] . "/" . $server_xml->exe_location), $script_log);
            if ($log_retval == 0) {
                print_failure(get_lang('agent_offline'));
            } elseif ($log_retval == 1 || $log_retval == 2) {
                echo "<pre class='log'>" . $script_log . "</pre>";
            } elseif ($remote->is_screen_running("post_script", $pid) == 1) {
                print_failure(get_lang_f('unable_to_get_log', $log_retval));
            }
        }
        if ($pct == "100" or !$download_available or $download_available and $pct == "-" and $pid > 0) {
            if (!$download_available) {
                print_failure(get_lang('failed_to_start_file_download'));
            } elseif ($remote->is_file_download_in_progress($pid) === 1) {
                print_success(get_lang_f('wait_while_decompressing', $filename));
                echo "<p><a href=\"?m=addonsmanager&amp;p=addons&amp;state=refresh&amp;home_id=" . $home_id . "&addon_id={$addon_id}&amp;pid={$pid}\">" . get_lang('refresh') . "</a></p>";
                $view->refresh("?m=addonsmanager&amp;p=addons&amp;state=refresh&amp;home_id=" . $home_id . "&addon_id={$addon_id}&amp;pid={$pid}", 5);
            } elseif ($remote->is_file_download_in_progress($pid) === 0 and $remote->is_screen_running("post_script", $pid) === 0) {
                print_success(get_lang('addon_installed_successfully'));
                $view->refresh("?m=addonsmanager&amp;p=user_addons&amp;home_id=" . $home_id, 10);
                return;
            }
        } else {
            echo "<p><a href=\"?m=addonsmanager&amp;p=addons&amp;state=refresh&amp;home_id=" . $home_id . "&addon_id={$addon_id}&amp;pid={$pid}\">" . get_lang('refresh') . "</a></p>";
            $view->refresh("?m=addonsmanager&amp;p=addons&amp;state=refresh&amp;home_id=" . $home_id . "&addon_id={$addon_id}&amp;pid={$pid}", 5);
        }
    } elseif (!empty($_GET['addon_type'])) {
        ?>
			<h2><?php 
        echo $home_info['home_name'] . "&nbsp;" . get_lang($_GET['addon_type']);
        ?>
</h2>
            <table class='center'>
			<form action='?m=addonsmanager&amp;p=addons<?php 
        echo "&amp;ip=" . $_GET['ip'] . "&amp;port=" . $_GET['port'];
        ?>
' method='post'>
            <input type='hidden' name='home_id' value='<?php 
        echo "{$home_id}";
        ?>
' />
            <input type='hidden' name='state' value='start' />
            <tr><td align='right'><?php 
        print_lang('game_name');
        ?>
: </td><td align='left'><?php 
        echo "{$home_info['game_name']}";
        ?>
</td></tr>
            <tr><td align='right'><?php 
        print_lang('directory');
        ?>
: </td><td align='left'><?php 
        echo "{$home_info['home_path']}";
        ?>
</td></tr>
            <tr><td align='right'><?php 
        print_lang('remote_server');
        ?>
: </td>
            <td align='left'><?php 
        echo "{$home_info['remote_server_name']} ({$home_info['agent_ip']}:{$home_info['agent_port']})";
        ?>
</td></tr>
            <tr><td align='right'><?php 
        print_lang('select_addon');
        ?>
: </td>
            <td align='left'>
			<select name="addon_id">
			<?php 
        $addons = $db->resultQuery("SELECT addon_id, name FROM OGP_DB_PREFIXaddons WHERE addon_type='" . $_GET['addon_type'] . "' AND home_cfg_id=" . $home_cfg_id);
        foreach ($addons as $addon) {
            ?>
			<option value="<?php 
            echo $addon['addon_id'];
            ?>
"><?php 
            echo $addon['name'];
            ?>
</option>
			<?php 
        }
        ?>
			</select>
			</td></tr>
            <tr><td colspan='2' class='info'>&nbsp;</td></tr>
            <td align='left'>
			&nbsp;
			</td></tr><tr><td align="right">
            <input type="submit" name="update" value="<?php 
        print_lang('install');
        ?>
" />
            </form></td><td>
			<form action="" method="get">
			<input type="hidden" name="m" value="addonsmanager" />
            <input type="hidden" name="p" value="user_addons" />
			<input type="hidden" name="home_id" value="<?php 
        echo "{$home_id}";
        ?>
" />
			<input type="submit" value="<?php 
        print_lang('back');
        ?>
" />
			</form>
			</td></tr>
			</table>
<?php 
    }
    return;
}
function exec_ogp_module()
{
    $home_id = $_GET['home_id'];
    $mod_id = $_GET['mod_id'];
    global $db;
    $home_info = $db->getGameHome($home_id);
    if (array_key_exists($mod_id, $home_info['mods'])) {
        echo "<h2>" . get_lang('cmds_for') . " \"" . $home_info['home_name'] . "\" [Mod:" . $home_info['mods'][$mod_id]['mod_name'] . "]</h2>";
        include 'includes/lib_remote.php';
        $remote = new OGPRemoteLibrary($home_info['agent_ip'], $home_info['agent_port'], $home_info['encryption_key']);
        $mod_cfg_id = $home_info['mod_cfg_id'];
        if (isset($_POST['edit_preinstall_cmds'])) {
            $precmd = addslashes($_POST['edit_preinstall_cmds']);
            if (isset($_POST['save_as_default'])) {
                $game_mod_query = "UPDATE OGP_DB_PREFIXconfig_mods SET def_precmd='{$precmd}' WHERE mod_cfg_id='{$mod_cfg_id}'";
                $db->query($game_mod_query);
            } else {
                $game_mod_query = "UPDATE OGP_DB_PREFIXgame_mods SET precmd='{$precmd}' WHERE mod_id='{$mod_id}'";
                $db->query($game_mod_query);
            }
            unset($precmd);
        }
        $game_mod_precmd = $db->resultQuery("SELECT DISTINCT precmd FROM OGP_DB_PREFIXgame_mods WHERE mod_id='{$mod_id}'");
        if ($game_mod_precmd[0]['precmd'] === NULL or empty($game_mod_precmd[0]['precmd'])) {
            $config_mod_precmd = $db->resultQuery("SELECT DISTINCT def_precmd FROM OGP_DB_PREFIXconfig_mods WHERE mod_cfg_id='{$mod_cfg_id}'");
            if ($config_mod_precmd[0]['def_precmd'] === NULL or empty($config_mod_precmd[0]['def_precmd'])) {
                $precmd = "[" . get_lang('empty') . "]";
            } else {
                $precmd = $config_mod_precmd[0]['def_precmd'];
            }
        } else {
            $precmd = $game_mod_precmd[0]['precmd'];
        }
        if (isset($_POST['edit_postinstall_cmds'])) {
            $postcmd = addslashes($_POST['edit_postinstall_cmds']);
            if (isset($_POST['save_as_default'])) {
                $game_mod_query = "UPDATE OGP_DB_PREFIXconfig_mods SET def_postcmd='{$postcmd}' WHERE mod_cfg_id='{$mod_cfg_id}'";
                $db->query($game_mod_query);
            } else {
                $game_mod_query = "UPDATE OGP_DB_PREFIXgame_mods SET postcmd='{$postcmd}' WHERE mod_id='{$mod_id}'";
                $db->query($game_mod_query);
            }
            unset($postcmd);
        }
        $game_mod_postcmd = $db->resultQuery("SELECT DISTINCT postcmd FROM OGP_DB_PREFIXgame_mods WHERE mod_id='{$mod_id}'");
        if ($game_mod_postcmd[0]['postcmd'] === NULL or empty($game_mod_postcmd[0]['postcmd'])) {
            $config_mod_postcmd = $db->resultQuery("SELECT DISTINCT def_postcmd FROM OGP_DB_PREFIXconfig_mods WHERE mod_cfg_id='{$mod_cfg_id}'");
            if ($config_mod_postcmd[0]['def_postcmd'] === NULL or empty($config_mod_postcmd[0]['def_postcmd'])) {
                $postcmd = "[" . get_lang('empty') . "]";
            } else {
                $postcmd = $config_mod_postcmd[0]['def_postcmd'];
            }
        } else {
            $postcmd = $game_mod_postcmd[0]['postcmd'];
        }
        ?>
	  <h2><?php 
        print_lang('preinstall_cmds');
        ?>
</h2>
	  <table class="center">
		 <tr>
		  <td>
		   <form method="POST">
		   <textarea name="edit_preinstall_cmds" style="width:80%;height:200px;"  ><?php 
        echo $precmd;
        ?>
</textarea>
		  </td>
		 </tr>
		 <tr>
		  <td>
		   <button><?php 
        print_lang('edit_preinstall_cmds');
        ?>
</button>
			<input type="checkbox" name="save_as_default" value="true"/><?php 
        print_lang('save_as_default_for_this_mod');
        ?>
		   </form>
		  </td>
		 </tr>
		</table>
		<h2><?php 
        print_lang('postinstall_cmds');
        ?>
</h2>
		<table class="center">
		 <tr>
		  <td>
		   <form method="POST">
		   <textarea name="edit_postinstall_cmds" style="width:80%;height:200px;" ><?php 
        echo $postcmd;
        ?>
</textarea>
		  </td>
		 </tr>
		 <tr>
		  <td>
		   <button><?php 
        print_lang('edit_postinstall_cmds');
        ?>
</button>
			<input type="checkbox" name="save_as_default" value="true"/><?php 
        print_lang('save_as_default_for_this_mod');
        ?>
		   </form>
		  </td>
		 </tr>
		</table><?php 
    }
    echo create_back_button('user_games', 'edit&amp;home_id=' . $home_id);
}
Пример #6
0
function exec_ogp_module()
{
    global $db;
    $home_id = $_REQUEST['home_id'];
    $server_row = $db->getGameHomeWithoutMods($home_id);
    if (empty($server_row)) {
        print_failure(get_lang('invalid_home_id'));
        return;
    }
    echo "<h2>" . get_lang_f('cloning_home', $server_row['home_name']) . "</h2>";
    echo create_back_button('user_games');
    include 'includes/lib_remote.php';
    $remote = new OGPRemoteLibrary($server_row['agent_ip'], $server_row['agent_port'], $server_row['encryption_key']);
    if (isset($_REQUEST['clone_home'])) {
        $server_name = $_POST['new_home_name'];
        $user_group = $_POST['user_group'];
        $clone_home_id = $db->addGameHome($server_row['remote_server_id'], $server_row['user_id_main'], $server_row['home_cfg_id'], "/home/" . $server_row['ogp_user'] . "/OGP_User_Files/", $server_name, '', genRandomString(8));
        $server_path = "/home/" . $server_row['ogp_user'] . "/OGP_User_Files/" . $clone_home_id;
        if ($clone_home_id === FALSE) {
            print_failure(get_lang_f('cloning_of_home_failed', $home_id));
            return;
        }
        if (isset($_REQUEST['clone_mods'])) {
            $enabled_mods = $db->getHomeMods($home_id);
            if (empty($enabled_mods)) {
                print_failure(get_lang('note') . ": " . get_lang('no_mods_to_clone'));
            } else {
                foreach ($enabled_mods as $enabled_rows) {
                    if ($db->addModToGameHome($clone_home_id, $enabled_rows['mod_cfg_id']) === FALSE) {
                        print_failure(get_lang_f('failed_to_add_mod', $enabled_rows['mod_cfg'], $clone_home_id));
                        return;
                    }
                    if ($db->updateGameModParams($enabled_rows['max_players'], $enabled_rows['extra_params'], $enabled_rows['cpu_affinity'], $enabled_rows['nice'], $clone_home_id, $enabled_rows['mod_cfg_id']) === FALSE) {
                        print_failure(get_lang_f('failed_to_update_mod_settings', $clone_home_id));
                        return;
                    }
                }
                print_success(get_lang_f('successfully_cloned_mods', $clone_home_id));
            }
        }
        print_success(get_lang('successfully_copied_home_database'));
        # do the remote copy call here
        echo "<p>" . get_lang_f('copying_home_remotely', $server_row['home_path'], $server_path) . "</p>";
        $db->logger(get_lang_f('copying_home_remotely', $server_row['home_path'], $server_path));
        $clone_rc = $remote->clone_home($server_row['home_path'], $server_path, $user_group);
        if ($clone_rc == -1) {
            print_success(get_lang('game_server_copy_is_running'));
            ?>
			<div class="html5-progress-bar">
			<progress id="progressbar" value="0" max="100"></progress>
			<span class="progress-value">0%</span>
			</div>
			<script type="text/javascript" src="js/jquery-1.7.1.min.js"></script>
			<script type="text/javascript">
			$(document).ready(function() 
			{
				$.get( "home.php?m=user_games&type=cleared&p=get_size&home_id=<?php 
            echo $home_id;
            ?>
&bytes", function( orig_data ) {
					var orig_size = parseInt(orig_data,10);
					var refreshId = setInterval(function() {
						$.get( "home.php?m=user_games&type=cleared&p=get_size&home_id=<?php 
            echo $clone_home_id;
            ?>
&bytes", function( dest_data ) {
							var dest_size = parseInt(dest_data,10);
							var progress = parseInt(dest_size * 100 / orig_size);
							$('#progressbar').val(progress);
							$('.progress-value').html(progress + '%');
							if(progress == 100)
							{
								clearInterval(refreshId);
							}
						});
					}, 2000);
				});
			});
			</script>
			<?php 
        } elseif ($clone_rc == 1) {
            print_success(get_lang('game_server_copy_was_successful'));
        } else {
            print_failure(get_lang_f('game_server_copy_failed_with_return_code', $clone_rc));
        }
        echo "<br><a href='home.php?m=user_games'>&lt;&lt; " . get_lang('back_to_game_servers') . "</a>";
        return;
    }
    // Form to edit game path.
    $avail_mods = $db->getHomeMods($home_id);
    $read_status = $remote->remote_readfile('/etc/passwd', $passwd_array);
    if ($read_status === -1) {
        print_failure(get_lang('agent_offline'));
        return;
    } else {
        if ($read_status == 1) {
            $passwd_array = preg_split("/\n/", $passwd_array);
        }
    }
    require_once "includes/form_table_class.php";
    $ft = new FormTable();
    $ft->start_form('?m=user_games&amp;p=clone');
    $ft->add_field_hidden('home_id', $home_id);
    $ft->start_table();
    $ft->add_custom_field('agent_ip', $server_row['agent_ip']);
    $ft->add_custom_field('current_home_path', $server_row['home_path']);
    $ft->add_field('string', 'new_home_name', $server_row['home_name']);
    echo "<tr><td class='right'>" . get_lang('clone_mods') . ":</td>\n\t\t<td class='left'><input type='checkbox' name='clone_mods' value='y' /></td></tr>";
    echo "<input name='user_group' type='hidden' value='" . get_user_uid_gid_from_passwd($passwd_array, $server_row['ogp_user']) . "' /></tr>";
    echo "</table>";
    $ft->add_button('submit', 'clone_home', get_lang('clone_home'));
    echo "<p class='info'>" . get_lang('the_name_of_the_server_to_help_users_to_identify_it') . "</p>";
    echo "</form>";
    echo "<h3>" . get_lang('ips_and_ports_used_in_this_home') . "</h3>";
    echo "<p>" . get_lang('note_ips_and_ports_are_not_cloned') . "</p>";
    $assigned = $db->getHomeIpPorts($home_id);
    if (!empty($assigned)) {
        foreach ($assigned as $assigned_rows) {
            echo "<p>" . $assigned_rows['ip'] . ":" . $assigned_rows['port'] . "</p>\n";
        }
    }
    $enabled_mods = $db->getHomeMods($home_id);
    echo "<h3>" . get_lang('mods_and_settings_for_this_game_server') . "</h3>";
    if (empty($enabled_mods)) {
        print_failure(get_lang('note') . ": " . get_lang('note_no_mods'));
        return;
    }
    echo "<table class='center'>\n";
    echo "<tr><td>" . get_lang('mod_name') . "</td><td>" . get_lang('max_players') . "</td><td>" . get_lang('extra_cmd_line_args') . "</td><td>" . get_lang('cpu_affinity') . "</td><td>" . get_lang('nice_level') . "</td></tr>\n";
    foreach ($enabled_mods as $enabled_rows) {
        echo "<tr>";
        echo "<td>" . $enabled_rows['mod_name'] . "</td>";
        echo "<td>" . $enabled_rows['max_players'] . "</td>";
        echo "<td>" . $enabled_rows['extra_params'] . "</td>";
        echo "<td>" . $enabled_rows['cpu_affinity'] . "</td>";
        echo "<td>" . $enabled_rows['nice'] . "</td></tr>\n";
    }
    echo "</table>\n";
}
function exec_ogp_module()
{
    global $view, $db;
    $ip = $_REQUEST['ip'];
    $port = $_REQUEST['port'];
    $home_id = $_REQUEST['home_id'];
    $user_id = $_SESSION['user_id'];
    $home_id = $_REQUEST['home_id'];
    $isAdmin = $db->isAdmin($_SESSION['user_id']);
    if ($isAdmin) {
        $home_info = $db->getGameHome($home_id);
    } else {
        $home_info = $db->getUserGameHome($_SESSION['user_id'], $home_id);
    }
    require_once 'includes/lib_remote.php';
    $remote = new OGPRemoteLibrary($home_info['agent_ip'], $home_info['agent_port'], $home_info['encryption_key']);
    $mod_id = $_REQUEST['mod_id'];
    if ($home_info === FALSE) {
        print_failure(get_lang('no_rights_to_stop_server'));
        return;
    }
    echo "<h2>";
    echo empty($home_info['home_name']) ? get_lang('not_available') : $home_info['home_name'];
    echo "</h2>";
    $server_xml = read_server_config(SERVER_CONFIG_LOCATION . "/" . $home_info['home_cfg_file']);
    if (!$server_xml) {
        echo create_back_button("gamemanager", "game_monitor");
        return;
    }
    $rserver = $db->getRemoteServerById($home_info['remote_server_id']);
    if (empty($rserver)) {
        print_failure("" . get_lang('not_found_server') . " " . $home_info['remote_server_id'] . ".");
    } else {
        if (isset($_REQUEST['refresh'])) {
            if (isset($server_xml->console_log)) {
                $log_retval = $remote->remote_readfile($home_info['home_path'] . '/' . $server_xml->console_log, $home_log);
            } else {
                $log_retval = $remote->get_log(OGP_SCREEN_TYPE_HOME, $home_info['home_id'], clean_path($home_info['home_path'] . "/" . $server_xml->exe_location), $home_log);
            }
            function getLastLines($string, $n = 1)
            {
                $lines = explode("\n", $string);
                $lines = array_slice($lines, -$n);
                return implode("\n", $lines);
            }
            $home_log = getLastLines($home_log, 40);
            if ($log_retval > 0) {
                if ($log_retval == 2) {
                    print_failure(get_lang('server_not_running_log_found'));
                }
                echo "<pre style='background:black;color:white;'>" . $home_log . "</pre>";
                if ($log_retval == 2) {
                    return;
                }
            } else {
                print_failure(get_lang_f('unable_to_get_log', $log_retval));
            }
            // If game is not supported by lgsl we skip the lgsl checks and
            // assume successfull start.
            if ($home_info['use_nat'] == 1) {
                $query_ip = $home_info['agent_ip'];
            } else {
                $query_ip = $ip;
            }
            $running = TRUE;
            if ($server_xml->lgsl_query_name) {
                require 'protocol/lgsl/lgsl_protocol.php';
                $get_q_and_s = lgsl_port_conversion((string) $server_xml->lgsl_query_name, $port, "", "");
                //Connection port
                $c_port = $get_q_and_s['0'];
                //query port
                $q_port = $get_q_and_s['1'];
                //software port
                $s_port = $get_q_and_s['2'];
                $data = lgsl_query_live((string) $server_xml->lgsl_query_name, $query_ip, $c_port, $q_port, $s_port, "sa");
                if ($data['b']['status'] == "0") {
                    $running = FALSE;
                }
            } elseif ($server_xml->gameq_query_name) {
                require 'protocol/GameQ/GameQ.php';
                $query_port = get_query_port($server_xml, $port);
                $servers = array(array('id' => 'server', 'type' => (string) $server_xml->gameq_query_name, 'host' => $query_ip . ":" . $query_port));
                $gq = new GameQ();
                $gq->addServers($servers);
                $gq->setOption('timeout', 4);
                $gq->setOption('debug', FALSE);
                $gq->setFilter('normalise');
                $game = $gq->requestData();
                if (!$game['server']['gq_online']) {
                    $running = FALSE;
                }
            }
            if (!$running) {
                if (!isset($_GET['retry'])) {
                    $retry = 0;
                } else {
                    $retry = $_GET['retry'];
                }
                if ($retry >= 5) {
                    echo "<p>" . get_lang('server_running_not_responding') . "\n\t\t\t\t\t<a href=?m=gamemanager&amp;p=stop&amp;home_id=" . $home_info['home_id'] . "&amp;ip=" . $ip . "&amp;port=" . $port . ">" . get_lang('already_running_stop_server') . ".</a></p>";
                    echo "<table class='center'><tr><td><a href='?m=gamemanager&amp;p=game_monitor&amp;home_id-mod_id-ip-port={$home_id}-{$mod_id}-{$ip}-{$port}'><< " . get_lang('back') . "</a></td></tr></table>";
                }
                echo "</b>Retry #" . $retry . ".</b>";
                $retry++;
                print "<p class='note'>" . get_lang('starting_server') . "</p>";
                $view->refresh("?m=gamemanager&amp;p=start&amp;refresh&amp;ip={$ip}&amp;port={$port}&amp;home_id={$home_id}&amp;mod_id={$mod_id}&amp;retry=" . $retry, 3);
                return;
            }
            print_success(get_lang_f('server_restarted', $home_info['home_name']));
            $ip_id = $db->getIpIdByIp($ip);
            $db->delServerStatusCache($ip_id, $port);
            $view->refresh("?m=gamemanager&amp;p=game_monitor&amp;home_id-mod_id-ip-port=" . $home_info['home_id'] . "-" . $home_info['mod_id'] . "-" . $_REQUEST['ip'] . "-" . $_REQUEST['port']);
            echo "<p>" . get_lang('follow_server_status') . " <a href='?m=gamemanager&amp;p=game_monitor&amp;home_id-mod_id-ip-port=" . $home_info['home_id'] . "-" . $home_info['mod_id'] . "-" . $_REQUEST['ip'] . "-" . $_REQUEST['port'] . "'>" . get_lang('game_monitor') . "</a> " . get_lang('page') . ".</p>";
            return;
        } else {
            if ($server_xml->replace_texts) {
                $server_home = $home_info;
                if (isset($server_xml->lgsl_query_name)) {
                    require_once 'protocol/lgsl/lgsl_protocol.php';
                }
                require_once "modules/gamemanager/cfg_text_replace.php";
            }
            $control_type = isset($server_xml->control_protocol_type) ? $server_xml->control_protocol_type : "";
            $run_dir = isset($server_xml->exe_location) ? $server_xml->exe_location : "";
            $last_param = json_decode($home_info['last_param'], True);
            $cli_param_data['GAME_TYPE'] = $home_info['mods'][$mod_id]['mod_key'];
            $cli_param_data['IP'] = $ip;
            $cli_param_data['PORT'] = $port;
            $cli_param_data['HOSTNAME'] = $home_info['home_name'];
            $cli_param_data['PID_FILE'] = "ogp_game_startup.pid";
            $os = $remote->what_os();
            // Linux
            if (preg_match("/Linux/", $os)) {
                $cli_param_data['BASE_PATH'] = $home_info['home_path'];
                $cli_param_data['HOME_PATH'] = $home_info['home_path'];
                $cli_param_data['SAVE_PATH'] = $home_info['home_path'];
                $cli_param_data['OUTPUT_PATH'] = $home_info['home_path'];
                $cli_param_data['USER_PATH'] = $home_info['home_path'];
            } elseif (preg_match("/CYGWIN/", $os)) {
                $home_path_win = $remote->exec("cygpath -w " . $home_info['home_path']);
                $home_path_win = str_replace("\\", "\\\\", $home_path_win);
                $home_path_win = trim($home_path_win);
                $cli_param_data['BASE_PATH'] = $home_path_win;
                $cli_param_data['HOME_PATH'] = $home_path_win;
                $cli_param_data['SAVE_PATH'] = $home_path_win;
                $cli_param_data['OUTPUT_PATH'] = $home_path_win;
                $cli_param_data['USER_PATH'] = $home_path_win;
            }
            if ($server_xml->protocol == "gameq") {
                $cli_param_data['QUERY_PORT'] = get_query_port($server_xml, $port);
            } elseif ($server_xml->protocol == "lgsl") {
                require 'protocol/lgsl/lgsl_protocol.php';
                $get_ports = lgsl_port_conversion((string) $server_xml->lgsl_query_name, $port, "", "");
                $cli_param_data['QUERY_PORT'] = $get_ports['1'];
            } elseif ($server_xml->protocol == "teamspeak3") {
                $cli_param_data['QUERY_PORT'] = "10011";
            }
            $cli_param_data['MAP'] = empty($last_param['map']) ? "" : $last_param['map'];
            $cli_param_data['PLAYERS'] = empty($last_param['players']) ? $home_info['mods'][$mod_id]['max_players'] : $last_param['players'];
            $start_cmd = "";
            // If the template is empty then these are not needed.
            if ($server_xml->cli_template) {
                $start_cmd = $server_xml->cli_template;
                if ($server_xml->cli_params) {
                    foreach ($server_xml->cli_params->cli_param as $cli) {
                        // If s is found the param is seperated with space
                        $add_space = preg_match("/s/", $cli['options']) > 0 ? " " : "";
                        $cli_value = $cli_param_data[(string) $cli['id']];
                        // If q is found we add quotes around the value.
                        if (preg_match("/q/", $cli['options']) > 0) {
                            $cli_value = "\"" . $cli_value . "\"";
                        }
                        $start_cmd = preg_replace("/%" . $cli['id'] . "%/", $cli['cli_string'] . $add_space . $cli_value, $start_cmd);
                    }
                }
            }
            if ($isAdmin) {
                $home_info['access_rights'] = "ufpet";
            }
            $param_access_enabled = preg_match("/p/", $home_info['access_rights']) > 0 ? TRUE : FALSE;
            if ($param_access_enabled && isset($last_param)) {
                foreach ($server_xml->server_params->param as $param) {
                    foreach ($last_param as $paramKey => $paramValue) {
                        if (!isset($paramValue)) {
                            $paramValue = (string) $param->default;
                        }
                        if ($param['key'] == $paramKey) {
                            if (0 == strlen($paramValue)) {
                                continue;
                            }
                            if ($param['key'] == $paramValue) {
                                // it's a checkbox
                                $new_param = $paramKey;
                            } elseif ($param->option == "ns" or $param->options == "ns") {
                                $new_param = $paramKey . $paramValue;
                            } else {
                                $new_param = $paramKey . ' "' . $paramValue . '"';
                            }
                            if ($param['id'] == NULL || $param['id'] == "") {
                                $start_cmd .= ' ' . $new_param;
                            } else {
                                $start_cmd = preg_replace("/%" . $param['id'] . "%/", $new_param, $start_cmd);
                            }
                        }
                    }
                    $start_cmd = preg_replace("/%" . $param['id'] . "%/", '', $start_cmd);
                }
            }
            $extra_param_access_enabled = preg_match("/e/", $home_info['access_rights']) > 0 ? TRUE : FALSE;
            if (array_key_exists('extra', $last_param) && $extra_param_access_enabled) {
                $extra_default = $last_param['extra'];
            } else {
                $extra_default = $home_info['mods'][$mod_id]['extra_params'];
            }
            $start_cmd .= " " . $extra_default;
            $remote_retval = $remote->remote_restart_server($home_info['home_id'], $ip, $port, $server_xml->control_protocol, $home_info['control_password'], $control_type, $home_info['home_path'], $server_xml->server_exec_name, $run_dir, $start_cmd, $home_info['cpu_affinity'], $home_info['nice']);
            $db->logger(get_lang_f('server_restarted', $home_info['home_name']) . "({$ip}:{$port})");
            if ($remote_retval === 1) {
                print "<p class='note'>" . get_lang('restarting_server') . "</p>";
                $view->refresh("?m=gamemanager&amp;p=restart&amp;refresh&amp;ip={$ip}&amp;port={$port}&amp;home_id={$home_id}&amp;mod_id={$mod_id}", 3);
                return;
            } else {
                if ($remote_retval === -1) {
                    print_failure(get_lang('server_cant_start'));
                    $view->refresh("?m=gamemanager&amp;p=game_monitor&amp;home_id-mod_id-ip-port=" . $home_info['home_id'] . "-" . $home_info['mod_id'] . "-" . $ip . "-" . $port, 3);
                } else {
                    if ($remote_retval === -2) {
                        print_failure(get_lang('server_cant_stop'));
                        $view->refresh("?m=gamemanager&amp;p=game_monitor&amp;home_id-mod_id-ip-port=" . $home_info['home_id'] . "-" . $home_info['mod_id'] . "-" . $ip . "-" . $port, 3);
                    } else {
                        $screen_running = $remote->is_screen_running(OGP_SCREEN_TYPE_HOME, $home_info['home_id']);
                        if ($screen_running == 1) {
                            print "<p class='note'>" . get_lang('restarting_server') . "</p>";
                            $view->refresh("?m=gamemanager&amp;p=restart&amp;refresh&amp;ip={$ip}&amp;port={$port}&amp;home_id={$home_id}&amp;mod_id={$mod_id}", 3);
                            return;
                        } else {
                            print_failure("" . get_lang('error_occured_remote_host') . ".{$remote_retval}");
                            $view->refresh("?m=gamemanager&amp;p=game_monitor&amp;home_id-mod_id-ip-port=" . $home_info['home_id'] . "-" . $home_info['mod_id'] . "-" . $ip . "-" . $port, 3);
                        }
                    }
                }
            }
        }
    }
}
function exec_ogp_module()
{
    //update_local_copies(); #Disabled until the rsync_sites.list file from master servers is corrected.
    global $db, $view, $settings;
    if (isset($_REQUEST['url'])) {
        $url = $_REQUEST['url'];
    } else {
        $url = "";
    }
    $home_id = isset($_REQUEST['home_id']) ? $_REQUEST['home_id'] : "";
    $mod_id = isset($_REQUEST['mod_id']) ? $_REQUEST['mod_id'] : "";
    $state = isset($_POST['state']) ? $_POST['state'] : "";
    $update = isset($_GET['update']) ? $_GET['update'] : "";
    $isAdmin = $db->isAdmin($_SESSION['user_id']);
    if ($isAdmin) {
        $home_info = $db->getGameHome($home_id);
    } else {
        $home_info = $db->getUserGameHome($_SESSION['user_id'], $home_id);
    }
    if ($home_info === FALSE || preg_match("/u/", $home_info['access_rights']) != 1) {
        print_failure(get_lang('no_rights'));
        echo create_back_button("gamemanager", "game_monitor");
        return;
    }
    $remote = new OGPRemoteLibrary($home_info['agent_ip'], $home_info['agent_port'], $home_info['encryption_key']);
    $server_xml = read_server_config(SERVER_CONFIG_LOCATION . "/" . $home_info['home_cfg_file']);
    if (isset($server_xml->lgsl_query_name)) {
        $lgslname = $server_xml->lgsl_query_name;
        if ($lgslname == "quake3") {
            if ($server_xml->game_name == "Quake 3") {
                $lgslname = "q3";
            }
        }
    } elseif (isset($server_xml->gameq_query_name)) {
        $lgslname = $server_xml->gameq_query_name;
        if ($lgslname == "minecraft") {
            if ($server_xml->game_name == "Minecraft Tekkit") {
                $lgslname = "tekkit";
            } elseif ($server_xml->game_name == "Minecraft Bukkit") {
                $lgslname = "bukkit";
            }
        }
    } elseif (isset($server_xml->protocol)) {
        $lgslname = $server_xml->protocol;
    } else {
        $lgslname = $server_xml->mods->mod['key'];
    }
    if (preg_match("/win32/", $server_xml->game_key) or preg_match("/win64/", $server_xml->game_key)) {
        $os = "windows";
    } elseif (preg_match("/linux/", $server_xml->game_key)) {
        $os = "linux";
    }
    $full_url = $url . "/ogp_game_installer/{$lgslname}/{$os}/";
    echo "<h2>Update {$home_info['home_name']}</h2>";
    if ($remote->is_screen_running(OGP_SCREEN_TYPE_HOME, $home_id) == 1) {
        print_failure(get_lang('server_running_cant_update'));
        return;
    }
    $update_active = $remote->get_log(OGP_SCREEN_TYPE_UPDATE, $home_id, clean_path($home_info['home_path']), $log_txt, 30);
    if ($update_active === 0) {
        print_failure(get_lang('agent_offline'));
        echo "<meta http-equiv='refresh' content='5'>";
        return;
    } elseif ($state == 'start' && $update_active != 1) {
        $mod_cfg_id = $home_info['mod_cfg_id'];
        $game_mod_precmd = $db->resultQuery("SELECT DISTINCT precmd FROM OGP_DB_PREFIXgame_mods WHERE mod_id='{$mod_id}'");
        if ($game_mod_precmd[0]['precmd'] === NULL or empty($game_mod_precmd[0]['precmd'])) {
            $config_mod_precmd = $db->resultQuery("SELECT DISTINCT def_precmd FROM OGP_DB_PREFIXconfig_mods WHERE mod_cfg_id='{$mod_cfg_id}'");
            if ($config_mod_precmd[0]['def_precmd'] === NULL or empty($config_mod_precmd[0]['def_precmd'])) {
                $precmd = "";
            } else {
                $precmd = $config_mod_precmd[0]['def_precmd'];
            }
        } else {
            $precmd = $game_mod_precmd[0]['precmd'];
        }
        $game_mod_postcmd = $db->resultQuery("SELECT DISTINCT postcmd FROM OGP_DB_PREFIXgame_mods WHERE mod_id='{$mod_id}'");
        if ($game_mod_postcmd[0]['postcmd'] === NULL or empty($game_mod_postcmd[0]['postcmd'])) {
            $config_mod_postcmd = $db->resultQuery("SELECT DISTINCT def_postcmd FROM OGP_DB_PREFIXconfig_mods WHERE mod_cfg_id='{$mod_cfg_id}'");
            if ($config_mod_postcmd[0]['def_postcmd'] === NULL or empty($config_mod_postcmd[0]['def_postcmd'])) {
                $postcmd = "";
            } else {
                $postcmd = $config_mod_postcmd[0]['def_postcmd'];
            }
        } else {
            $postcmd = $game_mod_postcmd[0]['postcmd'];
        }
        $exec_folder_path = clean_path($home_info['home_path'] . "/" . $server_xml->exe_location);
        $exec_path = clean_path($exec_folder_path . "/" . $server_xml->server_exec_name);
        if (isset($_REQUEST['master_server_home_id'])) {
            $ms_home_id = $_REQUEST['master_server_home_id'];
            $ms_info = $db->getGameHome($ms_home_id);
            print_success(get_lang_f("starting_copy_with_master_server_named", $ms_info['home_name']));
            $rsync = $remote->masterServerUpdate($home_id, $home_info['home_path'], $ms_home_id, $ms_info['home_path'], $exec_folder_path, $exec_path, $precmd, $postcmd);
            $master = "&amp;master=true";
        } else {
            print_success(get_lang_f("starting_sync_with", $full_url));
            $rsync = $remote->start_rsync_install($home_id, $home_info['home_path'], "{$full_url}", $exec_folder_path, $exec_path, $precmd, $postcmd);
            $master = "";
        }
        if ($rsync === 0) {
            print_failure(get_lang('failed_to_start_rsync_update'));
            return;
        } else {
            if ($rsync === 1) {
                print_success(get_lang('update_started'));
                echo "<p><a href=\"?m=gamemanager&amp;p=rsync_install&amp;update=refresh&amp;home_id={$home_id}&amp;mod_id={$mod_id}{$master}\">";
                echo get_lang('refresh_rsync_status') . "</a></p>";
                $view->refresh("?m=gamemanager&amp;p=rsync_install&amp;update=refresh&amp;home_id={$home_id}&amp;mod_id={$mod_id}{$master}", 5);
                return;
            } elseif ($rsync === 0) {
                print_failure(get_lang('agent_offline'));
                return;
            }
        }
    } elseif ($update_active == 1) {
        echo "<p class='note'></p>\n";
        if (isset($_POST['stop_update_x'])) {
            $stop_update = sprintf("screen -S OGP_UPDATE_%09d -X quit", $home_id);
            $remote->exec("{$stop_update}");
        }
        $update_complete = false;
        echo "<form method=POST><input type='image' name='stop_update' onsubmit='submit-form();' src='modules/administration/images/remove.gif'>" . get_lang('stop_update') . "</input></form>";
        if (empty($log_txt)) {
            $log_txt = get_lang('not_available');
        }
        if (!isset($_GET['master'])) {
            $kbytes = $remote->rsync_progress($home_info['home_path']);
            list($totalsize, $mbytes, $pct) = explode(";", do_progress($kbytes, $lgslname . "/" . $os));
            $totalmbytes = round($totalsize / 1024, 2);
            echo '<div class="dragbox bloc rounded" style="background-color:#dce9f2;" >
					<h4>' . get_lang('update_in_progress') . " {$mbytes}MB/{$totalmbytes}MB</h4>\n\t\t\t\t  <div style='background-color:#dce9f2;' >\n\t\t\t\t  ";
            $bar = '';
            for ($i = 1; $i <= $pct; $i++) {
                $bar .= '<img style="width:0.92%;vertical-align:middle;" src="images/progressBar.png">';
            }
            echo "{$bar} <b style='vertical-align:top;display:inline;font-size:1.2em;color:red;' >{$pct}%</b>\n\t\t\t\t\t</div>\n\t\t\t\t  </div><br>";
        } else {
            echo '<h4>' . get_lang('update_in_progress') . '</h4>';
        }
        echo "<pre>" . $log_txt . "</pre>\n";
        echo "<p><a href=\"?m=gamemanager&amp;p=rsync_install&amp;update=refresh&amp;home_id={$home_id}&amp;mod_id={$mod_id}\">";
        echo get_lang('refresh_rsync_status') . "</a></p>";
        $view->refresh("?m=gamemanager&amp;p=rsync_install&amp;update=refresh&amp;home_id={$home_id}&amp;mod_id={$mod_id}", 5);
        return;
    } elseif ($update != "update") {
        echo "<meta http-equiv='refresh' content='60'>";
        print_success(get_lang('update_completed'));
        echo "<table class='center'><tr><td><a href='?m=gamemanager&amp;p=game_monitor&amp;home_id=" . $home_info['home_id'] . "'><< " . get_lang('back') . "</a></td></tr></table>";
        echo "<pre>" . $log_txt . "</pre>\n";
        echo "<table class='center'><tr><td><a href='?m=gamemanager&amp;p=game_monitor&amp;home_id=" . $home_info['home_id'] . "'><< " . get_lang('back') . "</a></td></tr></table>";
        $update_complete = true;
    } else {
        $rsync_remote_sites = file("modules/gamemanager/rsync_sites.list");
        #load offical rsync sites
        $rsync_local_sites = file("modules/gamemanager/rsync_sites_local.list");
        #load user custom sites
        $settings['rsync_available'] = isset($settings['rsync_available']) ? $settings['rsync_available'] : "1";
        if (is_array($rsync_local_sites) and $settings['rsync_available'] == "1") {
            $rsync_sites = array_merge($rsync_remote_sites, $rsync_local_sites);
            #merge arrays
        } elseif ($settings['rsync_available'] == "2") {
            $rsync_sites = $rsync_remote_sites;
        } elseif ($settings['rsync_available'] == "3") {
            $rsync_sites = $rsync_local_sites;
        }
        #echo "LGSL or GameQ query name is $server_xml->lgsl_query_name$server_xml->gameq_query_name";
        $sync_list = @file("modules/gamemanager/rsync.list", FILE_IGNORE_NEW_LINES);
        if (!is_array($sync_list)) {
            if (!is_file("modules/gamemanager/rsync.list")) {
                print_failure("Trouble accessing http://www.opengamepanel.org/rsync.list");
                print_failure("Make sure allow_fopen_url is set to \"On\" in your php.ini and opengamepanel.org is online");
                print_failure("In the mean time, you can get a local copy of the file by running wget http://www.opengamepanel.org/sync_data/rsync.list -O /path/to/ogpweb/modules/gamemanager/rsync.list");
                return;
            }
            # print_failure("Error loading rsync.list");
            # return;
            $sync_list = @file("modules/gamemanager/rsync.list", FILE_IGNORE_NEW_LINES);
            if (!is_array($sync_list)) {
                print_failure("Failed to open local copy of rsync.list in modules/gamemanager/rsync.list");
                return;
            }
        }
        $master_server_home_id = $db->getMasterServer($home_info['remote_server_id'], $home_info['home_cfg_id']);
        if (in_array($lgslname, $sync_list)) {
            echo "Game type supported<br>\n\t\t\t\t <p class='center'>To add your own rsync site, create modules/gamemanager/rsync_sites_local.list and put a server name on each line.</p><br>\n\t\t\t\t <form action='?m=gamemanager&amp;p=rsync_install' method='post'>\n\t\t\t\t <table class='center'>\n\t\t\t\t <input type='hidden' name='home_id' value='{$home_id}' />\n\t\t\t\t <input type='hidden' name='mod_id' value='{$mod_id}' />\n\t\t\t\t <input type='hidden' name='lgslname' value='{$lgslname}' />\n\t\t\t\t <input type='hidden' name='state' value='start' />\n\t\t\t\t <tr><td align='right'>Game name:</td><td align='left'>{$home_info['game_name']}</td></tr>\n\t\t\t\t <tr><td align='right'>Directory:</td><td align='left'>{$home_info['home_path']}</td></tr>\n\t\t\t\t <tr><td align='right'>Remoteserver:</td>\n\t\t\t\t <td align='left'>{$home_info['remote_server_name']} ({$home_info['agent_ip']}:{$home_info['agent_port']})</td></tr>\n\t\t\t\t <tr><td align='right'>Rsync Server:</td>\n\t\t\t\t <td align='left'>" . create_drop_box_from_array_rsync($rsync_sites, "url") . "<br>";
            if ($master_server_home_id != FALSE and $master_server_home_id != $home_id) {
                echo "<input type='checkbox' name='master_server_home_id' value='{$master_server_home_id}' /><b>" . get_lang('update_from_local_master_server') . "</b>";
            }
            echo "</td></tr></table><p><input type='submit' name='update' value='update' /></p>\n\t\t\t\t </form>";
        } elseif ($master_server_home_id != FALSE and $master_server_home_id != $home_id) {
            $ms_home_info = $db->getGameHome($master_server_home_id);
            echo "<br>\n\t\t\t\t <p class='success'>Master server update available</p><br>\n\t\t\t\t <form action='?m=gamemanager&amp;p=rsync_install' method='post'>\n\t\t\t\t <table class='center'>\n\t\t\t\t <input type='hidden' name='home_id' value='{$home_id}' />\n\t\t\t\t <input type='hidden' name='mod_id' value='{$mod_id}' />\n\t\t\t\t <input type='hidden' name='lgslname' value='{$lgslname}' />\n\t\t\t\t <input type='hidden' name='state' value='start' />\n\t\t\t\t <tr><td align='right'>Game name:</td><td align='left'>{$home_info['game_name']}</td></tr>\n\t\t\t\t <tr><td align='right'>Master Server Name:</td><td align='left'>{$ms_home_info['home_name']}</td></tr>\n\t\t\t\t <tr><td align='right'>Master Server Directory:</td><td align='left'>{$ms_home_info['home_path']}</td></tr>\n\t\t\t\t <tr><td align='right'>Local Directory:</td><td align='left'>{$home_info['home_path']}</td></tr>" . "<input type='hidden' name='master_server_home_id' value='{$master_server_home_id}' />" . "</td></tr></table><p><input type='submit' name='update' value='" . get_lang('update_from_local_master_server') . "' /></p>\n\t\t\t\t </form>";
        } else {
            print_failure("This game type [ {$lgslname} ] is not yet supported with rsync install");
        }
    }
}
Пример #9
0
function exec_ogp_module()
{
    $modDb = new MySQLModuleDatabase();
    require "includes/config.inc.php";
    $modDb->connect($db_host, $db_user, $db_pass, $db_name, $table_prefix);
    global $view, $db;
    $mysql_server_id = @$_REQUEST['mysql_server_id'];
    $mysql_server = $modDb->getMysqlServer($mysql_server_id);
    if ($mysql_server['remote_server_id'] == "0") {
        $server_homes = $db->getGameHomes();
    } else {
        $server_homes = $modDb->getGameHomesByRemoteServerId($mysql_server['remote_server_id']);
    }
    $homes_array[0] = get_lang('select_game_server');
    foreach ($server_homes as $server_home) {
        $homes_array["{$server_home['home_id']}"] = "(ID " . $server_home['home_id'] . ") " . $server_home['home_name'];
    }
    if ($mysql_server === FALSE) {
        print_failure(get_lang_f('invalid_mysql_server_id', $mysql_server_id));
        $view->refresh("?m=mysql&p=mysql_admin");
        return;
    }
    if (isset($_REQUEST['add_db'])) {
        $home_id = $_POST['home_id'];
        $db_user = trim($_POST['db_user']);
        $db_passwd = trim($_POST['db_passwd']);
        $db_name = trim($_POST['db_name']);
        $enabled = $_POST['enabled'];
        if (empty($db_user)) {
            print_failure(get_lang('enter_db_user'));
        } elseif (empty($db_passwd)) {
            print_failure(get_lang('enter_db_password'));
        } elseif (empty($db_name)) {
            print_failure(get_lang('enter_db_name'));
        } elseif ($home_id == 0) {
            print_failure(get_lang('select_game_server'));
        } else {
            $db_id = $modDb->addMysqlServerDB($mysql_server_id, $home_id, $db_user, $db_passwd, $db_name, $enabled);
            if (!$db_id) {
                print_failure(get_lang_f('there_is_another_db_named_or_user_named', $db_name, $db_user));
            } else {
                $mysql_db = $modDb->getMysqlDBbyId($db_id);
                if (!$mysql_db) {
                    return;
                }
                if ($mysql_db['remote_server_id'] != "0") {
                    $remote_server = $db->getRemoteServer($mysql_db['remote_server_id']);
                    $remote = new OGPRemoteLibrary($remote_server['agent_ip'], $remote_server['agent_port'], $remote_server['encryption_key']);
                    $host_stat = $remote->status_chk();
                    if ($host_stat === 1) {
                        $command = "mysql -h localhost -P " . $mysql_db['mysql_port'] . " -u root -p" . $mysql_db['mysql_root_passwd'] . ' -e exit; echo $?';
                        $test_mysql_conn = $remote->exec($command);
                        if ($test_mysql_conn == 0) {
                            $SQL = "CREATE DATABASE IF NOT EXISTS \\`" . $mysql_db['db_name'] . "\\`;" . "GRANT " . $mysql_db['privilegies_str'] . " ON \\`" . $mysql_db['db_name'] . "\\`.* TO '" . $mysql_db['db_user'] . "'@'localhost' IDENTIFIED BY '" . $mysql_db['db_passwd'] . "';" . "FLUSH PRIVILEGES;";
                            $command = "mysql --host=localhost --port=" . $mysql_db['mysql_port'] . " -uroot -p" . $mysql_db['mysql_root_passwd'] . " -e \"" . $SQL . "\"";
                            $result = $remote->exec($command);
                        }
                    }
                } else {
                    @($link = mysql_connect($mysql_db['mysql_ip'] . ':' . $mysql_db['mysql_port'], $mysql_db['db_user'], $mysql_db['db_passwd']));
                    if ($link === FALSE) {
                        @($link = mysql_connect($mysql_db['mysql_ip'] . ':' . $mysql_db['mysql_port'], 'root', $mysql_db['mysql_root_passwd']));
                        if ($link !== FALSE) {
                            $queries = array("CREATE DATABASE IF NOT EXISTS `" . $mysql_db['db_name'] . "`;", "GRANT " . $mysql_db['privilegies_str'] . " ON `" . $mysql_db['db_name'] . "`.* TO '" . $mysql_db['db_user'] . "'@'" . $mysql_db['mysql_ip'] . "' IDENTIFIED BY '" . $mysql_db['db_passwd'] . "';", "FLUSH PRIVILEGES;");
                            foreach ($queries as $query) {
                                @($return = mysql_query($query));
                                if (!$return) {
                                    break;
                                }
                            }
                            mysql_close($link);
                        }
                    }
                }
                print_success(get_lang_f('db_added_for_home_id', $_POST['home_id']));
            }
        }
        $view->refresh("?m=mysql&p=mysql_admin&amp;p=edit&amp;mysql_server_id=" . $mysql_server_id . "&amp;assign", 5);
    } else {
        if (isset($_REQUEST['remove_db'])) {
            $db_id = $_REQUEST['db_id'];
            $mysql_db = $modDb->getMysqlDBbyId($db_id);
            if ($mysql_db['remote_server_id'] != "0") {
                $remote_server = $db->getRemoteServer($mysql_db['remote_server_id']);
                $remote = new OGPRemoteLibrary($remote_server['agent_ip'], $remote_server['agent_port'], $remote_server['encryption_key']);
                $host_stat = $remote->status_chk();
                if ($host_stat === 1) {
                    $remote->exec('mysql --host=localhost --port=' . $mysql_db['mysql_port'] . ' -uroot -p' . $mysql_db['mysql_root_passwd'] . ' -e "DROP DATABASE ' . $mysql_db['db_name'] . ";DROP USER '" . $mysql_db['db_user'] . "'@'" . $mysql_db['mysql_ip'] . "';\"");
                }
            } else {
                @($link = mysql_connect($mysql_db['mysql_ip'] . ':' . $mysql_db['mysql_port'], 'root', $mysql_db['mysql_root_passwd']));
                if ($link !== FALSE) {
                    $queries = array("DROP DATABASE " . $mysql_db['db_name'] . ";", "DROP USER '" . $mysql_db['db_user'] . "'@'" . $mysql_db['mysql_ip'] . "';");
                    foreach ($queries as $query) {
                        @($return = mysql_query($query));
                        if (!$return) {
                            break;
                        }
                    }
                    mysql_close($link);
                    $modDb->connect($db_host, $db_user, $db_pass, $db_name, $table_prefix);
                }
            }
            if ($modDb->removeMysqlServerDB($db_id) === FALSE) {
                print_failure(get_lang('could_not_remove_db'));
            } else {
                print_success(get_lang_f('db_removed_successfully_from_mysql_server_named', $mysql_db['mysql_name']));
            }
            $view->refresh("?m=mysql&p=mysql_admin&amp;p=edit&amp;mysql_server_id=" . $mysql_server_id . "&amp;assign");
        } else {
            if (isset($_POST['save_db_changes'])) {
                $db_id = $_POST['db_id'];
                $home_id = $_POST['home_id'];
                $post_db_user = trim($_POST['db_user']);
                $post_db_passwd = trim($_POST['db_passwd']);
                $post_db_name = trim($_POST['db_name']);
                $enabled = $_POST['enabled'];
                if (empty($post_db_passwd)) {
                    print_failure(get_lang('enter_db_password'));
                } elseif ($home_id == 0) {
                    print_failure(get_lang('select_game_server'));
                } else {
                    $mysql_db = $modDb->getMysqlDBbyId($db_id);
                    if ($post_db_passwd != $mysql_db['db_passwd']) {
                        if ($mysql_db['remote_server_id'] != "0") {
                            $remote_server = $db->getRemoteServer($mysql_db['remote_server_id']);
                            $remote = new OGPRemoteLibrary($remote_server['agent_ip'], $remote_server['agent_port'], $remote_server['encryption_key']);
                            $host_stat = $remote->status_chk();
                            if ($host_stat === 1) {
                                $SQL = "DROP USER '" . $mysql_db['db_user'] . "'@'" . $mysql_server['mysql_ip'] . "';" . "GRANT " . $mysql_db['privilegies_str'] . " ON \\`" . $mysql_db['db_name'] . "\\`.* TO '" . $mysql_db['db_user'] . "'@'localhost' IDENTIFIED BY '" . $post_db_passwd . "';" . "FLUSH PRIVILEGES;";
                                $command = "mysql --host=localhost --port=" . $mysql_db['mysql_port'] . " -uroot -p" . $mysql_db['mysql_root_passwd'] . " -e \"" . $SQL . "\"";
                                $remote->exec($command);
                            }
                        } else {
                            @($link = mysql_connect($mysql_db['mysql_ip'] . ':' . $mysql_db['mysql_port'], 'root', $mysql_db['mysql_root_passwd']));
                            if ($link !== FALSE) {
                                $queries = array("DROP USER '" . $mysql_db['db_user'] . "'@'" . $mysql_server['mysql_ip'] . "';", "GRANT " . $mysql_db['privilegies_str'] . " ON `" . $mysql_db['db_name'] . "`.* TO '" . $mysql_db['db_user'] . "'@'" . $mysql_db['mysql_ip'] . "' IDENTIFIED BY '" . $post_db_passwd . "';", "FLUSH PRIVILEGES;");
                                foreach ($queries as $query) {
                                    @($return = mysql_query($query));
                                    if (!$return) {
                                        break;
                                    }
                                }
                                mysql_close($link);
                                $modDb->connect($db_host, $db_user, $db_pass, $db_name, $table_prefix);
                            }
                        }
                    }
                    if ($enabled != $mysql_db['enabled']) {
                        if ($mysql_db['remote_server_id'] != "0") {
                            $remote_server = $db->getRemoteServer($mysql_db['remote_server_id']);
                            $remote = new OGPRemoteLibrary($remote_server['agent_ip'], $remote_server['agent_port'], $remote_server['encryption_key']);
                            $host_stat = $remote->status_chk();
                            if ($host_stat === 1) {
                                if ($enabled == "0") {
                                    $SQL = "DROP USER '" . $mysql_db['db_user'] . "'@'" . $mysql_server['mysql_ip'] . "';" . "FLUSH PRIVILEGES;";
                                } else {
                                    $SQL = "GRANT " . $mysql_db['privilegies_str'] . " ON \\`" . $mysql_db['db_name'] . "\\`.* TO '" . $mysql_db['db_user'] . "'@'localhost' IDENTIFIED BY '" . $post_db_passwd . "';" . "FLUSH PRIVILEGES;";
                                }
                                $command = "mysql --host=localhost --port=" . $mysql_db['mysql_port'] . " -uroot -p" . $mysql_db['mysql_root_passwd'] . " -e \"" . $SQL . "\"";
                                $remote->exec($command);
                            }
                        } else {
                            @($link = mysql_connect($mysql_db['mysql_ip'] . ':' . $mysql_db['mysql_port'], 'root', $mysql_db['mysql_root_passwd']));
                            if ($link !== FALSE) {
                                if ($enabled == "0") {
                                    $queries = array("DROP USER '" . $mysql_db['db_user'] . "'@'" . $mysql_server['mysql_ip'] . "';", "FLUSH PRIVILEGES;");
                                } else {
                                    $queries = array("GRANT " . $mysql_db['privilegies_str'] . " ON `" . $mysql_db['db_name'] . "`.* TO '" . $mysql_db['db_user'] . "'@'" . $mysql_db['mysql_ip'] . "' IDENTIFIED BY '" . $post_db_passwd . "';", "FLUSH PRIVILEGES;");
                                }
                                foreach ($queries as $query) {
                                    @($return = mysql_query($query));
                                    if (!$return) {
                                        break;
                                    }
                                }
                                mysql_close($link);
                                $modDb->connect($db_host, $db_user, $db_pass, $db_name, $table_prefix);
                            }
                        }
                    }
                    if ($modDb->editMysqlServerDB($db_id, $home_id, $post_db_user, $post_db_passwd, $post_db_name, $enabled) === FALSE) {
                        print_failure(get_lang('could_not_be_changed'));
                    } else {
                        print_success(get_lang_f('db_changed_successfully', $post_db_name));
                    }
                }
                $view->refresh("?m=mysql&p=mysql_admin&amp;p=edit&amp;mysql_server_id=" . $mysql_server_id . "&amp;assign");
            } else {
                if (isset($_REQUEST['delete'])) {
                    if (!isset($_REQUEST['y'])) {
                        echo "<p>" . get_lang_f('areyousure_remove_mysql_server', $mysql_server['mysql_name']) . "</p>\n                <p><a href='?m=mysql&p=mysql_admin&amp;p=edit&amp;mysql_server_id=" . $mysql_server_id . "&amp;delete&amp;y=y'>" . get_lang('yes') . "</a> <a href='?m=mysql&p=mysql_admin'>" . get_lang('no') . "</a></p>";
                        return;
                    } else {
                        $mysql_dbs = $modDb->getMysqlServerDBs($mysql_server_id);
                        if (!empty($mysql_dbs)) {
                            foreach ($mysql_dbs as $mysql_db) {
                                if ($mysql_server['remote_server_id'] != "0") {
                                    $remote_server = $db->getRemoteServer($mysql_server['remote_server_id']);
                                    $remote = new OGPRemoteLibrary($remote_server['agent_ip'], $remote_server['agent_port'], $remote_server['encryption_key']);
                                    $host_stat = $remote->status_chk();
                                    if ($host_stat === 1) {
                                        $remote->exec('mysql --host=localhost --port=' . $mysql_server['mysql_port'] . ' -uroot -p' . $mysql_server['mysql_root_passwd'] . ' -e "DROP DATABASE ' . $mysql_db['db_name'] . ";DROP USER '" . $mysql_db['db_user'] . "'@'" . $mysql_server['mysql_ip'] . "';\"");
                                    }
                                } else {
                                    @($link = mysql_connect($mysql_server['mysql_ip'] . ':' . $mysql_server['mysql_port'], 'root', $mysql_server['mysql_root_passwd']));
                                    if ($link !== FALSE) {
                                        $queries = array("DROP DATABASE " . $mysql_db['db_name'] . ";", "DROP USER '" . $mysql_db['db_user'] . "'@'" . $mysql_server['mysql_ip'] . "';");
                                        foreach ($queries as $query) {
                                            @($return = mysql_query($query));
                                            if (!$return) {
                                                break;
                                            }
                                        }
                                        mysql_close($link);
                                    }
                                }
                            }
                        }
                        if ($modDb->removeMysqlServer($mysql_server_id) === FALSE) {
                            print_failure(get_lang('error_while_remove'));
                        } else {
                            print_success(get_lang_f('mysql_server_removed', $mysql_server['mysql_name']));
                        }
                    }
                    $view->refresh("?m=mysql&p=mysql_admin");
                    return;
                } else {
                    if (isset($_POST['save_settings'])) {
                        foreach ($_POST as $name => $value) {
                            $get[$name] = trim($value);
                        }
                        if (empty($get['mysql_ip'])) {
                            print_failure(get_lang('enter_mysql_ip'));
                        } elseif (!isPortValid($get['mysql_port'])) {
                            print_failure(get_lang('enter_valid_port'));
                        } elseif (empty($get['mysql_root_passwd'])) {
                            print_failure(get_lang('enter_mysql_root_password'));
                        } elseif (empty($get['mysql_name'])) {
                            print_failure(get_lang('enter_mysql_name'));
                        } elseif (!$modDb->editMysqlServer($mysql_server_id, $get['remote_server_id'], $get['mysql_name'], $get['mysql_ip'], $get['mysql_port'], $get['mysql_root_passwd'], $mysql_server['privilegies_str'])) {
                            print_failure(get_lang_f('unable_to_set_changes_to', $mysql_server['mysql_name']));
                        } else {
                            print_success(get_lang_f('mysql_server_settings_changed', $mysql_server['mysql_name']));
                        }
                        $view->refresh("?m=mysql&p=mysql_admin&amp;p=edit&amp;mysql_server_id=" . $mysql_server_id . "&amp;edit", 5);
                    } elseif (isset($_GET['edit'])) {
                        echo "<h2>" . get_lang_f('editing_mysql_server', $mysql_server['mysql_name']) . "</h2>";
                        $mysql_server = $modDb->getMysqlServer($mysql_server_id);
                        $servers = $db->getRemoteServers();
                        $conn_method[0] = get_lang('direct_connection');
                        foreach ($servers as $server_row) {
                            $id = $server_row['remote_server_id'];
                            $name = get_lang_f('connection_through_remote_server_named', $server_row['remote_server_name']);
                            $conn_method[$id] = $name;
                        }
                        $ft = new FormTable();
                        $ft->start_form('?m=mysql&amp;p=edit&amp;mysql_server_id=' . $mysql_server_id . '&amp;edit');
                        $ft->start_table();
                        $ft->add_custom_field('connection_method', create_drop_box_from_array($conn_method, "remote_server_id", $mysql_server['remote_server_id'], false));
                        $ft->add_field('string', 'mysql_name', $mysql_server['mysql_name']);
                        $ft->add_field('string', 'mysql_ip', $mysql_server['mysql_ip']);
                        $ft->add_field('string', 'mysql_port', $mysql_server['mysql_port']);
                        $ft->add_field('string', 'mysql_root_passwd', $mysql_server['mysql_root_passwd']);
                        $ft->end_table();
                        $ft->add_button("submit", "save_settings", get_lang('save_settings'));
                        $ft->end_form();
                        echo create_back_button('mysql', 'mysql_admin');
                    } elseif (isset($_GET['assign'])) {
                        echo "<h2>" . get_lang_f('mysql_dbs_for', $mysql_server['mysql_name']) . "</h2>";
                        $mysql_server_dbs = $modDb->getMysqlServerDBs($mysql_server['mysql_server_id']);
                        if (!empty($mysql_server_dbs)) {
                            echo "<h4>" . get_lang('edit_dbs') . "</h4>";
                            foreach ($mysql_server_dbs as $mysql_db) {
                                $home_info = $db->getGameHomeWithoutMods($mysql_db['home_id']);
                                $db_array["{$mysql_db['db_id']}"] = $mysql_db['db_name'] . " (" . $home_info['home_name'] . ")";
                            }
                            $ft = new FormTable();
                            $ft->start_form('', 'GET');
                            $ft->add_field_hidden('m', 'mysql');
                            $ft->add_field_hidden('p', 'edit');
                            $ft->add_field_hidden('mysql_server_id', $mysql_server_id);
                            $ft->add_field_hidden('assign', 'true');
                            $ft->start_table();
                            $ft->add_custom_field('select_db', create_drop_box_from_array($db_array, "db_id", isset($_GET['db_id']) ? $_GET['db_id'] : "", false));
                            $ft->end_table();
                            $ft->add_button('submit', 'edit_db_settings', get_lang('edit_db_settings'));
                            $ft->add_button('submit', 'remove_db', get_lang('remove_db'));
                            $ft->end_form();
                            if (isset($_GET['edit_db_settings'])) {
                                $mysql_db = $modDb->getMysqlDBbyId($_GET['db_id']);
                                $ft = new FormTable();
                                $ft->start_form('');
                                $ft->add_field_hidden('db_id', $mysql_db['db_id']);
                                $ft->start_table();
                                $ft->add_custom_field('game_server', create_drop_box_from_array($homes_array, "home_id", $mysql_db['home_id'], false));
                                $ft->add_field('string', 'db_user', $mysql_db['db_user'], "50", "readonly");
                                $ft->add_field('string', 'db_passwd', $mysql_db['db_passwd']);
                                $ft->add_field('string', 'db_name', $mysql_db['db_name'], "50", "readonly");
                                $ft->add_field('on_off', 'enabled', $mysql_db['enabled']);
                                $ft->end_table();
                                $ft->add_button('submit', 'save_db_changes', get_lang('save_db_changes'));
                                $ft->end_form();
                            }
                        }
                        echo "<h4>" . get_lang('add_db') . "</h4>";
                        $ft = new FormTable();
                        $ft->start_form('');
                        $ft->start_table();
                        $ft->add_custom_field('game_server', create_drop_box_from_array($homes_array, "home_id", "0", false));
                        $ft->add_field('string', 'db_user', '');
                        $ft->add_field('string', 'db_passwd', genRandomString('10'));
                        $ft->add_field('string', 'db_name', '');
                        $ft->add_field('on_off', 'enabled', '1');
                        $ft->end_table();
                        $ft->add_button('submit', 'add_db', get_lang('add_db'));
                        $ft->end_form();
                        echo create_back_button('mysql', 'mysql_admin');
                    } else {
                        print_failure("Invalid url.");
                        $view->refresh("?m=mysql&p=mysql_admin");
                    }
                }
            }
        }
    }
}
Пример #10
0
function exec_ogp_module()
{
    global $db, $view;
    $blacklist = array('/install.php', '/modules/gamemanager/rsync_sites_local.list');
    $curren_blacklist = array();
    $blacklisted_files = $db->resultQuery('SELECT file_path FROM `OGP_DB_PREFIXupdate_blacklist`;');
    if ($blacklisted_files !== FALSE) {
        $curren_blacklist = array();
        foreach ($blacklisted_files as $blacklisted_file) {
            $curren_blacklist[] = $blacklisted_file['file_path'];
        }
    }
    if (isset($_POST['save_to_blacklist'])) {
        foreach ($_POST['blacklist'] as $file) {
            $db->query("INSERT INTO `OGP_DB_PREFIXupdate_blacklist` SET file_path='{$file}';");
        }
        foreach ($_POST['folder_files'] as $file) {
            if (in_array($file, $curren_blacklist)) {
                if (!in_array($file, $_POST['blacklist'])) {
                    $db->query("DELETE FROM `OGP_DB_PREFIXupdate_blacklist` WHERE file_path='{$file}';");
                }
            }
        }
        $blacklisted_files = $db->resultQuery('SELECT file_path FROM `OGP_DB_PREFIXupdate_blacklist`;');
        if ($blacklisted_files !== FALSE) {
            $curren_blacklist = array();
            foreach ($blacklisted_files as $blacklisted_file) {
                $curren_blacklist[] = $blacklisted_file['file_path'];
            }
        }
    }
    $curren_blacklist = array_merge($curren_blacklist, $blacklist);
    path_check();
    echo "<h2>";
    echo get_lang('blacklist_files');
    echo "</h2>";
    $baseDir = str_replace("modules" . DIRECTORY_SEPARATOR . "update", "", dirname(__FILE__));
    $path = clean_path($baseDir . "/" . @$_SESSION['fm_cwd']);
    echo "<table class='center' style='width:100%;' ><tr>\n" . "<td colspan='3' ><h3>" . get_lang_f('currently_viewing', $path) . "</h3></td>" . "</tr></table>";
    if (!file_exists($path)) {
        $path = clean_path($baseDir);
        if (file_exists($path)) {
            print_failure(get_lang_f("dir_not_found", $path));
        } else {
            $_SESSION['fm_cwd'] = str_replace("\\", "", dirname($_SESSION['fm_cwd']));
            $view->refresh('?m=update&amp;p=blacklist', 0);
        }
    } else {
        $dirlist = scandir($path);
        if (!is_array($dirlist)) {
            if ($dirlist === -1) {
                if ($path != $baseDir . "/") {
                    $view->refresh('?m=update&amp;p=blacklist', 0);
                } else {
                    print_failure('The path is too long or there is a file with a very long name inside of your game server\'s home folder.');
                }
            } else {
                if (file_exists($path)) {
                    if (strpos($path, '/') !== FALSE) {
                        $ePath = explode('/', $path);
                        $filename = end($ePath);
                    } else {
                        if (strpos($path, '\\') !== FALSE) {
                            $ePath = explode('\\', $path);
                            $filename = end($ePath);
                        }
                    }
                    $_SESSION['fm_cwd'] = str_replace("\\", "", dirname($_SESSION['fm_cwd']));
                    $view->refresh('?m=update&amp;p=blacklist' . '&amp;path=' . $filename, 0);
                } else {
                    print_failure(get_lang("failed_list"));
                }
            }
            return;
        }
        if (empty($dirlist)) {
            print_lang('empty_directory');
        } else {
            echo "<form method=POST>" . "<table class='center' style='width:100%;' >\n" . show_back($home_id) . "<tr>\n" . "<td style='width:10px;' >\n" . "<input type='checkbox' onclick='toggleChecked(this.checked)'>\n" . "</td>\n" . "<td align=left>\n" . get_lang('filename') . "\n</td>\n" . "</tr>\n";
            $directorys = array();
            $files = array();
            $x = 0;
            $basedir_path = rtrim($_SERVER['DOCUMENT_ROOT'] . dirname($_SERVER['SCRIPT_NAME']), DIRECTORY_SEPARATOR);
            $preg_basedir_path = preg_quote($basedir_path, "/");
            foreach ($dirlist as $item) {
                # dirlist FM returns an array.  Each element has 5 fields separated by the | character
                if ($item == "." or $item == "..") {
                    continue;
                }
                $filename = $item;
                $filepath = clean_path($path . "/" . $filename);
                // Directory
                if (is_dir($filepath)) {
                    $directorys[$x]['filename'] = $filename;
                } else {
                    $files[$x]['filename'] = $filename;
                    $files[$x]['filepath'] = preg_replace("/^" . $preg_basedir_path . "/", "", $filepath);
                }
                $x++;
            }
            foreach ($directorys as $directory) {
                echo "<tr>\n" . "<td>" . "</td>" . "<td align=left>" . "<img class=\"viewitem\" src=\"images/folder.png\" alt=\"Directory\" /> " . "<a href=\"?m=update&amp;p=blacklist&amp;path=" . $directory['filename'] . "\">" . $directory['filename'] . "</a></td></tr>\n";
            }
            $i = 0;
            $unchecked = array();
            foreach ($files as $file) {
                $checked = in_array($file['filepath'], $curren_blacklist) ? "checked='checked'" : "";
                echo "<tr>\n" . "<td>" . "<input type=checkbox name='blacklist[{$i}]' value='" . $file['filepath'] . "' class='item' {$checked}/>\n" . "<input type=hidden name='folder_files[{$i}]' value='" . $file['filepath'] . "' />\n" . "</td>" . "<td align=left>";
                echo "<img class=\"viewitem\" src=\"images/txt.png\" alt=\"Text file\" /> " . $file['filename'] . "</td>\n" . "</tr>\n";
                $i++;
            }
            echo "</table>\n" . "<input type=submit name='save_to_blacklist' value='" . get_lang('save_to_blacklist') . "' />\n" . "</form>\n";
        }
    }
    echo create_back_button('update');
}
function exec_ogp_module()
{
    global $db;
    global $view;
    $home_id = isset($_REQUEST['home_id']) ? $_REQUEST['home_id'] : "";
    $mod_id = isset($_REQUEST['mod_id']) ? $_REQUEST['mod_id'] : "";
    $isAdmin = $db->isAdmin($_SESSION['user_id']);
    if ($isAdmin) {
        $home_info = $db->getGameHome($home_id);
    } else {
        $home_info = $db->getUserGameHome($_SESSION['user_id'], $home_id);
    }
    if ($home_info === FALSE || preg_match("/u/", $home_info['access_rights']) != 1) {
        print_failure(get_lang('no_rights'));
        echo create_back_button("gamemanager", "gamemanager");
        return;
    }
    $state = isset($_REQUEST['state']) ? $_REQUEST['state'] : "";
    $pid = isset($_REQUEST['pid']) ? $_REQUEST['pid'] : -1;
    $filename = isset($_REQUEST['filename']) ? $_REQUEST['filename'] : "";
    echo "<h2>" . get_lang('install_update_manual') . " {$home_info['home_name']}</h2>";
    if (!empty($state)) {
        $remote = new OGPRemoteLibrary($home_info['agent_ip'], $home_info['agent_port'], $home_info['encryption_key']);
        if ($state == "start") {
            if (isset($_POST['one_dir_down'])) {
                $home_info['home_path'] .= "/../";
            }
            $pid = $remote->start_file_download($_REQUEST['url'], $home_info['home_path'], $filename, "uncompress");
            if ($pid < 0) {
                print_failure(get_lang("failed_to_start_file_download"));
                return;
            }
        }
        $url = $_REQUEST['url'];
        $headers = get_headers($url, 1);
        $download_available = !$headers ? FALSE : TRUE;
        // Check if any error occured
        if ($download_available) {
            $bytes = is_array($headers['Content-Length']) ? $headers['Content-Length'][1] : $headers['Content-Length'];
            // Display the File Size
            $totalsize = $bytes / 1024;
            clearstatcache();
        }
        $kbytes = $remote->rsync_progress($home_info['home_path'] . "/" . $filename);
        list($totalsize, $mbytes, $pct) = explode(";", do_progress($kbytes, $totalsize));
        $totalmbytes = round($totalsize / 1024, 2);
        $pct = $pct > 100 ? 100 : $pct;
        echo '<div class="dragbox bloc rounded" style="background-color:#dce9f2;" >
				<h4>' . get_lang('update_in_progress') . " {$mbytes}MB/{$totalmbytes}MB</h4>\n\t\t\t  <div style='background-color:#dce9f2;' >\n\t\t\t  ";
        $bar = '';
        for ($i = 1; $i <= $pct; $i++) {
            $bar .= '<img style="width:0.92%;vertical-align:middle;" src="images/progressBar.png">';
        }
        echo "<center>{$bar} <b style='vertical-align:top;display:inline;font-size:1.2em;color:red;' >{$pct}%</b></center>\n\t\t\t\t</div>\n\t\t\t  </div>";
        if ($remote->is_file_download_in_progress($pid) == 0) {
            print_success(get_lang('finished_manual_update'));
        } else {
            echo "<p><a href=\"?m=gamemanager&amp;p=update_manual&amp;state=refresh&amp;home_id=" . $home_id . "&amp;mod_id={$mod_id}&amp;pid={$pid}&amp;url={$url}&amp;filename={$filename}\">Refresh</a></p>";
            $view->refresh("?m=gamemanager&amp;p=update_manual&amp;state=refresh&amp;home_id=" . $home_id . "&amp;mod_id={$mod_id}&amp;pid={$pid}&amp;url={$url}&amp;filename={$filename}", 5);
        }
        echo create_back_button($_GET['m'], "game_monitor&amp;home_id=" . $_GET['home_id']);
    } else {
        echo "<form action='?m=gamemanager&amp;p=update_manual' method='post'>\n            <table class='center'>\n            <input type='hidden' name='home_id' value='{$home_id}' />\n            <input type='hidden' name='mod_id' value='{$mod_id}' />\n            <input type='hidden' name='state' value='start' />\n            <tr><td align='right'>" . get_lang('game_name') . ":</td><td align='left'>{$home_info['game_name']}</td></tr>\n            <tr><td align='right'>" . get_lang('dest_dir') . ":</td><td align='left'>{$home_info['home_path']}</td></tr>\n            <tr><td align='right'>" . get_lang('remote_server') . ":</td>\n            <td align='left'>{$home_info['remote_server_name']} ({$home_info['agent_ip']}:{$home_info['agent_port']})</td></tr>\n            <tr><td align='right'>" . get_lang('file_url') . ":</td>\n            <td align='left'><input type='text' name='url' value='' size='50' /></td></tr>\n            <tr><td colspan='2' class='info'>" . get_lang('file_url_info') . "</td></tr>\n            <tr><td align='right'>" . get_lang('one_dir_down') . ":</td><td align='left'><input type='checkbox' name='one_dir_down' /></td></tr>\n            <tr><td align='right'>" . get_lang('dest_filename') . ":</td>\n            <td align='left'><input type='text' name='filename' value='' size='50'/></td></tr>\n            <tr><td colspan='2' class='info'>" . get_lang('dest_filename_info') . "</td></tr>\n            </table>\n            <p><input type='submit' name='update' value='" . get_lang('update_server') . "' /></p>\n            </form>";
    }
    return;
}
function exec_ogp_module()
{
    global $db, $view;
    if (isset($_GET['rserver_id']) and $_GET['rserver_id'] != "") {
        $remote_server_ips = $db->getRemoteServerIPs($_GET['rserver_id']);
        if (!empty($remote_server_ips)) {
            if (isset($_GET['ip_id']) and $_GET['ip_id'] != "") {
                $ip = $db->getIpById($_GET['ip_id']);
                echo "<h2>" . get_lang_f('assign_new_ports_range_for_ip', $ip) . "</h2>";
                if (isset($_POST['assign_range'])) {
                    if ($_POST['home_cfg_id'] != "0") {
                        $cfg_info = $db->getGameCfg($_POST['home_cfg_id']);
                    } else {
                        $cfg_info['game_name'] = get_lang('unspecified_game_types');
                    }
                    $retval = $db->addPortsRange($_POST['ip_id'], $_POST['home_cfg_id'], $_POST['start_port'], $_POST['end_port'], $_POST['port_increment']);
                    if ($retval === 1) {
                        print_failure(get_lang('invalid_values'));
                    } elseif ($retval === 2) {
                        print_failure(get_lang('ports_in_range_already_arranged'));
                    } elseif ($retval) {
                        print_success(get_lang_f('ports_range_added_successfull_for', $cfg_info['game_name']));
                    } else {
                        print_failure(get_lang_f('ports_range_already_configured_for', $cfg_info['game_name']));
                    }
                    $view->refresh('?m=server&p=arrange_ports&rserver_id=' . $_GET['rserver_id'] . '&ip_id=' . $_GET['ip_id'], 3);
                }
                $game_homes = $db->getIpPorts($_GET['ip_id']);
                $game_cfgs = $db->getGameCfgs();
                //
                require_once 'includes/lib_remote.php';
                $rhost_id = $_GET['rserver_id'];
                $remote_server = $db->getRemoteServer($rhost_id);
                require_once 'includes/lib_remote.php';
                $remote = new OGPRemoteLibrary($remote_server['agent_ip'], $remote_server['agent_port'], $remote_server['encryption_key']);
                $host_stat = $remote->status_chk();
                if ($host_stat === 1) {
                    $os = $remote->what_os();
                } else {
                    print_failure(get_lang_f("caution_agent_offline_can_not_get_os_and_arch_showing_servers_for_all_platforms"));
                    $os = "Unknown OS";
                }
                echo "<form method='POST' action=''>\n\n\t\t\t\t\t  <input type='hidden' name='ip_id' value='" . $_GET['ip_id'] . "' />\n\n\t\t\t\t\t  <table>\n\n\t\t\t\t\t  <tr>\n\n\t\t\t\t\t  <td>\n\n\t\t\t\t\t  <select name='home_cfg_id'>\n\n\t\t\t\t\t  <option style='background:black;color:white;' value='0'>" . get_lang('unspecified_game_types') . "</option>\n";
                echo "<b>" . get_lang('assign_range_to_game_type') . ":</b>";
                // Linux 64 bits + wine
                if (preg_match("/Linux/", $os) and preg_match("/64/", $os) and preg_match("/wine/", $os)) {
                    foreach ($game_cfgs as $row) {
                        if (preg_match("/linux/", $row['game_key'])) {
                            echo "<option value='" . $row['home_cfg_id'] . "'>" . $row['game_name'];
                        }
                        if (preg_match("/64/", $row['game_key'])) {
                            echo " (64 bit)";
                        }
                        echo "</option>\n";
                    }
                    echo "<option style='background:black;color:white;' value=''>" . get_lang('wine_games') . ":</option>\n";
                    foreach ($game_cfgs as $row) {
                        if (preg_match("/win/", $row['game_key'])) {
                            echo "<option value='" . $row['home_cfg_id'] . "'>" . $row['game_name'];
                        }
                        if (preg_match("/64/", $row['game_key'])) {
                            echo " (64 bit)";
                        }
                        echo "</option>\n";
                    }
                } elseif (preg_match("/Linux/", $os) and preg_match("/64/", $os)) {
                    foreach ($game_cfgs as $row) {
                        if (preg_match("/linux/", $row['game_key'])) {
                            echo "<option value='" . $row['home_cfg_id'] . "'>" . $row['game_name'];
                        }
                        if (preg_match("/64/", $row['game_key'])) {
                            echo " (64 bit)";
                        }
                        echo "</option>\n";
                    }
                } elseif (preg_match("/Linux/", $os) and preg_match("/wine/", $os)) {
                    foreach ($game_cfgs as $row) {
                        if (preg_match("/linux32/", $row['game_key'])) {
                            echo "<option value='" . $row['home_cfg_id'] . "'>" . $row['game_name'] . "</option>\n";
                        }
                    }
                    echo "<option style='background:black;color:white;' value=''>" . get_lang('wine_games') . "</option>\n";
                    foreach ($game_cfgs as $row) {
                        if (preg_match("/win32/", $row['game_key'])) {
                            echo "<option value='" . $row['home_cfg_id'] . "'>" . $row['game_name'] . "</option>\n";
                        }
                    }
                } elseif (preg_match("/Linux/", $os)) {
                    foreach ($game_cfgs as $row) {
                        if (preg_match("/linux32/", $row['game_key'])) {
                            echo "<option value='" . $row['home_cfg_id'] . "'>" . $row['game_name'] . "</option>\n";
                        }
                    }
                } elseif (preg_match("/CYGWIN/", $os) and preg_match("/64/", $os)) {
                    foreach ($game_cfgs as $row) {
                        if (preg_match("/win/", $row['game_key'])) {
                            echo "<option value='" . $row['home_cfg_id'] . "'>" . $row['game_name'];
                        }
                        if (preg_match("/64/", $row['game_key'])) {
                            echo " (64 bit)";
                        }
                        echo "</option>\n";
                    }
                } elseif (preg_match("/CYGWIN/", $os)) {
                    foreach ($game_cfgs as $row) {
                        if (preg_match("/win32/", $row['game_key'])) {
                            echo "<option value='" . $row['home_cfg_id'] . "'>" . $row['game_name'] . "</option>\n";
                        }
                    }
                } elseif ($os == "Unknown OS") {
                    foreach ($game_cfgs as $row) {
                        echo "<option value='" . $row['home_cfg_id'] . "'>" . $row['game_name'];
                        if (preg_match("/64/", $row['game_key'])) {
                            echo " (64 bit)";
                        }
                        echo "</option>\n";
                    }
                }
                echo "</select>\n\n\t\t\t\t\t  </td>\n\n\t\t\t\t\t  <td>\n" . get_lang('start_port') . "<input type='text' id='start_port' name='start_port' class='add' size='8' />\n\n\t\t\t\t\t   </td>\n\n\t\t\t\t\t   <td>\n" . get_lang('end_port') . "<input type='text' id='end_port' name='end_port' class='add' size='8' />\n\n\t\t\t\t\t   </td>\n\n\t\t\t\t\t   <td>\n\n\t\t\t\t\t   " . get_lang('port_increment') . "<input type='text' id='port_increment' name='port_increment' class='add' value='1' size='2' />\n\n\t\t\t\t\t   </td>\n\n\t\t\t\t\t   <td>\n\n\t\t\t\t\t   " . get_lang('total_assignable_ports') . "\t<span id='total_assignable_ports' class='add'></span>\n\n\t\t\t\t\t   </td>\n\n\t\t\t\t\t   <td>\n" . "<input type='submit' name='assign_range' value='" . get_lang('assign_range') . "' />\n\n\t\t\t\t\t   </td>\n \n\t\t\t\t\t   </tr>\n \n\t\t\t\t\t   </table>\n\n\t\t\t\t\t   </form>\n";
                echo "<h2>" . get_lang_f('assigned_port_ranges_for_ip', $ip) . "</h2>";
                //
                if (isset($_POST['delete_range'])) {
                    if ($db->delPortsRange($_POST['range_id'])) {
                        print_success(get_lang('ports_range_deleted_successfull'));
                    } else {
                        print_failure(get_lang('failed_to_delete_ports_range'));
                    }
                    $view->refresh('?m=server&p=arrange_ports&rserver_id=' . $_GET['rserver_id'] . '&ip_id=' . $_GET['ip_id'], 3);
                }
                if (isset($_POST['edit_range'])) {
                    if ($_POST['home_cfg_id'] != "0") {
                        $cfg_info = $db->getGameCfg($_POST['home_cfg_id']);
                    } else {
                        $cfg_info['game_name'] = get_lang('unspecified_game_types');
                    }
                    $retval = $db->editPortsRange($_POST['range_id'], $_POST['ip_id'], $_POST['start_port'], $_POST['end_port'], $_POST['port_increment']);
                    if ($retval === 1) {
                        print_failure(get_lang('invalid_values'));
                    } elseif ($retval === 2) {
                        print_failure(get_lang('ports_in_range_already_arranged'));
                    } elseif ($retval) {
                        print_success(get_lang_f('ports_range_edited_successfull_for', $cfg_info['game_name']));
                    } else {
                        print_failure(get_lang_f('ports_range_already_configured_for', $cfg_info['game_name']));
                    }
                    $view->refresh('?m=server&p=arrange_ports&rserver_id=' . $_GET['rserver_id'] . '&ip_id=' . $_GET['ip_id'], 3);
                }
                $ranges = $db->getPortsRange($_GET['ip_id']);
                if (!empty($ranges)) {
                    echo "<table>\n";
                    foreach ($ranges as $range) {
                        if ($range['home_cfg_id'] != "0") {
                            $cfg_info = $db->getGameCfg($range['home_cfg_id']);
                        } else {
                            $cfg_info['game_name'] = get_lang('unspecified_game_types');
                        }
                        $available_ports_amount = intval(($range['end_port'] - $range['start_port']) / $range['port_increment'] + 1);
                        $usable_range_ports = array();
                        for ($port = $range['start_port']; $port >= $range['start_port'] and $port <= $range['end_port']; $port += $range['port_increment']) {
                            $usable_range_ports[] = $port;
                        }
                        $used_ports = array();
                        if (!empty($game_homes)) {
                            foreach ($game_homes as $game_home) {
                                $used_ports[] = $game_home['port'];
                            }
                        }
                        if (!empty($used_ports)) {
                            foreach ($used_ports as $used_port) {
                                if (in_array($used_port, $usable_range_ports)) {
                                    $available_ports_amount--;
                                }
                            }
                        }
                        echo "<form method='POST' action=''>\n\n\t\t\t\t\t\t\t  <input type='hidden' name='range_id' value='" . $range['range_id'] . "' />\n\n\t\t\t\t\t\t\t  <input type='hidden' name='ip_id' value='" . $range['ip_id'] . "' />\n\n\t\t\t\t\t\t\t  <input type='hidden' name='home_cfg_id' value='" . $range['home_cfg_id'] . "' />\n\n\t\t\t\t\t\t\t  <tr>\n\n\t\t\t\t\t\t\t   <td>\n" . $cfg_info['game_name'] . "</td>\n\n\t\t\t\t\t\t\t   <td>\n" . get_lang('start_port') . "<input type='text' id='start_port' name='start_port' value='" . $range['start_port'] . "' size='8' />\n\n\t\t\t\t\t\t\t   </td>\n\n\t\t\t\t\t\t\t   <td>\n" . get_lang('end_port') . "<input type='text' id='end_port' name='end_port' value='" . $range['end_port'] . "' size='8' />\n\n\t\t\t\t\t\t\t   </td>\n\n\t\t\t\t\t\t\t   <td>\n" . get_lang('port_increment') . "<input type='text' id='port_increment' name='port_increment' value='" . $range['port_increment'] . "' value='1' size='2' />\n\n\t\t\t\t\t\t\t   </td>\n\n\t\t\t\t\t\t\t   <td>\n" . get_lang('available_range_ports') . "\t<span id='available_range_ports'>" . $available_ports_amount . "</span>\n\n\t\t\t\t\t\t\t   </td>\n\n\t\t\t\t\t\t\t   <td>\n\n\t\t\t\t\t\t\t\t<input type='submit' name='edit_range' value='" . get_lang('edit_range') . "' />\n\n\t\t\t\t\t\t\t\t<input type='submit' name='delete_range' value='" . get_lang('delete_range') . "' />\n\n\t\t\t\t\t\t\t   </td>\n \n\t\t\t\t\t\t\t  </tr>\n \n\t\t\t\t\t\t   </form>\n";
                    }
                    echo "</table>\n";
                }
                echo "<h2>" . get_lang_f('assigned_ports_for_ip', $ip) . "</h2>";
                if (!empty($game_homes)) {
                    echo "<table class='center'>";
                    echo "<tr><th>" . get_lang('home_id') . "</th><th>" . get_lang('home_path') . "</th><th>" . get_lang('game_type') . "</th><th>" . get_lang('server_name') . "</th><th>" . get_lang('port') . "</th></tr>";
                    foreach ($game_homes as $game_home) {
                        echo "<tr><td>" . $game_home['home_id'] . "</td><td>" . $game_home['home_path'] . "</td><td>" . $game_home['game_name'] . "</td><td>" . $game_home['home_name'] . "</td><td>" . $game_home['port'] . "</td></tr>";
                    }
                    echo "</table>";
                }
            }
        } else {
            echo "There are no IPs assigned to the selected remote server.";
            return;
        }
        echo create_back_button('server', 'edit&rhost_id=' . $_GET['rserver_id'] . '&edit');
    }
    ?>
	<script type="text/javascript">
		$(document).ready(function(){
			$("input[type=text]").each(function(){
				$(this).numeric();
			});
			$('input#start_port.add').on('input', function() {
				$('input#end_port.add').val( Number($(this).val()) );
				$('span#total_assignable_ports.add').html(  parseInt( ( Number( $('input#end_port.add').val() ) - Number( $(this).val() ) ) / Number( $('input#port_increment.add').val() ) ) + 1 );
			});
			$('input#end_port.add').on('input', function() {
				$('span#total_assignable_ports.add').html(  parseInt( ( Number( $(this).val() ) - Number( $('input#start_port.add').val() ) ) / Number( $('input#port_increment.add').val() ) ) + 1 );
			});
			$('input#port_increment.add').on('input', function() {
				$('span#total_assignable_ports.add').html(  parseInt( ( Number( $('input#end_port.add').val() ) - Number( $('input#start_port.add').val() ) ) / Number( $(this).val() ) ) + 1 );
			});
		});
	</script>
<?php 
}
Пример #13
0
function exec_ogp_module()
{
    global $view;
    global $db;
    $rhost_id = @$_REQUEST['rhost_id'];
    $remote_server = $db->getRemoteServer($rhost_id);
    if ($remote_server === FALSE) {
        print_failure(get_lang_f('invalid_remote_host_id', $rhost_id));
        $view->refresh("?m=server");
        return;
    }
    echo "<h2>" . get_lang_f('editing_remote_server', $remote_server['remote_server_name']) . "</h2>";
    #this allows you to define upto 4 IPs for each remote host.  The IPs are for binding games to
    if (isset($_REQUEST['add_ip'])) {
        $remote_ip = $_POST['remote_ip'];
        $remote_ip = preg_replace("/[^0-9\\.]/", "", $remote_ip);
        if ($db->addRemoteServerIp($rhost_id, $remote_ip) === FALSE) {
            print_failure(get_lang('could_not_add_ip'));
        } else {
            print_success(get_lang_f('ips_set_for_server', $remote_server['remote_server_name']));
        }
        $view->refresh("?m=server&amp;p=edit&amp;rhost_id=" . $rhost_id . "&amp;edit");
    } else {
        if (isset($_REQUEST['remove_ip'])) {
            $ip_id = $_POST['ip_id'];
            if ($db->removeRemoteServerIps($ip_id) === FALSE) {
                print_failure(get_lang('could_not_remove_ip'));
            } else {
                print_success(get_lang_f('ips_set_for_server', $remote_server['remote_server_name']));
            }
            $view->refresh("?m=server&amp;p=edit&amp;rhost_id=" . $rhost_id . "&amp;edit");
        } else {
            if (isset($_REQUEST['edit_ip'])) {
                $ip_id = $_POST['ip_id'];
                $ip = $_POST['ip'];
                $ip = preg_replace("/[^0-9\\.]/", "", $ip);
                if ($db->editRemoteServerIps($ip_id, $ip) === FALSE) {
                    print_failure(get_lang('could_not_edit_ip'));
                } else {
                    print_success(get_lang_f('ips_set_for_server', $remote_server['remote_server_name']));
                }
                $view->refresh("?m=server&amp;p=edit&amp;rhost_id=" . $rhost_id . "&amp;edit");
            } else {
                if (isset($_REQUEST['delete'])) {
                    if (!isset($_REQUEST['y'])) {
                        echo "<p>" . get_lang('areyousure_removeagent') . " <b>\"" . $remote_server['remote_server_name'] . "\"</b> " . get_lang('areyousure_removeagent2') . "</p>\n                <p><a href='?m=server&amp;p=edit&amp;rhost_id=" . $rhost_id . "&amp;delete&amp;y=y'>" . get_lang('yes') . "</a> <a href='?m=server'>" . get_lang('no') . "</a></p>";
                        return;
                    } else {
                        if ($db->removeRemoteServer($rhost_id) === FALSE) {
                            print_failure(get_lang('error_while_remove'));
                        } else {
                            print_success(get_lang_f('remote_host_removed', $remote_server['remote_server_name']));
                        }
                    }
                    $view->refresh("?m=server");
                    return;
                } else {
                    if (isset($_REQUEST['save_settings'])) {
                        $db->changeRemoteServerSettings($remote_server['remote_server_id'], $_REQUEST['remote_host'], $_REQUEST['remote_host_port'], $_REQUEST['remote_host_name'], $_REQUEST['ogp_user'], $_REQUEST['remote_host_ftp_ip'], $_REQUEST['remote_host_ftp_port'], $_REQUEST['remote_encryption_key'], $_REQUEST['timeout'], $_REQUEST['use_nat']);
                        print_success(get_lang_f('remote_server_settings_changed', $remote_server['remote_server_name']));
                        $view->refresh("?m=server&amp;p=edit&amp;rhost_id=" . $rhost_id . "&amp;edit");
                    }
                }
            }
        }
    }
    if (isset($_REQUEST['edit'])) {
        $remote_server = $db->getRemoteServer($rhost_id);
        $ftp_ip = empty($remote_server['ftp_ip']) ? $remote_server['agent_ip'] : $remote_server['ftp_ip'];
        require_once 'includes/form_table_class.php';
        $ft = new FormTable();
        $ft->start_form('?m=server&amp;p=edit&amp;rhost_id=' . $rhost_id . '&amp;edit');
        $ft->add_field_hidden('rhost_id', $remote_server['remote_server_id']);
        $ft->start_table();
        $ft->add_field('string', 'remote_host', $remote_server['agent_ip']);
        $ft->add_field('string', 'remote_host_port', $remote_server['agent_port']);
        $ft->add_field('string', 'remote_host_name', $remote_server['remote_server_name']);
        $ft->add_field('string', 'ogp_user', $remote_server['ogp_user']);
        $ft->add_field('string', 'remote_host_ftp_ip', $ftp_ip);
        $ft->add_field('string', 'remote_host_ftp_port', $remote_server['ftp_port']);
        $ft->add_field('string', 'remote_encryption_key', $remote_server['encryption_key']);
        $ft->add_field('string', 'timeout', $remote_server['timeout']);
        $ft->add_field('on_off', 'use_nat', $remote_server['use_nat']);
        $ft->end_table();
        $ft->add_button('submit', 'save_settings', get_lang('save_settings'));
        $ft->end_form();
        echo create_back_button('server');
        echo "<h2>" . get_lang_f('remote_ips_for', $remote_server['remote_server_name']) . "</h2>";
        echo "<p class='info'>" . get_lang('hint') . ": " . get_lang('add_more_ips') . "</p>";
        $remote_server_ips = $db->getRemoteServerIPs($remote_server['remote_server_id']);
        if (!empty($remote_server_ips)) {
            echo "<h1>" . get_lang('edit_ip') . "s</h1>";
            include 'includes/lib_remote.php';
            foreach ($remote_server_ips as $ip_row) {
                $servers_match_ip_id = $db->getIpPorts($ip_row['ip_id']);
                $servers_running = FALSE;
                if ($servers_match_ip_id) {
                    foreach ($servers_match_ip_id as $home_info) {
                        $remote = new OGPRemoteLibrary($home_info['agent_ip'], $home_info['agent_port'], $home_info['encryption_key']);
                        $screen_running = $remote->is_screen_running(OGP_SCREEN_TYPE_HOME, $home_info['home_id']) === 1;
                        if ($screen_running) {
                            $servers_running = TRUE;
                            break;
                        }
                    }
                }
                $disabled = $servers_running ? "disabled" : "";
                $warning = $servers_running ? "<b class='failure' >" . get_lang('there_are_servers_running_on_this_ip') . "<b>" : "";
                echo "<table class='center'>\n\t\t\t\t\t <tr>\n\t\t\t\t\t <td align='left' >\n\t\t\t\t\t <form method='post' action=''>\n\t\t\t\t\t <input name='ip_id' type='hidden' value='" . $ip_row['ip_id'] . "'/>\n\t\t\t\t\t <input name='ip' type='text' value='" . $ip_row['ip'] . "'/>\n\t\t\t\t\t <input type='submit' name='edit_ip' value='" . get_lang('edit_ip') . "' {$disabled}/>\n\t\t\t\t\t <input type='submit' name='remove_ip' value='" . get_lang('remove_ip') . "' {$disabled}/> {$warning}\n\t\t\t\t\t </form>\n\t\t\t\t\t </td>\n\t\t\t\t\t <td style='text-align:left;'>\n\t\t\t\t\t <a href='?m=server&p=arrange_ports&rserver_id=" . $rhost_id . "&ip_id=" . $ip_row['ip_id'] . "'>" . get_lang('arrange_ports') . "</a>\n\t\t\t\t\t </td>\n\t\t\t\t\t </tr>\n\t\t\t\t\t </table>";
            }
        }
        echo "<h1>" . get_lang('add_ip') . "s</h1>";
        $ft = new FormTable();
        $ft->start_form('');
        $ft->add_field_hidden('rhost_id', $remote_server['remote_server_id']);
        $ft->start_table();
        $ft->add_field('string', 'remote_ip', '');
        $ft->end_table();
        $ft->add_button('submit', 'add_ip', get_lang('add_ip'));
        $ft->end_form();
    } else {
        print_failure("Invalid url.");
        $view->refresh("?m=server");
    }
}
Пример #14
0
function exec_ogp_module()
{
    global $view, $db;
    require_once 'includes/lib_remote.php';
    $ip = $_REQUEST['ip'];
    $port = $_REQUEST['port'];
    $home_id = $_REQUEST['home_id'];
    $user_id = $_SESSION['user_id'];
    $isAdmin = $db->isAdmin($_SESSION['user_id']);
    if ($isAdmin) {
        $home_info = $db->getGameHome($home_id);
    } else {
        $home_info = $db->getUserGameHome($_SESSION['user_id'], $home_id);
    }
    $home_path = $home_info['home_path'] . "/";
    if ($home_info === FALSE) {
        print_failure(get_lang('no_rights_to_stop_server'));
        return;
    }
    echo "<h2>" . $home_info['home_name'] . "</h2>";
    $server_xml = read_server_config(SERVER_CONFIG_LOCATION . "/" . $home_info['home_cfg_file']);
    if (!$server_xml) {
        echo create_back_button("gamemanager", "game_monitor");
        return;
    }
    $rserver = $db->getRemoteServerById($home_info['remote_server_id']);
    if (empty($rserver)) {
        print_failure("Could not find the remote server with ID " . $home_info['remote_server_id'] . ".");
    } else {
        $remote = new OGPRemoteLibrary($rserver['agent_ip'], $rserver['agent_port'], $rserver['encryption_key']);
        if (isset($server_xml->control_protocol_type)) {
            $control_type = $server_xml->control_protocol_type;
        } else {
            $control_type = "";
        }
        if ($server_xml->protocol == "gameq") {
            $query_port = get_query_port($server_xml, $port);
        } elseif ($server_xml->protocol == "lgsl") {
            require 'protocol/lgsl/lgsl_protocol.php';
            $get_ports = lgsl_port_conversion((string) $server_xml->lgsl_query_name, $port, "", "");
            $query_port = $get_ports['1'];
        } elseif ($server_xml->protocol == "teamspeak3") {
            $query_port = "10011";
        }
        $remote_retval = $remote->remote_stop_server($home_id, $ip, $port, $server_xml->control_protocol, $home_info['control_password'], $control_type, $home_path);
        $db->logger(get_lang_f('server_stopped', $home_info['home_name']) . "({$ip}:{$port})");
        if ($remote_retval === 1) {
            print_success(get_lang_f("server_stopped", $home_info['home_name']));
            if (isset($home_info['ufw_status']) and $home_info['ufw_status'] == "enable") {
                $ip_ports = $db->getHomeIpPorts($home_id);
                foreach ($ip_ports as $ip_port) {
                    if ($server_xml->protocol == "gameq") {
                        $query_port = get_query_port($server_xml, $ip_port['port']);
                    } elseif ($server_xml->protocol == "lgsl") {
                        require 'protocol/lgsl/lgsl_protocol.php';
                        $get_ports = lgsl_port_conversion((string) $server_xml->lgsl_query_name, $ip_port['port'], "", "");
                        $query_port = $get_ports['1'];
                    } elseif ($server_xml->protocol == "teamspeak3") {
                        $query_port = "10011";
                    }
                    $remote->sudo_exec("ufw deny " . $ip_port['port']);
                    if (isset($query_port)) {
                        $remote->sudo_exec("ufw deny " . $query_port);
                    }
                }
            }
        } elseif ($remote_retval === 0) {
            $remote_retval = $remote->remote_stop_server($home_info['home_id'], $ip, $port, $server_xml->control_protocol, "", $control_type, $home_path);
            if ($remote_retval === 1) {
                print_success(get_lang_f("server_stopped", $home_info['home_name']));
                if (isset($home_info['ufw_status']) and $home_info['ufw_status'] == "enable") {
                    $ip_ports = $db->getHomeIpPorts($home_id);
                    foreach ($ip_ports as $ip_port) {
                        if ($server_xml->protocol == "gameq") {
                            $query_port = get_query_port($server_xml, $ip_port['port']);
                        } elseif ($server_xml->protocol == "lgsl") {
                            require 'protocol/lgsl/lgsl_protocol.php';
                            $get_ports = lgsl_port_conversion((string) $server_xml->lgsl_query_name, $ip_port['port'], "", "");
                            $query_port = $get_ports['1'];
                        } elseif ($server_xml->protocol == "teamspeak3") {
                            $query_port = "10011";
                        }
                        $remote->sudo_exec("ufw deny " . $ip_port['port']);
                        if (isset($query_port)) {
                            $remote->sudo_exec("ufw deny " . $query_port);
                        }
                    }
                }
            }
        }
        if ($remote_retval === 0) {
            print_failure(get_lang("agent_offline"));
        } elseif ($remote_retval !== 1) {
            print_failure("Error occurred on the remote host.");
        }
    }
    $view->refresh("?m=gamemanager&amp;p=game_monitor&amp;home_id-mod_id-ip-port=" . $home_info['home_id'] . "-" . $home_info['mod_id'] . "-" . $_REQUEST['ip'] . "-" . $_REQUEST['port'], 3);
}