phpnuxbill/system/autoload/Mikrotik.php

563 lines
20 KiB
PHP
Raw Normal View History

2022-09-18 01:52:39 +08:00
<?php
2023-10-12 16:55:42 +08:00
/**
* PHP Mikrotik Billing (https://github.com/hotspotbilling/phpnuxbill/)
* by https://t.me/ibnux
**/
2022-09-18 01:52:39 +08:00
use PEAR2\Net\RouterOS;
class Mikrotik
{
2023-08-18 14:37:07 +08:00
public static function info($name)
{
2023-10-04 17:11:55 +08:00
return ORM::for_table('tbl_routers')->where('name', $name)->find_one();
2022-09-18 01:52:39 +08:00
}
public static function getClient($ip, $user, $pass)
{
global $_app_stage;
if ($_app_stage == 'demo') {
return null;
}
$iport = explode(":", $ip);
return new RouterOS\Client($iport[0], $user, $pass, ($iport[1]) ? $iport[1] : null);
2022-09-18 01:52:39 +08:00
}
2023-08-18 14:37:07 +08:00
public static function isUserLogin($client, $username)
{
global $_app_stage;
if ($_app_stage == 'demo') {
return null;
}
2023-06-15 16:26:38 +08:00
$printRequest = new RouterOS\Request(
'/ip hotspot active print',
RouterOS\Query::where('user', $username)
);
return $client->sendSync($printRequest)->getProperty('.id');
}
2023-08-18 14:37:07 +08:00
public static function logMeIn($client, $user, $pass, $ip, $mac)
{
global $_app_stage;
if ($_app_stage == 'demo') {
return null;
}
2023-06-15 16:26:38 +08:00
$addRequest = new RouterOS\Request('/ip/hotspot/active/login');
$client->sendSync(
$addRequest
->setArgument('user', $user)
->setArgument('password', $pass)
->setArgument('ip', $ip)
->setArgument('mac-address', $mac)
);
}
2023-08-18 14:37:07 +08:00
public static function logMeOut($client, $user)
{
global $_app_stage;
if ($_app_stage == 'demo') {
return null;
}
2023-06-15 16:26:38 +08:00
$printRequest = new RouterOS\Request(
'/ip hotspot active print',
RouterOS\Query::where('user', $user)
);
$id = $client->sendSync($printRequest)->getProperty('.id');
$removeRequest = new RouterOS\Request('/ip/hotspot/active/remove');
2023-12-11 16:06:21 +08:00
$client->sendSync(
2023-06-15 16:26:38 +08:00
$removeRequest
->setArgument('numbers', $id)
);
}
2023-08-18 14:37:07 +08:00
public static function addHotspotPlan($client, $name, $sharedusers, $rate)
{
global $_app_stage;
if ($_app_stage == 'demo') {
return null;
}
2022-09-18 01:52:39 +08:00
$addRequest = new RouterOS\Request('/ip/hotspot/user/profile/add');
$client->sendSync(
$addRequest
->setArgument('name', $name)
->setArgument('shared-users', $sharedusers)
->setArgument('rate-limit', $rate)
);
}
2023-08-18 14:37:07 +08:00
public static function setHotspotPlan($client, $name, $sharedusers, $rate)
{
global $_app_stage;
if ($_app_stage == 'demo') {
return null;
}
2022-09-18 01:52:39 +08:00
$printRequest = new RouterOS\Request(
2023-09-06 11:48:52 +08:00
'/ip hotspot user profile print .proplist=.id',
2022-09-18 01:52:39 +08:00
RouterOS\Query::where('name', $name)
);
2023-09-05 18:06:43 +08:00
$profileID = $client->sendSync($printRequest)->getProperty('.id');
if (empty($profileID)) {
Mikrotik::addHotspotPlan($client, $name, $sharedusers, $rate);
2023-10-12 14:42:52 +08:00
} else {
2023-09-05 18:06:43 +08:00
$setRequest = new RouterOS\Request('/ip/hotspot/user/profile/set');
2023-12-11 16:06:21 +08:00
$client->sendSync(
2023-09-05 18:06:43 +08:00
$setRequest
->setArgument('numbers', $profileID)
->setArgument('shared-users', $sharedusers)
->setArgument('rate-limit', $rate)
);
}
}
2022-09-18 01:52:39 +08:00
2023-09-05 18:06:43 +08:00
public static function setHotspotExpiredPlan($client, $name, $pool)
{
global $_app_stage;
if ($_app_stage == 'demo') {
return null;
}
2023-09-05 18:06:43 +08:00
$printRequest = new RouterOS\Request(
2023-09-06 11:48:52 +08:00
'/ip hotspot user profile print .proplist=.id',
2023-09-05 18:06:43 +08:00
RouterOS\Query::where('name', $name)
2022-09-18 01:52:39 +08:00
);
2023-09-05 18:06:43 +08:00
$profileID = $client->sendSync($printRequest)->getProperty('.id');
if (empty($profileID)) {
$addRequest = new RouterOS\Request('/ip/hotspot/user/profile/add');
$client->sendSync(
$addRequest
->setArgument('name', $name)
->setArgument('shared-users', 3)
->setArgument('address-pool', $pool)
->setArgument('rate-limit', '512K/512K')
);
2023-10-12 14:42:52 +08:00
} else {
2023-09-05 18:06:43 +08:00
$setRequest = new RouterOS\Request('/ip/hotspot/user/profile/set');
2023-12-11 16:06:21 +08:00
$client->sendSync(
2023-09-05 18:06:43 +08:00
$setRequest
->setArgument('numbers', $profileID)
->setArgument('shared-users', 3)
->setArgument('address-pool', $pool)
->setArgument('rate-limit', '512K/512K')
);
}
2022-09-18 01:52:39 +08:00
}
2023-08-18 14:37:07 +08:00
public static function removeHotspotPlan($client, $name)
{
global $_app_stage;
if ($_app_stage == 'demo') {
return null;
}
2022-09-18 01:52:39 +08:00
$printRequest = new RouterOS\Request(
2023-09-06 11:48:52 +08:00
'/ip hotspot user profile print .proplist=.id',
2022-09-18 01:52:39 +08:00
RouterOS\Query::where('name', $name)
);
2023-09-05 18:06:43 +08:00
$profileID = $client->sendSync($printRequest)->getProperty('.id');
2022-09-18 01:52:39 +08:00
$removeRequest = new RouterOS\Request('/ip/hotspot/user/profile/remove');
2023-12-11 16:06:21 +08:00
$client->sendSync(
2022-09-18 01:52:39 +08:00
$removeRequest
2023-09-05 18:06:43 +08:00
->setArgument('numbers', $profileID)
2022-09-18 01:52:39 +08:00
);
}
public static function removeHotspotUser($client, $username)
{
global $_app_stage;
if ($_app_stage == 'demo') {
return null;
}
2022-09-18 01:52:39 +08:00
$printRequest = new RouterOS\Request(
2023-09-06 11:48:52 +08:00
'/ip hotspot user print .proplist=.id',
2022-09-18 01:52:39 +08:00
RouterOS\Query::where('name', $username)
);
2023-09-05 18:06:43 +08:00
$userID = $client->sendSync($printRequest)->getProperty('.id');
2022-09-18 01:52:39 +08:00
$removeRequest = new RouterOS\Request('/ip/hotspot/user/remove');
2023-12-11 16:06:21 +08:00
$client->sendSync(
2022-09-18 01:52:39 +08:00
$removeRequest
2023-09-05 18:06:43 +08:00
->setArgument('numbers', $userID)
2022-09-18 01:52:39 +08:00
);
}
public static function addHotspotUser($client, $plan, $customer)
{
global $_app_stage;
if ($_app_stage == 'demo') {
return null;
}
2022-09-18 01:52:39 +08:00
$addRequest = new RouterOS\Request('/ip/hotspot/user/add');
if ($plan['typebp'] == "Limited") {
if ($plan['limit_type'] == "Time_Limit") {
if ($plan['time_unit'] == 'Hrs')
$timelimit = $plan['time_limit'] . ":00:00";
else
$timelimit = "00:" . $plan['time_limit'] . ":00";
$client->sendSync(
$addRequest
->setArgument('name', $customer['username'])
->setArgument('profile', $plan['name_plan'])
->setArgument('password', $customer['password'])
2023-08-18 14:37:07 +08:00
->setArgument('comment', $customer['fullname'])
2023-08-18 11:11:40 +08:00
->setArgument('email', $customer['email'])
2022-09-18 01:52:39 +08:00
->setArgument('limit-uptime', $timelimit)
);
} else if ($plan['limit_type'] == "Data_Limit") {
if ($plan['data_unit'] == 'GB')
$datalimit = $plan['data_limit'] . "000000000";
else
$datalimit = $plan['data_limit'] . "000000";
$client->sendSync(
$addRequest
->setArgument('name', $customer['username'])
->setArgument('profile', $plan['name_plan'])
->setArgument('password', $customer['password'])
2023-08-18 14:37:07 +08:00
->setArgument('comment', $customer['fullname'])
2023-08-18 11:11:40 +08:00
->setArgument('email', $customer['email'])
2022-09-18 01:52:39 +08:00
->setArgument('limit-bytes-total', $datalimit)
);
} else if ($plan['limit_type'] == "Both_Limit") {
if ($plan['time_unit'] == 'Hrs')
$timelimit = $plan['time_limit'] . ":00:00";
else
$timelimit = "00:" . $plan['time_limit'] . ":00";
if ($plan['data_unit'] == 'GB')
$datalimit = $plan['data_limit'] . "000000000";
else
$datalimit = $plan['data_limit'] . "000000";
$client->sendSync(
$addRequest
->setArgument('name', $customer['username'])
->setArgument('profile', $plan['name_plan'])
->setArgument('password', $customer['password'])
2023-08-18 14:37:07 +08:00
->setArgument('comment', $customer['fullname'])
2023-08-18 11:11:40 +08:00
->setArgument('email', $customer['email'])
2022-09-18 01:52:39 +08:00
->setArgument('limit-uptime', $timelimit)
->setArgument('limit-bytes-total', $datalimit)
);
}
} else {
$client->sendSync(
$addRequest
->setArgument('name', $customer['username'])
->setArgument('profile', $plan['name_plan'])
2023-08-18 14:37:07 +08:00
->setArgument('comment', $customer['fullname'])
2023-08-18 11:11:40 +08:00
->setArgument('email', $customer['email'])
2022-09-18 01:52:39 +08:00
->setArgument('password', $customer['password'])
);
}
}
public static function setHotspotUser($client, $user, $pass)
2023-08-18 14:37:07 +08:00
{
global $_app_stage;
if ($_app_stage == 'demo') {
return null;
}
2022-09-18 01:52:39 +08:00
$printRequest = new RouterOS\Request('/ip/hotspot/user/print');
$printRequest->setArgument('.proplist', '.id');
$printRequest->setQuery(RouterOS\Query::where('name', $user));
$id = $client->sendSync($printRequest)->getProperty('.id');
$setRequest = new RouterOS\Request('/ip/hotspot/user/set');
$setRequest->setArgument('numbers', $id);
$setRequest->setArgument('password', $pass);
$client->sendSync($setRequest);
}
public static function setHotspotUserPackage($client, $user, $plan)
{
global $_app_stage;
if ($_app_stage == 'demo') {
return null;
}
$printRequest = new RouterOS\Request('/ip/hotspot/user/print');
$printRequest->setArgument('.proplist', '.id');
$printRequest->setQuery(RouterOS\Query::where('name', $user));
$id = $client->sendSync($printRequest)->getProperty('.id');
$setRequest = new RouterOS\Request('/ip/hotspot/user/set');
$setRequest->setArgument('numbers', $id);
$setRequest->setArgument('profile', $plan);
$client->sendSync($setRequest);
}
2022-09-18 01:52:39 +08:00
public static function removeHotspotActiveUser($client, $username)
{
global $_app_stage;
if ($_app_stage == 'demo') {
return null;
}
2022-09-18 01:52:39 +08:00
$onlineRequest = new RouterOS\Request('/ip/hotspot/active/print');
$onlineRequest->setArgument('.proplist', '.id');
$onlineRequest->setQuery(RouterOS\Query::where('user', $username));
$id = $client->sendSync($onlineRequest)->getProperty('.id');
$removeRequest = new RouterOS\Request('/ip/hotspot/active/remove');
$removeRequest->setArgument('numbers', $id);
$client->sendSync($removeRequest);
}
public static function removePpoeUser($client, $username)
{
global $_app_stage;
if ($_app_stage == 'demo') {
return null;
}
2023-09-05 18:06:43 +08:00
$printRequest = new RouterOS\Request('/ppp/secret/print');
2023-09-07 10:20:31 +08:00
//$printRequest->setArgument('.proplist', '.id');
2023-09-05 18:06:43 +08:00
$printRequest->setQuery(RouterOS\Query::where('name', $username));
$id = $client->sendSync($printRequest)->getProperty('.id');
$removeRequest = new RouterOS\Request('/ppp/secret/remove');
2023-09-07 10:20:31 +08:00
$removeRequest->setArgument('numbers', $id);
$client->sendSync($removeRequest);
2022-09-18 01:52:39 +08:00
}
public static function addPpoeUser($client, $plan, $customer)
{
global $_app_stage;
if ($_app_stage == 'demo') {
return null;
}
2022-09-18 01:52:39 +08:00
$addRequest = new RouterOS\Request('/ppp/secret/add');
2023-08-18 14:37:07 +08:00
if (!empty($customer['pppoe_password'])) {
2023-08-14 14:21:41 +08:00
$pass = $customer['pppoe_password'];
2023-08-18 14:37:07 +08:00
} else {
2023-08-14 14:21:41 +08:00
$pass = $customer['password'];
}
2022-09-18 01:52:39 +08:00
$client->sendSync(
$addRequest
->setArgument('name', $customer['username'])
->setArgument('service', 'pppoe')
->setArgument('profile', $plan['name_plan'])
2023-08-18 14:37:07 +08:00
->setArgument('comment', $customer['fullname'] . ' | ' . $customer['email'])
2023-08-14 14:21:41 +08:00
->setArgument('password', $pass)
2022-09-18 01:52:39 +08:00
);
}
public static function setPpoeUser($client, $user, $pass)
2023-08-18 14:37:07 +08:00
{
global $_app_stage;
if ($_app_stage == 'demo') {
return null;
}
2022-09-18 01:52:39 +08:00
$printRequest = new RouterOS\Request('/ppp/secret/print');
$printRequest->setArgument('.proplist', '.id');
2023-06-08 16:03:12 +08:00
$printRequest->setQuery(RouterOS\Query::where('name', $user));
2022-09-18 01:52:39 +08:00
$id = $client->sendSync($printRequest)->getProperty('.id');
$setRequest = new RouterOS\Request('/ppp/secret/set');
$setRequest->setArgument('numbers', $id);
$setRequest->setArgument('password', $pass);
$client->sendSync($setRequest);
}
public static function setPpoeUserPlan($client, $user, $plan)
2022-09-18 01:52:39 +08:00
{
global $_app_stage;
if ($_app_stage == 'demo') {
return null;
}
2022-09-18 01:52:39 +08:00
$printRequest = new RouterOS\Request('/ppp/secret/print');
$printRequest->setArgument('.proplist', '.id');
$printRequest->setQuery(RouterOS\Query::where('name', $user));
2022-09-18 01:52:39 +08:00
$id = $client->sendSync($printRequest)->getProperty('.id');
$setRequest = new RouterOS\Request('/ppp/secret/set');
2022-09-18 01:52:39 +08:00
$setRequest->setArgument('numbers', $id);
$setRequest->setArgument('profile', $plan);
2022-09-18 01:52:39 +08:00
$client->sendSync($setRequest);
}
public static function removePpoeActive($client, $username)
{
global $_app_stage;
if ($_app_stage == 'demo') {
return null;
}
2022-09-18 01:52:39 +08:00
$onlineRequest = new RouterOS\Request('/ppp/active/print');
$onlineRequest->setArgument('.proplist', '.id');
$onlineRequest->setQuery(RouterOS\Query::where('name', $username));
$id = $client->sendSync($onlineRequest)->getProperty('.id');
$removeRequest = new RouterOS\Request('/ppp/active/remove');
$removeRequest->setArgument('numbers', $id);
$client->sendSync($removeRequest);
}
2023-08-18 14:37:07 +08:00
public static function removePool($client, $name)
{
global $_app_stage;
if ($_app_stage == 'demo') {
return null;
}
2022-09-18 01:52:39 +08:00
$printRequest = new RouterOS\Request(
2023-09-06 11:48:52 +08:00
'/ip pool print .proplist=.id',
2022-09-18 01:52:39 +08:00
RouterOS\Query::where('name', $name)
);
2023-09-05 18:06:43 +08:00
$poolID = $client->sendSync($printRequest)->getProperty('.id');
2022-09-18 01:52:39 +08:00
$removeRequest = new RouterOS\Request('/ip/pool/remove');
2023-12-11 16:06:21 +08:00
$client->sendSync(
2023-08-18 14:37:07 +08:00
$removeRequest
2023-09-05 18:06:43 +08:00
->setArgument('numbers', $poolID)
2022-09-18 01:52:39 +08:00
);
}
2023-08-18 14:37:07 +08:00
public static function addPool($client, $name, $ip_address)
{
global $_app_stage;
if ($_app_stage == 'demo') {
return null;
}
2022-09-18 01:52:39 +08:00
$addRequest = new RouterOS\Request('/ip/pool/add');
2023-08-18 14:37:07 +08:00
$client->sendSync(
$addRequest
->setArgument('name', $name)
->setArgument('ranges', $ip_address)
2022-10-03 12:03:56 +08:00
);
2022-09-18 01:52:39 +08:00
}
2023-08-18 14:37:07 +08:00
public static function setPool($client, $name, $ip_address)
{
global $_app_stage;
if ($_app_stage == 'demo') {
return null;
}
2022-09-18 01:52:39 +08:00
$printRequest = new RouterOS\Request(
2023-09-06 11:48:52 +08:00
'/ip pool print .proplist=.id',
2022-10-03 12:03:56 +08:00
RouterOS\Query::where('name', $name)
2022-09-18 01:52:39 +08:00
);
$poolID = $client->sendSync($printRequest)->getProperty('.id');
2022-09-18 01:52:39 +08:00
2023-09-05 18:06:43 +08:00
if (empty($poolID)) {
2022-10-03 12:03:56 +08:00
self::addPool($client, $name, $ip_address);
2023-08-18 14:37:07 +08:00
} else {
2022-10-03 12:03:56 +08:00
$setRequest = new RouterOS\Request('/ip/pool/set');
2023-12-11 16:06:21 +08:00
$client->sendSync(
2022-10-03 12:03:56 +08:00
$setRequest
2023-09-05 18:06:43 +08:00
->setArgument('numbers', $poolID)
2022-10-03 12:03:56 +08:00
->setArgument('ranges', $ip_address)
);
}
2022-09-18 01:52:39 +08:00
}
2023-08-18 14:37:07 +08:00
public static function addPpoePlan($client, $name, $pool, $rate)
{
global $_app_stage;
if ($_app_stage == 'demo') {
return null;
}
2022-09-18 01:52:39 +08:00
$addRequest = new RouterOS\Request('/ppp/profile/add');
$client->sendSync(
$addRequest
->setArgument('name', $name)
->setArgument('local-address', $pool)
->setArgument('remote-address', $pool)
->setArgument('rate-limit', $rate)
);
}
2023-08-18 14:37:07 +08:00
public static function setPpoePlan($client, $name, $pool, $rate)
{
global $_app_stage;
if ($_app_stage == 'demo') {
return null;
}
2022-09-18 01:52:39 +08:00
$printRequest = new RouterOS\Request(
2023-09-06 11:48:52 +08:00
'/ppp profile print .proplist=.id',
2022-09-18 01:52:39 +08:00
RouterOS\Query::where('name', $name)
);
2023-09-05 18:06:43 +08:00
$profileID = $client->sendSync($printRequest)->getProperty('.id');
if (empty($profileID)) {
2022-10-03 12:03:56 +08:00
self::addPpoePlan($client, $name, $pool, $rate);
2023-08-18 14:37:07 +08:00
} else {
2022-10-03 12:03:56 +08:00
$setRequest = new RouterOS\Request('/ppp/profile/set');
2023-12-11 16:06:21 +08:00
$client->sendSync(
2022-10-03 12:03:56 +08:00
$setRequest
2023-09-05 18:06:43 +08:00
->setArgument('numbers', $profileID)
2022-10-03 12:03:56 +08:00
->setArgument('local-address', $pool)
->setArgument('remote-address', $pool)
->setArgument('rate-limit', $rate)
);
}
2022-09-18 01:52:39 +08:00
}
2023-08-18 14:37:07 +08:00
public static function removePpoePlan($client, $name)
{
global $_app_stage;
if ($_app_stage == 'demo') {
return null;
}
2022-09-18 01:52:39 +08:00
$printRequest = new RouterOS\Request(
2023-09-06 11:48:52 +08:00
'/ppp profile print .proplist=.id',
2022-09-18 01:52:39 +08:00
RouterOS\Query::where('name', $name)
);
2023-09-05 18:06:43 +08:00
$profileID = $client->sendSync($printRequest)->getProperty('.id');
2022-09-18 01:52:39 +08:00
$removeRequest = new RouterOS\Request('/ppp/profile/remove');
2023-12-11 16:06:21 +08:00
$client->sendSync(
2022-09-18 01:52:39 +08:00
$removeRequest
2023-09-05 18:06:43 +08:00
->setArgument('numbers', $profileID)
2022-09-18 01:52:39 +08:00
);
}
2023-12-11 15:12:12 +08:00
public static function sendSMS($client, $to, $message)
{
global $_app_stage;
if ($_app_stage == 'demo') {
return null;
}
2023-12-11 16:40:18 +08:00
$smsRequest = new RouterOS\Request('/tool sms send');
2023-12-11 16:06:21 +08:00
$smsRequest
->setArgument('phone-number', $to)
->setArgument('message', $message);
$client->sendSync($smsRequest);
2023-12-11 15:12:12 +08:00
}
2024-02-06 17:41:41 +08:00
2024-02-20 11:58:50 +08:00
public static function getIpHotspotUser($client, $username){
global $_app_stage;
if ($_app_stage == 'demo') {
return null;
}
$printRequest = new RouterOS\Request(
'/ip hotspot active print',
RouterOS\Query::where('user', $username)
);
return $client->sendSync($printRequest)->getProperty('address');
}
2024-02-06 17:41:41 +08:00
public static function addIpToAddressList($client, $ip, $listName, $comment = '')
{
global $_app_stage;
if ($_app_stage == 'demo') {
return null;
}
$addRequest = new RouterOS\Request('/ip/firewall/address-list/add');
$client->sendSync(
$addRequest
->setArgument('address', $ip)
->setArgument('comment', $comment)
->setArgument('list', $listName)
);
}
public static function removeIpFromAddressList($client, $ip)
{
global $_app_stage;
if ($_app_stage == 'demo') {
return null;
}
$printRequest = new RouterOS\Request(
'/ip firewall address-list print .proplist=.id',
RouterOS\Query::where('address', $ip)
);
$id = $client->sendSync($printRequest)->getProperty('.id');
$removeRequest = new RouterOS\Request('/ip/firewall/address-list/remove');
$client->sendSync(
$removeRequest
->setArgument('numbers', $id)
);
}
2022-09-18 01:52:39 +08:00
}