From 7ca590fc9c27f7360b2c5d218da2754d7c0676d9 Mon Sep 17 00:00:00 2001
From: Nicholas van Oudtshoorn <vanoudt@gmail.com>
Date: Wed, 13 Mar 2024 16:10:01 +0800
Subject: [PATCH] Add Cloudflare support to in_iprange function

---
 lib/C4/Auth.pm | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/lib/C4/Auth.pm b/lib/C4/Auth.pm
index 9b298ee..ade315c 100644
--- a/lib/C4/Auth.pm
+++ b/lib/C4/Auth.pm
@@ -2319,8 +2319,13 @@ sub in_iprange {
     my @allowedipranges = $iprange ? split(' ', $iprange) : ();
     if (scalar @allowedipranges > 0) {
         my @rangelist;
-        eval { @rangelist = Net::CIDR::range2cidr(@allowedipranges); }; return 0 if $@;
-        eval { $result = Net::CIDR::cidrlookup($ENV{'REMOTE_ADDR'}, @rangelist) } || Koha::Logger->get->warn('cidrlookup failed for ' . join(' ',@rangelist) );
+	eval { @rangelist = Net::CIDR::range2cidr(@allowedipranges); }; return 0 if $@;
+
+	if (defined $ENV{'HTTP_CF_CONNECTING_IP'}) {
+		eval { $result = Net::CIDR::cidrlookup($ENV{'HTTP_CF_CONNECTING_IP'}, @rangelist) } || Koha::Logger->get->warn('cidrlookup failed for ' . $ENV{'HTTP_CF_CONNECTING_IP'}. ' in '. join(' ',@rangelist) );
+	} else {
+		eval { $result = Net::CIDR::cidrlookup($ENV{'REMOTE_ADDR'}, @rangelist) } || Koha::Logger->get->warn('cidrlookup failed for ' . $ENV{'REMOTE_ADDR'} . ' in '. join(' ',@rangelist) );
+	}
      }
      return $result ? 1 : 0;
 }
-- 
2.34.1