2024-02-19 15:24:34 +08:00
|
|
|
<?php
|
|
|
|
|
|
|
|
/**
|
|
|
|
* PHP Mikrotik Billing (https://github.com/hotspotbilling/phpnuxbill/)
|
|
|
|
* by https://t.me/ibnux
|
|
|
|
**/
|
|
|
|
|
|
|
|
if (realpath(__FILE__) == realpath($_SERVER['SCRIPT_FILENAME'])) {
|
|
|
|
header('HTTP/1.0 403 Forbidden', TRUE, 403);
|
|
|
|
header('location: ../');
|
|
|
|
die();
|
|
|
|
}
|
|
|
|
$root_path = realpath(dirname(__FILE__)) . DIRECTORY_SEPARATOR;
|
|
|
|
$isApi = false;
|
|
|
|
// on some server, it getting error because of slash is backwards
|
|
|
|
function _autoloader($class)
|
|
|
|
{
|
|
|
|
global $root_path;
|
|
|
|
if (strpos($class, '_') !== false) {
|
|
|
|
$class = str_replace('_', DIRECTORY_SEPARATOR, $class);
|
|
|
|
if (file_exists($root_path . DIRECTORY_SEPARATOR . 'system' . DIRECTORY_SEPARATOR . 'autoload' . DIRECTORY_SEPARATOR . $class . '.php')) {
|
|
|
|
include $root_path . DIRECTORY_SEPARATOR . 'system' . DIRECTORY_SEPARATOR . 'autoload' . DIRECTORY_SEPARATOR . $class . '.php';
|
|
|
|
} else {
|
|
|
|
$class = str_replace("\\", DIRECTORY_SEPARATOR, $class);
|
|
|
|
if (file_exists($root_path . DIRECTORY_SEPARATOR . 'system' . DIRECTORY_SEPARATOR . 'autoload' . DIRECTORY_SEPARATOR . $class . '.php'))
|
|
|
|
include $root_path . DIRECTORY_SEPARATOR . 'system' . DIRECTORY_SEPARATOR . 'autoload' . DIRECTORY_SEPARATOR . $class . '.php';
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if (file_exists($root_path . DIRECTORY_SEPARATOR . 'system' . DIRECTORY_SEPARATOR . 'autoload' . DIRECTORY_SEPARATOR . $class . '.php')) {
|
|
|
|
include $root_path . DIRECTORY_SEPARATOR . 'system' . DIRECTORY_SEPARATOR . 'autoload' . DIRECTORY_SEPARATOR . $class . '.php';
|
|
|
|
} else {
|
|
|
|
$class = str_replace("\\", DIRECTORY_SEPARATOR, $class);
|
|
|
|
if (file_exists($root_path . DIRECTORY_SEPARATOR . 'system' . DIRECTORY_SEPARATOR . 'autoload' . DIRECTORY_SEPARATOR . $class . '.php'))
|
|
|
|
include $root_path . DIRECTORY_SEPARATOR . 'system' . DIRECTORY_SEPARATOR . 'autoload' . DIRECTORY_SEPARATOR . $class . '.php';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
spl_autoload_register('_autoloader');
|
|
|
|
|
|
|
|
|
|
|
|
if (!file_exists($root_path . 'config.php')) {
|
|
|
|
$root_path .= '..' . DIRECTORY_SEPARATOR;
|
|
|
|
if (!file_exists($root_path . 'config.php')) {
|
|
|
|
die("config.php file not found");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (!file_exists($root_path . File::pathFixer('system/orm.php'))) {
|
|
|
|
die($root_path . "orm.php file not found");
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!file_exists($root_path . File::pathFixer('system/uploads/notifications.default.json'))) {
|
|
|
|
die($root_path . File::pathFixer("system/uploads/notifications.default.json file not found"));
|
|
|
|
}
|
|
|
|
|
|
|
|
require_once $root_path . 'config.php';
|
|
|
|
require_once $root_path . File::pathFixer('system/orm.php');
|
|
|
|
require_once $root_path . File::pathFixer('system/autoload/PEAR2/Autoload.php');
|
|
|
|
include $root_path . File::pathFixer('system/autoload/Hookers.php');
|
|
|
|
|
|
|
|
ORM::configure("mysql:host=$db_host;dbname=$db_name");
|
|
|
|
ORM::configure('username', $db_user);
|
|
|
|
ORM::configure('password', $db_password);
|
|
|
|
ORM::configure('return_result_sets', true);
|
|
|
|
if ($_app_stage != 'Live') {
|
|
|
|
ORM::configure('logging', true);
|
|
|
|
}
|
|
|
|
|
2024-02-19 17:28:55 +08:00
|
|
|
define('U', APP_URL . '/index.php?_route=');
|
2024-02-19 15:24:34 +08:00
|
|
|
|
|
|
|
// notification message
|
|
|
|
if (file_exists($root_path . File::pathFixer("system/uploads/notifications.json"))) {
|
|
|
|
$_notifmsg = json_decode(file_get_contents($root_path . File::pathFixer('system/uploads/notifications.json')), true);
|
|
|
|
}
|
|
|
|
$_notifmsg_default = json_decode(file_get_contents($root_path . File::pathFixer('system/uploads/notifications.default.json')), true);
|
|
|
|
|
|
|
|
//register all plugin
|
|
|
|
foreach (glob(File::pathFixer($root_path . File::pathFixer("system/plugin/*.php"))) as $filename) {
|
|
|
|
try {
|
|
|
|
include $filename;
|
|
|
|
} catch (Throwable $e) {
|
|
|
|
//ignore plugin error
|
|
|
|
} catch (Exception $e) {
|
|
|
|
//ignore plugin error
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$result = ORM::for_table('tbl_appconfig')->find_many();
|
|
|
|
foreach ($result as $value) {
|
|
|
|
$config[$value['setting']] = $value['value'];
|
|
|
|
}
|
|
|
|
if (empty($http_proxy) && !empty($config['http_proxy'])) {
|
|
|
|
$http_proxy = $config['http_proxy'];
|
|
|
|
if (empty($http_proxyauth) && !empty($config['http_proxyauth'])) {
|
|
|
|
$http_proxyauth = $config['http_proxyauth'];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
date_default_timezone_set($config['timezone']);
|
|
|
|
|
|
|
|
if ((!empty($radius_user) && $config['radius_enable']) || _post('radius_enable')) {
|
|
|
|
ORM::configure("mysql:host=$radius_host;dbname=$radius_name", null, 'radius');
|
|
|
|
ORM::configure('username', $radius_user, 'radius');
|
|
|
|
ORM::configure('password', $radius_pass, 'radius');
|
|
|
|
ORM::configure('driver_options', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'), 'radius');
|
|
|
|
ORM::configure('return_result_sets', true, 'radius');
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (empty($config['language'])) {
|
|
|
|
$config['language'] = 'english';
|
|
|
|
}
|
|
|
|
$lan_file = $root_path .File::pathFixer('system/lan/' . $config['language'] . '.json');
|
|
|
|
if (file_exists($lan_file)) {
|
|
|
|
$_L = json_decode(file_get_contents($lan_file), true);
|
|
|
|
$_SESSION['Lang'] = $_L;
|
|
|
|
} else {
|
|
|
|
$_L['author'] = 'Auto Generated by iBNuX Script';
|
|
|
|
$_SESSION['Lang'] = $_L;
|
|
|
|
file_put_contents($lan_file, json_encode($_L));
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function safedata($value)
|
|
|
|
{
|
|
|
|
$value = trim($value);
|
|
|
|
return $value;
|
|
|
|
}
|
|
|
|
|
|
|
|
function _post($param, $defvalue = '')
|
|
|
|
{
|
|
|
|
if (!isset($_POST[$param])) {
|
|
|
|
return $defvalue;
|
|
|
|
} else {
|
|
|
|
return safedata($_POST[$param]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function _get($param, $defvalue = '')
|
|
|
|
{
|
|
|
|
if (!isset($_GET[$param])) {
|
|
|
|
return $defvalue;
|
|
|
|
} else {
|
|
|
|
return safedata($_GET[$param]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function _req($param, $defvalue = '')
|
|
|
|
{
|
|
|
|
if (!isset($_REQUEST[$param])) {
|
|
|
|
return $defvalue;
|
|
|
|
} else {
|
|
|
|
return safedata($_REQUEST[$param]);
|
|
|
|
}
|
2024-02-19 17:28:55 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function _auth($login = true)
|
|
|
|
{
|
|
|
|
if (User::getID()) {
|
|
|
|
return true;
|
|
|
|
} else {
|
|
|
|
if ($login) {
|
|
|
|
r2(U . 'login');
|
|
|
|
} else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function _admin($login = true)
|
|
|
|
{
|
|
|
|
if (Admin::getID()) {
|
|
|
|
return true;
|
|
|
|
} else {
|
|
|
|
if ($login) {
|
|
|
|
r2(U . 'login');
|
|
|
|
} else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function _log($description, $type = '', $userid = '0')
|
|
|
|
{
|
|
|
|
$d = ORM::for_table('tbl_logs')->create();
|
|
|
|
$d->date = date('Y-m-d H:i:s');
|
|
|
|
$d->type = $type;
|
|
|
|
$d->description = $description;
|
|
|
|
$d->userid = $userid;
|
|
|
|
$d->ip = $_SERVER["REMOTE_ADDR"];
|
|
|
|
$d->save();
|
|
|
|
}
|
|
|
|
|
|
|
|
function Lang($key)
|
|
|
|
{
|
|
|
|
return Lang::T($key);
|
|
|
|
}
|
|
|
|
|
|
|
|
function alphanumeric($str, $tambahan = "")
|
|
|
|
{
|
|
|
|
return preg_replace("/[^a-zA-Z0-9" . $tambahan . "]+/", "", $str);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function sendTelegram($txt)
|
|
|
|
{
|
|
|
|
Message::sendTelegram($txt);
|
|
|
|
}
|
|
|
|
|
|
|
|
function sendSMS($phone, $txt)
|
|
|
|
{
|
|
|
|
Message::sendSMS($phone, $txt);
|
|
|
|
}
|
|
|
|
|
|
|
|
function sendWhatsapp($phone, $txt)
|
|
|
|
{
|
|
|
|
Message::sendWhatsapp($phone, $txt);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(!isset($api_secret)){
|
|
|
|
$api_secret = $db_password;
|
|
|
|
}
|