commit
c2611fe025
3
.gitignore
vendored
3
.gitignore
vendored
@ -49,3 +49,6 @@ system/devices/**
|
||||
!system/devices/MikrotikHotspot.php
|
||||
/.vs
|
||||
docker-compose.yml
|
||||
docs/**
|
||||
!docs/*.html
|
||||
!docs/*.md
|
@ -2,6 +2,12 @@
|
||||
|
||||
# CHANGELOG
|
||||
|
||||
## 2024.7.15
|
||||
|
||||
- Radius Rest API
|
||||
- Getting Started Documentation
|
||||
- Only Show new update just once
|
||||
|
||||
## 2024.6.21
|
||||
|
||||
- Add filter result in voucher and internet plan
|
||||
|
3298
docs/index.html
Normal file
3298
docs/index.html
Normal file
File diff suppressed because one or more lines are too long
@ -18,6 +18,14 @@ if(isset($_GET['nux-router']) && !empty($_GET['nux-router'])){
|
||||
$_SESSION['nux-router'] = $_GET['nux-router'];
|
||||
}
|
||||
|
||||
//get chap id and chap challenge
|
||||
if(isset($_GET['nux-key']) && !empty($_GET['nux-key'])){
|
||||
$_SESSION['nux-key'] = $_GET['nux-key'];
|
||||
}
|
||||
//get mikrotik hostname
|
||||
if(isset($_GET['nux-hostname']) && !empty($_GET['nux-hostname'])){
|
||||
$_SESSION['nux-hostname'] = $_GET['nux-hostname'];
|
||||
}
|
||||
require_once 'system/vendor/autoload.php';
|
||||
require_once 'system/boot.php';
|
||||
App::_run();
|
||||
|
@ -205,6 +205,34 @@ CREATE TABLE `tbl_voucher` (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
|
||||
|
||||
DROP TABLE IF EXISTS `rad_acct`;
|
||||
CREATE TABLE `rad_acct` (
|
||||
`id` bigint NOT NULL,
|
||||
`acctsessionid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',
|
||||
`username` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',
|
||||
`realm` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',
|
||||
`nasid` varchar(32) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',
|
||||
`nasipaddress` varchar(15) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',
|
||||
`nasportid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
|
||||
`nasporttype` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
|
||||
`framedipaddress` varchar(15) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',
|
||||
`acctstatustype` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
|
||||
`macaddr` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
|
||||
`dateAdded` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
|
||||
|
||||
ALTER TABLE `rad_acct`
|
||||
ADD PRIMARY KEY (`id`),
|
||||
ADD KEY `username` (`username`),
|
||||
ADD KEY `framedipaddress` (`framedipaddress`),
|
||||
ADD KEY `acctsessionid` (`acctsessionid`),
|
||||
ADD KEY `nasipaddress` (`nasipaddress`);
|
||||
|
||||
|
||||
ALTER TABLE `rad_acct`
|
||||
MODIFY `id` bigint NOT NULL AUTO_INCREMENT;
|
||||
|
||||
ALTER TABLE `tbl_appconfig`
|
||||
ADD PRIMARY KEY (`id`);
|
||||
|
||||
|
262
radius.php
Normal file
262
radius.php
Normal file
@ -0,0 +1,262 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* PHP Mikrotik Billing (https://github.com/hotspotbilling/phpnuxbill)
|
||||
* by https://t.me/ibnux
|
||||
*
|
||||
* Authorize
|
||||
* - Voucher activation
|
||||
* Authenticate
|
||||
* - is it allow to login
|
||||
* Accounting
|
||||
* - log
|
||||
**/
|
||||
|
||||
header("Content-Type: application/json");
|
||||
|
||||
include "init.php";
|
||||
|
||||
$action = $_SERVER['HTTP_X_FREERADIUS_SECTION'];
|
||||
if (empty($action)) {
|
||||
$action = _get('action');
|
||||
}
|
||||
|
||||
$code = 200;
|
||||
|
||||
//debug
|
||||
// if (!empty($action)) {
|
||||
// file_put_contents("$action.json", json_encode([
|
||||
// 'header' => $_SERVER,
|
||||
// 'get' => $_GET,
|
||||
// 'post' => $_POST,
|
||||
// 'time' => time()
|
||||
// ]));
|
||||
// }
|
||||
|
||||
try {
|
||||
switch ($action) {
|
||||
case 'authenticate':
|
||||
$username = _req('username');
|
||||
$password = _req('password');
|
||||
if (empty($username) || empty($password)) {
|
||||
show_radius_result([
|
||||
"control:Auth-Type" => "Reject",
|
||||
"reply:Reply-Message" => 'Login invalid'
|
||||
], 401);
|
||||
}
|
||||
if ($username == $password) {
|
||||
$d = ORM::for_table('tbl_voucher')->where('code', $username)->find_one();
|
||||
} else {
|
||||
$d = ORM::for_table('tbl_customers')->where('username', $username)->find_one();
|
||||
if ($d['password'] != $password) {
|
||||
if ($d['pppoe_password'] != $password) {
|
||||
unset($d);
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($d) {
|
||||
header("HTTP/1.1 204 No Content");
|
||||
die();
|
||||
} else {
|
||||
show_radius_result([
|
||||
"control:Auth-Type" => "Reject",
|
||||
"reply:Reply-Message" => 'Login invalid......'
|
||||
], 401);
|
||||
}
|
||||
break;
|
||||
case 'authorize':
|
||||
$username = _req('username');
|
||||
$password = _req('password');
|
||||
$isVoucher = ($username == $password);
|
||||
if (empty($username) || empty($password)) {
|
||||
show_radius_result([
|
||||
"control:Auth-Type" => "Reject",
|
||||
"reply:Reply-Message" => 'Login invalid......'
|
||||
], 401);
|
||||
}
|
||||
$tur = ORM::for_table('tbl_user_recharges')->where('username', $username)->find_one();
|
||||
if ($tur) {
|
||||
if (!$isVoucher) {
|
||||
$d = ORM::for_table('tbl_customers')->select('password')->where('username', $username)->find_one();
|
||||
if ($d['password'] != $password) {
|
||||
if ($d['pppoe_password'] != $password) {
|
||||
show_radius_result(['Reply-Message' => 'Username or Password is wrong'], 401);
|
||||
}
|
||||
}
|
||||
}
|
||||
process_radiust_rest($tur, $code);
|
||||
} else {
|
||||
if ($isVoucher) {
|
||||
$v = ORM::for_table('tbl_voucher')->where('code', $username)->where('routers', 'radius')->find_one();
|
||||
if ($v) {
|
||||
if ($v['status'] == 0) {
|
||||
if (Package::rechargeUser(0, $v['routers'], $v['id_plan'], "Voucher", $username)) {
|
||||
$v->status = "1";
|
||||
$v->save();
|
||||
$tur = ORM::for_table('tbl_user_recharges')->where('username', $username)->find_one();
|
||||
if ($tur) {
|
||||
process_radiust_rest($tur, $code);
|
||||
} else {
|
||||
show_radius_result(['Reply-Message' => 'Voucher activation failed'], 401);
|
||||
}
|
||||
} else {
|
||||
show_radius_result(['Reply-Message' => 'Voucher activation failed.'], 401);
|
||||
}
|
||||
} else {
|
||||
show_radius_result(['Reply-Message' => 'Voucher Expired...'], 401);
|
||||
}
|
||||
} else {
|
||||
show_radius_result(['Reply-Message' => 'Voucher Expired..'], 401);
|
||||
}
|
||||
} else {
|
||||
show_radius_result(['Reply-Message' => 'Internet Plan Expired..'], 401);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'accounting':
|
||||
$username = _req('username');
|
||||
if (empty($username)) {
|
||||
show_radius_result([
|
||||
"control:Auth-Type" => "Reject",
|
||||
"reply:Reply-Message" => 'Username empty'
|
||||
], 200);
|
||||
die();
|
||||
}
|
||||
header("HTTP/1.1 200 ok");
|
||||
$d = ORM::for_table('rad_acct')
|
||||
->where('username', $username)
|
||||
->where('macaddr', _post('macAddr'))
|
||||
->where('acctstatustype', _post('acctStatusType'))
|
||||
->findOne();
|
||||
if (!$d) {
|
||||
$d = ORM::for_table('rad_acct')->create();
|
||||
}
|
||||
$d->acctsessionid = _post('acctSessionId');
|
||||
$d->username = $username;
|
||||
$d->realm = _post('realm');
|
||||
$d->nasipaddress = _post('nasip');
|
||||
$d->nasid = _post('nasid');
|
||||
$d->nasportid = _post('nasPortId');
|
||||
$d->nasporttype = _post('nasPortType');
|
||||
$d->framedipaddress = _post('framedIPAddress');
|
||||
$d->acctstatustype = _post('acctStatusType');
|
||||
$d->macaddr = _post('macAddr');
|
||||
$d->dateAdded = date('Y-m-d H:i:s');
|
||||
$d->save();
|
||||
show_radius_result([
|
||||
"control:Auth-Type" => "Accept",
|
||||
"reply:Reply-Message" => 'Saved'
|
||||
], 200);
|
||||
break;
|
||||
}
|
||||
die();
|
||||
} catch (Throwable $e) {
|
||||
Message::sendTelegram(
|
||||
"Sistem Error.\n" .
|
||||
$e->getMessage() . "\n" .
|
||||
$e->getTraceAsString()
|
||||
);
|
||||
show_radius_result(['Reply-Message' => 'Command Failed : ' . $action], 401);
|
||||
} catch (Exception $e) {
|
||||
Message::sendTelegram(
|
||||
"Sistem Error.\n" .
|
||||
$e->getMessage() . "\n" .
|
||||
$e->getTraceAsString()
|
||||
);
|
||||
show_radius_result(['Reply-Message' => 'Command Failed : ' . $action], 401);
|
||||
}
|
||||
show_radius_result(['Reply-Message' => 'Invalid Command : ' . $action], 401);
|
||||
|
||||
function process_radiust_rest($tur, $code)
|
||||
{
|
||||
global $config;
|
||||
$plan = ORM::for_table('tbl_plans')->where('id', $tur['plan_id'])->find_one();
|
||||
$bw = ORM::for_table("tbl_bandwidth")->find_one($plan['id_bw']);
|
||||
if ($bw['rate_down_unit'] == 'Kbps') {
|
||||
$unitdown = 'K';
|
||||
} else {
|
||||
$unitdown = 'M';
|
||||
}
|
||||
if ($bw['rate_up_unit'] == 'Kbps') {
|
||||
$unitup = 'K';
|
||||
} else {
|
||||
$unitup = 'M';
|
||||
}
|
||||
$rate = $bw['rate_up'] . $unitup . "/" . $bw['rate_down'] . $unitdown;
|
||||
$rates = explode('/', $rate);
|
||||
|
||||
if (!empty(trim($bw['burst']))) {
|
||||
$ratos = $rate . ' ' . $bw['burst'];
|
||||
} else {
|
||||
$ratos = $rates[0] . '/' . $rates[1];
|
||||
}
|
||||
|
||||
$attrs = [];
|
||||
$timeexp = strtotime($tur['expiration'] . ' ' . $tur['time']);
|
||||
$attrs['reply:Reply-Message'] = 'success';
|
||||
$attrs['Simultaneous-Use'] = $plan['shared_users'];
|
||||
$attrs['reply:Mikrotik-Wireless-Comment'] = $plan['name_plan'] . ' | ' . $tur['expiration'] . ' ' . $tur['time'];
|
||||
|
||||
$attrs['reply:Ascend-Data-Rate'] = str_replace('M', '000000', str_replace('K', '000', $rates[1]));
|
||||
$attrs['reply:Ascend-Xmit-Rate'] = str_replace('M', '000000', str_replace('K', '000', $rates[0]));
|
||||
$attrs['reply:Mikrotik-Rate-Limit'] = $ratos;
|
||||
$attrs['reply:WISPr-Bandwidth-Max-Up'] = str_replace('M', '000000', str_replace('K', '000', $rates[0]));
|
||||
$attrs['reply:WISPr-Bandwidth-Max-Down'] = str_replace('M', '000000', str_replace('K', '000', $rates[1]));
|
||||
$attrs['reply:expiration'] = date('d M Y H:i:s', $timeexp);
|
||||
$attrs['reply:WISPr-Session-Terminate-Time'] = date('Y-m-d', $timeexp) . 'T' . date('H:i:sP', $timeexp);
|
||||
|
||||
if ($plan['type'] == 'PPPOE') {
|
||||
$attrs['reply:Framed-Pool'] = $plan['pool'];
|
||||
}
|
||||
|
||||
if ($plan['typebp'] == "Limited") {
|
||||
if ($plan['limit_type'] == "Time_Limit") {
|
||||
if ($plan['time_unit'] == 'Hrs')
|
||||
$timelimit = $plan['time_limit'] * 60 * 60;
|
||||
else
|
||||
$timelimit = $plan['time_limit'] * 60;
|
||||
$attrs['reply:Max-All-Session'] = $timelimit;
|
||||
$attrs['reply:Expire-After'] = $timelimit;
|
||||
} else if ($plan['limit_type'] == "Data_Limit") {
|
||||
if ($plan['data_unit'] == 'GB')
|
||||
$datalimit = $plan['data_limit'] . "000000000";
|
||||
else
|
||||
$datalimit = $plan['data_limit'] . "000000";
|
||||
$attrs['reply:Max-Data'] = $datalimit;
|
||||
$attrs['reply:Mikrotik-Recv-Limit-Gigawords'] = $datalimit;
|
||||
$attrs['reply:Mikrotik-Xmit-Limit-Gigawords'] = $datalimit;
|
||||
} else if ($plan['limit_type'] == "Both_Limit") {
|
||||
if ($plan['time_unit'] == 'Hrs')
|
||||
$timelimit = $plan['time_limit'] * 60 * 60;
|
||||
else
|
||||
$timelimit = $plan['time_limit'] * 60;
|
||||
if ($plan['data_unit'] == 'GB')
|
||||
$datalimit = $plan['data_limit'] . "000000000";
|
||||
else
|
||||
$datalimit = $plan['data_limit'] . "000000";
|
||||
$attrs['reply:Max-All-Session'] = $timelimit;
|
||||
$attrs['reply:Max-Data'] = $datalimit;
|
||||
$attrs['reply:Mikrotik-Recv-Limit-Gigawords'] = $datalimit;
|
||||
$attrs['reply:Mikrotik-Xmit-Limit-Gigawords'] = $datalimit;
|
||||
}
|
||||
}
|
||||
$result = array_merge([
|
||||
"control:Auth-Type" => "Accept",
|
||||
"reply" => ["Reply-Message" => ['value' => 'success']]
|
||||
], $attrs);
|
||||
show_radius_result($result, $code);
|
||||
}
|
||||
|
||||
function show_radius_result($array, $code = 200)
|
||||
{
|
||||
if ($code == 401) {
|
||||
header("HTTP/1.1 401 Unauthorized");
|
||||
} else if ($code == 200) {
|
||||
header("HTTP/1.1 200 OK");
|
||||
} else if ($code == 204) {
|
||||
header("HTTP/1.1 204 No Content");
|
||||
die();
|
||||
}
|
||||
die(json_encode($array));
|
||||
die();
|
||||
}
|
@ -26,17 +26,27 @@ class Package
|
||||
$time_only = date("H:i:s");
|
||||
$time = date("H:i:s");
|
||||
$inv = "";
|
||||
$isVoucher = false;
|
||||
$c = [];
|
||||
|
||||
if ($id_customer == '' or $router_name == '' or $plan_id == '') {
|
||||
return false;
|
||||
}
|
||||
if(trim($gateway) == 'Voucher' && $id_customer == 0){
|
||||
$isVoucher = true;
|
||||
}
|
||||
|
||||
$c = ORM::for_table('tbl_customers')->where('id', $id_customer)->find_one();
|
||||
$p = ORM::for_table('tbl_plans')->where('id', $plan_id)->find_one();
|
||||
|
||||
if(!$isVoucher){
|
||||
$c = ORM::for_table('tbl_customers')->where('id', $id_customer)->find_one();
|
||||
if ($c['status'] != 'Active') {
|
||||
_alert(Lang::T('This account status') . ' : ' . Lang::T($c['status']), 'danger', "");
|
||||
}
|
||||
}else{
|
||||
$c['username'] = $channel;
|
||||
$c['fullname'] = $gateway;
|
||||
}
|
||||
|
||||
$add_cost = 0;
|
||||
$bills = [];
|
||||
|
1994
system/autoload/Parsedown.php
Normal file
1994
system/autoload/Parsedown.php
Normal file
File diff suppressed because it is too large
Load Diff
@ -210,7 +210,7 @@ if (isset($_GET['recharge']) && !empty($_GET['recharge'])) {
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($_SESSION['nux-mac']) && !empty($_SESSION['nux-ip'])) {
|
||||
if (!empty($_SESSION['nux-mac']) && !empty($_SESSION['nux-ip'] && $_c['hs_auth_method'] != 'hchap')) {
|
||||
$ui->assign('nux_mac', $_SESSION['nux-mac']);
|
||||
$ui->assign('nux_ip', $_SESSION['nux-ip']);
|
||||
$bill = ORM::for_table('tbl_user_recharges')->where('id', $_GET['id'])->where('username', $user['username'])->findOne();
|
||||
@ -232,6 +232,60 @@ if (!empty($_SESSION['nux-mac']) && !empty($_SESSION['nux-ip'])) {
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($_SESSION['nux-mac']) && !empty($_SESSION['nux-ip'] && !empty($_SESSION['nux-hostname']) && $_c['hs_auth_method'] == 'hchap')) {
|
||||
$apkurl = (((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'onoff')|| $_SERVER['SERVER_PORT'] == 443)?'https':'http').'://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
|
||||
$ui->assign('nux_mac', $_SESSION['nux-mac']);
|
||||
$ui->assign('nux_ip', $_SESSION['nux-ip']);
|
||||
$keys = explode('-', $_SESSION['nux-key']);
|
||||
$ui->assign('hostname', $_SESSION['nux-hostname']);
|
||||
$ui->assign('apkurl', $apkurl);
|
||||
$ui->assign('key1', $keys[0]);
|
||||
$ui->assign('key2', $keys[1]);
|
||||
$ui->assign('hchap', $_GET['hchap']);
|
||||
$ui->assign('logged', $_GET['logged']);
|
||||
if ($_app_stage != 'demo') {
|
||||
if ($_GET['mikrotik'] == 'login') {
|
||||
r2(U . 'home&hchap=true', 's', Lang::T('Login Request successfully'));
|
||||
}
|
||||
$getmsg = $_GET['msg'];
|
||||
///get auth notification from mikrotik
|
||||
if($getmsg == 'Connected') {
|
||||
$msg .= Lang::T($getmsg);
|
||||
r2(U . 'home&logged=1', 's', $msg);
|
||||
} else if($getmsg){
|
||||
$msg .= Lang::T($getmsg);
|
||||
r2(U . 'home', 's', $msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($_SESSION['nux-mac']) && !empty($_SESSION['nux-ip'] && !empty($_SESSION['nux-hostname']) && $_c['hs_auth_method'] == 'hchap')) {
|
||||
$apkurl = (((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'onoff')|| $_SERVER['SERVER_PORT'] == 443)?'https':'http').'://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
|
||||
$ui->assign('nux_mac', $_SESSION['nux-mac']);
|
||||
$ui->assign('nux_ip', $_SESSION['nux-ip']);
|
||||
$keys = explode('-', $_SESSION['nux-key']);
|
||||
$ui->assign('hostname', $_SESSION['nux-hostname']);
|
||||
$ui->assign('apkurl', $apkurl);
|
||||
$ui->assign('key1', $keys[0]);
|
||||
$ui->assign('key2', $keys[1]);
|
||||
$ui->assign('hchap', $_GET['hchap']);
|
||||
$ui->assign('logged', $_GET['logged']);
|
||||
if ($_app_stage != 'demo') {
|
||||
if ($_GET['mikrotik'] == 'login') {
|
||||
r2(U . 'home&hchap=true', 's', Lang::T('Login Request successfully'));
|
||||
}
|
||||
$getmsg = $_GET['msg'];
|
||||
///get auth notification from mikrotik
|
||||
if($getmsg == 'Connected') {
|
||||
$msg .= Lang::T($getmsg);
|
||||
r2(U . 'home&logged=1', 's', $msg);
|
||||
} else if($getmsg){
|
||||
$msg .= Lang::T($getmsg);
|
||||
r2(U . 'home', 's', $msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$ui->assign('unpaid', ORM::for_table('tbl_payment_gateway')
|
||||
->where('username', $user['username'])
|
||||
->where('status', 1)
|
||||
|
@ -12,6 +12,19 @@ $action = $routes['1'];
|
||||
$ui->assign('_admin', $admin);
|
||||
|
||||
switch ($action) {
|
||||
case 'docs':
|
||||
$d = ORM::for_table('tbl_appconfig')->where('setting', 'docs_clicked')->find_one();
|
||||
if ($d) {
|
||||
$d->value = 'yes';
|
||||
$d->save();
|
||||
} else {
|
||||
$d = ORM::for_table('tbl_appconfig')->create();
|
||||
$d->setting = 'docs_clicked';
|
||||
$d->value = 'yes';
|
||||
$d->save();
|
||||
}
|
||||
r2('./docs');
|
||||
break;
|
||||
case 'devices':
|
||||
$files = scandir($DEVICE_PATH);
|
||||
$devices = [];
|
||||
@ -111,9 +124,12 @@ switch ($action) {
|
||||
_alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard");
|
||||
}
|
||||
$company = _post('CompanyName');
|
||||
$custom_tax_rate = filter_var(_post('custom_tax_rate'), FILTER_SANITIZE_SPECIAL_CHARS);
|
||||
if (preg_match('/[^0-9.]/', $custom_tax_rate)) {
|
||||
r2(U . 'settings/app', 'e', 'Special characters are not allowed in tax rate');
|
||||
die();
|
||||
}
|
||||
run_hook('save_settings'); #HOOK
|
||||
|
||||
|
||||
if (!empty($_FILES['logo']['name'])) {
|
||||
if (function_exists('imagecreatetruecolor')) {
|
||||
if (file_exists($UPLOAD_PATH . DIRECTORY_SEPARATOR . 'logo.png')) unlink($UPLOAD_PATH . DIRECTORY_SEPARATOR . 'logo.png');
|
||||
@ -141,6 +157,9 @@ switch ($action) {
|
||||
}
|
||||
// Save all settings including tax system
|
||||
foreach ($_POST as $key => $value) {
|
||||
$key = filter_var($key, FILTER_SANITIZE_SPECIAL_CHARS);
|
||||
$value = filter_var($value, FILTER_SANITIZE_SPECIAL_CHARS);
|
||||
|
||||
$d = ORM::for_table('tbl_appconfig')->where('setting', $key)->find_one();
|
||||
if ($d) {
|
||||
$d->value = $value;
|
||||
|
@ -15,7 +15,7 @@ if (php_sapi_name() !== 'cli') {
|
||||
echo "<pre>";
|
||||
}
|
||||
|
||||
$d = ORM::for_table('tbl_user_recharges')->where('status', 'on')->find_many();
|
||||
$d = ORM::for_table('tbl_user_recharges')->where('status', 'on')->whereNotEqual('customer_id', '0')->find_many();
|
||||
|
||||
run_hook('cronjob_reminder'); #HOOK
|
||||
|
||||
|
@ -11,7 +11,7 @@ class Dummy {
|
||||
'author' => 'ibnu maksum',
|
||||
'url' => [
|
||||
'Github' => 'https://github.com/hotspotbilling/phpnuxbill/',
|
||||
'Telegram' => 'https://t.me/ibnux',
|
||||
'Telegram' => 'https://t.me/phpnuxbill',
|
||||
'Donate' => 'https://paypal.me/ibnux'
|
||||
]
|
||||
];
|
||||
|
@ -22,7 +22,7 @@ class MikrotikHotspot
|
||||
'author' => 'ibnux',
|
||||
'url' => [
|
||||
'Github' => 'https://github.com/hotspotbilling/phpnuxbill/',
|
||||
'Telegram' => 'https://t.me/ibnux',
|
||||
'Telegram' => 'https://t.me/phpnuxbill',
|
||||
'Donate' => 'https://paypal.me/ibnux'
|
||||
]
|
||||
];
|
||||
|
@ -21,7 +21,7 @@ class MikrotikPppoe
|
||||
'author' => 'ibnux',
|
||||
'url' => [
|
||||
'Github' => 'https://github.com/hotspotbilling/phpnuxbill/',
|
||||
'Telegram' => 'https://t.me/ibnux',
|
||||
'Telegram' => 'https://t.me/phpnuxbill',
|
||||
'Donate' => 'https://paypal.me/ibnux'
|
||||
]
|
||||
];
|
||||
@ -31,9 +31,23 @@ class MikrotikPppoe
|
||||
{
|
||||
$mikrotik = $this->info($plan['routers']);
|
||||
$client = $this->getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
|
||||
$this->removePpoeUser($client, $customer['username']);
|
||||
$this->removePpoeActive($client, $customer['username']);
|
||||
//check if customer exists
|
||||
$printRequest = new RouterOS\Request('/ppp/secret/print');
|
||||
$printRequest->setQuery(RouterOS\Query::where('name', $customer['username']));
|
||||
$cid = $client->sendSync($printRequest)->getProperty('.id');
|
||||
if (empty($cid)) {
|
||||
//customer not exists, add it
|
||||
$this->addPpoeUser($client, $plan, $customer);
|
||||
}else{
|
||||
$setRequest = new RouterOS\Request('/ppp/secret/set');
|
||||
$setRequest->setArgument('numbers', $cid);
|
||||
$setRequest->setArgument('profile', $plan['name_plan']);
|
||||
$setRequest->setArgument('comment', $customer['fullname'] . ' | ' . $customer['email']);
|
||||
$setRequest->setArgument('password', $customer['password']);
|
||||
$client->sendSync($setRequest);
|
||||
//disconnect then
|
||||
$this->removePpoeActive($client, $customer['username']);
|
||||
}
|
||||
}
|
||||
|
||||
function remove_customer($customer, $plan)
|
||||
@ -212,15 +226,6 @@ class MikrotikPppoe
|
||||
return $client->sendSync($printRequest)->getProperty('.id');
|
||||
}
|
||||
|
||||
|
||||
function connect_customer($customer, $ip, $mac_address, $router_name)
|
||||
{
|
||||
}
|
||||
|
||||
function disconnect_customer($customer, $router_name)
|
||||
{
|
||||
}
|
||||
|
||||
function info($name)
|
||||
{
|
||||
return ORM::for_table('tbl_routers')->where('name', $name)->find_one();
|
||||
|
@ -20,7 +20,7 @@ class Radius
|
||||
'author' => 'ibnux',
|
||||
'url' => [
|
||||
'Github' => 'https://github.com/hotspotbilling/phpnuxbill/',
|
||||
'Telegram' => 'https://t.me/ibnux',
|
||||
'Telegram' => 'https://t.me/phpnuxbill',
|
||||
'Donate' => 'https://paypal.me/ibnux'
|
||||
]
|
||||
];
|
||||
|
60
system/devices/RadiusRest.php
Normal file
60
system/devices/RadiusRest.php
Normal file
@ -0,0 +1,60 @@
|
||||
<?php
|
||||
|
||||
class RadiusRest {
|
||||
|
||||
// show Description
|
||||
function description()
|
||||
{
|
||||
return [
|
||||
'title' => 'Radius Rest API',
|
||||
'description' => 'This devices will handle Radius Connection using Rest API',
|
||||
'author' => 'ibnu maksum',
|
||||
'url' => [
|
||||
'Wiki Tutorial' => 'https://github.com/hotspotbilling/phpnuxbill/wiki/FreeRadius-Rest',
|
||||
'Telegram' => 'https://t.me/phpnuxbill',
|
||||
'Donate' => 'https://paypal.me/ibnux'
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
// Add Customer to Mikrotik/Device
|
||||
function add_customer($customer, $plan)
|
||||
{
|
||||
}
|
||||
|
||||
// Remove Customer to Mikrotik/Device
|
||||
function remove_customer($customer, $plan)
|
||||
{
|
||||
}
|
||||
|
||||
// Add Plan to Mikrotik/Device
|
||||
function add_plan($plan)
|
||||
{
|
||||
}
|
||||
|
||||
// Update Plan to Mikrotik/Device
|
||||
function update_plan($old_name, $plan)
|
||||
{
|
||||
}
|
||||
|
||||
// Remove Plan from Mikrotik/Device
|
||||
function remove_plan($plan)
|
||||
{
|
||||
}
|
||||
|
||||
// check if customer is online
|
||||
function online_customer($customer, $router_name)
|
||||
{
|
||||
}
|
||||
|
||||
// make customer online
|
||||
function connect_customer($customer, $ip, $mac_address, $router_name)
|
||||
{
|
||||
}
|
||||
|
||||
// make customer disconnect
|
||||
function disconnect_customer($customer, $router_name)
|
||||
{
|
||||
}
|
||||
|
||||
}
|
@ -1,219 +1,655 @@
|
||||
{
|
||||
"Recharge_Account": "Recharge Account",
|
||||
"Refill_Account": "Refill Account",
|
||||
"SuperAdmin": "SuperAdmin",
|
||||
"Change_Password": "Change Password",
|
||||
"My_Account": "My Account",
|
||||
"Logout": "Logout",
|
||||
"Dashboard": "Dashboard",
|
||||
"Customer": "Customer",
|
||||
"Lists": "Lists",
|
||||
"Location": "Location",
|
||||
"Services": "Services",
|
||||
"Active_Users": "Active Users",
|
||||
"Vouchers": "Vouchers",
|
||||
"Refill_Customer": "Refill Customer",
|
||||
"Recharge_Customer": "Recharge Customer",
|
||||
"Refill_Balance": "Refill Balance",
|
||||
"Internet_Plan": "Internet Plan",
|
||||
"Bandwidth": "Bandwidth",
|
||||
"Customer_Balance": "Customer Balance",
|
||||
"Reports": "Reports",
|
||||
"Daily_Reports": "Daily Reports",
|
||||
"Period_Reports": "Period Reports",
|
||||
"Activation_History": "Activation History",
|
||||
"Send_Message": "Send Message",
|
||||
"Single_Customer": "Single Customer",
|
||||
"Bulk_Customers": "Bulk Customers",
|
||||
"Network": "Network",
|
||||
"Routers": "Routers",
|
||||
"IP_Pool": "IP Pool",
|
||||
"Radius": "Radius",
|
||||
"Radius_NAS": "Radius NAS",
|
||||
"Static_Pages": "Static Pages",
|
||||
"Order_Voucher": "Order Voucher",
|
||||
"Voucher": "Voucher",
|
||||
"Log_in": "Login",
|
||||
"Register": "Register",
|
||||
"Announcement": "Announcement",
|
||||
"Customer_Announcement": "Customer Announcement",
|
||||
"Registration_Info": "Registration Info",
|
||||
"Privacy_Policy": "Privacy Policy",
|
||||
"Terms_and_Conditions": "Terms and Conditions",
|
||||
"Settings": "Settings",
|
||||
"General_Settings": "General Settings",
|
||||
"Localisation": "Localisation",
|
||||
"Maintenance_Mode": "Maintenance Mode",
|
||||
"User_Notification": "User Notification",
|
||||
"Administrator_Users": "Administrator Users",
|
||||
"Backup_Restore": "Backup\/Restore",
|
||||
"Payment_Gateway": "Payment Gateway",
|
||||
"Plugin_Manager": "Plugin Manager",
|
||||
"Logs": "Logs",
|
||||
"Community": "Community",
|
||||
"Select_Account": "Select Account",
|
||||
"Select_a_customer": "Select a customer",
|
||||
"Code_Voucher": "Code Voucher",
|
||||
"Enter_voucher_code_here": "Enter voucher code here",
|
||||
"Recharge": "Recharge",
|
||||
"Cancel": "Cancel",
|
||||
"Hotspot_Plans": "Hotspot Plans",
|
||||
"Search_by_Name": "Search by Name",
|
||||
"Search": "Search",
|
||||
"New_Service_Plan": "New Service Plan",
|
||||
"Expired": "Expired",
|
||||
"Name": "Name",
|
||||
"Type": "Type",
|
||||
"Category": "Category",
|
||||
"Price": "Price",
|
||||
"Validity": "Validity",
|
||||
"Time": "Time",
|
||||
"Data": "Data",
|
||||
"Device": "Device",
|
||||
"Date": "Date",
|
||||
"ID": "ID",
|
||||
"Voucher_not_found__please_buy_voucher_befor_register": "Voucher not found, please buy voucher befor register",
|
||||
"Register_Success__You_can_login_now": "Register Success! You can login now",
|
||||
"Log_in_to_Member_Panel": "Log in to Member Panel",
|
||||
"Register_as_Member": "Register as Member",
|
||||
"Enter_Admin_Area": "Enter Admin Area",
|
||||
"PHPNuxBill": "PHPNuxBill",
|
||||
"Username": "Username",
|
||||
"Password": "Password",
|
||||
"Passwords_does_not_match": "Passwords does not match",
|
||||
"Account_already_axist": "Account already axist",
|
||||
"Manage": "Manage",
|
||||
"Submit": "Submit",
|
||||
"Save_Changes": "Save Changes",
|
||||
"Cancel": "Cancel",
|
||||
"Edit": "Edit",
|
||||
"Delete": "Delete",
|
||||
"Prev": "Prev",
|
||||
"Next": "Next",
|
||||
"Welcome": "Welcome",
|
||||
"Data_Created_Successfully": "Data Created Successfully",
|
||||
"Data_Updated_Successfully": "Data Updated Successfully",
|
||||
"Data_Deleted_Successfully": "Data Deleted Successfully",
|
||||
"Static_Pages": "Static Pages",
|
||||
"Failed_to_save_page__make_sure_i_can_write_to_folder_pages___i_chmod_664_pages___html_i_": "Failed to save page, make sure i can write to folder pages, <i>chmod 664 pages\/*.html<i>",
|
||||
"Saving_page_success": "Saving page success",
|
||||
"Sometimes_you_need_to_refresh_3_times_until_content_change": "Sometimes you need to refresh 3 times until content change",
|
||||
"Dashboard": "Dashboard",
|
||||
"Search_Customers___": "Search Customers...",
|
||||
"My_Account": "My Account",
|
||||
"My_Profile": "My Profile",
|
||||
"Settings": "Settings",
|
||||
"Edit_Profile": "Edit Profile",
|
||||
"Change_Password": "Change Password",
|
||||
"Logout": "Logout",
|
||||
"Services": "Services",
|
||||
"Bandwidth_Plans": "Bandwidth Plans",
|
||||
"Bandwidth_Name": "Bandwidth Name",
|
||||
"New_Bandwidth": "New Bandwidth",
|
||||
"Edit_Bandwidth": "Edit Bandwidth",
|
||||
"Add_New_Bandwidth": "Add New Bandwidth",
|
||||
"Rate_Download": "Rate Download",
|
||||
"Rate_Upload": "Rate Upload",
|
||||
"Name_Bandwidth_Already_Exist": "Name Bandwidth Already Exist",
|
||||
"Hotspot_Plans": "Hotspot Plans",
|
||||
"PPPOE_Plans": "PPPOE Plans",
|
||||
"Plan_Name": "Plan Name",
|
||||
"Plan_Type": "Plan Type",
|
||||
"Bandwidth_Plans": "Bandwidth Plans",
|
||||
"Plan_Price": "Plan Price",
|
||||
"Plan_Validity": "Plan Validity",
|
||||
"Status": "Status",
|
||||
"Business": "Business",
|
||||
"Personal": "Personal",
|
||||
"Hap_Lite": "Hap Lite",
|
||||
"": "",
|
||||
"New_Service_Plan": "New Service Plan",
|
||||
"Add_Service_Plan": "Add Service Plan",
|
||||
"Cannot_be_change_after_saved": "Cannot be change after saved",
|
||||
"Edit_Service_Plan": "Edit Service Plan",
|
||||
"Name_Plan_Already_Exist": "Name Plan Already Exist",
|
||||
"Plan_Type": "Plan Type",
|
||||
"Plan_Price": "Plan Price",
|
||||
"Limit_Type": "Limit Type",
|
||||
"Unlimited": "Unlimited",
|
||||
"Limited": "Limited",
|
||||
"Limit_Type": "Limit Type",
|
||||
"Time_Limit": "Time Limit",
|
||||
"Data_Limit": "Data Limit",
|
||||
"Both_Limit": "Both Limit",
|
||||
"Hrs": "Hrs",
|
||||
"Mins": "Mins",
|
||||
"Bandwidth_Name": "Bandwidth Name",
|
||||
"Plan_Validity": "Plan Validity",
|
||||
"Select_Bandwidth": "Select Bandwidth",
|
||||
"Shared_Users": "Shared Users",
|
||||
"1_Period___1_Month__Expires_the_20th_of_each_month": "1 Period = 1 Month, Expires the 20th of each month",
|
||||
"Expired_Date": "Expired Date",
|
||||
"Router_Name": "Router Name",
|
||||
"Select_Routers": "Select Routers",
|
||||
"Save_Changes": "Save Changes",
|
||||
"Days": "Days",
|
||||
"Months": "Months",
|
||||
"Period": "Period",
|
||||
"New_Bandwidth": "New Bandwidth",
|
||||
"Rate": "Rate",
|
||||
"Burst": "Burst",
|
||||
"Balance_Plans": "Balance Plans",
|
||||
"New_Router": "New Router",
|
||||
"IP_Address": "IP Address",
|
||||
"Username": "Username",
|
||||
"Description": "Description",
|
||||
"Edit_Service_Plan": "Edit Service Plan",
|
||||
"Expired_Action": "Expired Action",
|
||||
"Optional": "Optional",
|
||||
"Expired_Internet_Plan": "Expired Internet Plan",
|
||||
"When_Expired__customer_will_be_move_to_selected_internet_plan": "When Expired, customer will be move to selected internet plan",
|
||||
"Data_Updated_Successfully": "Data Updated Successfully",
|
||||
"Plugin_Installer": "Plugin Installer",
|
||||
"Plugin": "Plugin",
|
||||
"Search_by_Username": "Search by Username",
|
||||
"Choose_User_Type_Sales_to_disable_access_to_Settings": "Choose User Type Sales to disable access to Settings",
|
||||
"Current_Password": "Current Password",
|
||||
"New_Password": "New Password",
|
||||
"Administrator": "Administrator",
|
||||
"Sales": "Sales",
|
||||
"Member": "Member",
|
||||
"Confirm_New_Password": "Confirm New Password",
|
||||
"Confirm_Password": "Confirm Password",
|
||||
"Full_Name": "Full Name",
|
||||
"User_Type": "User Type",
|
||||
"Address": "Address",
|
||||
"Created_On": "Created On",
|
||||
"Expires_On": "Expires On",
|
||||
"Phone_Number": "Phone Number",
|
||||
"User_deleted_Successfully": "User deleted Successfully",
|
||||
"Full_Administrator": "Full Administrator",
|
||||
"Keep_Blank_to_do_not_change_Password": "Keep Blank to do not change Password",
|
||||
"Keep_it_blank_if_you_do_not_want_to_show_currency_code": "Keep it blank if you do not want to show currency code",
|
||||
"Theme_Style": "Theme Style",
|
||||
"Theme_Color": "Theme Color",
|
||||
"Default_Language": "Default Language",
|
||||
"Network": "Network",
|
||||
"Routers": "Routers",
|
||||
"IP_Pool": "IP Pool",
|
||||
"New_Router": "New Router",
|
||||
"Add_Router": "Add Router",
|
||||
"Edit_Router": "Edit Router",
|
||||
"Router_Name": "Router Name",
|
||||
"IP_Address": "IP Address",
|
||||
"Router_Secret": "Router Secret",
|
||||
"Description": "Description",
|
||||
"IP_Router_Already_Exist": "IP Router Already Exist",
|
||||
"Name_Pool": "Name Pool",
|
||||
"Range_IP": "Range IP",
|
||||
"New_Pool": "New Pool",
|
||||
"Add_Pool": "Add Pool",
|
||||
"Edit_Pool": "Edit Pool",
|
||||
"Pool_Name_Already_Exist": "Pool Name Already Exist",
|
||||
"Refill_Account": "Refill Account",
|
||||
"Recharge_Account": "Recharge Account",
|
||||
"Select_Account": "Select Account",
|
||||
"Service_Plan": "Service Plan",
|
||||
"Recharge": "Recharge",
|
||||
"Method": "Method",
|
||||
"Extend": "Extend",
|
||||
"Account_Created_Successfully": "Account Created Successfully",
|
||||
"Database_Status": "Database Status",
|
||||
"Total_Database_Size": "Total Database Size",
|
||||
"Download_Database_Backup": "Download Database Backup",
|
||||
"Table_Name": "Table Name",
|
||||
"Rows": "Rows",
|
||||
"Size": "Size",
|
||||
"Customer": "Customer",
|
||||
"Add_New_Contact": "Add New Contact",
|
||||
"Edit_Contact": "Edit Contact",
|
||||
"List_Contact": "List Contact",
|
||||
"Manage_Contact": "Manage Contact",
|
||||
"Reports": "Reports",
|
||||
"Daily_Reports": "Daily Reports",
|
||||
"Period_Reports": "Period Reports",
|
||||
"All_Transactions": "All Transactions",
|
||||
"Total_Income": "Total Income",
|
||||
"All_Transactions_at_Date": "All Transactions at Date",
|
||||
"Export_for_Print": "Export for Print",
|
||||
"Print": "Print",
|
||||
"Export_to_PDF": "Export to PDF",
|
||||
"Click_Here_to_Print": "Click Here to Print",
|
||||
"You_can_use_html_tag": "You can use html tag",
|
||||
"Date_Format": "Date Format",
|
||||
"Income_Today": "Income Today",
|
||||
"Income_This_Month": "Income This Month",
|
||||
"Users_Active": "Users Active",
|
||||
"Total_Users": "Total Users",
|
||||
"Users": "Users",
|
||||
"Edit_User": "Edit User",
|
||||
"Last_Login": "Last Login",
|
||||
"Administrator_Users": "Administrator Users",
|
||||
"Manage_Administrator": "Manage Administrator",
|
||||
"Add_New_Administrator": "Add New Administrator",
|
||||
"Localisation": "Localisation",
|
||||
"Backup_Restore": "Backup\/Restore",
|
||||
"General_Settings": "General Settings",
|
||||
"Date": "Date",
|
||||
"Login_Successful": "Login Successful",
|
||||
"Failed_Login": "Failed Login",
|
||||
"Settings_Saved_Successfully": "Settings Saved Successfully",
|
||||
"User_Updated_Successfully": "User Updated Successfully",
|
||||
"User_Expired__Today": "User Expired, Today",
|
||||
"Activity_Log": "Activity Log",
|
||||
"View_Reports": "View Reports",
|
||||
"View_All": "View All",
|
||||
"Number_of_Vouchers": "Number of Vouchers",
|
||||
"Length_Code": "Length Code",
|
||||
"Code_Voucher": "Code Voucher",
|
||||
"Voucher": "Voucher",
|
||||
"Hotspot_Voucher": "Hotspot Voucher",
|
||||
"Status_Voucher": "Status Voucher",
|
||||
"Generated_By": "Generated By",
|
||||
"View": "View",
|
||||
"Buy_Balance": "Buy Balance",
|
||||
"Buy_Package": "Buy Package",
|
||||
"Order_History": "Order History",
|
||||
"List_Activated_Voucher": "List Activated Voucher",
|
||||
"Invoice": "Invoice",
|
||||
"Select_Plans": "Select Plans",
|
||||
"Add_Vouchers": "Add Vouchers",
|
||||
"Create_Vouchers_Successfully": "Create Vouchers Successfully",
|
||||
"Generate": "Generate",
|
||||
"Print_side_by_side__it_will_easy_to_cut": "Print side by side, it will easy to cut",
|
||||
"From_Date": "From Date",
|
||||
"To_Date": "To Date",
|
||||
"New_Service": "New Service",
|
||||
"Type": "Type",
|
||||
"Finish": "Finish",
|
||||
"Application_Name__Company_Name": "Application Name\/ Company Name",
|
||||
"This_Name_will_be_shown_on_the_Title": "This Name will be shown on the Title",
|
||||
"Company_Logo": "Company Logo",
|
||||
"Next": "Next",
|
||||
"Last": "Last",
|
||||
"Timezone": "Timezone",
|
||||
"Decimal_Point": "Decimal Point",
|
||||
"Thousands_Separator": "Thousands Separator",
|
||||
"Currency_Code": "Currency Code",
|
||||
"Order_Voucher": "Order Voucher",
|
||||
"Voucher_Activation": "Voucher Activation",
|
||||
"List_Activated_Voucher": "List Activated Voucher",
|
||||
"Enter_voucher_code_here": "Enter voucher code here",
|
||||
"Private_Message": "Private Message",
|
||||
"Inbox": "Inbox",
|
||||
"Outbox": "Outbox",
|
||||
"Compose": "Compose",
|
||||
"Send_to": "Send to",
|
||||
"Title": "Title",
|
||||
"Message": "Message",
|
||||
"Your_Account_Information": "Your Account Information",
|
||||
"Welcome_to_the_Panel_Members_page__on_this_page_you_can_": "Welcome to the Panel Members page, on this page you can:",
|
||||
"Invalid_Username_or_Password": "Invalid Username or Password",
|
||||
"You_do_not_have_permission_to_access_this_page": "You do not have permission to access this page",
|
||||
"Incorrect_Current_Password": "Incorrect Current Password",
|
||||
"Password_changed_successfully__Please_login_again": "Password changed successfully, Please login again",
|
||||
"All_field_is_required": "All field is required",
|
||||
"Voucher_Not_Valid": "Voucher Not Valid",
|
||||
"Activation_Vouchers_Successfully": "Activation Vouchers Successfully",
|
||||
"Data_Not_Found": "Data Not Found",
|
||||
"Search_by_Username": "Search by Username",
|
||||
"Search_by_Name": "Search by Name",
|
||||
"Search_by_Code_Voucher": "Search by Code Voucher",
|
||||
"Search": "Search",
|
||||
"Select_a_customer": "Select a customer",
|
||||
"Select_Routers": "Select Routers",
|
||||
"Select_Plans": "Select Plans",
|
||||
"Select_Pool": "Select Pool",
|
||||
"Hrs": "Hrs",
|
||||
"Mins": "Mins",
|
||||
"Days": "Days",
|
||||
"Months": "Months",
|
||||
"Add_Language": "Add Language",
|
||||
"Language_Name": "Language Name",
|
||||
"Folder_Name": "Folder Name",
|
||||
"Translator": "Translator",
|
||||
"Language_Name_Already_Exist": "Language Name Already Exist",
|
||||
"Payment_Gateway": "Payment Gateway",
|
||||
"Community": "Community",
|
||||
"1_user_can_be_used_for_many_devices_": "1 user can be used for many devices?",
|
||||
"Cannot_be_change_after_saved": "Cannot be change after saved",
|
||||
"Explain_Coverage_of_router": "Explain Coverage of router",
|
||||
"Name_of_Area_that_router_operated": "Name of Area that router operated",
|
||||
"Payment_Notification_URL__Recurring_Notification_URL__Pay_Account_Notification_URL": "Payment Notification URL, Recurring Notification URL, Pay Account Notification URL",
|
||||
"Finish_Redirect_URL__Unfinish_Redirect_URL__Error_Redirect_URL": "Finish Redirect URL, Unfinish Redirect URL, Error Redirect URL",
|
||||
"Status": "Status",
|
||||
"Plan_Not_found": "Plan Not found",
|
||||
"Failed_to_create_transaction_": "Failed to create transaction.",
|
||||
"Seller_has_not_yet_setup_Xendit_payment_gateway": "Seller has not yet setup Xendit payment gateway",
|
||||
"Admin_has_not_yet_setup_Xendit_payment_gateway__please_tell_admin": "Admin has not yet setup Xendit payment gateway, please tell admin",
|
||||
"You_already_have_unpaid_transaction__cancel_it_or_pay_it_": "You already have unpaid transaction, cancel it or pay it.",
|
||||
"Transaction_Not_found": "Transaction Not found",
|
||||
"Cancel_it_": "Cancel it?",
|
||||
"expired": "expired",
|
||||
"Check_for_Payment": "Check for Payment",
|
||||
"Transaction_still_unpaid_": "Transaction still unpaid.",
|
||||
"Paid_Date": "Paid Date",
|
||||
"Transaction_has_been_paid_": "Transaction has been paid.",
|
||||
"PAID": "PAID",
|
||||
"CANCELED": "CANCELED",
|
||||
"UNPAID": "UNPAID",
|
||||
"PAY_NOW": "PAY NOW",
|
||||
"Buy_Hotspot_Plan": "Buy Hotspot Plan",
|
||||
"Buy_PPOE_Plan": "Buy PPOE Plan",
|
||||
"Package": "Package",
|
||||
"Order_Internet_Package": "Order Internet Package",
|
||||
"Unknown_Command_": "Unknown Command.",
|
||||
"Checking_payment": "Checking payment",
|
||||
"Create_Transaction_Success": "Create Transaction Success",
|
||||
"You_have_unpaid_transaction": "You have unpaid transaction",
|
||||
"TripayPayment_Channel": "TripayPayment Channel",
|
||||
"Payment_Channel": "Payment Channel",
|
||||
"Payment_check_failed_": "Payment check failed.",
|
||||
"Order_Package": "Order Package",
|
||||
"Transactions": "Transactions",
|
||||
"Payments": "Payments",
|
||||
"History": "History",
|
||||
"Order_History": "Order History",
|
||||
"Gateway": "Gateway",
|
||||
"Date_Done": "Date Done",
|
||||
"Unpaid_Order": "Unpaid Order",
|
||||
"Payment_Gateway_Not_Found": "Payment Gateway Not Found",
|
||||
"Payment_Gateway_saved_successfully": "Payment Gateway saved successfully",
|
||||
"ORDER": "ORDER",
|
||||
"Package_History": "Package History",
|
||||
"Buy_History": "Buy History",
|
||||
"Activation_History": "Activation History",
|
||||
"Buy_Package": "Buy Package",
|
||||
"Email": "Email",
|
||||
"Company_Footer": "Company Footer",
|
||||
"Will_show_below_user_pages": "Will show below user pages",
|
||||
"Address": "Address",
|
||||
"You_can_use_html_tag": "You can use html tag",
|
||||
"Phone_Number": "Phone Number",
|
||||
"Invoice_Footer": "Invoice Footer",
|
||||
"Recharge_Using": "Recharge Using",
|
||||
"Cash": "Cash",
|
||||
"Bank_Transfer": "Bank Transfer",
|
||||
"Income_reset_date": "Income reset date",
|
||||
"Monthly_Registered_Customers": "Monthly Registered Customers",
|
||||
"Total_Monthly_Sales": "Total Monthly Sales",
|
||||
"All_Users_Insights": "All Users Insights",
|
||||
"Activity_Log": "Activity Log",
|
||||
"User_Expired__Today": "User Expired, Today",
|
||||
"Request_OTP": "Request OTP",
|
||||
"Verification_Code": "Verification Code",
|
||||
"SMS_Verification_Code": "SMS Verification Code",
|
||||
"Please_enter_your_email_address": "Please enter your email address",
|
||||
"Failed_to_create_Paypal_transaction_": "Failed to create Paypal transaction.",
|
||||
"Plugin": "Plugin",
|
||||
"Plugin_Manager": "Plugin Manager",
|
||||
"User_Notification": "User Notification",
|
||||
"Expired_Notification": "Expired Notification",
|
||||
"User_will_get_notification_when_package_expired": "User will get notification when package expired",
|
||||
"Expired_Notification_Message": "Expired Notification Message",
|
||||
"Payment_Notification": "Payment Notification",
|
||||
"User_will_get_invoice_notification_when_buy_package_or_package_refilled": "User will get invoice notification when buy package or package refilled",
|
||||
"Current_IP": "Current IP",
|
||||
"Current_MAC": "Current MAC",
|
||||
"Login_Status": "Login Status",
|
||||
"Login_Request_successfully": "Login Request successfully",
|
||||
"Logout_Request_successfully": "Logout Request successfully",
|
||||
"Disconnect_Internet_": "Disconnect Internet?",
|
||||
"Not_Online__Login_now_": "Not Online, Login now?",
|
||||
"You_are_Online__Logout_": "You are Online, Logout?",
|
||||
"Connect_to_Internet_": "Connect to Internet?",
|
||||
"Your_account_not_connected_to_internet": "Your account not connected to internet",
|
||||
"Failed_to_create_transaction__": "Failed to create transaction. ",
|
||||
"Failed_to_check_status_transaction__": "Failed to check status transaction. ",
|
||||
"Disable_Voucher": "Disable Voucher",
|
||||
"Voucher_activation_menu_will_be_hidden": "Voucher activation menu will be hidden",
|
||||
"Voucher_Format": "Voucher Format",
|
||||
"Disable_Registration": "Disable Registration",
|
||||
"Customer_just_Login_with_Phone_number_and_Voucher_Code__Voucher_will_be_password": "Customer just Login with Phone number and Voucher Code, Voucher will be password",
|
||||
"After_Customer_activate_voucher_or_login__customer_will_be_redirected_to_this_url": "After Customer activate voucher or login, customer will be redirected to this url",
|
||||
"Extend_Postpaid_Expiration": "Extend Postpaid Expiration",
|
||||
"Allow_Extend": "Allow Extend",
|
||||
"Extend_Days": "Extend Days",
|
||||
"Confirmation_Message": "Confirmation Message",
|
||||
"Balance": "Balance",
|
||||
"Balance_System": "Balance System",
|
||||
"Enable_System": "Enable System",
|
||||
"Customer_can_deposit_money_to_buy_voucher": "Customer can deposit money to buy voucher",
|
||||
"Allow_Transfer": "Allow Transfer",
|
||||
"Allow_balance_transfer_between_customers": "Allow balance transfer between customers",
|
||||
"Minimum_Balance_Transfer": "Minimum Balance Transfer",
|
||||
"Telegram_Notification": "Telegram Notification",
|
||||
"SMS_OTP_Registration": "SMS OTP Registration",
|
||||
"Whatsapp_Notification": "Whatsapp Notification",
|
||||
"Email_Notification": "Email Notification",
|
||||
"Expired_Notification": "Expired Notification",
|
||||
"User_will_get_notification_when_package_expired": "User will get notification when package expired",
|
||||
"Payment_Notification": "Payment Notification",
|
||||
"User_will_get_invoice_notification_when_buy_package_or_package_refilled": "User will get invoice notification when buy package or package refilled",
|
||||
"Reminder_Notification": "Reminder Notification",
|
||||
"Tawk_to_Chat_Widget": "Tawk.to Chat Widget",
|
||||
"This_Token_will_act_as_SuperAdmin_Admin": "This Token will act as SuperAdmin\/Admin",
|
||||
"Invoice": "Invoice",
|
||||
"Country_Code_Phone": "Country Code Phone",
|
||||
"Voucher_activation_menu_will_be_hidden": "Voucher activation menu will be hidden",
|
||||
"Customer_can_deposit_money_to_buy_voucher": "Customer can deposit money to buy voucher",
|
||||
"Allow_balance_transfer_between_customers": "Allow balance transfer between customers",
|
||||
"Reminder_Notification": "Reminder Notification",
|
||||
"Reminder_Notification_Message": "Reminder Notification Message",
|
||||
"Reminder_7_days": "Reminder 7 days",
|
||||
"Reminder_3_days": "Reminder 3 days",
|
||||
"Reminder_1_day": "Reminder 1 day",
|
||||
"PPPOE_Password": "PPPOE Password",
|
||||
"User_Cannot_change_this__only_admin__if_it_Empty_it_will_use_user_password": "User Cannot change this, only admin. if it Empty it will use user password",
|
||||
"Invoice_Balance_Message": "Invoice Balance Message",
|
||||
"Invoice_Notification_Payment": "Invoice Notification Payment",
|
||||
"Balance_Notification_Payment": "Balance Notification Payment",
|
||||
"Balance_Plans": "Balance Plans",
|
||||
"Buy_Balance": "Buy Balance",
|
||||
"Price": "Price",
|
||||
"Validity": "Validity",
|
||||
"Disable_auto_renewal_": "Disable auto renewal?",
|
||||
"Auto_Renewal_On": "Auto Renewal On",
|
||||
"Enable_auto_renewal_": "Enable auto renewal?",
|
||||
"Auto_Renewal_Off": "Auto Renewal Off",
|
||||
"Refill_Balance": "Refill Balance",
|
||||
"Invoice_Footer": "Invoice Footer",
|
||||
"Pay_With_Balance": "Pay With Balance",
|
||||
"Pay_this_with_Balance__your_active_package_will_be_overwrite": "Pay this with Balance? your active package will be overwrite",
|
||||
"Success_to_buy_package": "Success to buy package",
|
||||
"Auto_Renewal": "Auto Renewal",
|
||||
"View": "View",
|
||||
"Back": "Back",
|
||||
"Active": "Active",
|
||||
"Transfer_Balance": "Transfer Balance",
|
||||
"Send_your_balance_": "Send your balance?",
|
||||
"Send": "Send",
|
||||
"Cannot_send_to_yourself": "Cannot send to yourself",
|
||||
"Sending_balance_success": "Sending balance success",
|
||||
"From": "From",
|
||||
"To": "To",
|
||||
"insufficient_balance": "insufficient balance",
|
||||
"Send_Balance": "Send Balance",
|
||||
"Received_Balance": "Received Balance",
|
||||
"Minimum_Balance_Transfer": "Minimum Balance Transfer",
|
||||
"Minimum_Transfer": "Minimum Transfer",
|
||||
"Company_Logo": "Company Logo",
|
||||
"Expired_IP_Pool": "Expired IP Pool",
|
||||
"Proxy": "Proxy",
|
||||
"Proxy_Server": "Proxy Server",
|
||||
"Proxy_Server_Login": "Proxy Server Login",
|
||||
"Hotspot_Plan": "Hotspot Plan",
|
||||
"PPPOE_Plan": "PPPOE Plan",
|
||||
"UNKNOWN": "UNKNOWN",
|
||||
"Are_You_Sure_": "Are You Sure?",
|
||||
"Success_to_send_package": "Success to send package",
|
||||
"Target_has_active_plan__different_with_current_plant_": "Target has active plan, different with current plant.",
|
||||
"Recharge_a_friend": "Recharge a friend",
|
||||
"Buy_for_friend": "Buy for friend",
|
||||
"Buy_this_for_friend_account_": "Buy this for friend account?",
|
||||
"Review_package_before_recharge": "Review package before recharge",
|
||||
"Activate": "Activate",
|
||||
"Deactivate": "Deactivate",
|
||||
"Sync": "Sync",
|
||||
"Failed_to_create_PaymeTrust_transaction_": "Failed to create PaymeTrust transaction.",
|
||||
"Location": "Location",
|
||||
"Radius_Plans": "Radius Plans",
|
||||
"Change_title_in_user_Plan_order": "Change title in user Plan order",
|
||||
"Logs": "Logs",
|
||||
"Voucher_Format": "Voucher Format",
|
||||
"Resend_To_Customer": "Resend To Customer",
|
||||
"Your_friend_do_not_have_active_package": "Your friend do not have active package",
|
||||
"Service_Type": "Service Type",
|
||||
"Others": "Others",
|
||||
"PPPoE": "PPPoE",
|
||||
"Hotspot": "Hotspot",
|
||||
"Disable_Registration": "Disable Registration",
|
||||
"Customer_just_Login_with_Phone_number_and_Voucher_Code__Voucher_will_be_password": "Customer just Login with Phone number and Voucher Code, Voucher will be password",
|
||||
"Login___Activate_Voucher": "Login \/ Activate Voucher",
|
||||
"After_Customer_activate_voucher_or_login__customer_will_be_redirected_to_this_url": "After Customer activate voucher or login, customer will be redirected to this url",
|
||||
"Voucher_Prefix": "Voucher Prefix",
|
||||
"Voucher_activation_success__now_you_can_login": "Voucher activation success, now you can login",
|
||||
"Buy_this__your_active_package_will_be_overwritten": "Buy this? your active package will be overwritten",
|
||||
"Pay_this_with_Balance__your_active_package_will_be_overwritten": "Pay this with Balance? your active package will be overwritten",
|
||||
"Buy_this__your_active_package_will_be_overwrite": "Buy this? your active package will be overwrite",
|
||||
"Monthly_Registered_Customers": "Monthly Registered Customers",
|
||||
"Total_Monthly_Sales": "Total Monthly Sales",
|
||||
"Active_Users": "Active Users",
|
||||
"All_Users_Insights": "All Users Insights",
|
||||
"SuperAdmin": "Super Admin",
|
||||
"Radius": "Radius",
|
||||
"Radius_NAS": "Radius NAS",
|
||||
"Translation": "Translation",
|
||||
"Translation_saved_Successfully": "Translation saved Successfully",
|
||||
"Language_Editor": "Language Editor",
|
||||
"year": "year",
|
||||
"month": "month",
|
||||
"week": "week",
|
||||
"day": "day",
|
||||
"hour": "hour",
|
||||
"minute": "minute",
|
||||
"second": "second",
|
||||
"Attributes": "Attributes",
|
||||
"Profile": "Profile",
|
||||
"Phone": "Phone",
|
||||
"City": "City",
|
||||
"Sub_District": "Sub District",
|
||||
"Ward": "Ward",
|
||||
"Credentials": "Credentials",
|
||||
"Agent": "Agent",
|
||||
"This_Token_will_act_as_SuperAdmin_Admin": "This Token will act as SuperAdmin\/Admin",
|
||||
"Login": "Login",
|
||||
"Expired_Action": "Expired Action",
|
||||
"Expired_Address_List_Name": "Expired Address List Name",
|
||||
"Address_List": "Address List",
|
||||
"Optional": "Optional",
|
||||
"Generated_By": "Generated By",
|
||||
"Admin": "Admin",
|
||||
"Password_should_be_minimum_6_characters": "Password should be minimum 6 characters",
|
||||
"Add_User": "Add User",
|
||||
"Send_Notification": "Send Notification",
|
||||
"Code": "Code",
|
||||
"Send_To_Customer": "Send To Customer",
|
||||
"Prev": "Prev",
|
||||
"Voucher_Not_Found": "Voucher Not Found",
|
||||
"Miscellaneous": "Miscellaneous",
|
||||
"OTP_Required": "OTP Required",
|
||||
"Change": "Change",
|
||||
"Change_Phone_Number": "Change Phone Number",
|
||||
"Current_Number": "Current Number",
|
||||
"New_Number": "New Number",
|
||||
"Input_your_phone_number": "Input your phone number",
|
||||
"OTP": "OTP",
|
||||
"Enter_OTP_that_was_sent_to_your_phone": "Enter OTP that was sent to your phone",
|
||||
"Update": "Update",
|
||||
"OTP_is_required_when_user_want_to_change_phone_number": "OTP is required when user want to change phone number",
|
||||
"Rate": "Rate",
|
||||
"Burst": "Burst",
|
||||
"Editing_Bandwidth_will_not_automatically_update_the_plan__you_need_to_edit_the_plan_then_save_again": "Editing Bandwidth will not automatically update the plan, you need to edit the plan then save again",
|
||||
"OTP_Method": "OTP Method",
|
||||
"SMS": "SMS",
|
||||
"WhatsApp": "WhatsApp",
|
||||
"SMS_and_WhatsApp": "SMS and WhatsApp",
|
||||
"The_method_which_OTP_will_be_sent_to_user": "The method which OTP will be sent to user",
|
||||
"Report_Viewer": "Report Viewer",
|
||||
"Super_Administrator": "Super Administrator",
|
||||
"Send_To": "Send To",
|
||||
"Resend": "Resend",
|
||||
"Alert": "Alert",
|
||||
"success": "success",
|
||||
"Click_Here": "Click Here",
|
||||
"danger": "danger",
|
||||
"Logout_Successful": "Logout Successful",
|
||||
"warning": "warning",
|
||||
"Users_Announcement": "Users Announcement",
|
||||
"Customer_Announcement": "Customer Announcement",
|
||||
"1_Period___1_Month__Expires_the_20th_of_each_month": "1 Period = 1 Month, Expires the 20th of each month",
|
||||
"Period": "Period",
|
||||
"Add": "Add",
|
||||
"Select_Payment_Gateway": "Select Payment Gateway",
|
||||
"Available_Payment_Gateway": "Available Payment Gateway",
|
||||
"Pay_Now": "Pay Now",
|
||||
"Please_select_Payment_Gateway": "Please select Payment Gateway",
|
||||
"Payment_Gateway_Deleted": "Payment Gateway Deleted",
|
||||
"Payment_Gateway_not_set__please_set_it_in_Settings": "Payment Gateway not set, please set it in Settings",
|
||||
"Failed_to_create_Transaction__": "Failed to create Transaction..",
|
||||
"Show_To_Customer": "Type",
|
||||
"Using": "Using",
|
||||
"Default": "Default",
|
||||
"Customer_Balance": "Customer Balance",
|
||||
"Vouchers": "Vouchers",
|
||||
"Refill_Customer": "Refill Customer",
|
||||
"Recharge_Customer": "Recharge Customer",
|
||||
"Plans": "Plans",
|
||||
"PPPOE": "PPPOE",
|
||||
"Bandwidth": "Bandwidth",
|
||||
"Customers": "Customers",
|
||||
"Actives": "Actives",
|
||||
"Name": "Name",
|
||||
"Confirm": "Confirm",
|
||||
"Plan": "Plan",
|
||||
"Total": "Total",
|
||||
"Current_Cycle": "Current Cycle",
|
||||
"Additional_Cost": "Additional Cost",
|
||||
"Remaining": "Remaining",
|
||||
"Not_Found": "Not Found",
|
||||
"Cash": "Cash",
|
||||
"Payment_not_found": "Payment not found",
|
||||
"If_your_friend_have_Additional_Cost__you_will_pay_for_that_too": "If your friend have Additional Cost, you will pay for that too",
|
||||
"Cache_cleared_successfully_": "Cache cleared successfully!",
|
||||
"Paid": "Paid",
|
||||
"Send_Message": "Send Message",
|
||||
"Send_Personal_Message": "Send Personal Message",
|
||||
"Send_Via": "Send Via",
|
||||
"Compose_your_message___": "Compose your message...",
|
||||
"Use_placeholders_": "Use placeholders:",
|
||||
"Customer_Name": "Customer Name",
|
||||
"Customer_Username": "Customer Username",
|
||||
"Customer_Phone": "Customer Phone",
|
||||
"Your_Company_Name": "Your Company Name",
|
||||
"Message_Sent_Successfully": "Message Sent Successfully",
|
||||
"Send_Bulk_Message": "Send Bulk Message",
|
||||
"Group": "Group",
|
||||
"All_Customers": "All Customers",
|
||||
"New_Customers": "New Customers",
|
||||
"Expired_Customers": "Expired Customers",
|
||||
"Active_Customers": "Active Customers",
|
||||
"Map": "Map",
|
||||
"Customer_Location": "Customer Location",
|
||||
"Account_Type": "Account Type",
|
||||
"Coordinates": "Coordinates",
|
||||
"Latitude_and_Longitude_coordinates_for_map_must_be_separate_with_comma____": "Latitude and Longitude coordinates for map must be separate with comma ","",
|
||||
"Customer_Geo_Location_Information": "Customer Geo Location Information",
|
||||
"List": "List",
|
||||
"Lists": "Lists",
|
||||
"Single_Customer": "Single Customer",
|
||||
"Bulk_Customers": "Bulk Customers",
|
||||
"Message_per_time": "Message per time",
|
||||
"5_Messages": "5 Messages",
|
||||
"10_Messages": "10 Messages",
|
||||
"15_Messages": "15 Messages",
|
||||
"20_Messages": "20 Messages",
|
||||
"30_Messages": "30 Messages",
|
||||
"40_Messages": "40 Messages",
|
||||
"50_Messages": "50 Messages",
|
||||
"60_Messages": "60 Messages",
|
||||
"Use_20_and_above_if_you_are_sending_to_all_customers_to_avoid_server_time_out": "Use 20 and above if you are sending to all customers to avoid server time out",
|
||||
"Delay": "Delay",
|
||||
"No_Delay": "No Delay",
|
||||
"5_Seconds": "5 Seconds",
|
||||
"10_Seconds": "10 Seconds",
|
||||
"15_Seconds": "15 Seconds",
|
||||
"20_Seconds": "20 Seconds",
|
||||
"Use_at_least_5_secs_if_you_are_sending_to_all_customers_to_avoid_being_banned_by_your_message_provider": "Use at least 5 secs if you are sending to all customers to avoid being banned by your message provider",
|
||||
"Testing__if_checked_no_real_message_is_sent_": "Testing [if checked no real message is sent]",
|
||||
"All_fields_are_required": "All fields are required",
|
||||
"Personal": "Personal",
|
||||
"Email_Notification": "Email Notification",
|
||||
"Router_Name___Location": "Router Name \/ Location",
|
||||
"Plan_Category": "Plan Category",
|
||||
"ID": "ID",
|
||||
"Internet_Plan": "Internet Plan",
|
||||
"Privacy_Policy": "Privacy Policy",
|
||||
"Terms_and_Conditions": "Terms and Conditions",
|
||||
"Contact": "Contact",
|
||||
"will_be_replaced_with_Customer_Name": "will be replaced with Customer Name",
|
||||
"will_be_replaced_with_Customer_username": "will be replaced with Customer username",
|
||||
"will_be_replaced_with_Package_name": "will be replaced with Package name",
|
||||
"will_be_replaced_with_Package_price": "will be replaced with Package price",
|
||||
"additional_bills_for_customers": "additional bills for customers",
|
||||
"will_be_replaced_with_Expiration_date": "will be replaced with Expiration date",
|
||||
"Your_Company_Name_at_Settings": "Your Company Name at Settings",
|
||||
"Your_Company_Address_at_Settings": "Your Company Address at Settings",
|
||||
"Your_Company_Phone_at_Settings": "Your Company Phone at Settings",
|
||||
"Invoice_number": "Invoice number",
|
||||
"Date_invoice_created": "Date invoice created",
|
||||
"Payment_gateway_user_paid_from": "Payment gateway user paid from",
|
||||
"Payment_channel_user_paid_from": "Payment channel user paid from",
|
||||
"is_Hotspot_or_PPPOE": "is Hotspot or PPPOE",
|
||||
"Internet_Package": "Internet Package",
|
||||
"Internet_Package_Prices": "Internet Package Prices",
|
||||
"Receiver_name": "Receiver name",
|
||||
"Username_internet": "Username internet",
|
||||
"User_password": "User password",
|
||||
"Expired_datetime": "Expired datetime",
|
||||
"For_Notes_by_admin": "For Notes by admin",
|
||||
"Transaction_datetime": "Transaction datetime",
|
||||
"Balance_Before": "Balance Before",
|
||||
"Balance_After": "Balance After",
|
||||
"how_much_balance_have_been_send": "how much balance have been send",
|
||||
"Current_Balance": "Current Balance",
|
||||
"Sender_name": "Sender name",
|
||||
"how_much_balance_have_been_received": "how much balance have been received",
|
||||
"Extend_Postpaid_Expiration": "Extend Postpaid Expiration",
|
||||
"Allow_Extend": "Allow Extend",
|
||||
"Extend_Days": "Extend Days",
|
||||
"Confirmation_Message": "Confirmation Message",
|
||||
"You_are_already_logged_in": "You are already logged in",
|
||||
"Extend": "Extend",
|
||||
"Created___Expired": "Created \/ Expired",
|
||||
"Bank_Transfer": "Bank Transfer",
|
||||
"Recharge_Using": "Recharge Using",
|
||||
"ago": "ago",
|
||||
"Disabled": "Disabled",
|
||||
"Banned": "Banned",
|
||||
"Customer_cannot_login_again": "Customer cannot login again",
|
||||
"Customer_can_login_but_cannot_buy_internet_plan__Admin_cannot_recharge_customer": "Customer can login but cannot buy internet plan, Admin cannot recharge customer",
|
||||
"Don_t_forget_to_deactivate_all_active_plan_too": "Don't forget to deactivate all active plan too",
|
||||
"Ascending": "Ascending",
|
||||
"Descending": "Descending",
|
||||
"Created_Date": "Created Date",
|
||||
"Inactive": "Inactive",
|
||||
"Suspended": "Suspended",
|
||||
"Query": "Query",
|
||||
"Notes": "Notes",
|
||||
"This_account_status": "This account status",
|
||||
"Maintenance_Mode": "Maintenance Mode",
|
||||
"Maintenance_Mode_Settings": "Maintenance Mode Settings",
|
||||
"Status_": "Status:",
|
||||
"End_Date_": "End Date:",
|
||||
"Save": "Save",
|
||||
"Site_is_temporarily_unavailable_": "Site is temporarily unavailable.",
|
||||
"Scheduled_maintenance_is_currently_in_progress__Please_check_back_soon_": "Scheduled maintenance is currently in progress. Please check back soon.",
|
||||
"We_apologize_for_any_inconvenience_": "We apologize for any inconvenience.",
|
||||
"The": "The",
|
||||
"Team": "Team",
|
||||
"Extend_Package_Expiry": "Extend Package Expiry",
|
||||
"Yes": "Yes",
|
||||
"No": "No",
|
||||
"Yes": "Yes",
|
||||
"If_user_buy_same_internet_plan__expiry_date_will_extend": "If user buy same internet plan, expiry date will extend",
|
||||
"Tax_System": "Tax System",
|
||||
"Enable_Tax_System": "Enable Tax System",
|
||||
"Tax_will_be_calculated_in_Internet_Plan_Price": "Tax will be calculated in Internet Plan Price",
|
||||
"Tax_Rate": "Tax Rate",
|
||||
"0_5_": "0.5%",
|
||||
"1_": "1%",
|
||||
"1_5_": "1.5%",
|
||||
"2_": "2%",
|
||||
"5_": "5%",
|
||||
"10_": "10%",
|
||||
"Custom": "Custom",
|
||||
"Tax_Rates_in_percentage": "Tax Rates in percentage",
|
||||
"Custom_Tax_Rate": "Custom Tax Rate",
|
||||
"Enter_Custom_Tax_Rate": "Enter Custom Tax Rate",
|
||||
"Enter_the_custom_tax_rate__e_g___3_75_for_3_75__": "Enter the custom tax rate (e.g., 3.75 for 3.75%)",
|
||||
"Timezone": "Timezone",
|
||||
"Date_Format": "Date Format",
|
||||
"Default_Language": "Default Language",
|
||||
"Language_Editor": "Language Editor",
|
||||
"Decimal_Point": "Decimal Point",
|
||||
"Thousands_Separator": "Thousands Separator",
|
||||
"Currency_Code": "Currency Code",
|
||||
"Keep_it_blank_if_you_do_not_want_to_show_currency_code": "Keep it blank if you do not want to show currency code",
|
||||
"Country_Code_Phone": "Country Code Phone",
|
||||
"Change_title_in_user_Plan_order": "Change title in user Plan order"
|
||||
"Additional_Information": "Additional Information",
|
||||
"City_of_Resident": "City of Resident",
|
||||
"District": "District",
|
||||
"State": "State",
|
||||
"State_of_Resident": "State of Resident",
|
||||
"Zip": "Zip",
|
||||
"Zip_Code": "Zip Code",
|
||||
"Local_IP": "Local IP",
|
||||
"Device": "Device",
|
||||
"Expired_Internet_Plan": "Expired Internet Plan",
|
||||
"When_Expired__customer_will_be_move_to_selected_internet_plan": "When Expired, customer will be move to selected internet plan",
|
||||
"Plugin_Installer": "Plugin Installer",
|
||||
"Expired_Date": "Expired Date",
|
||||
"Expired": "Expired",
|
||||
"Time": "Time",
|
||||
"Data": "Data",
|
||||
"Category": "Category",
|
||||
"later": "later",
|
||||
"Package_Details": "Package Details",
|
||||
"Summary": "Summary",
|
||||
"Devices_Not_Found": "Devices Not Found",
|
||||
"Income_reset_date": "Income reset date",
|
||||
"Devices": "Devices",
|
||||
"Documentation": "Documentation",
|
||||
"Hotspot_Auth_Method": "Hotspot Auth Method",
|
||||
"Api": "Api",
|
||||
"Http_Chap": "Http-Chap",
|
||||
"Hotspot_Authentication_Method__Make_sure_you_have_changed_your_hotspot_login_page_": "Hotspot Authentication Method. Make sure you have changed your hotspot login page."
|
||||
}
|
@ -561,5 +561,11 @@
|
||||
"Please_wait_1015_seconds_before_sending_another_SMS": "Harap tunggu 1015 detik sebelum mengirim SMS lainnya",
|
||||
"Phone_number_updated_successfully": "Nomor telepon berhasil diperbarui",
|
||||
"You_cannot_use_your_current_phone_number": "Anda tidak dapat menggunakan nomor telepon Anda saat ini",
|
||||
"Devices": "Perangkat"
|
||||
"Devices": "Perangkat",
|
||||
"Voucher_Prefix": "Awalan Voucher",
|
||||
"This_account_status": "Status akun ini",
|
||||
"Hotspot_Auth_Method": "Metode Otentikasi Hotspot",
|
||||
"Api": "Api",
|
||||
"Http_Chap": "Http-Bab",
|
||||
"Hotspot_Authentication_Method__Make_sure_you_have_changed_your_hotspot_login_page_": "Metode Otentikasi Hotspot. Pastikan Anda telah mengubah halaman login hotspot Anda."
|
||||
}
|
@ -120,5 +120,10 @@
|
||||
"2024.6.21" : [
|
||||
"ALTER TABLE `tbl_plans` ADD `on_login` TEXT NULL DEFAULT NULL AFTER `device`;",
|
||||
"ALTER TABLE `tbl_plans` ADD `on_logout` TEXT NULL DEFAULT NULL AFTER `on_login`;"
|
||||
],
|
||||
"2024.7.6" : [
|
||||
"CREATE TABLE IF NOT EXISTS `rad_acct` ( `id` bigint NOT NULL, `acctsessionid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', `username` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', `realm` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', `nasid` varchar(32) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', `nasipaddress` varchar(15) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', `nasportid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `nasporttype` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `framedipaddress` varchar(15) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',`acctstatustype` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `macaddr` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `dateAdded` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;",
|
||||
"ALTER TABLE `rad_acct` ADD PRIMARY KEY (`id`), ADD KEY `username` (`username`), ADD KEY `framedipaddress` (`framedipaddress`), ADD KEY `acctsessionid` (`acctsessionid`), ADD KEY `nasipaddress` (`nasipaddress`);",
|
||||
"ALTER TABLE `rad_acct` MODIFY `id` bigint NOT NULL AUTO_INCREMENT;"
|
||||
]
|
||||
}
|
@ -621,6 +621,22 @@
|
||||
<p class="help-block col-md-4">
|
||||
{Lang::T('If user buy same internet plan, expiry date will extend')}</p>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-md-2 control-label">{Lang::T('Hotspot Auth Method')}</label>
|
||||
<div class="col-md-6">
|
||||
<select name="hs_auth_method" id="auth_method" class="form-control">
|
||||
<option value="api" {if $_c['hs_auth_method']=='api' }selected="selected" {/if}>
|
||||
{Lang::T('Api')}
|
||||
</option>
|
||||
<option value="hchap" {if $_c['hs_auth_method']=='hchap' }selected="selected" {/if}>
|
||||
{Lang::T('Http-Chap')}
|
||||
</option>
|
||||
</select>
|
||||
</div>
|
||||
<p class="help-block col-md-4">
|
||||
{Lang::T('Hotspot Authentication Method. Make sure you have changed your hotspot login page.')}<br><a href="https://github.com/agstrxyz/phpnuxbill-login-hotspot" target="_blank">Download phpnuxbill-login-hotspot</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="panel-heading">
|
||||
|
@ -248,20 +248,24 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{if !$d['is_radius']}
|
||||
<div class="col-md-6">
|
||||
<div class="panel panel-primary panel-hovered panel-stacked mb30">
|
||||
<div class="panel-heading">on-login / on-up</div>
|
||||
<div class="panel-body">
|
||||
<textarea class="form-control" id="code" name="on_login" style="font-family: 'Courier New', Courier, monospace;" rows="15">{$d['on_login']}</textarea>
|
||||
<textarea class="form-control" id="code" name="on_login"
|
||||
style="font-family: 'Courier New', Courier, monospace;" rows="15">{$d['on_login']}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel panel-primary panel-hovered panel-stacked mb30">
|
||||
<div class="panel-heading">on-logout / on-down</div>
|
||||
<div class="panel-body">
|
||||
<textarea class="form-control" id="code2" name="on_logout" style="font-family: 'Courier New', Courier, monospace;" rows="15">{$d['on_logout']}</textarea>
|
||||
<textarea class="form-control" id="code2" name="on_logout"
|
||||
style="font-family: 'Courier New', Courier, monospace;" rows="15">{$d['on_logout']}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-md-offset-2 col-md-9">
|
||||
@ -306,11 +310,17 @@
|
||||
{/literal}
|
||||
{/if}
|
||||
|
||||
<script language="javascript" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/6.65.7/codemirror.min.js"></script>
|
||||
<script language="javascript" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/6.65.7/mode/perl/perl.min.js"></script>
|
||||
<script language="javascript" type="text/javascript"
|
||||
src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/6.65.7/codemirror.min.js"></script>
|
||||
<script language="javascript" type="text/javascript"
|
||||
src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/6.65.7/mode/perl/perl.min.js"></script>
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/6.65.7/codemirror.min.css"></link>
|
||||
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/6.65.7/theme/abbott.min.css"></link>
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/6.65.7/codemirror.min.css">
|
||||
</link>
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/6.65.7/theme/abbott.min.css">
|
||||
</link>
|
||||
|
||||
<script>
|
||||
CodeMirror.fromTextArea(document.getElementById('code'), {
|
||||
|
@ -184,6 +184,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{if !$d['is_radius']}
|
||||
<div class="col-md-6">
|
||||
<div class="panel panel-primary panel-hovered panel-stacked mb30">
|
||||
<div class="panel-heading">on-login / on-up</div>
|
||||
@ -200,6 +201,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-lg-offset-2 col-lg-10">
|
||||
|
@ -65,6 +65,10 @@
|
||||
</table>
|
||||
</div>
|
||||
{include file="pagination.tpl"}
|
||||
<div class="bs-callout bs-callout-info" id="callout-navbar-role">
|
||||
<h4>RADIUS REST</h4>
|
||||
<p>For Radius REST, you don't need to add NAS, NAS need to add to client.conf manually</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
217
ui/ui/scripts/md5.js
Normal file
217
ui/ui/scripts/md5.js
Normal file
@ -0,0 +1,217 @@
|
||||
/*
|
||||
* A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
|
||||
* Digest Algorithm, as defined in RFC 1321.
|
||||
* Version 1.1 Copyright (C) Paul Johnston 1999 - 2002.
|
||||
* Code also contributed by Greg Holt
|
||||
* See http://pajhome.org.uk/site/legal.html for details.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Add integers, wrapping at 2^32. This uses 16-bit operations internally
|
||||
* to work around bugs in some JS interpreters.
|
||||
*/
|
||||
function safe_add(x, y)
|
||||
{
|
||||
var lsw = (x & 0xFFFF) + (y & 0xFFFF)
|
||||
var msw = (x >> 16) + (y >> 16) + (lsw >> 16)
|
||||
return (msw << 16) | (lsw & 0xFFFF)
|
||||
}
|
||||
|
||||
/*
|
||||
* Bitwise rotate a 32-bit number to the left.
|
||||
*/
|
||||
function rol(num, cnt)
|
||||
{
|
||||
return (num << cnt) | (num >>> (32 - cnt))
|
||||
}
|
||||
|
||||
/*
|
||||
* These functions implement the four basic operations the algorithm uses.
|
||||
*/
|
||||
function cmn(q, a, b, x, s, t)
|
||||
{
|
||||
return safe_add(rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
|
||||
}
|
||||
function ff(a, b, c, d, x, s, t)
|
||||
{
|
||||
return cmn((b & c) | ((~b) & d), a, b, x, s, t)
|
||||
}
|
||||
function gg(a, b, c, d, x, s, t)
|
||||
{
|
||||
return cmn((b & d) | (c & (~d)), a, b, x, s, t)
|
||||
}
|
||||
function hh(a, b, c, d, x, s, t)
|
||||
{
|
||||
return cmn(b ^ c ^ d, a, b, x, s, t)
|
||||
}
|
||||
function ii(a, b, c, d, x, s, t)
|
||||
{
|
||||
return cmn(c ^ (b | (~d)), a, b, x, s, t)
|
||||
}
|
||||
|
||||
/*
|
||||
* Calculate the MD5 of an array of little-endian words, producing an array
|
||||
* of little-endian words.
|
||||
*/
|
||||
function coreMD5(x)
|
||||
{
|
||||
var a = 1732584193
|
||||
var b = -271733879
|
||||
var c = -1732584194
|
||||
var d = 271733878
|
||||
|
||||
for(i = 0; i < x.length; i += 16)
|
||||
{
|
||||
var olda = a
|
||||
var oldb = b
|
||||
var oldc = c
|
||||
var oldd = d
|
||||
|
||||
a = ff(a, b, c, d, x[i+ 0], 7 , -680876936)
|
||||
d = ff(d, a, b, c, x[i+ 1], 12, -389564586)
|
||||
c = ff(c, d, a, b, x[i+ 2], 17, 606105819)
|
||||
b = ff(b, c, d, a, x[i+ 3], 22, -1044525330)
|
||||
a = ff(a, b, c, d, x[i+ 4], 7 , -176418897)
|
||||
d = ff(d, a, b, c, x[i+ 5], 12, 1200080426)
|
||||
c = ff(c, d, a, b, x[i+ 6], 17, -1473231341)
|
||||
b = ff(b, c, d, a, x[i+ 7], 22, -45705983)
|
||||
a = ff(a, b, c, d, x[i+ 8], 7 , 1770035416)
|
||||
d = ff(d, a, b, c, x[i+ 9], 12, -1958414417)
|
||||
c = ff(c, d, a, b, x[i+10], 17, -42063)
|
||||
b = ff(b, c, d, a, x[i+11], 22, -1990404162)
|
||||
a = ff(a, b, c, d, x[i+12], 7 , 1804603682)
|
||||
d = ff(d, a, b, c, x[i+13], 12, -40341101)
|
||||
c = ff(c, d, a, b, x[i+14], 17, -1502002290)
|
||||
b = ff(b, c, d, a, x[i+15], 22, 1236535329)
|
||||
|
||||
a = gg(a, b, c, d, x[i+ 1], 5 , -165796510)
|
||||
d = gg(d, a, b, c, x[i+ 6], 9 , -1069501632)
|
||||
c = gg(c, d, a, b, x[i+11], 14, 643717713)
|
||||
b = gg(b, c, d, a, x[i+ 0], 20, -373897302)
|
||||
a = gg(a, b, c, d, x[i+ 5], 5 , -701558691)
|
||||
d = gg(d, a, b, c, x[i+10], 9 , 38016083)
|
||||
c = gg(c, d, a, b, x[i+15], 14, -660478335)
|
||||
b = gg(b, c, d, a, x[i+ 4], 20, -405537848)
|
||||
a = gg(a, b, c, d, x[i+ 9], 5 , 568446438)
|
||||
d = gg(d, a, b, c, x[i+14], 9 , -1019803690)
|
||||
c = gg(c, d, a, b, x[i+ 3], 14, -187363961)
|
||||
b = gg(b, c, d, a, x[i+ 8], 20, 1163531501)
|
||||
a = gg(a, b, c, d, x[i+13], 5 , -1444681467)
|
||||
d = gg(d, a, b, c, x[i+ 2], 9 , -51403784)
|
||||
c = gg(c, d, a, b, x[i+ 7], 14, 1735328473)
|
||||
b = gg(b, c, d, a, x[i+12], 20, -1926607734)
|
||||
|
||||
a = hh(a, b, c, d, x[i+ 5], 4 , -378558)
|
||||
d = hh(d, a, b, c, x[i+ 8], 11, -2022574463)
|
||||
c = hh(c, d, a, b, x[i+11], 16, 1839030562)
|
||||
b = hh(b, c, d, a, x[i+14], 23, -35309556)
|
||||
a = hh(a, b, c, d, x[i+ 1], 4 , -1530992060)
|
||||
d = hh(d, a, b, c, x[i+ 4], 11, 1272893353)
|
||||
c = hh(c, d, a, b, x[i+ 7], 16, -155497632)
|
||||
b = hh(b, c, d, a, x[i+10], 23, -1094730640)
|
||||
a = hh(a, b, c, d, x[i+13], 4 , 681279174)
|
||||
d = hh(d, a, b, c, x[i+ 0], 11, -358537222)
|
||||
c = hh(c, d, a, b, x[i+ 3], 16, -722521979)
|
||||
b = hh(b, c, d, a, x[i+ 6], 23, 76029189)
|
||||
a = hh(a, b, c, d, x[i+ 9], 4 , -640364487)
|
||||
d = hh(d, a, b, c, x[i+12], 11, -421815835)
|
||||
c = hh(c, d, a, b, x[i+15], 16, 530742520)
|
||||
b = hh(b, c, d, a, x[i+ 2], 23, -995338651)
|
||||
|
||||
a = ii(a, b, c, d, x[i+ 0], 6 , -198630844)
|
||||
d = ii(d, a, b, c, x[i+ 7], 10, 1126891415)
|
||||
c = ii(c, d, a, b, x[i+14], 15, -1416354905)
|
||||
b = ii(b, c, d, a, x[i+ 5], 21, -57434055)
|
||||
a = ii(a, b, c, d, x[i+12], 6 , 1700485571)
|
||||
d = ii(d, a, b, c, x[i+ 3], 10, -1894986606)
|
||||
c = ii(c, d, a, b, x[i+10], 15, -1051523)
|
||||
b = ii(b, c, d, a, x[i+ 1], 21, -2054922799)
|
||||
a = ii(a, b, c, d, x[i+ 8], 6 , 1873313359)
|
||||
d = ii(d, a, b, c, x[i+15], 10, -30611744)
|
||||
c = ii(c, d, a, b, x[i+ 6], 15, -1560198380)
|
||||
b = ii(b, c, d, a, x[i+13], 21, 1309151649)
|
||||
a = ii(a, b, c, d, x[i+ 4], 6 , -145523070)
|
||||
d = ii(d, a, b, c, x[i+11], 10, -1120210379)
|
||||
c = ii(c, d, a, b, x[i+ 2], 15, 718787259)
|
||||
b = ii(b, c, d, a, x[i+ 9], 21, -343485551)
|
||||
|
||||
a = safe_add(a, olda)
|
||||
b = safe_add(b, oldb)
|
||||
c = safe_add(c, oldc)
|
||||
d = safe_add(d, oldd)
|
||||
}
|
||||
return [a, b, c, d]
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert an array of little-endian words to a hex string.
|
||||
*/
|
||||
function binl2hex(binarray)
|
||||
{
|
||||
var hex_tab = "0123456789abcdef"
|
||||
var str = ""
|
||||
for(var i = 0; i < binarray.length * 4; i++)
|
||||
{
|
||||
str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +
|
||||
hex_tab.charAt((binarray[i>>2] >> ((i%4)*8)) & 0xF)
|
||||
}
|
||||
return str
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert an array of little-endian words to a base64 encoded string.
|
||||
*/
|
||||
function binl2b64(binarray)
|
||||
{
|
||||
var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
|
||||
var str = ""
|
||||
for(var i = 0; i < binarray.length * 32; i += 6)
|
||||
{
|
||||
str += tab.charAt(((binarray[i>>5] << (i%32)) & 0x3F) |
|
||||
((binarray[i>>5+1] >> (32-i%32)) & 0x3F))
|
||||
}
|
||||
return str
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert an 8-bit character string to a sequence of 16-word blocks, stored
|
||||
* as an array, and append appropriate padding for MD4/5 calculation.
|
||||
* If any of the characters are >255, the high byte is silently ignored.
|
||||
*/
|
||||
function str2binl(str)
|
||||
{
|
||||
var nblk = ((str.length + 8) >> 6) + 1 // number of 16-word blocks
|
||||
var blks = new Array(nblk * 16)
|
||||
for(var i = 0; i < nblk * 16; i++) blks[i] = 0
|
||||
for(var i = 0; i < str.length; i++)
|
||||
blks[i>>2] |= (str.charCodeAt(i) & 0xFF) << ((i%4) * 8)
|
||||
blks[i>>2] |= 0x80 << ((i%4) * 8)
|
||||
blks[nblk*16-2] = str.length * 8
|
||||
return blks
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert a wide-character string to a sequence of 16-word blocks, stored as
|
||||
* an array, and append appropriate padding for MD4/5 calculation.
|
||||
*/
|
||||
function strw2binl(str)
|
||||
{
|
||||
var nblk = ((str.length + 4) >> 5) + 1 // number of 16-word blocks
|
||||
var blks = new Array(nblk * 16)
|
||||
for(var i = 0; i < nblk * 16; i++) blks[i] = 0
|
||||
for(var i = 0; i < str.length; i++)
|
||||
blks[i>>1] |= str.charCodeAt(i) << ((i%2) * 16)
|
||||
blks[i>>1] |= 0x80 << ((i%2) * 16)
|
||||
blks[nblk*16-2] = str.length * 16
|
||||
return blks
|
||||
}
|
||||
|
||||
/*
|
||||
* External interface
|
||||
*/
|
||||
function hexMD5 (str) { return binl2hex(coreMD5( str2binl(str))) }
|
||||
function hexMD5w(str) { return binl2hex(coreMD5(strw2binl(str))) }
|
||||
function b64MD5 (str) { return binl2b64(coreMD5( str2binl(str))) }
|
||||
function b64MD5w(str) { return binl2b64(coreMD5(strw2binl(str))) }
|
||||
/* Backward compatibility */
|
||||
function calcMD5(str) { return binl2hex(coreMD5( str2binl(str))) }
|
@ -154,32 +154,40 @@
|
||||
margin-bottom: 5px
|
||||
}
|
||||
|
||||
.bs-callout p:last-child{
|
||||
margin-bottom:0
|
||||
.bs-callout p:last-child {
|
||||
margin-bottom: 0
|
||||
}
|
||||
.bs-callout code{
|
||||
border-radius:3px
|
||||
|
||||
.bs-callout code {
|
||||
border-radius: 3px
|
||||
}
|
||||
.bs-callout+.bs-callout{
|
||||
margin-top:-5px
|
||||
|
||||
.bs-callout+.bs-callout {
|
||||
margin-top: -5px
|
||||
}
|
||||
.bs-callout-danger{
|
||||
border-left-color:#ce4844
|
||||
|
||||
.bs-callout-danger {
|
||||
border-left-color: #ce4844
|
||||
}
|
||||
.bs-callout-danger h4{
|
||||
color:#ce4844
|
||||
|
||||
.bs-callout-danger h4 {
|
||||
color: #ce4844
|
||||
}
|
||||
.bs-callout-warning{
|
||||
border-left-color:#aa6708
|
||||
|
||||
.bs-callout-warning {
|
||||
border-left-color: #aa6708
|
||||
}
|
||||
.bs-callout-warning h4{
|
||||
color:#aa6708
|
||||
|
||||
.bs-callout-warning h4 {
|
||||
color: #aa6708
|
||||
}
|
||||
.bs-callout-info{
|
||||
border-left-color:#1b809e
|
||||
|
||||
.bs-callout-info {
|
||||
border-left-color: #1b809e
|
||||
}
|
||||
.bs-callout-info h4{
|
||||
color:#1b809e
|
||||
|
||||
.bs-callout-info h4 {
|
||||
color: #1b809e
|
||||
}
|
||||
</style>
|
||||
{if isset($xheader)}
|
||||
@ -478,12 +486,23 @@
|
||||
</li>
|
||||
{/if}
|
||||
{$_MENU_AFTER_LOGS}
|
||||
{if in_array($_admin['user_type'],['SuperAdmin','Admin'])}
|
||||
<li {if $_system_menu eq 'community' }class="active" {/if}>
|
||||
<a href="{if $_c['docs_clicked'] != 'yes'}{$_url}settings/docs{else}./docs/{/if}">
|
||||
<i class="ion ion-ios-bookmarks"></i>
|
||||
<span class="text">{Lang::T('Documentation')}</span>
|
||||
{if $_c['docs_clicked'] != 'yes'}
|
||||
<span class="pull-right-container"><small class="label pull-right bg-green">New</small></span>
|
||||
{/if}
|
||||
</a>
|
||||
</li>
|
||||
<li {if $_system_menu eq 'community' }class="active" {/if}>
|
||||
<a href="{$_url}community">
|
||||
<i class="ion ion-chatboxes"></i>
|
||||
<span class="text">{Lang::T('Community')}</span>
|
||||
</a>
|
||||
</li>
|
||||
{/if}
|
||||
{$_MENU_AFTER_COMMUNITY}
|
||||
</ul>
|
||||
</section>
|
||||
|
@ -167,7 +167,7 @@
|
||||
<td class="small mb15">{$nux_mac}</td>
|
||||
</tr>
|
||||
{/if}
|
||||
{if $_bill['type'] == 'Hotspot' && $_bill['status'] == 'on' && $_bill['routers'] != 'radius'}
|
||||
{if $_bill['type'] == 'Hotspot' && $_bill['status'] == 'on' && $_bill['routers'] != 'radius' && $_c['hs_auth_method'] != 'hchap'}
|
||||
<tr>
|
||||
<td class="small text-primary text-uppercase text-normal">{Lang::T('Login Status')}</td>
|
||||
<td class="small mb15" id="login_status_{$_bill['id']}">
|
||||
@ -175,6 +175,19 @@
|
||||
</td>
|
||||
</tr>
|
||||
{/if}
|
||||
{if $_bill['type'] == 'Hotspot' && $_bill['status'] == 'on' && $_c['hs_auth_method'] == 'hchap'}
|
||||
<tr>
|
||||
<td class="small text-primary text-uppercase text-normal">{Lang::T('Login Status')}</td>
|
||||
<td class="small mb15">
|
||||
{if $logged == '1'}
|
||||
<a href="http://{$hostname}/status" class="btn btn-success btn-xs btn-block">{Lang::T('You are Online, Check Status')}</a>
|
||||
{else}
|
||||
<a href="{$_url}home&mikrotik=login"
|
||||
onclick="return confirm('{Lang::T('Connect to Internet')}')" class="btn btn-danger btn-xs btn-block">{Lang::T('Not Online, Login now?')}</a>
|
||||
{/if}
|
||||
</td>
|
||||
</tr>
|
||||
{/if}
|
||||
<tr>
|
||||
<td class="small text-primary text-uppercase text-normal">
|
||||
{if $_bill['status'] == 'on'}
|
||||
@ -210,7 +223,7 @@
|
||||
{/if}
|
||||
{if $_bills}
|
||||
{foreach $_bills as $_bill}
|
||||
{if $_bill['type'] == 'Hotspot' && $_bill['status'] == 'on'}
|
||||
{if $_bill['type'] == 'Hotspot' && $_bill['status'] == 'on' && $_c['hs_auth_method'] != 'hchap'}
|
||||
<script>
|
||||
setTimeout(() => {
|
||||
$.ajax({
|
||||
@ -320,4 +333,17 @@
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
{if isset($hostname) && $hchap == 'true' && $_c['hs_auth_method'] == 'hchap'}
|
||||
<script type="text/javascript" src="/ui/ui/scripts/md5.js"></script>
|
||||
<script type="text/javascript">
|
||||
var hostname = "http://{$hostname}/login";
|
||||
var user = "{$_user['username']}";
|
||||
var pass = "{$_user['password']}";
|
||||
var dst = "{$apkurl}";
|
||||
var authdly = "2";
|
||||
var key = hexMD5('{$key1}' + pass + '{$key2}');
|
||||
var auth = hostname + '?username=' + user + '&dst=' + dst + '&password=' + key;
|
||||
document.write('<meta http-equiv="refresh" target="_blank" content="'+authdly+'; url='+auth+'">');
|
||||
</script>
|
||||
{/if}
|
||||
{include file="sections/user-footer.tpl"}
|
@ -1,3 +1,3 @@
|
||||
{
|
||||
"version": "2024.6.25"
|
||||
"version": "2024.7.15"
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user