diff --git a/library/attach_mod/displaying_torrent.php b/library/attach_mod/displaying_torrent.php index 426bce393..a4364d750 100644 --- a/library/attach_mod/displaying_torrent.php +++ b/library/attach_mod/displaying_torrent.php @@ -463,10 +463,12 @@ if ($tor_reged && $tor_info) { } $peerCountry = $lang['UNKNOWN']; - if (IS_AM || $peer['user_id'] == $userdata['user_id'] || !bf($peer['user_opt'], 'user_opt', 'user_hide_peer_country')) { - if ($infoByIP = infoByIP((!empty($peer['ipv6']) ? $peer['ipv6'] : $peer['ip']), $peer['port'])) { - if (!empty($infoByIP['countryCode'])) { - $peerCountry = render_flag($infoByIP['countryCode'], false); + if ($bb_cfg['ip2country_settings']['enabled']) { + if (IS_AM || $peer['user_id'] == $userdata['user_id'] || !bf($peer['user_opt'], 'user_opt', 'user_hide_peer_country')) { + if ($infoByIP = infoByIP((!empty($peer['ipv6']) ? $peer['ipv6'] : $peer['ip']), $peer['port'])) { + if (!empty($infoByIP['countryCode'])) { + $peerCountry = render_flag($infoByIP['countryCode'], false); + } } } } diff --git a/library/config.php b/library/config.php index 232f0f96d..55de1ba8d 100644 --- a/library/config.php +++ b/library/config.php @@ -144,6 +144,14 @@ $bb_cfg['torr_server'] = [ 'disable_for_guest' => true ]; +// FreeIPAPI settings +$bb_cfg['ip2country_settings'] = [ + // Documentation: https://docs.freeipapi.com/ + 'enabled' => true, + 'endpoint' => 'https://freeipapi.com/api/json/', + 'api_token' => '', // not required for basic usage +]; + // FAQ url help link $bb_cfg['how_to_download_url_help'] = 'viewtopic.php?t=1'; // How to download? $bb_cfg['what_is_torrent_url_help'] = 'viewtopic.php?t=2'; // What is a torrent? diff --git a/library/defines.php b/library/defines.php index d7078a7fd..dbb636585 100644 --- a/library/defines.php +++ b/library/defines.php @@ -35,9 +35,6 @@ define('UPDATER_URL', 'https://api.github.com/repos/torrentpier/torrentpier/rele define('UPDATER_FILE', INT_DATA_DIR . '/updater.json'); define('COOKIE_DBG', 'bb_dbg'); -// TODO: Move in another section -define('API_IP_URL', 'https://freeipapi.com/api/json/'); - // Templates define('ADMIN_TPL_DIR', TEMPLATES_DIR . '/admin/'); define('XS_USE_ISSET', '1'); diff --git a/library/includes/functions.php b/library/includes/functions.php index bf055495b..943648d29 100644 --- a/library/includes/functions.php +++ b/library/includes/functions.php @@ -2186,20 +2186,40 @@ function readUpdaterFile(): array|bool */ function infoByIP(string $ipAddress, int $port = 0): array { + global $bb_cfg; + + if (!$bb_cfg['ip2country_settings']['enabled']) { + return []; + } + $ipAddress = \TorrentPier\Helpers\IPHelper::long2ip_extended($ipAddress); $cacheName = hash('xxh128', ($ipAddress . '_' . $port)); + if (!$data = CACHE('bb_ip2countries')->get($cacheName)) { $data = []; - $response = file_get_contents(API_IP_URL . $ipAddress); - $json = json_decode($response, true); - if (is_array($json) && !empty($json)) { - $data = [ - 'ipVersion' => $json['ipVersion'], - 'countryCode' => $json['countryCode'], - 'continent' => $json['continent'], - 'continentCode' => $json['continentCode'] + + $contextOptions = []; + if (!empty($bb_cfg['ip2country_settings']['api_token'])) { + $contextOptions['http'] = [ + 'header' => "Authorization: Bearer " . $bb_cfg['ip2country_settings']['api_token'] . "\r\n" ]; - CACHE('bb_ip2countries')->set($cacheName, $data, 1200); + } + + $context = stream_context_create($contextOptions); + $response = file_get_contents($bb_cfg['ip2country_settings']['endpoint'] . $ipAddress, context: $context); + + if ($response !== false) { + $json = json_decode($response, true); + + if (is_array($json) && !empty($json)) { + $data = [ + 'ipVersion' => $json['ipVersion'], + 'countryCode' => $json['countryCode'], + 'continent' => $json['continent'], + 'continentCode' => $json['continentCode'] + ]; + CACHE('bb_ip2countries')->set($cacheName, $data, 1200); + } } } diff --git a/library/includes/ucp/register.php b/library/includes/ucp/register.php index 0e8cc2e34..69a14add1 100644 --- a/library/includes/ucp/register.php +++ b/library/includes/ucp/register.php @@ -366,7 +366,7 @@ foreach ($profile_fields as $field => $can_edit) { 'user_callseed' => $reg_mode ? true : true, 'user_retracker' => $reg_mode ? true : true, 'user_hide_torrent_client' => $reg_mode ? true : true, - 'user_hide_peer_country' => $reg_mode ? true : true, + 'user_hide_peer_country' => $reg_mode ? true : $bb_cfg['ip2country_settings']['enabled'], ]; foreach ($update_user_opt as $opt => $can_change_opt) { diff --git a/styles/templates/default/usercp_register.tpl b/styles/templates/default/usercp_register.tpl index d55a7a208..2a0e3fba5 100644 --- a/styles/templates/default/usercp_register.tpl +++ b/styles/templates/default/usercp_register.tpl @@ -326,6 +326,7 @@ + {L_HIDE_PEER_COUNTRY_NAME}: @@ -333,6 +334,7 @@ + {L_AVATAR_PANEL} diff --git a/styles/templates/default/viewtopic_torrent.tpl b/styles/templates/default/viewtopic_torrent.tpl index 8d7b621e4..88a87f67f 100644 --- a/styles/templates/default/viewtopic_torrent.tpl +++ b/styles/templates/default/viewtopic_torrent.tpl @@ -155,7 +155,7 @@ ajax.callback.callseed = function (data) { {L_DL_PORT} {L_DL_CLIENT} - {L_COUNTRY} + {L_COUNTRY} @@ -173,7 +173,7 @@ ajax.callback.callseed = function (data) { {sfull.srow.port.PORT} {sfull.srow.PEER_ID} - {sfull.srow.COUNTRY} + {sfull.srow.COUNTRY} @@ -208,7 +208,7 @@ ajax.callback.callseed = function (data) { {L_DL_PORT} {L_DL_CLIENT} - {L_COUNTRY} + {L_COUNTRY} @@ -226,7 +226,7 @@ ajax.callback.callseed = function (data) { {lfull.lrow.port.PORT} {lfull.lrow.PEER_ID} - {lfull.lrow.COUNTRY} + {lfull.lrow.COUNTRY}