Files
.github
admin
install
pages_template
qrcode
system
autoload
cache
controllers
accounts.php
admin.php
autoload.php
autoload_user.php
bandwidth.php
callback.php
codecanyon.php
community.php
customers.php
dashboard.php
default.php
export.php
home.php
index.html
login.php
logout.php
logs.php
map.php
message.php
order.php
page.php
pages.php
paymentgateway.php
plan.php
plugin.php
pluginmanager.php
pool.php
radius.php
register.php
reports.php
routers.php
services.php
settings.php
voucher.php
lan
paymentgateway
plugin
uploads
vendor
.htaccess
api.php
boot.php
composer.json
composer.lock
cron.php
cron_reminder.php
index.html
orm.php
updates.json
ui
.gitignore
.htaccess_firewall
CHANGELOG.md
LICENSE
README.md
composer.json
config.sample.php
favicon.ico
index.php
init.php
update.php
version.json
mitrobill/system/controllers/accounts.php

255 lines
10 KiB
PHP
Raw Normal View History

2017-03-11 02:51:06 +07:00
<?php
2017-03-11 02:51:06 +07:00
/**
2023-10-12 15:47:45 +07:00
* PHP Mikrotik Billing (https://github.com/hotspotbilling/phpnuxbill/)
2023-10-12 15:55:42 +07:00
* by https://t.me/ibnux
**/
2023-10-12 15:47:45 +07:00
2017-03-11 02:51:06 +07:00
_auth();
2024-02-13 13:54:01 +07:00
$ui->assign('_title', Lang::T('My Account'));
2017-03-11 02:51:06 +07:00
$ui->assign('_system_menu', 'accounts');
$action = $routes['1'];
$user = User::_info();
$ui->assign('_user', $user);
switch ($action) {
2022-08-23 16:33:21 +07:00
2017-03-11 02:51:06 +07:00
case 'change-password':
2022-09-18 00:00:40 +07:00
run_hook('customer_view_change_password'); #HOOK
2017-03-11 02:51:06 +07:00
$ui->display('user-change-password.tpl');
break;
case 'change-password-post':
$password = _post('password');
2022-09-17 22:34:55 +07:00
run_hook('customer_change_password'); #HOOK
if ($password != '') {
$d = ORM::for_table('tbl_customers')->where('username', $user['username'])->find_one();
if ($d) {
2017-03-11 02:51:06 +07:00
$d_pass = $d['password'];
$npass = _post('npass');
2017-03-11 02:51:06 +07:00
$cnpass = _post('cnpass');
2022-08-23 16:33:21 +07:00
if (Password::_uverify($password, $d_pass) == true) {
if (!Validator::Length($npass, 15, 2)) {
r2(U . 'accounts/change-password', 'e', 'New Password must be 3 to 14 character');
2017-03-11 02:51:06 +07:00
}
if ($npass != $cnpass) {
r2(U . 'accounts/change-password', 'e', 'Both Password should be same');
2017-03-11 02:51:06 +07:00
}
$c = ORM::for_table('tbl_user_recharges')->where('username', $user['username'])->find_one();
if ($c) {
2023-10-04 16:25:21 +07:00
$p = ORM::for_table('tbl_plans')->where('id', $c['plan_id'])->find_one();
if ($p['is_radius']) {
if ($c['type'] == 'Hotspot' || ($c['type'] == 'PPPOE' && empty($d['pppoe_password']))) {
2023-10-12 13:27:44 +07:00
Radius::customerUpsert($d, $p);
2022-09-07 16:11:35 +07:00
}
} else {
2023-10-04 16:25:21 +07:00
$mikrotik = Mikrotik::info($c['routers']);
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
if ($c['type'] == 'Hotspot') {
Mikrotik::setHotspotUser($client, $c['username'], $npass);
Mikrotik::removeHotspotActiveUser($client, $user['username']);
} else if (empty($d['pppoe_password'])) {
2023-10-04 16:25:21 +07:00
// only change when pppoe_password empty
Mikrotik::setPpoeUser($client, $c['username'], $npass);
Mikrotik::removePpoeActive($client, $user['username']);
2022-09-07 16:11:35 +07:00
}
}
2023-10-04 16:25:21 +07:00
}
$d->password = $npass;
$d->save();
2022-08-23 16:33:21 +07:00
2024-02-13 13:54:01 +07:00
_msglog('s', Lang::T('Password changed successfully, Please login again'));
2023-10-04 16:25:21 +07:00
_log('[' . $user['username'] . ']: Password changed successfully', 'User', $user['id']);
2022-08-23 16:33:21 +07:00
2023-10-04 16:25:21 +07:00
r2(U . 'login');
} else {
2024-02-13 13:54:01 +07:00
r2(U . 'accounts/change-password', 'e', Lang::T('Incorrect Current Password'));
2017-03-11 02:51:06 +07:00
}
} else {
2024-02-13 13:54:01 +07:00
r2(U . 'accounts/change-password', 'e', Lang::T('Incorrect Current Password'));
2017-03-11 02:51:06 +07:00
}
} else {
2024-02-13 13:54:01 +07:00
r2(U . 'accounts/change-password', 'e', Lang::T('Incorrect Current Password'));
2017-03-11 02:51:06 +07:00
}
break;
case 'profile':
$d = ORM::for_table('tbl_customers')->find_one($user['id']);
if ($d) {
2022-09-18 00:00:40 +07:00
run_hook('customer_view_edit_profile'); #HOOK
$ui->assign('d', $d);
2017-03-11 02:51:06 +07:00
$ui->display('user-profile.tpl');
} else {
2024-02-21 10:13:05 +01:00
r2(U . 'home', 'e', Lang::T('Account Not Found'));
2017-03-11 02:51:06 +07:00
}
break;
case 'edit-profile-post':
$fullname = _post('fullname');
$address = _post('address');
2022-10-15 23:18:24 +07:00
$email = _post('email');
2017-03-11 02:51:06 +07:00
$phonenumber = _post('phonenumber');
2022-09-17 22:34:55 +07:00
run_hook('customer_edit_profile'); #HOOK
2017-03-11 02:51:06 +07:00
$msg = '';
if (Validator::Length($fullname, 31, 2) == false) {
$msg .= 'Full Name should be between 3 to 30 characters' . '<br>';
2017-03-11 02:51:06 +07:00
}
if (Validator::UnsignedNumber($phonenumber) == false) {
$msg .= 'Phone Number must be a number' . '<br>';
}
$d = ORM::for_table('tbl_customers')->find_one($user['id']);
if ($d) {
} else {
2024-02-13 13:54:01 +07:00
$msg .= Lang::T('Data Not Found') . '<br>';
2017-03-11 02:51:06 +07:00
}
if ($msg == '') {
2017-03-11 02:51:06 +07:00
$d->fullname = $fullname;
$d->address = $address;
$d->email = $email;
$d->phonenumber = $phonenumber;
2017-03-11 02:51:06 +07:00
$d->save();
2022-08-23 16:33:21 +07:00
2024-02-13 13:54:01 +07:00
_log('[' . $user['username'] . ']: ' . Lang::T('User Updated Successfully'), 'User', $user['id']);
r2(U . 'accounts/profile', 's', Lang::T('User Updated Successfully'));
} else {
2017-03-11 02:51:06 +07:00
r2(U . 'accounts/profile', 'e', $msg);
}
break;
2022-08-23 16:33:21 +07:00
case 'phone-update':
$d = ORM::for_table('tbl_customers')->find_one($user['id']);
if ($d) {
//run_hook('customer_view_edit_profile'); #HOOK
$ui->assign('d', $d);
$ui->display('user-phone-update.tpl');
} else {
r2(U . 'home', 'e', Lang::T('Account Not Found'));
}
break;
case 'phone-update-otp':
$phone = _post('phone');
$username = $user['username'];
2024-02-26 14:38:04 +07:00
$otpPath = $CACHE_PATH . '/sms/';
// Validate the phone number format
if (!preg_match('/^[0-9]{10,}$/', $phone)) {
r2(U . 'accounts/phone-update', 'e', Lang::T('Invalid phone number format'));
}
if (empty($config['sms_url'])) {
r2(U . 'accounts/phone-update', 'e', Lang::T('SMS server not Available, Please try again later'));
}
if (!empty($config['sms_url'])) {
if (!empty($phone)) {
$d = ORM::for_table('tbl_customers')->where('username', $username)->where('phonenumber', $phone)->find_one();
if ($d) {
r2(U . 'accounts/phone-update', 'e', Lang::T('You cannot use your current phone number'));
}
if (!file_exists($otpPath)) {
mkdir($otpPath);
touch($otpPath . 'index.html');
}
$otpFile = $otpPath . sha1($username . $db_password) . ".txt";
$phoneFile = $otpPath . sha1($username . $db_password) . "_phone.txt";
// expired 10 minutes
if (file_exists($otpFile) && time() - filemtime($otpFile) < 1200) {
r2(U . 'accounts/phone-update', 'e', Lang::T('Please wait ' . (1200 - (time() - filemtime($otpFile))) . ' seconds before sending another SMS'));
} else {
$otp = rand(100000, 999999);
file_put_contents($otpFile, $otp);
file_put_contents($phoneFile, $phone);
// send send OTP to user
if ($config['phone_otp_type'] === 'sms') {
Message::sendSMS($phone, $config['CompanyName'] . "\n Your Verification code is: $otp");
} elseif ($config['phone_otp_type'] === 'whatsapp') {
Message::sendWhatsapp($phone, $config['CompanyName'] . "\n Your Verification code is: $otp");
} elseif ($config['phone_otp_type'] === 'both') {
Message::sendSMS($phone, $config['CompanyName'] . "\n Your Verification code is: $otp");
Message::sendWhatsapp($phone, $config['CompanyName'] . "\n Your Verification code is: $otp");
}
2024-02-26 14:38:04 +07:00
//redirect after sending OTP
r2(U . 'accounts/phone-update', 'e', Lang::T('Verification code has been sent to your phone'));
}
}
}
break;
case 'phone-update-post':
$phone = _post('phone');
$otp_code = _post('otp');
$username = $user['username'];
2024-02-26 14:38:04 +07:00
$otpPath = $CACHE_PATH . '/sms/';
// Validate the phone number format
if (!preg_match('/^[0-9]{10,}$/', $phone)) {
r2(U . 'accounts/phone-update', 'e', Lang::T('Invalid phone number format'));
exit();
}
if (!empty($config['sms_url'])) {
$otpFile = $otpPath . sha1($username . $db_password) . ".txt";
$phoneFile = $otpPath . sha1($username . $db_password) . "_phone.txt";
// Check if OTP file exists
if (!file_exists($otpFile)) {
r2(U . 'accounts/phone-update', 'e', Lang::T('Please request OTP first'));
exit();
}
// expired 10 minutes
if (time() - filemtime($otpFile) > 1200) {
unlink($otpFile);
unlink($phoneFile);
r2(U . 'accounts/phone-update', 'e', Lang::T('Verification code expired'));
exit();
} else {
$code = file_get_contents($otpFile);
// Check if OTP code matches
if ($code != $otp_code) {
r2(U . 'accounts/phone-update', 'e', Lang::T('Wrong Verification code'));
exit();
}
// Check if the phone number matches the one that requested the OTP
$savedPhone = file_get_contents($phoneFile);
if ($savedPhone !== $phone) {
r2(U . 'accounts/phone-update', 'e', Lang::T('The phone number does not match the one that requested the OTP'));
exit();
}
// OTP verification successful, delete OTP and phone number files
unlink($otpFile);
unlink($phoneFile);
}
} else {
r2(U . 'accounts/phone-update', 'e', Lang::T('SMS server not available'));
exit();
}
// Update the phone number in the database
$d = ORM::for_table('tbl_customers')->where('username', $username)->find_one();
if ($d) {
$d->phonenumber = Lang::phoneFormat($phone);
$d->save();
}
r2(U . 'accounts/profile', 's', Lang::T('Phone number updated successfully'));
break;
2017-03-11 02:51:06 +07:00
default:
2023-09-27 15:01:48 +07:00
$ui->display('a404.tpl');
}