diff --git a/system/autoload/Http.php b/system/autoload/Http.php index a3849c9a..3d7d904e 100644 --- a/system/autoload/Http.php +++ b/system/autoload/Http.php @@ -2,12 +2,17 @@ /** * PHP Mikrotik Billing (https://github.com/hotspotbilling/phpnuxbill/) + * using proxy, add this variable in config.php + * $http_proxy = '127.0.0.1:3128'; + * if proxy using authentication, use this parameter + * $http_proxyauth = 'user:password'; **/ class Http { public static function getData($url, $headers = []) { + global $http_proxy,$http_proxyauth; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, 0); @@ -15,13 +20,23 @@ class Http curl_setopt($ch, CURLOPT_TIMEOUT, 15); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + if(!empty($http_proxy)){ + curl_setopt($ch, CURLOPT_PROXY, $http_proxy); + if(!empty($http_proxyauth)){ + curl_setopt($ch, CURLOPT_PROXYUSERPWD, $http_proxyauth); + } + } $server_output = curl_exec($ch); + if (curl_errno($ch)) { + $error_msg = curl_error($ch); + } curl_close($ch); - return $server_output; + return ($server_output) ? $server_output : $error_msg; } public static function postJsonData($url, $array_post, $headers = [], $basic = null) { + global $http_proxy,$http_proxyauth; $headers[] = 'Content-Type: application/json'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); @@ -30,6 +45,12 @@ class Http curl_setopt($ch, CURLOPT_TIMEOUT, 15); curl_setopt($ch, CURLOPT_VERBOSE, false); curl_setopt($ch, CURLINFO_HEADER_OUT, false); + if(!empty($http_proxy)){ + curl_setopt($ch, CURLOPT_PROXY, $http_proxy); + if(!empty($http_proxyauth)){ + curl_setopt($ch, CURLOPT_PROXYUSERPWD, $http_proxyauth); + } + } curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($array_post)); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); if (!empty($basic)) { @@ -37,13 +58,17 @@ class Http } curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $server_output = curl_exec($ch); + if (curl_errno($ch)) { + $error_msg = curl_error($ch); + } curl_close($ch); - return $server_output; + return ($server_output) ? $server_output : $error_msg; } public static function postData($url, $array_post, $headers = [], $basic = null) { + global $http_proxy,$http_proxyauth; $headers[] = 'Content-Type: application/x-www-form-urlencoded'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); @@ -52,6 +77,12 @@ class Http curl_setopt($ch, CURLOPT_TIMEOUT, 15); curl_setopt($ch, CURLOPT_VERBOSE, false); curl_setopt($ch, CURLINFO_HEADER_OUT, false); + if(!empty($http_proxy)){ + curl_setopt($ch, CURLOPT_PROXY, $http_proxy); + if(!empty($http_proxyauth)){ + curl_setopt($ch, CURLOPT_PROXYUSERPWD, $http_proxyauth); + } + } curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($array_post)); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); if (!empty($basic)) { @@ -59,7 +90,10 @@ class Http } curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $server_output = curl_exec($ch); + if (curl_errno($ch)) { + $error_msg = curl_error($ch); + } curl_close($ch); - return $server_output; + return ($server_output) ? $server_output : $error_msg; } } diff --git a/system/boot.php b/system/boot.php index b2437547..bbd55f21 100644 --- a/system/boot.php +++ b/system/boot.php @@ -93,6 +93,13 @@ foreach ($result as $value) { date_default_timezone_set($config['timezone']); $_c = $config; +// check if proxy setup in database +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']; + } +} if ($config['radius_mode']) { ORM::configure("mysql:host=$radius_host;dbname=$radius_name", null, 'radius'); ORM::configure('username', $radius_user, 'radius'); diff --git a/system/controllers/settings.php b/system/controllers/settings.php index 5e261713..bae3cf7f 100644 --- a/system/controllers/settings.php +++ b/system/controllers/settings.php @@ -231,6 +231,8 @@ switch ($action) { $user_notification_payment = _post('user_notification_payment'); $address = _post('address'); $tawkto = _post('tawkto'); + $http_proxy = _post('http_proxy'); + $http_proxyauth = _post('http_proxyauth'); $radius_mode = _post('radius_mode') * 1; run_hook('save_settings'); #HOOK @@ -257,6 +259,28 @@ switch ($action) { $d->save(); + $d = ORM::for_table('tbl_appconfig')->where('setting', 'http_proxy')->find_one(); + if ($d) { + $d->value = $http_proxy; + $d->save(); + } else { + $d = ORM::for_table('tbl_appconfig')->create(); + $d->setting = 'http_proxy'; + $d->value = $http_proxy; + $d->save(); + } + + $d = ORM::for_table('tbl_appconfig')->where('setting', 'http_proxyauth')->find_one(); + if ($d) { + $d->value = $http_proxyauth; + $d->save(); + } else { + $d = ORM::for_table('tbl_appconfig')->create(); + $d->setting = 'http_proxyauth'; + $d->value = $http_proxyauth; + $d->save(); + } + $d = ORM::for_table('tbl_appconfig')->where('setting', 'CompanyFooter')->find_one(); if ($d) { $d->value = $footer; diff --git a/system/lan/english/common.lan.php b/system/lan/english/common.lan.php index 208ac47d..ffa3f126 100644 --- a/system/lan/english/common.lan.php +++ b/system/lan/english/common.lan.php @@ -387,3 +387,6 @@ $_L['Minimum_Transfer'] = 'Minimum Transfer'; $_L['Company_Logo'] = 'Company Logo'; $_L['Expired_IP_Pool'] = 'Expired IP Pool'; $_L['Expired_IP_Pool'] = 'Expired IP Pool'; +$_L['Proxy'] = 'Proxy'; +$_L['Proxy_Server'] = 'Proxy Server'; +$_L['Proxy_Server_Login'] = 'Proxy Server Login'; diff --git a/ui/ui/app-settings.tpl b/ui/ui/app-settings.tpl index 41332c4d..1b747a23 100644 --- a/ui/ui/app-settings.tpl +++ b/ui/ui/app-settings.tpl @@ -24,7 +24,8 @@