Frist Version
This commit is contained in:
104
WHMCS/modules/servers/shadowsocks/clientarea.tpl
Normal file
104
WHMCS/modules/servers/shadowsocks/clientarea.tpl
Normal file
@@ -0,0 +1,104 @@
|
||||
<script src="https://www.gourdata.com/theme/javascript/layer/layer.js"></script>
|
||||
<div style="font-size:12px;text-align:center">
|
||||
<div style="position: relative; overflow: auto; text-align: right; margin:-10px 0 15px 0; font-size: 10px; color: #999;">
|
||||
* 刷新页面可以获取最新的数据,但并非必要的情况下请勿频繁刷新
|
||||
</div>
|
||||
<script>
|
||||
jQuery(document).ready(function($) {
|
||||
$("a[name='qrcode']").on('click',function() {
|
||||
str = $(this).attr('data-qrcode');
|
||||
str = 'ss://' + str;
|
||||
layer.open({
|
||||
type: 1,
|
||||
title: $(this).attr('data-title'),
|
||||
shade: [0.8, '#000'],
|
||||
skin: 'layui-layer-demo',
|
||||
closeBtn: 1,
|
||||
shift: 2,
|
||||
shadeClose: true,
|
||||
content: '<img style="width: 100%; height: 100%;" src="https://www.gourdata.com/qr?' + str + '"/><div style="position: relative; overflow: auto; text-align: center; margin-bottom: 10px; font-size: 12px;">请使用 Shadowsocks 客户端进行扫描</div>'
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<table style="width:100%;border:1px solid #e9e9e9;border-bottom:0;border-collapse:separate;border-spacing:0;border-radius:5px;color:#999;font-size:12px;margin-bottom:5px;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="text-align:center;padding:8px 10px;background-color:#fcfcfc;border-bottom:1px solid #e9e9e9">
|
||||
端口
|
||||
</td>
|
||||
<td style="text-align:center;padding:8px 10px;background-color:#fcfcfc;border-bottom:1px solid #e9e9e9">
|
||||
已消耗的上传流量
|
||||
</td>
|
||||
<td style="text-align:center;padding:8px 10px;background-color:#fcfcfc;border-bottom:1px solid #e9e9e9">
|
||||
已消耗的下载流量
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align:center;padding:10px 15px;border-right:1px solid #e9e9e9;border-bottom:1px solid #e9e9e9">
|
||||
{$port}
|
||||
</td>
|
||||
<td style="text-align:center;padding:10px 15px;border-right:1px solid #e9e9e9;border-bottom:1px solid #e9e9e9">
|
||||
{$traffic_upload} <span style="color:#BBB;">Kilobyte (KB)</span>
|
||||
</td>
|
||||
<td style="text-align:center;padding:10px 15px;border-bottom:1px solid #e9e9e9">
|
||||
{$traffic_download} <span style="color:#BBB;">Kilobyte (KB)</span>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<table style="width:100%;border:1px solid #e9e9e9;border-bottom:0;border-collapse:separate;border-spacing:0;border-radius:5px;color:#999;font-size:12px;margin-bottom:5px;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="text-align:center;padding:8px 10px;background-color:#fcfcfc;border-bottom:1px solid #e9e9e9">
|
||||
每月流量
|
||||
</td>
|
||||
<td style="text-align:center;padding:8px 10px;background-color:#fcfcfc;border-bottom:1px solid #e9e9e9">
|
||||
剩余流量
|
||||
</td>
|
||||
<td style="text-align:center;padding:8px 10px;background-color:#fcfcfc;border-bottom:1px solid #e9e9e9">
|
||||
最后连接
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align:center;padding:10px 15px;border-right:1px solid #e9e9e9;border-bottom:1px solid #e9e9e9">
|
||||
{$traffic} <span style="color:#BBB;">Megabyte (MB)</span>
|
||||
</td>
|
||||
<td style="text-align:center;padding:10px 15px;border-right:1px solid #e9e9e9;border-bottom:1px solid #e9e9e9">
|
||||
{$traffic_free} <span style="color:#BBB;">Megabyte (MB)</span>
|
||||
</td>
|
||||
<td style="text-align:center;padding:10px 15px;border-bottom:1px solid #e9e9e9">
|
||||
{$last_year} <span style="color:#BBB;">年</span> {$last_month} <span style="color:#BBB;">月</span> {$last_day} <span style="color:#BBB;">日</span>, <span style="color:#BBB;">{$times}</span> {$last_time} <span style="color:#BBB;">分</span>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<table style="width:100%;border:1px solid #e9e9e9;border-bottom:0;border-collapse:separate;border-spacing:0;border-radius:5px;color:#999">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="padding:8px 10px;background-color:#fcfcfc;border-bottom:1px solid #e9e9e9">
|
||||
物理地域
|
||||
</td>
|
||||
<td style="padding:8px 10px;background-color:#fcfcfc;border-bottom:1px solid #e9e9e9">
|
||||
网协地址
|
||||
</td>
|
||||
<td style="padding:8px 10px;background-color:#fcfcfc;border-bottom:1px solid #e9e9e9">
|
||||
别名地址
|
||||
</td>
|
||||
<td style="padding:8px 10px;background-color:#fcfcfc;border-bottom:1px solid #e9e9e9">
|
||||
加密方式
|
||||
</td>
|
||||
<td style="padding:8px 10px;background-color:#fcfcfc;border-bottom:1px solid #e9e9e9">
|
||||
扫一扫 <span style="color:red">( New )</span>
|
||||
</td>
|
||||
</tr>
|
||||
{$node_list}
|
||||
</tbody>
|
||||
</table>
|
||||
<p style="color:#999;border-color:#E9E9E9;padding:10px;border-radius:4px;margin:5px 0;border:1px solid #eee;font-size:12px">
|
||||
注意:由于网协地址可能会发生变化,在无 DNS 污染的环境下建议使用别名地址连接。
|
||||
</p>
|
||||
</div>
|
||||
412
WHMCS/modules/servers/shadowsocks/shadowsocks.php
Normal file
412
WHMCS/modules/servers/shadowsocks/shadowsocks.php
Normal file
@@ -0,0 +1,412 @@
|
||||
<?php
|
||||
//判断是否 WHMCS 访问
|
||||
if(!defined("WHMCS")){
|
||||
die("This file cannot be accessed directly");
|
||||
}
|
||||
|
||||
function shadowsocks_ConfigOptions(){
|
||||
return array(
|
||||
'连接端口' => array(
|
||||
'Type' => 'text',
|
||||
'Description' => 'API 通讯端口'
|
||||
),
|
||||
'流量限制' => array(
|
||||
'Type' => 'text',
|
||||
'Description' => '在 Configoptions 中 traffic 为空时则会启用此处设定'
|
||||
),
|
||||
'计费单位' => array(
|
||||
'Type' => 'dropdown',
|
||||
'Options' => 'MB,GB',
|
||||
'Description' => '可选按照 MB 或 GB 作为流量计费单位'
|
||||
),
|
||||
'节点列表' => array(
|
||||
'Type' => 'textarea',
|
||||
'Description' => '格式为:物理地域 | 网协地址 | 别名地址 | 加密方式'
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
function shadowsocks_CreateAccount($params){
|
||||
$pid = $params['serviceid'];
|
||||
$port = $params['configoption1'];
|
||||
$serverip = $params['serverip'];
|
||||
$serveraccesshash = $params['serveraccesshash'];
|
||||
if(!empty($params['customfields']['password'])){
|
||||
$adminuser = mysql_fetch_array(mysql_query("SELECT username FROM `tbladmins`"));
|
||||
$adminuser = $adminuser['username'];
|
||||
$values["password2"] = $params["customfields"]['password'];
|
||||
$results = localAPI("encryptpassword",$values,$adminuser);
|
||||
$table = "tblhosting";
|
||||
$update = array("password"=>$results['password']);
|
||||
$where = array("id"=>$params["serviceid"]);
|
||||
update_query($table,$update,$where);
|
||||
$password = $params["customfields"]['password'];
|
||||
}else{
|
||||
$password = $params['password'];
|
||||
}
|
||||
if(!empty($params['configoptions']['traffic'])){
|
||||
$traffic = $params['configoptions']['traffic'];
|
||||
}else{
|
||||
$traffic = $params['configoption2'];
|
||||
}
|
||||
if($params['configoption3'] == "GB"){
|
||||
$traffic = $traffic * 1024;
|
||||
}
|
||||
$command = array(
|
||||
'action' => 'create',
|
||||
'pid' => $pid,
|
||||
'password' => $password,
|
||||
'traffic' => $traffic
|
||||
);
|
||||
$curl_create = curl_init();
|
||||
curl_setopt($curl_create, CURLOPT_URL, "http://".$serverip.':'.$port.'/shadowsocksapi.php');
|
||||
curl_setopt($curl_create, CURLOPT_POST, 1);
|
||||
curl_setopt($curl_create, CURLOPT_TIMEOUT, 20);
|
||||
curl_setopt($curl_create, CURLOPT_FRESH_CONNECT, 1);
|
||||
curl_setopt($curl_create, CURLOPT_SSL_VERIFYPEER, false);
|
||||
curl_setopt($curl_create, CURLOPT_SSL_VERIFYHOST, false);
|
||||
curl_setopt($curl_create, CURLOPT_HEADER, 0);
|
||||
curl_setopt($curl_create, CURLOPT_RETURNTRANSFER, 1);
|
||||
curl_setopt($curl_create, CURLOPT_POSTFIELDS, $command);
|
||||
curl_setopt($curl_create, CURLOPT_USERAGENT, $serveraccesshash);
|
||||
$create_data = curl_exec($curl_create);
|
||||
curl_close($curl_create);
|
||||
$create_data = json_decode($create_data, true);
|
||||
if($create_data['status'] != "Error"){
|
||||
insert_query("mod_weektraffic",array(
|
||||
'id' => $pid,
|
||||
'port' => $create_data['result'],
|
||||
'last_time' => time()
|
||||
));
|
||||
$result = 'success';
|
||||
}else{
|
||||
$result = $create_data['result'];
|
||||
}
|
||||
return $result;
|
||||
// print_r($data);die();
|
||||
}
|
||||
|
||||
function shadowsocks_SuspendAccount($params){
|
||||
$pid = $params['serviceid'];
|
||||
$port = $params['configoption1'];
|
||||
$serverip = $params['serverip'];
|
||||
$serveraccesshash = $params['serveraccesshash'];
|
||||
$command = array(
|
||||
'action' => 'suspend',
|
||||
'pid' => $pid
|
||||
);
|
||||
$curl_suspend = curl_init();
|
||||
curl_setopt($curl_suspend, CURLOPT_URL, "http://".$serverip.':'.$port.'/shadowsocksapi.php');
|
||||
curl_setopt($curl_suspend, CURLOPT_POST, 1);
|
||||
curl_setopt($curl_suspend, CURLOPT_TIMEOUT, 20);
|
||||
curl_setopt($curl_suspend, CURLOPT_FRESH_CONNECT, 1);
|
||||
curl_setopt($curl_suspend, CURLOPT_SSL_VERIFYPEER, false);
|
||||
curl_setopt($curl_suspend, CURLOPT_SSL_VERIFYHOST, false);
|
||||
curl_setopt($curl_suspend, CURLOPT_HEADER, 0);
|
||||
curl_setopt($curl_suspend, CURLOPT_RETURNTRANSFER, 1);
|
||||
curl_setopt($curl_suspend, CURLOPT_POSTFIELDS, $command);
|
||||
curl_setopt($curl_suspend, CURLOPT_USERAGENT, $serveraccesshash);
|
||||
$suspend_data = curl_exec($curl_suspend);
|
||||
curl_close($curl_suspend);
|
||||
$suspend_data = json_decode($suspend_data, true);
|
||||
if($suspend_data['status'] == "Success"){
|
||||
$result = 'success';
|
||||
}else{
|
||||
$result = $suspend_data['result'];
|
||||
}
|
||||
return $result;
|
||||
// print_r($data);die();
|
||||
}
|
||||
|
||||
function shadowsocks_UnsuspendAccount($params){
|
||||
$pid = $params['serviceid'];
|
||||
$port = $params['configoption1'];
|
||||
$serverip = $params['serverip'];
|
||||
$serveraccesshash = $params['serveraccesshash'];
|
||||
if(!empty($params['customfields']['password'])){
|
||||
$adminuser = mysql_fetch_array(mysql_query("SELECT username FROM `tbladmins`"));
|
||||
$adminuser = $adminuser['username'];
|
||||
$values["password2"] = $params["customfields"]['password'];
|
||||
$results = localAPI("encryptpassword",$values,$adminuser);
|
||||
$table = "tblhosting";
|
||||
$update = array("password"=>$results['password']);
|
||||
$where = array("id"=>$params["serviceid"]);
|
||||
update_query($table,$update,$where);
|
||||
$password = $params["customfields"]['password'];
|
||||
}else{
|
||||
$password = $params['password'];
|
||||
}
|
||||
$command = array(
|
||||
'action' => 'unsuspend',
|
||||
'pid' => $pid,
|
||||
'password' => $password,
|
||||
);
|
||||
$curl_unspend = curl_init();
|
||||
curl_setopt($curl_unspend, CURLOPT_URL, "http://".$serverip.':'.$port.'/shadowsocksapi.php');
|
||||
curl_setopt($curl_unspend, CURLOPT_POST, 1);
|
||||
curl_setopt($curl_unspend, CURLOPT_TIMEOUT, 20);
|
||||
curl_setopt($curl_unspend, CURLOPT_FRESH_CONNECT, 1);
|
||||
curl_setopt($curl_unspend, CURLOPT_SSL_VERIFYPEER, false);
|
||||
curl_setopt($curl_unspend, CURLOPT_SSL_VERIFYHOST, false);
|
||||
curl_setopt($curl_unspend, CURLOPT_HEADER, 0);
|
||||
curl_setopt($curl_unspend, CURLOPT_RETURNTRANSFER, 1);
|
||||
curl_setopt($curl_unspend, CURLOPT_POSTFIELDS, $command);
|
||||
curl_setopt($curl_unspend, CURLOPT_USERAGENT, $serveraccesshash);
|
||||
$unspend_data = curl_exec($curl_unspend);
|
||||
curl_close($curl_unspend);
|
||||
$unspend_data = json_decode($unspend_data, true);
|
||||
if($unspend_data['status'] == "Success"){
|
||||
$result = 'success';
|
||||
}else{
|
||||
$result = $unspend_data['result'];
|
||||
}
|
||||
return $result;
|
||||
// print_r($data);die();
|
||||
}
|
||||
|
||||
function shadowsocks_TerminateAccount($params){
|
||||
$pid = $params['serviceid'];
|
||||
$port = $params['configoption1'];
|
||||
$serverip = $params['serverip'];
|
||||
$serveraccesshash = $params['serveraccesshash'];
|
||||
$command = array(
|
||||
'action' => 'terminate',
|
||||
'pid' => $pid
|
||||
);
|
||||
$curl_terminate = curl_init();
|
||||
curl_setopt($curl_terminate, CURLOPT_URL, "http://".$serverip.':'.$port.'/shadowsocksapi.php');
|
||||
curl_setopt($curl_terminate, CURLOPT_POST, 1);
|
||||
curl_setopt($curl_terminate, CURLOPT_TIMEOUT, 20);
|
||||
curl_setopt($curl_terminate, CURLOPT_FRESH_CONNECT, 1);
|
||||
curl_setopt($curl_terminate, CURLOPT_SSL_VERIFYPEER, false);
|
||||
curl_setopt($curl_terminate, CURLOPT_SSL_VERIFYHOST, false);
|
||||
curl_setopt($curl_terminate, CURLOPT_HEADER, 0);
|
||||
curl_setopt($curl_terminate, CURLOPT_RETURNTRANSFER, 1);
|
||||
curl_setopt($curl_terminate, CURLOPT_POSTFIELDS, $command);
|
||||
curl_setopt($curl_terminate, CURLOPT_USERAGENT, $serveraccesshash);
|
||||
$terminate_data = curl_exec($curl_terminate);
|
||||
curl_close($curl_terminate);
|
||||
$terminate_data = json_decode($terminate_data, true);
|
||||
if($terminate_data['status'] == "Success"){
|
||||
$result = 'success';
|
||||
}else{
|
||||
$result = $terminate_data['result'];
|
||||
}
|
||||
return $result;
|
||||
// print_r($data);die();
|
||||
}
|
||||
|
||||
function shadowsocks_ChangePackage($params){
|
||||
$pid = $params['serviceid'];
|
||||
$port = $params['configoption1'];
|
||||
$serverip = $params['serverip'];
|
||||
$serveraccesshash = $params['serveraccesshash'];
|
||||
if(!empty($params['configoptions']['traffic'])){
|
||||
$traffic = $params['configoptions']['traffic'];
|
||||
}else{
|
||||
$traffic = $params['configoption2'];
|
||||
}
|
||||
if($params['configoption3'] == "GB"){
|
||||
$traffic = $traffic * 1024;
|
||||
}
|
||||
$command = array(
|
||||
'action' => 'changepackage',
|
||||
'pid' => $pid,
|
||||
'traffic' => $traffic
|
||||
);
|
||||
$curl_changepackage = curl_init();
|
||||
curl_setopt($curl_changepackage, CURLOPT_URL, "http://".$serverip.':'.$port.'/shadowsocksapi.php');
|
||||
curl_setopt($curl_changepackage, CURLOPT_POST, 1);
|
||||
curl_setopt($curl_changepackage, CURLOPT_TIMEOUT, 20);
|
||||
curl_setopt($curl_changepackage, CURLOPT_FRESH_CONNECT, 1);
|
||||
curl_setopt($curl_changepackage, CURLOPT_SSL_VERIFYPEER, false);
|
||||
curl_setopt($curl_changepackage, CURLOPT_SSL_VERIFYHOST, false);
|
||||
curl_setopt($curl_changepackage, CURLOPT_HEADER, 0);
|
||||
curl_setopt($curl_changepackage, CURLOPT_RETURNTRANSFER, 1);
|
||||
curl_setopt($curl_changepackage, CURLOPT_POSTFIELDS, $command);
|
||||
curl_setopt($curl_changepackage, CURLOPT_USERAGENT, $serveraccesshash);
|
||||
$changepackage_data = curl_exec($curl_changepackage);
|
||||
curl_close($curl_changepackage);
|
||||
$changepackage_data = json_decode($changepackage_data, true);
|
||||
if($changepackage_data['status'] == "Success"){
|
||||
$result = 'success';
|
||||
}else{
|
||||
$result = $changepackage_data['result'];
|
||||
}
|
||||
return $result;
|
||||
// print_r($data);die();
|
||||
}
|
||||
|
||||
function shadowsocks_ChangePassword($params){
|
||||
$pid = $params['serviceid'];
|
||||
$port = $params['configoption1'];
|
||||
$serverip = $params['serverip'];
|
||||
$serveraccesshash = $params['serveraccesshash'];
|
||||
$password = $params['password'];
|
||||
$command = array(
|
||||
'action' => 'changepassword',
|
||||
'pid' => $pid,
|
||||
'password' => $password,
|
||||
);
|
||||
$curl_changepassword = curl_init();
|
||||
curl_setopt($curl_changepassword, CURLOPT_URL, "http://".$serverip.':'.$port.'/shadowsocksapi.php');
|
||||
curl_setopt($curl_changepassword, CURLOPT_POST, 1);
|
||||
curl_setopt($curl_changepassword, CURLOPT_TIMEOUT, 20);
|
||||
curl_setopt($curl_changepassword, CURLOPT_FRESH_CONNECT, 1);
|
||||
curl_setopt($curl_changepassword, CURLOPT_SSL_VERIFYPEER, false);
|
||||
curl_setopt($curl_changepassword, CURLOPT_SSL_VERIFYHOST, false);
|
||||
curl_setopt($curl_changepassword, CURLOPT_HEADER, 0);
|
||||
curl_setopt($curl_changepassword, CURLOPT_RETURNTRANSFER, 1);
|
||||
curl_setopt($curl_changepassword, CURLOPT_POSTFIELDS, $command);
|
||||
curl_setopt($curl_changepassword, CURLOPT_USERAGENT, $serveraccesshash);
|
||||
$changepassword_data = curl_exec($curl_changepassword);
|
||||
curl_close($curl_changepassword);
|
||||
$changepassword_data = json_decode($changepassword_data, true);
|
||||
if($changepassword_data['status'] == "Success"){
|
||||
$result = 'success';
|
||||
}else{
|
||||
$result = $changepassword_data['result'];
|
||||
}
|
||||
return $result;
|
||||
// print_r($data);die();
|
||||
}
|
||||
|
||||
function shadowsocks_reset($params){
|
||||
$pid = $params['serviceid'];
|
||||
$port = $params['configoption1'];
|
||||
$serverip = $params['serverip'];
|
||||
$serveraccesshash = $params['serveraccesshash'];
|
||||
$command = array(
|
||||
'action' => 'reset',
|
||||
'pid' => $pid
|
||||
);
|
||||
$curl_reset = curl_init();
|
||||
curl_setopt($curl_reset, CURLOPT_URL, "http://".$serverip.':'.$port.'/shadowsocksapi.php');
|
||||
curl_setopt($curl_reset, CURLOPT_POST, 1);
|
||||
curl_setopt($curl_reset, CURLOPT_TIMEOUT, 20);
|
||||
curl_setopt($curl_reset, CURLOPT_FRESH_CONNECT, 1);
|
||||
curl_setopt($curl_reset, CURLOPT_SSL_VERIFYPEER, false);
|
||||
curl_setopt($curl_reset, CURLOPT_SSL_VERIFYHOST, false);
|
||||
curl_setopt($curl_reset, CURLOPT_HEADER, 0);
|
||||
curl_setopt($curl_reset, CURLOPT_RETURNTRANSFER, 1);
|
||||
curl_setopt($curl_reset, CURLOPT_POSTFIELDS, $command);
|
||||
curl_setopt($curl_reset, CURLOPT_USERAGENT, $serveraccesshash);
|
||||
$reset_data = curl_exec($curl_reset);
|
||||
curl_close($curl_reset);
|
||||
$reset_data = json_decode($reset_data, true);
|
||||
if($reset_data['status'] == "Success"){
|
||||
$result = 'success';
|
||||
}else{
|
||||
$result = $reset_data['result'];
|
||||
}
|
||||
return $result;
|
||||
// print_r($data);die();
|
||||
}
|
||||
|
||||
function shadowsocks_ClientArea($params){
|
||||
$pid = $params['serviceid'];
|
||||
$port = $params['configoption1'];
|
||||
$node = explode("|",$params['configoption4']);
|
||||
$serverip = $params['serverip'];
|
||||
$password = $params['password'];
|
||||
$serveraccesshash = $params['serveraccesshash'];
|
||||
$command = array(
|
||||
'action' => 'query',
|
||||
'pid' => $pid
|
||||
);
|
||||
$curl_query = curl_init();
|
||||
curl_setopt($curl_query, CURLOPT_URL, "http://".$serverip.':'.$port.'/shadowsocksapi.php');
|
||||
curl_setopt($curl_query, CURLOPT_POST, 1);
|
||||
curl_setopt($curl_query, CURLOPT_TIMEOUT, 20);
|
||||
curl_setopt($curl_query, CURLOPT_FRESH_CONNECT, 1);
|
||||
curl_setopt($curl_query, CURLOPT_SSL_VERIFYPEER, false);
|
||||
curl_setopt($curl_query, CURLOPT_SSL_VERIFYHOST, false);
|
||||
curl_setopt($curl_query, CURLOPT_HEADER, 0);
|
||||
curl_setopt($curl_query, CURLOPT_RETURNTRANSFER, 1);
|
||||
curl_setopt($curl_query, CURLOPT_POSTFIELDS, $command);
|
||||
curl_setopt($curl_query, CURLOPT_USERAGENT, $serveraccesshash);
|
||||
$query_data = curl_exec($curl_query);
|
||||
curl_close($query_data);
|
||||
$query_data = json_decode($query_data, true);
|
||||
if(!empty($params['configoptions']['traffic'])){
|
||||
$traffic = $params['configoptions']['traffic'];
|
||||
}else{
|
||||
$traffic = $params['configoption2'];
|
||||
}
|
||||
$traffic_upload = $query_data['upload'] / 1024;
|
||||
$traffic_upload = round($traffic_upload, 2);
|
||||
$traffic_download = $query_data['download'] / 1024;
|
||||
$traffic_download = round($traffic_download, 2);
|
||||
$traffic_free = ($traffic * 1048576 - ($traffic_upload + $traffic_download)) / 1024;
|
||||
$traffic_free = round($traffic_free, 2);
|
||||
$traffic = $traffic * 1024;
|
||||
$last_time = date('H', $query_data['last_time']);
|
||||
if($last_time <= "5"){
|
||||
$times = "凌晨";
|
||||
}elseif($last_time <= "9"){
|
||||
$times = "早上";
|
||||
}elseif($last_time <= "14"){
|
||||
$times = "中午";
|
||||
}elseif($last_time <= "18"){
|
||||
$times = "下午";
|
||||
}elseif($last_time <= "22"){
|
||||
$times = "晚上";
|
||||
}else{
|
||||
$times = "深夜";
|
||||
}
|
||||
$last_year = date('Y', $query_data['last_time']);
|
||||
$last_month = date('m', $query_data['last_time']);
|
||||
$last_day = date('d', $query_data['last_time']);
|
||||
$last_time = date('H:i', $query_data['last_time']);
|
||||
|
||||
$node_list = '';
|
||||
$x=0;$count=count($node)-1;
|
||||
while($x <= $count){
|
||||
$name = $node[$x];$x++;
|
||||
$ipaddr = $node[$x];$x++;
|
||||
$cname = $node[$x];$x++;
|
||||
$method = $node[$x];$x++;
|
||||
$ssqrcode = base64_encode($method.':'.$password.':'.$ipaddr.':'.$query_data['port']);
|
||||
$node_list .= "<tr>
|
||||
<td style=\"padding:10px 15px;border-right:1px solid #e9e9e9;border-bottom:1px solid #e9e9e9\">
|
||||
{$name}
|
||||
</td>
|
||||
<td style=\"padding:10px 15px;border-right:1px solid #e9e9e9;border-bottom:1px solid #e9e9e9\">
|
||||
{$ipaddr}
|
||||
</td>
|
||||
<td style=\"padding:10px 15px;border-right:1px solid #e9e9e9;border-bottom:1px solid #e9e9e9\">
|
||||
{$cname}
|
||||
</td>
|
||||
<td style=\"padding:10px 15px;border-right:1px solid #e9e9e9;border-bottom:1px solid #e9e9e9;text-transform:uppercase\">
|
||||
{$method}
|
||||
</td>
|
||||
<td style=\"padding:10px 15px;border-bottom:1px solid #e9e9e9\">
|
||||
<a name=\"qrcode\" data-title=\"{$name}\" data-qrcode=\"{$ssqrcode}\" href=\"javascript:;\" style=\"color:#00afd1;text-decoration:none\">查看二维码图片</a>
|
||||
</td>
|
||||
</tr>";
|
||||
}
|
||||
|
||||
$result = array(
|
||||
'tabOverviewReplacementTemplate' => 'clientarea',
|
||||
'templateVariables' => array(
|
||||
'traffic' => $traffic,
|
||||
'traffic_upload' => $traffic_upload,
|
||||
'traffic_download' => $traffic_download,
|
||||
'traffic_free' => $traffic_free,
|
||||
'last_year' => $last_year,
|
||||
'last_month' => $last_month,
|
||||
'last_day' => $last_day,
|
||||
'last_time' => $last_time,
|
||||
'times' => $times,
|
||||
'port' => $query_data['port'],
|
||||
'node_list' => $node_list,
|
||||
),
|
||||
);
|
||||
return $result;
|
||||
}
|
||||
|
||||
function shadowsocks_AdminCustomButtonArray(){
|
||||
return array(
|
||||
'重置' => 'reset'
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user