701 lines
44 KiB
PHP
701 lines
44 KiB
PHP
<?php
|
|
if (!defined("WHMCS")) {
|
|
die("This file cannot be accessed directly");
|
|
}
|
|
use Illuminate\Database\Capsule\Manager as Capsule;
|
|
|
|
include $_SERVER['DOCUMENT_ROOT'].'/modules/servers/teamspeak/lib/TeamSpeak.php';
|
|
include '/lib/functions.php';
|
|
|
|
function teamspeak_config()
|
|
{
|
|
$configarray = array(
|
|
"name" => "TeaSpeak Provisioning",
|
|
"description" => "TeaSpeak provisioning Module for TeaSpeak servers",
|
|
"version" => "2.1.4",
|
|
"author" => "planetteaspeak.de",
|
|
"language" => "english",
|
|
"fields" => array(
|
|
"key" => array ("FriendlyName" => "Licensekey", "Type" => "text", "Size" => "25", "Description" => "Enter your paid Licensekey", "Default" => "Lease-"),
|
|
));
|
|
return $configarray;
|
|
}
|
|
|
|
|
|
function teamspeak_check_license($licensekey, $localkey='') {
|
|
|
|
// -----------------------------------
|
|
// -- Configuration Values --
|
|
// -----------------------------------
|
|
|
|
// Enter the url to your WHMCS installation here
|
|
$whmcsurl = 'https://planetteaspeak.de';
|
|
// Must match what is specified in the MD5 Hash Verification field
|
|
// of the licensing product that will be used with this check.
|
|
$licensing_secret_key = 'ab4a3ffa672b4a25dbb6c48571b94655';
|
|
// The number of days to wait between performing remote license checks
|
|
$localkeydays = 15;
|
|
// The number of days to allow failover for after local key expiry
|
|
$allowcheckfaildays = 5;
|
|
|
|
// -----------------------------------
|
|
// -- Do not edit below this line --
|
|
// -----------------------------------
|
|
|
|
$check_token = time() . md5(mt_rand(1000000000, 9999999999) . $licensekey);
|
|
$checkdate = date("Ymd");
|
|
$domain = $_SERVER['SERVER_NAME'];
|
|
$usersip = isset($_SERVER['SERVER_ADDR']) ? $_SERVER['SERVER_ADDR'] : $_SERVER['LOCAL_ADDR'];
|
|
$dirpath = dirname(__FILE__);
|
|
$verifyfilepath = 'modules/servers/licensing/verify.php';
|
|
$localkeyvalid = false;
|
|
if ($localkey) {
|
|
$localkey = str_replace("\n", '', $localkey); # Remove the line breaks
|
|
$localdata = substr($localkey, 0, strlen($localkey) - 32); # Extract License Data
|
|
$md5hash = substr($localkey, strlen($localkey) - 32); # Extract MD5 Hash
|
|
if ($md5hash == md5($localdata . $licensing_secret_key)) {
|
|
$localdata = strrev($localdata); # Reverse the string
|
|
$md5hash = substr($localdata, 0, 32); # Extract MD5 Hash
|
|
$localdata = substr($localdata, 32); # Extract License Data
|
|
$localdata = base64_decode($localdata);
|
|
$localkeyresults = unserialize($localdata);
|
|
$originalcheckdate = $localkeyresults['checkdate'];
|
|
if ($md5hash == md5($originalcheckdate . $licensing_secret_key)) {
|
|
$localexpiry = date("Ymd", mktime(0, 0, 0, date("m"), date("d") - $localkeydays, date("Y")));
|
|
if ($originalcheckdate > $localexpiry) {
|
|
$localkeyvalid = true;
|
|
$results = $localkeyresults;
|
|
$validdomains = explode(',', $results['validdomain']);
|
|
if (!in_array($_SERVER['SERVER_NAME'], $validdomains)) {
|
|
$localkeyvalid = false;
|
|
$localkeyresults['status'] = "Invalid";
|
|
$results = array();
|
|
}
|
|
$validips = explode(',', $results['validip']);
|
|
if (!in_array($usersip, $validips)) {
|
|
$localkeyvalid = false;
|
|
$localkeyresults['status'] = "Invalid";
|
|
$results = array();
|
|
}
|
|
$validdirs = explode(',', $results['validdirectory']);
|
|
if (!in_array($dirpath, $validdirs)) {
|
|
$localkeyvalid = false;
|
|
$localkeyresults['status'] = "Invalid";
|
|
$results = array();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (!$localkeyvalid) {
|
|
$responseCode = 0;
|
|
$postfields = array(
|
|
'licensekey' => $licensekey,
|
|
'domain' => $domain,
|
|
'ip' => $usersip,
|
|
'dir' => $dirpath,
|
|
);
|
|
if ($check_token) $postfields['check_token'] = $check_token;
|
|
$query_string = '';
|
|
foreach ($postfields AS $k=>$v) {
|
|
$query_string .= $k.'='.urlencode($v).'&';
|
|
}
|
|
if (function_exists('curl_exec')) {
|
|
$ch = curl_init();
|
|
curl_setopt($ch, CURLOPT_URL, $whmcsurl . $verifyfilepath);
|
|
curl_setopt($ch, CURLOPT_POST, 1);
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, $query_string);
|
|
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
|
$data = curl_exec($ch);
|
|
$responseCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
|
curl_close($ch);
|
|
} else {
|
|
$responseCodePattern = '/^HTTP\/\d+\.\d+\s+(\d+)/';
|
|
$fp = @fsockopen($whmcsurl, 80, $errno, $errstr, 5);
|
|
if ($fp) {
|
|
$newlinefeed = "\r\n";
|
|
$header = "POST ".$whmcsurl . $verifyfilepath . " HTTP/1.0" . $newlinefeed;
|
|
$header .= "Host: ".$whmcsurl . $newlinefeed;
|
|
$header .= "Content-type: application/x-www-form-urlencoded" . $newlinefeed;
|
|
$header .= "Content-length: ".@strlen($query_string) . $newlinefeed;
|
|
$header .= "Connection: close" . $newlinefeed . $newlinefeed;
|
|
$header .= $query_string;
|
|
$data = $line = '';
|
|
@stream_set_timeout($fp, 20);
|
|
@fputs($fp, $header);
|
|
$status = @socket_get_status($fp);
|
|
while (!@feof($fp)&&$status) {
|
|
$line = @fgets($fp, 1024);
|
|
$patternMatches = array();
|
|
if (!$responseCode
|
|
&& preg_match($responseCodePattern, trim($line), $patternMatches)
|
|
) {
|
|
$responseCode = (empty($patternMatches[1])) ? 0 : $patternMatches[1];
|
|
}
|
|
$data .= $line;
|
|
$status = @socket_get_status($fp);
|
|
}
|
|
@fclose ($fp);
|
|
}
|
|
}
|
|
if ($responseCode != 200) {
|
|
$localexpiry = date("Ymd", mktime(0, 0, 0, date("m"), date("d") - ($localkeydays + $allowcheckfaildays), date("Y")));
|
|
if ($originalcheckdate > $localexpiry) {
|
|
$results = $localkeyresults;
|
|
} else {
|
|
$results = array();
|
|
$results['status'] = "Invalid";
|
|
$results['description'] = "Remote Check Failed";
|
|
return $results;
|
|
}
|
|
} else {
|
|
preg_match_all('/<(.*?)>([^<]+)<\/\\1>/i', $data, $matches);
|
|
$results = array();
|
|
foreach ($matches[1] AS $k=>$v) {
|
|
$results[$v] = $matches[2][$k];
|
|
}
|
|
}
|
|
if (!is_array($results)) {
|
|
die("Invalid License Server Response");
|
|
}
|
|
if ($results['md5hash']) {
|
|
if ($results['md5hash'] != md5($licensing_secret_key . $check_token)) {
|
|
$results['status'] = "Invalid";
|
|
$results['description'] = "MD5 Checksum Verification Failed";
|
|
return $results;
|
|
}
|
|
}
|
|
if ($results['status'] == "Active") {
|
|
$results['checkdate'] = $checkdate;
|
|
$data_encoded = serialize($results);
|
|
$data_encoded = base64_encode($data_encoded);
|
|
$data_encoded = md5($checkdate . $licensing_secret_key) . $data_encoded;
|
|
$data_encoded = strrev($data_encoded);
|
|
$data_encoded = $data_encoded . md5($data_encoded . $licensing_secret_key);
|
|
$data_encoded = wordwrap($data_encoded, 80, "\n", true);
|
|
$results['localkey'] = $data_encoded;
|
|
}
|
|
$results['remotecheck'] = true;
|
|
}
|
|
unset($postfields,$data,$matches,$whmcsurl,$licensing_secret_key,$checkdate,$usersip,$localkeydays,$allowcheckfaildays,$md5hash);
|
|
return $results;
|
|
}
|
|
|
|
function teamspeak_activate()
|
|
{
|
|
try {
|
|
if (!Capsule::schema()->hasTable('modwhmcs_teamspeak_backups')) {
|
|
Capsule::schema()->create('modwhmcs_teamspeak_backups', function ($table) {
|
|
$table->increments('id');
|
|
$table->integer('sid')->nullable();
|
|
$table->integer('port');
|
|
$table->mediumText('data')->nullable();
|
|
$table->timestamp('date')->nullable();
|
|
});
|
|
}
|
|
if (!Capsule::schema()->hasTable('modwhmcs_teamspeak_settings')) {
|
|
Capsule::schema()->create('modwhmcs_teamspeak_settings', function ($table) {
|
|
$table->increments('id');
|
|
$table->mediumInteger('minport');
|
|
$table->mediumInteger('maxport');
|
|
$table->mediumText('servername')->nullable();
|
|
$table->longText('servermsgwelcome')->nullable();
|
|
$table->longText('servermsg')->nullable();
|
|
$table->integer('servermsgmode');
|
|
$table->longText('bannerlinkurl')->nullable();
|
|
$table->longText('bannerimgurl')->nullable();
|
|
$table->integer('bannermode');
|
|
$table->longText('buttonlinkurl')->nullable();
|
|
$table->longText('buttonimgurl')->nullable();
|
|
$table->longText('buttonmsgtooltip')->nullable();
|
|
$table->bigInteger('uploadquota');
|
|
$table->bigInteger('downloadquota');
|
|
$table->bigInteger('uploadbandwidth');
|
|
$table->bigInteger('downloadbandwidth');
|
|
$table->integer('enabletsdns');
|
|
$table->longText('domaintsdns')->nullable();
|
|
$table->longText('urlapi')->nullable();
|
|
$table->longText('keyapi')->nullable();
|
|
});
|
|
Capsule::table('modwhmcs_teamspeak_settings')->insert(array('minport' => 9987, 'maxport' => 999999, 'servername' => 'TeaSpeak Server by Voice4You.org', 'servermsgwelcome' => 'Welcome to Tea(m)Speak, check [URL]teaspeak.de[/URL] for latest information', 'servermsgmode' => 0, 'bannermode' => 0, 'uploadquota' => -1, 'downloadquota' => -1, 'uploadbandwidth' => -1, 'downloadbandwidth' => -1, 'enabletsdns' => 0));
|
|
|
|
}
|
|
} catch (Exception $e) {
|
|
return array('status' => 'error', 'description' => 'It was not possible to create the table. Check your database');
|
|
}
|
|
return array('status' => 'success');
|
|
}
|
|
|
|
function teamspeak_deactivate()
|
|
{
|
|
try {
|
|
Capsule::schema()->dropIfExists('modwhmcs_teamspeak_settings');
|
|
} catch (Exception $e) {
|
|
return array('status' => 'error', 'description' => 'The table could not be deleted. Check your database');
|
|
}
|
|
return array('status' => 'success');
|
|
}
|
|
|
|
function teamspeak_output($vars)
|
|
{
|
|
$license = Capsule::table('tbladdonmodules')->where('module', 'teamspeak')->where('setting', 'license')->value('value');
|
|
$listServers = Capsule::table('tblservers')->where('type', 'teamspeak')->get();
|
|
$servers = array();
|
|
foreach ($listServers as $key => $server) {
|
|
$servers[$key] = new stdClass();
|
|
$servers[$key]->name = $server->name;
|
|
$servers[$key]->ipaddress = $server->ipaddress;
|
|
$servers[$key]->port = ($server->port ? $server->port : 10101);
|
|
$servers[$key]->username = $server->username;
|
|
$servers[$key]->password = $server->password;
|
|
}
|
|
$alert = array();
|
|
$names = array();
|
|
foreach ($servers as $server) {
|
|
$names[$server->name] = md5($server->name);
|
|
}
|
|
|
|
|
|
$licensekey = $vars['key'];
|
|
$localkey = '';
|
|
|
|
// Validate the license key information
|
|
$results = teamspeak_check_license($licensekey, $localkey);
|
|
|
|
|
|
// Raw output of results for debugging purpose
|
|
//echo '<textarea cols="100" rows="20">' . print_r($results, true) . '</textarea>';
|
|
|
|
// Interpret response
|
|
switch ($results['status']) {
|
|
case "Active":
|
|
// get new local key and save it somewhere
|
|
$localkeydata = $results['localkey'];
|
|
break;
|
|
case "Invalid":
|
|
# die("License key is Invalid");
|
|
#break;
|
|
case "Expired":
|
|
#die("License key is Expired");
|
|
#break;
|
|
case "Suspended":
|
|
# die("License key is Suspended");
|
|
#break;
|
|
default:
|
|
#die("Invalid Response");
|
|
#break;
|
|
}
|
|
|
|
|
|
|
|
$output = '';
|
|
if (!isset($_GET['display'])) {
|
|
$output .= "<script src='../modules/addons/teamspeak/js/script.js'></script><script type=\"text/javascript\">
|
|
$(document).ready(function () {
|
|
var servers = " . json_encode($names) . ";
|
|
var server, hash;
|
|
for (var key in servers) {
|
|
server = key;
|
|
hash = servers[key];
|
|
test(server, hash);
|
|
(function loop(server, hash) {
|
|
setTimeout(function () {
|
|
test(server, hash);
|
|
loop(server, hash);
|
|
}, 10000);
|
|
})(server, hash);
|
|
}
|
|
});
|
|
</script>";
|
|
}
|
|
if (isset($_POST['action']) && $_POST['action'] == 'savesettings') {
|
|
try {
|
|
if (!Capsule::table('modwhmcs_teamspeak_settings')->where('id', 1)->update(array('minport' => $_POST['minport'], 'maxport' => $_POST['maxport'], 'servername' => $_POST['servername'], 'servermsgwelcome' => $_POST['servermsgwelcome'], 'servermsg' => $_POST['servermsg'], 'servermsgmode' => $_POST['servermsgmode'], 'bannerlinkurl' => $_POST['bannerlinkurl'], 'bannerimgurl' => $_POST['bannerimgurl'], 'bannermode' => $_POST['bannermode'], 'buttonlinkurl' => $_POST['buttonlinkurl'], 'buttonimgurl' => $_POST['buttonimgurl'], 'buttonmsgtooltip' => $_POST['buttonmsgtooltip'], 'uploadquota' => $_POST['uploadquota'], 'downloadquota' => $_POST['downloadquota'], 'uploadbandwidth' => $_POST['uploadbandwidth'], 'downloadbandwidth' => $_POST['downloadbandwidth'], 'enabletsdns' => $_POST['enabletsdns'], 'domaintsdns' => $_POST['domaintsdns'], 'urlapi' => $_POST['urlapi'], 'keyapi' => $_POST['keyapi']))) {
|
|
throw new Exception('Settings cannot be saved');
|
|
}
|
|
} catch (Exception $e) {
|
|
$alert['status'] = 'error';
|
|
$alert['alert'] = $e->getMessage();
|
|
}
|
|
$alert['status'] = 'success';
|
|
$alert['alert'] = 'The settings have been saved';
|
|
}
|
|
$update = file_get_contents('https://voice4you.org/updater/teaspeak_version.txt');
|
|
|
|
if($update != $vars['version']){
|
|
$output .= "<link href='../modules/addons/teamspeak/css/style.css' rel='stylesheet'/><div class='panel panel-default teamspeak'><div class='panel-heading'><span class='pull-right verify-status' style='display: none'><i class='fa fa-spinner fa-spin'></i> ".$vars['_lang']['checking_servers']."</span></div><div class='panel-body'><div class='row'><div class='col-sm-6'><div class='head'><div class='icon'><i class='fa fa-cogs'></i></div><div class='head-name'>TeaSpeak Provisioning </div></div></div><div class='col-sm-12'><div class='row version-status'><div class='col-sm-4'><div class='panel panel-info'><div class='panel-heading text-center'>".$vars['_lang']['installed_version']."</div><div class='panel-body text-center'><strong class='text-info'>{$vars['version']}</strong></div></div></div><div class='row update-status'><div class='col-sm-4'><div class='panel panel-info'><div class='panel-heading text-center'>".$vars['_lang']['new_version']."</div><div class='panel-body text-center'>".$vars['_lang']['new_version_aviable']."</div></div></div>";
|
|
}else{
|
|
$output .= "<link href='../modules/addons/teamspeak/css/style.css' rel='stylesheet'/><div class='panel panel-default teamspeak'><div class='panel-heading'><span class='pull-right verify-status' style='display: none'><i class='fa fa-spinner fa-spin'></i> ".$vars['_lang']['checking_servers']."</span></div><div class='panel-body'><div class='row'><div class='col-sm-6'><div class='head'><div class='icon'><i class='fa fa-cogs'></i></div><div class='head-name'>TeaSpeak Provisioning </div></div></div><div class='col-sm-12'><div class='row version-status'><div class='col-sm-4'><div class='panel panel-info'><div class='panel-heading text-center'>".$vars['_lang']['installed_version']."</div><div class='panel-body text-center'><strong class='text-info'>{$vars['version']}</strong></div></div></div><div class='row update-status'><div class='col-sm-4'><div class='panel panel-info'><div class='panel-heading text-center'>".$vars['_lang']['new_version']."</div><div class='panel-body text-center'>".$vars['_lang']['no_new_version_aviable']."</div></div></div>";
|
|
|
|
}
|
|
if (!isset($_GET['display'])) {
|
|
$output .= "";
|
|
$output .= "<div class='row'><div class='col-sm-12'><ul class=\"nav nav-tabs\" role=\"tablist\"><li role=\"presentation\" " . ($_POST['action'] == 'savesettings' ? '' : 'class="active"') . "><a href=\"#servers\" aria-controls=\"servers\" role=\"tab\" data-toggle=\"tab\">".$vars['_lang']['servers']."</a></li><li role=\"presentation\" " . (!$_POST['action'] == 'savesettings' ? '' : 'class="active"') . "><a href=\"#settings\" aria-controls=\"settings\" role=\"tab\" data-toggle=\"tab\">".$vars['_lang']['settings']."</a></li></ul><div class=\"tab-content\"><div role=\"tabpanel\" class=\"tab-pane" . ($_POST['action'] == 'savesettings' ? '' : ' active') . "\" id=\"servers\"><div class=\"table-responsive\"><table class='table table-condensed'><thead><tr><th class='text-center'>#</th><th>".$vars['_lang']['servers_name']."</th><th>".$vars['_lang']['ip_address']."</th><th>ServerQuery Port</th><th><i class='fa fa-cogs'></i> ".$vars['_lang']['manage']." </th></tr></thead><tbody>";
|
|
$i = 1;
|
|
foreach ($servers as $server) {
|
|
$output .= "<tr id='" . md5($server->name) . "'><td class='text-center'>{$i}</td>";
|
|
$output .= "<td>{$server->name}</td>";
|
|
$output .= "<td>{$server->ipaddress}</td>";
|
|
$output .= "<td>{$server->port}</td>";
|
|
$output .= "<td><span class='manager show invisible'><a href='addonmodules.php?module=teamspeak&display=virtualservers&serverip={$server->ipaddress}' class='btn btn-primary btn-xs'><i class='fa fa-server'></i> TeaSpeak</a> <a href='addonmodules.php?module=teamspeak&display=tsdns&serverip={$server->ipaddress}' class='btn btn-danger btn-xs'><i class='fa fa-link'></i> TSDNS</a></span></td></tr>";
|
|
$i++;
|
|
}
|
|
$output .= "</tbody></table></div></div><div role=\"tabpanel\" class=\"tab-pane" . (!$_POST['action'] == 'savesettings' ? '' : ' active') . "\" id=\"settings\"><div class='alert alert-info'>".$vars['_lang']['setting_info']."<i class='fa fa-info fa-2x pull-left' style='padding:5px'></i></div>";
|
|
$settings = Capsule::table('modwhmcs_teamspeak_settings')->first();
|
|
switch ($settings->servermsgmode) {
|
|
case 1:
|
|
$selectm1 = 'selected';
|
|
break;
|
|
case 2:
|
|
$selectm2 = 'selected';
|
|
break;
|
|
case 3:
|
|
$selectm3 = 'selected';
|
|
break;
|
|
default:
|
|
$selectm0 = 'selected';
|
|
break;
|
|
}
|
|
switch ($settings->bannermode) {
|
|
case 1:
|
|
$selectb1 = 'selected';
|
|
break;
|
|
case 2:
|
|
$selectb2 = 'selected';
|
|
break;
|
|
default:
|
|
$selectb0 = 'selected';
|
|
break;
|
|
}
|
|
if ($settings->enabletsdns) {
|
|
$check1 = 'checked';
|
|
} else {
|
|
$check0 = 'checked';
|
|
}
|
|
if (!empty($alert)) {
|
|
$output .= "<div class='row'><div class='col-md-6 col-md-offset-3'>";
|
|
if ($alert['status'] == 'error') {
|
|
$output .= "<div class='alert alert-danger'><button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-label=\"Close\"><span aria-hidden=\"true\">×</span></button><p><strong><i class='fa fa-frown-o fa-4x pull-left'></i>".$vars['_lang']['alert_ops_something_happened']."</strong></p>{$alert['alert']}</div>";
|
|
} else {
|
|
$output .= "<div class='alert alert-success'><button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-label=\"Close\"><span aria-hidden=\"true\">×</span></button><p><strong><i class='fa fa-smile-o fa-4x pull-left'></i>".$vars['_lang']['alert_congratulations_everything_worked']."</strong></p>{$alert['alert']}</div>";
|
|
}
|
|
$output .= "</div></div>";
|
|
}
|
|
$output .= "<form class=\"form-horizontal\" method='post' action='addonmodules.php?module=teamspeak'>
|
|
<input type='hidden' name='module' value='teamspeak'>
|
|
<input type='hidden' name='action' value='savesettings'>
|
|
<div class='row'>
|
|
<div class='col-md-8 col-md-offset-2'>
|
|
<fieldset>
|
|
<legend class='text-center'>".$vars['_lang']['globaly_instance_settings']."</legend>
|
|
<div class=\"form-group\">
|
|
<label for=\"minport\" class=\"col-sm-3 control-label\">".$vars['_lang']['min_port']."</label>
|
|
<div class=\"col-sm-9\">
|
|
<input type=\"text\" class=\"form-control\" name='minport' id=\"minport\" value='{$settings->minport}'>
|
|
</div>
|
|
</div>
|
|
<div class=\"form-group\">
|
|
<label for=\"maxport\" class=\"col-sm-3 control-label\">".$vars['_lang']['max_port']."</label>
|
|
<div class=\"col-sm-9\">
|
|
<input type=\"text\" class=\"form-control\" name='maxport' id=\"maxport\" value='{$settings->maxport}'>
|
|
</div>
|
|
</div>
|
|
<div class=\"form-group\">
|
|
<label for=\"servername\" class=\"col-sm-3 control-label\">".$vars['_lang']['servers_name']."</label>
|
|
<div class=\"col-sm-9\">
|
|
<input type=\"text\" class=\"form-control\" name='servername' id=\"servername\" value='{$settings->servername}'>
|
|
<span class=\"help-block\">".$vars['_lang']['servers_name_info']."</span>
|
|
</div>
|
|
</div>
|
|
<div class=\"form-group\">
|
|
<label for=\"servermsgwelcome\" class=\"col-sm-3 control-label\">".$vars['_lang']['welcome_message']."</label>
|
|
<div class=\"col-sm-9\">
|
|
<input type=\"text\" class=\"form-control\" name='servermsgwelcome' id=\"servermsgwelcome\" value='{$settings->servermsgwelcome}'>
|
|
<span class='help-block'>".$vars['_lang']['welcome_message_info']."</span>
|
|
</div>
|
|
</div>
|
|
<div class=\"form-group\">
|
|
<label for=\"servermsg\" class=\"col-sm-3 control-label\">".$vars['_lang']['servers_message']."</label>
|
|
<div class=\"col-sm-9\">
|
|
<input type=\"text\" class=\"form-control\" name='servermsg' id=\"servermsg\" value='{$settings->servermsg}'>
|
|
<span class='help-block'>".$vars['_lang']['servers_message_info']."</span>
|
|
</div>
|
|
</div>
|
|
<div class=\"form-group\">
|
|
<label for=\"servermsgmode\" class=\"col-sm-3 control-label\">".$vars['_lang']['servers_message_display_mode']."</label>
|
|
<div class=\"col-sm-9\">
|
|
<select name='servermsgmode' id=\"servermsgmode\" class=\"form-control\"><option value='0' {$selectm0}>".$vars['_lang']['servers_message_display_mode_not_shown']."</option><option value='1' {$selectm1}>".$vars['_lang']['servers_message_display_mode_in_chat']."</option><option value='2' {$selectm2}>".$vars['_lang']['servers_message_display_in_modal']."</option><option value='3' [$selectm3]>".$vars['_lang']['servers_message_display_in_modal_and_leave']."</option></select>
|
|
</div>
|
|
</div>
|
|
</fieldset>
|
|
<fieldset>
|
|
<legend class='text-center'>".$vars['_lang']['servers_banner']."</legend>
|
|
<div class=\"form-group\">
|
|
<label for=\"bannerlinkurl\" class=\"col-sm-3 control-label\">".$vars['_lang']['servers_banner_link_url']."</label>
|
|
<div class=\"col-sm-9\">
|
|
<input type=\"text\" class=\"form-control\" name='bannerlinkurl' id=\"bannerlinkurl\" value=\"{$settings->bannerlinkurl}\">
|
|
</div>
|
|
</div>
|
|
<div class=\"form-group\">
|
|
<label for=\"bannerimgurl\" class=\"col-sm-3 control-label\">".$vars['_lang']['servers_banner_image_url']."</label>
|
|
<div class=\"col-sm-9\">
|
|
<input type=\"text\" class=\"form-control\" name='bannerimgurl' id=\"bannerimgurl\" value=\"{$settings->bannerimgurl}\">
|
|
</div>
|
|
</div>
|
|
<div class=\"form-group\">
|
|
<label for=\"bannermode\" class=\"col-sm-3 control-label\">".$vars['_lang']['servers_banner_display_mode']."</label>
|
|
<div class=\"col-sm-9\">
|
|
<select name='bannermode' id=\"bannermode\" class=\"form-control\"><option value='0' {$selectb0}>".$vars['_lang']['servers_banner_display_mode_not_resize']."</option><option value='1' {$selectb1}>".$vars['_lang']['servers_banner_display_mode_ignoring_aspect']."</option><option value='2' {$selectb2}>".$vars['_lang']['servers_banner_display_mode_maintaining_appearance']."</option></select>
|
|
</div>
|
|
</div>
|
|
</fieldset>
|
|
<fieldset>
|
|
<legend class='text-center'>".$vars['_lang']['servers_button']."</legend>
|
|
<div class=\"form-group\">
|
|
<label for=\"buttonlinkurl\" class=\"col-sm-3 control-label\">".$vars['_lang']['servers_banner_link_url']."</label>
|
|
<div class=\"col-sm-9\">
|
|
<input type=\"text\" class=\"form-control\" name='buttonlinkurl' id=\"buttonlinkurl\" value=\"{$settings->buttonlinkurl}\">
|
|
</div>
|
|
</div>
|
|
<div class=\"form-group\">
|
|
<label for=\"buttonimgurl\" class=\"col-sm-3 control-label\">".$vars['_lang']['servers_button_image_url']."</label>
|
|
<div class=\"col-sm-9\">
|
|
<input type=\"text\" class=\"form-control\" name='buttonimgurl' id=\"buttonimgurl\" value=\"{$settings->buttonimgurl}\">
|
|
</div>
|
|
</div>
|
|
<div class=\"form-group\">
|
|
<label for=\"buttonmsgtootlip\" class=\"col-sm-3 control-label\">".$vars['_lang']['servers_banner_message_tooltip']."</label>
|
|
<div class=\"col-sm-9\">
|
|
<input type=\"text\" class=\"form-control\" name='buttonmsgtooltip' id=\"buttonmsgtooltip\" value=\"{$settings->buttonmsgtooltip}\">
|
|
</div>
|
|
</div>
|
|
</fieldset>
|
|
<fieldset>
|
|
<legend class='text-center'>".$vars['_lang']['servers_file_transfer']."</legend>
|
|
<div class=\"form-group\">
|
|
<label for=\"uploadquota\" class=\"col-sm-3 control-label\">".$vars['_lang']['servers_file_transfer_upload_quota']."</label>
|
|
<div class=\"col-sm-9\">
|
|
<input type=\"text\" class=\"form-control\" name='uploadquota' id=\"uploadquota\" value=\"{$settings->uploadquota}\">
|
|
</div>
|
|
</div>
|
|
<div class=\"form-group\">
|
|
<label for=\"downloadquota\" class=\"col-sm-3 control-label\">".$vars['_lang']['servers_file_transfer_download_quota']."</label>
|
|
<div class=\"col-sm-9\">
|
|
<input type=\"text\" class=\"form-control\" name='downloadquota' id=\"downloadquota\" value=\"{$settings->downloadquota}\">
|
|
</div>
|
|
</div>
|
|
<div class=\"form-group\">
|
|
<label for=\"uploadbandwidth\" class=\"col-sm-3 control-label\">".$vars['_lang']['servers_file_transfer_max_upload_speed']."</label>
|
|
<div class=\"col-sm-9\">
|
|
<input type=\"text\" class=\"form-control\" name='uploadbandwidth' id=\"uploadbandwidth\" value=\"{$settings->uploadbandwidth}\">
|
|
</div>
|
|
</div>
|
|
<div class=\"form-group\">
|
|
<label for=\"downloadbandwidth\" class=\"col-sm-3 control-label\">".$vars['_lang']['servers_file_transfer_max_download_speed']."</label>
|
|
<div class=\"col-sm-9\">
|
|
<input type=\"text\" class=\"form-control\" name='downloadbandwidth' id=\"downloadbandwidth\" value=\"{$settings->downloadbandwidth}\">
|
|
</div>
|
|
</div>
|
|
</fieldset>
|
|
<fieldset>
|
|
<legend class='text-center'>".$vars['_lang']['teamspeak_dns']."</legend>
|
|
<div class=\"form-group\">
|
|
<label class=\"col-sm-3 control-label\">".$vars['_lang']['teamspeak_dns_enable']."</label>
|
|
<div class=\"col-sm-9\">
|
|
<label class=\"radio-inline\">
|
|
<input type=\"radio\" name=\"enabletsdns\" id=\"1\" value=\"1\" {$check1}> ".$vars['_lang']['yes']."
|
|
</label>
|
|
<label class=\"radio-inline\">
|
|
<input type=\"radio\" name=\"enabletsdns\" id=\"0\" value=\"0\" {$check0}> ".$vars['_lang']['no']."
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<div class=\"form-group\">
|
|
<label for=\"domaintsdns\" class=\"col-sm-3 control-label\">".$vars['_lang']['teamspeak_dns_domain']."</label>
|
|
<div class=\"col-sm-9\">
|
|
<input type=\"text\" class=\"form-control\" name='domaintsdns' id=\"domaintsdns\" value=\"{$settings->domaintsdns}\">
|
|
<span class=\"help-block\">".$vars['_lang']['teamspeak_dns_domain_info']."</span>
|
|
</div>
|
|
</div>
|
|
<div class=\"form-group\">
|
|
<label for=\"urlapi\" class=\"col-sm-3 control-label\">".$vars['_lang']['teamspeak_dns_adress']."</label>
|
|
<div class=\"col-sm-9\">
|
|
<input type=\"text\" class=\"form-control\" name='urlapi' id=\"urlapi\" value=\"{$settings->urlapi}\">
|
|
<span class=\"help-block\">".$vars['_lang']['teamspeak_dns_adress_info']."</span>
|
|
</div>
|
|
</div>
|
|
<div class=\"form-group\">
|
|
<label for=\"keyapi\" class=\"col-sm-3 control-label\">".$vars['_lang']['teamspeak_dns_api_key']."</label>
|
|
<div class=\"col-sm-9\">
|
|
<input type=\"text\" class=\"form-control\" name='keyapi' id=\"keyapi\" value=\"{$settings->keyapi}\">
|
|
</div>
|
|
</div>
|
|
</fieldset>
|
|
<hr>
|
|
<div class=\"form-group\">
|
|
<div class=\"col-sm-offset-2 col-sm-8\">
|
|
<button type=\"submit\" class=\"btn btn-default center-block\"><i class='fa fa-floppy-o'></i> Save</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</form></div></div></div></div>";
|
|
} elseif (isset($_GET['display'])) {
|
|
switch ($_GET['display']) {
|
|
case 'virtualservers':
|
|
$serververif = '';
|
|
foreach ($servers as $server) {
|
|
if ($server->ipaddress == $_GET['serverip']) {
|
|
$command = "decryptpassword";
|
|
$values["password2"] = $server->password;
|
|
|
|
$results1 = localAPI($command, $values);
|
|
$server->password = $results1['password'];
|
|
$serververif = $server;
|
|
}
|
|
}
|
|
$tsAdmin = new TeamSpeak($serververif->ipaddress, $serververif->port);
|
|
$tsAdmin->connect();
|
|
$tsAdmin->login($serververif->username, $serververif->password);
|
|
if (isset($_GET['action'], $_GET['sid'])) {
|
|
switch ($_GET['action']) {
|
|
case 'start':
|
|
if (!$tsAdmin->getElement('success', $status = $tsAdmin->serverStart($_GET['sid']))) {
|
|
$alert['status'] = "".$vars['_lang']['error']."";
|
|
$alert['alert'] = "".$vars['_lang']['error_server_cant_start']."";
|
|
} else {
|
|
$alert['status'] = "".$vars['_lang']['success']."";
|
|
$alert['alert'] = "".$vars['_lang']['success_start']."";
|
|
}
|
|
break;
|
|
case 'stop':
|
|
if (!$tsAdmin->getElement('success', $status = $tsAdmin->serverStop($_GET['sid']))) {
|
|
$alert['status'] = "".$vars['_lang']['error']."";
|
|
$alert['alert'] = "".$vars['_lang']['error_server_cant_stop']."";
|
|
} else {
|
|
$alert['status'] = "".$vars['_lang']['success']."";
|
|
$alert['alert'] = "".$vars['_lang']['success_stop']."";
|
|
}
|
|
break;
|
|
case 'delete':
|
|
if (!$tsAdmin->getElement('success', $status = $tsAdmin->serverDelete($_GET['sid']))) {
|
|
$alert['status'] = "".$vars['_lang']['error']."";
|
|
$alert['alert'] = "".$vars['_lang']['error_server_cant_deleted']."";
|
|
} else {
|
|
$alert['status'] = "".$vars['_lang']['success']."";
|
|
$alert['alert'] = "".$vars['_lang']['success_deleted']."";
|
|
}
|
|
break;
|
|
break;
|
|
default :
|
|
break;
|
|
}
|
|
if (!empty($alert)) {
|
|
$output .= "<div class='row'><div class='col-md-6 col-md-offset-3'>";
|
|
if ($alert['status'] == 'error') {
|
|
$output .= "<div class='alert alert-danger'><a href='addonmodules.php?module=teamspeak&display=virtualservers&serverip={$_GET['serverip']}' class='btn btn-danger pull-right'><i class='fa fa-arrow-left'></i> ".$vars['_lang']['back_home']."</a><p><strong><i class='fa fa-frown-o fa-4x pull-left'></i>".$vars['_lang']['alert_ops_something_happened']."</strong></p>{$alert['alert']}</div>";
|
|
} else {
|
|
$output .= "<div class='alert alert-success'><a href='addonmodules.php?module=teamspeak&display=virtualservers&serverip={$_GET['serverip']}' class='btn btn-success pull-right'><i class='fa fa-arrow-left'></i> ".$vars['_lang']['back_home']."</a><p><strong><i class='fa fa-smile-o fa-4x pull-left'></i>".$vars['_lang']['alert_congratulations_everything_worked']."</strong></p>{$alert['alert']}</div>";
|
|
}
|
|
$output .= "</div></div>";
|
|
}
|
|
} else {
|
|
$serverlist = $tsAdmin->serverList();
|
|
$output .= "<a href='addonmodules.php?module=teamspeak' class='btn btn-info pull-right'><i class='fa fa-arrow-left'></i> ".$vars['_lang']['back_home']."</a><div class='clearfix'></div><br><div class='table-responsive'><table class='table'><thead><tr><th>#</th><th><i class='fa fa-server'></i> ".$vars['_lang']['servers_name']."</th><th><i class='fa fa-plug'></i> ".$vars['_lang']['port']."</th><th><i class='fa fa-users'></i> ".$vars['_lang']['slot']."</th><th><i class='fa fa-bar-chart'></i> ".$vars['_lang']['status']."</th><th><i class='fa fa-clock-o'></i> ".$vars['_lang']['uptime']."</th><th><i class='fa fa-cogs'></i> ".$vars['_lang']['manage']."</th></tr></thead><tbody>";
|
|
if ($serverlist['data']) {
|
|
foreach ($serverlist['data'] as $server) {
|
|
$output .= "<tr><td>{$server['virtualserver_id']}</td><td>{$server['virtualserver_name']}</td><td>{$server['virtualserver_port']}</td><td>{$server['virtualserver_maxclients']}</td><td>" . ucfirst($server['virtualserver_status']) . "</td><td>" . $server['virtualserver_uptime'] . "</td><td>";
|
|
if ($server['virtualserver_status'] != 'online') {
|
|
$output .= "<a href='addonmodules.php?module=teamspeak&display=virtualservers&serverip={$serververif->ipaddress}&action=start&sid={$server['virtualserver_id']}' class='btn btn-success btn-xs'><i class='fa fa-play'></i> ".$vars['_lang']['start']."</a>";
|
|
} else {
|
|
$output .= "<a href='addonmodules.php?module=teamspeak&display=virtualservers&serverip={$serververif->ipaddress}&action=stop&sid={$server['virtualserver_id']}' class='btn btn-warning btn-xs'><i class='fa fa-stop'></i> ".$vars['_lang']['stop']."</a>";
|
|
}
|
|
$output .= " <a href='addonmodules.php?module=teamspeak&display=virtualservers&serverip={$serververif->ipaddress}&action=delete&sid={$server['virtualserver_id']}' class='btn btn-danger btn-xs'><i class='fa fa-times'></i> ".$vars['_lang']['delete']."</a>";
|
|
$output .= "</td></tr>";
|
|
}
|
|
} else {
|
|
$output .= "<tr><td colspan='4' class='text-center'>".$vars['_lang']['error_no_servers']."</td></tr>";
|
|
}
|
|
$output .= "</table></div>";
|
|
}
|
|
break;
|
|
case 'tsdns':
|
|
$settings = Capsule::table('modwhmcs_teamspeak_settings')->select('urlapi', 'keyapi')->first();
|
|
try {
|
|
$tsdnsClient = new TSDNS($settings->urlapi, $settings->keyapi);
|
|
$request = $tsdnsClient->getZones();
|
|
$serverstsdns = json_decode($request->body);
|
|
$serverscurrent = array();
|
|
foreach ($serverstsdns->message as $server) {
|
|
$serverip = explode(':', $server->target);
|
|
if ($serverip[0] == $_GET['serverip']) {
|
|
$serverscurrent[] = $server;
|
|
}
|
|
}
|
|
if (isset($_GET['action'], $_GET['zone'])) {
|
|
|
|
switch ($_GET['action']) {
|
|
case 'editzone' :
|
|
foreach ($serverscurrent as $server) {
|
|
if ($server->zone == $_GET['zone']) {
|
|
throw new Exception('There is informed zone already exists.');
|
|
}
|
|
}
|
|
$tsdnsClient->deleteZone($_GET['oldzone']);
|
|
$result = $tsdnsClient->addZone($_GET['zone'], $_GET['target']);
|
|
if (!$result->success) {
|
|
throw new Exception('The zone could not be edited.');
|
|
} else {
|
|
$alert['status'] = 'success';
|
|
$alert['alert'] = 'Zone has been edited.';
|
|
}
|
|
break;
|
|
case 'delzone' :
|
|
$result = $tsdnsClient->deleteZone($_GET['zone']);
|
|
if (!$result->success) {
|
|
throw new Exception('The zone could not be deleted.');
|
|
} else {
|
|
$alert['status'] = 'success';
|
|
$alert['alert'] = 'Zone has been deleted.';
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
} else {
|
|
$output .= "<a href='addonmodules.php?module=teamspeak' class='btn btn-info pull-right'><i class='fa fa-arrow-left'></i> ".$vars['_lang']['back_home']."</a><div class='clearfix'></div><br><div class='table-responsive'><table class='table table-condensed'><thead><tr><th>#</th><th><i class='fa fa-globe'></i> ".$vars['_lang']['zone']."</th><th><i class='fa fa-dot-circle-o'></i> ".$vars['_lang']['destination']."</th><th><i class='fa fa-cogs'></i> ".$vars['_lang']['manage']."</th></tr></thead><tbody>";
|
|
if ($serverscurrent) {
|
|
foreach ($serverscurrent as $server) {
|
|
$output .= "<tr><td>{$server->id}</td><td>{$server->zone}</td><td>{$server->target}</td><td><a class=\"btn btn-primary btn-xs\" role=\"button\" data-toggle=\"modal\" data-target=\"#" . md5($server->zone) . "\" aria-expanded=\"false\" aria-controls=\"" . md5($server->zone) . "\"><i class='fa fa-pencil-square-o'></i> ".$vars['_lang']['edit']."</a> <a href='' class='btn btn-danger btn-xs' role=\"button\" data-toggle=\"modal\" data-target=\"#del" . md5($server->zone) . "\" aria-expanded=\"false\" aria-controls=\"del" . md5($server->zone) . "\"><i class='fa fa-times'></i> ".$vars['_lang']['delete']."</a></td></tr>";
|
|
}
|
|
} else {
|
|
$output .= "<tr><td colspan='4' class='text-center'>".$vars['_lang']['error_no_zones']."</td></tr>";
|
|
}
|
|
$output .= "</tbody></table></div>";
|
|
foreach ($serverscurrent as $server) {
|
|
$output .= "<div class='modal fade' id='" . md5($server->zone) . "' tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"" . md5($server->zone) . "Label\"><div class=\"modal-dialog\" role=\"document\"><div class=\"modal-content\"><div class=\"modal-header\"><button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">×</span></button><h4 class=\"modal-title\" id=\"" . md5($server->zone) . "Label\">".$vars['_lang']['edit_zone']."</h4></div><form method='get' action='addonmodules.php' class='form-horizontal'><input type='hidden' name='module' value='teamspeak'/><input type='hidden' name='display' value='tsdns'/><input type='hidden' name='serverip' value='{$_GET['serverip']}'/><input type='hidden' name='action' value='editzone'/><input type='hidden' name='oldzone' value='{$server->zone}'/><div class=\"modal-body\"><div class='form-group'><label for='zone' class='col-sm-2 control-label'>".$vars['_lang']['zone']."</label><div class='col-sm-5'><input type='text' class='form-control' name='zone' id='zone' value='{$server->zone}'/></div></div><div class='form-group'><label for='target' class='col-sm-2 control-label'>".$vars['_lang']['destination']."</label><div class='col-sm-5'><input type='text' class='form-control' name='target' id='target' value='{$server->target}'/></div></div></div><div class=\"modal-footer\"><button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\"><i class='fa fa-times'></i> ".$vars['_lang']['close']."</button><button type='submit' class='btn btn-success'><i class='fa fa-floppy-o'></i> ".$vars['_lang']['to_save']."</button></div></form></div></div></div>";
|
|
}
|
|
foreach ($serverscurrent as $server) {
|
|
$output .= "<div class='modal fade' id='del" . md5($server->zone) . "' tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"del" . md5($server->zone) . "Label\"><div class=\"modal-dialog\" role=\"document\"><div class=\"modal-content\"><div class=\"modal-header\"><button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">×</span></button><h4 class=\"modal-title\" id=\"del" . md5($server->zone) . "Label\">".$vars['_lang']['zone_exclusion_confirm']."</h4></div><form method='get' action='addonmodules.php' class='form-horizontal'><input type='hidden' name='module' value='teamspeak'/><input type='hidden' name='display' value='tsdns'/><input type='hidden' name='serverip' value='{$_GET['serverip']}'/><input type='hidden' name='action' value='delzone'/><input type='hidden' name='zone' value='{$server->zone}'/><div class=\"modal-body\"><h2>".$vars['_lang']['zone_delete_info']." \"<strong><u>{$server->zone}</u></strong>\" click \"Delete \"".$vars['_lang']['zone_delete_info_1']."</h2></div><div class=\"modal-footer\"><button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\"><i class='fa fa-times'></i> ".$vars['_lang']['close']."</button><button type='submit' class='btn btn-danger'><i class='fa fa-trash'></i> ".$vars['_lang']['delete']."</button></div></form></div></div></div>";
|
|
}
|
|
}
|
|
} catch (Exception $e) {
|
|
$alert['status'] = 'error';
|
|
$alert['alert'] .= $e->getMessage();
|
|
}
|
|
if (!empty($alert)) {
|
|
$output .= "<div class='row'><div class='col-md-6 col-md-offset-3'>";
|
|
if ($alert['status'] == 'error') {
|
|
$output .= "<div class='alert alert-danger'><a href='addonmodules.php?module=teamspeak' class='btn btn-danger pull-right'><i class='fa fa-arrow-left'></i> ".$vars['_lang']['back_home']."</a><p><strong><i class='fa fa-frown-o fa-4x pull-left'></i>".$vars['_lang']['alert_ops_something_happened']."</strong></p>{$alert['alert']}</div>";
|
|
} else {
|
|
$output .= "<div class='alert alert-success'><a href='addonmodules.php?module=teamspeak&display=tsdns&serverip={$_GET['serverip']}' class='btn btn-success pull-right'><i class='fa fa-arrow-left'></i> ".$vars['_lang']['back_home']."</a><p><strong><i class='fa fa-smile-o fa-4x pull-left'></i>".$vars['_lang']['alert_congratulations_everything_worked']."</strong></p>{$alert['alert']}</div>";
|
|
}
|
|
$output .= "</div></div>";
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
$output .= " </div ></div ></div > ";
|
|
echo $output;
|
|
} |