X-Git-Url: https://git.p6c8.net/jirafeau.git/blobdiff_plain/d0a3851f3acc275b1cea2fc71ca01a84c1b3392a..ebcb7402a9776c5881fbba4d1d60ad50e41a097d:/lib/functions.php diff --git a/lib/functions.php b/lib/functions.php index c234f4c..b590e2b 100644 --- a/lib/functions.php +++ b/lib/functions.php @@ -1074,19 +1074,14 @@ function jirafeau_challenge_upload_password($cfg, $password) } /** - * Test if visitor's IP is authorized to upload. + * Test if the given IP is whitelisted by the given list. * * @param $allowedIpList array of allowed IPs * @param $challengedIp IP to be challenged * @return true if IP is authorized, false otherwise. */ -function jirafeau_challenge_upload_ip($allowedIpList, $challengedIp) +function jirafeau_challenge_ip($allowedIpList, $challengedIp) { - // skip if list is empty = all IPs allowed - if (count($allowedIpList) == 0) { - return true; - } - // test given IP against each allowed IP foreach ($allowedIpList as $i) { if ($i == $challengedIp) { return true; @@ -1102,6 +1097,42 @@ function jirafeau_challenge_upload_ip($allowedIpList, $challengedIp) return false; } +/** + * Check if Jirafeau has a restriction on the IP address for uploading. + * @return true if uploading is IP restricted, false otherwise. + */ +function jirafeau_upload_has_ip_restriction($cfg) { + return count($cfg['upload_ip']) > 0; +} + +/** + * Test if visitor's IP is authorized to upload at all. + * + * @param $cfg configuration + * @param $challengedIp IP to be challenged + * @return true if IP is authorized, false otherwise. + */ +function jirafeau_challenge_upload_ip($cfg, $challengedIp) +{ + // If no IP address have been listed, allow upload from any IP + if (!jirafeau_upload_has_ip_restriction($cfg)) { + return true; + } + return jirafeau_challenge_ip($cfg['upload_ip'], $challengedIp); +} + +/** + * Test if visitor's IP is authorized to upload without a password. + * + * @param $cfg configuration + * @param $challengedIp IP to be challenged + * @return true if IP is authorized, false otherwise. + */ +function jirafeau_challenge_upload_ip_without_password($cfg, $challengedIp) +{ + return jirafeau_challenge_ip($cfg['upload_ip_nopassword'], $challengedIp); +} + /** * Test if visitor's IP is authorized or password is supplied and authorized * @param $ip IP to be challenged @@ -1110,50 +1141,9 @@ function jirafeau_challenge_upload_ip($allowedIpList, $challengedIp) */ function jirafeau_challenge_upload ($cfg, $ip, $password) { - // Allow if no ip restrictaion and no password restriction - if ((count ($cfg['upload_ip']) == 0) and (count ($cfg['upload_password']) == 0)) { - return true; - } - - // Allow if ip is in array (no password) - foreach ($cfg['upload_ip_nopassword'] as $i) { - if ($i == $ip) { - return true; - } - // CIDR test for IPv4 only. - if (strpos ($i, '/') !== false) - { - list ($subnet, $mask) = explode('/', $i); - if ((ip2long ($ip) & ~((1 << (32 - $mask)) - 1) ) == ip2long ($subnet)) { - return true; - } - } - } - - // Allow if ip is in array - foreach ($cfg['upload_ip'] as $i) { - if ($i == $ip) { - return true; - } - // CIDR test for IPv4 only. - if (strpos ($i, '/') !== false) - { - list ($subnet, $mask) = explode('/', $i); - if ((ip2long ($ip) & ~((1 << (32 - $mask)) - 1) ) == ip2long ($subnet)) { - return true; - } - } - } - if (!jirafeau_has_upload_password($cfg)) { - return false; - } - - foreach ($cfg['upload_password'] as $p) { - if ($password == $p) { - return true; - } - } - return false; + return jirafeau_challenge_upload_ip_without_password($cfg, $ip) || + (!jirafeau_has_upload_password($cfg) && !jirafeau_upload_has_ip_restriction($cfg)) || + (jirafeau_challenge_upload_password($cfg, $password) && jirafeau_challenge_upload_ip($cfg, $ip)); } /** Tell if we have some HTTP headers generated by a proxy */