@@ -447,6 +447,118 @@ func TestExplicitlyAllowedIPNoMatch(t *testing.T) {
447447 assertStatusCode (t , recorder .Result (), http .StatusForbidden )
448448}
449449
450+ func TestExplicitlyAllowedIPRangeIPV6 (t * testing.T ) {
451+ cfg := createTesterConfig ()
452+ cfg .Countries = append (cfg .Countries , "CA" )
453+ cfg .AllowedIPAddresses = append (cfg .AllowedIPAddresses , "2a00:00c0:2:3::567:8001/128" )
454+ cfg .AllowedIPAddresses = append (cfg .AllowedIPAddresses , "8.8.8.8" )
455+
456+ ctx := context .Background ()
457+ next := http .HandlerFunc (func (rw http.ResponseWriter , req * http.Request ) {})
458+
459+ handler , err := geoblock .New (ctx , next , cfg , "GeoBlock" )
460+ if err != nil {
461+ t .Fatal (err )
462+ }
463+
464+ recorder := httptest .NewRecorder ()
465+
466+ req , err := http .NewRequestWithContext (ctx , http .MethodGet , "http://localhost" , nil )
467+ if err != nil {
468+ t .Fatal (err )
469+ }
470+
471+ req .Header .Add (xForwardedFor , "2a00:00c0:2:3::567:8001" )
472+
473+ handler .ServeHTTP (recorder , req )
474+
475+ assertStatusCode (t , recorder .Result (), http .StatusOK )
476+ }
477+
478+ func TestExplicitlyAllowedIPRangeIPV6NoMatch (t * testing.T ) {
479+ cfg := createTesterConfig ()
480+ cfg .Countries = append (cfg .Countries , "CA" )
481+ cfg .AllowedIPAddresses = append (cfg .AllowedIPAddresses , "2a00:00c0:2:3::567:8001/128" )
482+ cfg .AllowedIPAddresses = append (cfg .AllowedIPAddresses , "8.8.8.8" )
483+
484+ ctx := context .Background ()
485+ next := http .HandlerFunc (func (rw http.ResponseWriter , req * http.Request ) {})
486+
487+ handler , err := geoblock .New (ctx , next , cfg , "GeoBlock" )
488+ if err != nil {
489+ t .Fatal (err )
490+ }
491+
492+ recorder := httptest .NewRecorder ()
493+
494+ req , err := http .NewRequestWithContext (ctx , http .MethodGet , "http://localhost" , nil )
495+ if err != nil {
496+ t .Fatal (err )
497+ }
498+
499+ req .Header .Add (xForwardedFor , "2a00:00c0:2:3::567:8002" )
500+
501+ handler .ServeHTTP (recorder , req )
502+
503+ assertStatusCode (t , recorder .Result (), http .StatusForbidden )
504+ }
505+
506+ func TestExplicitlyAllowedIPRangeIPV4 (t * testing.T ) {
507+ cfg := createTesterConfig ()
508+ cfg .Countries = append (cfg .Countries , "CA" )
509+ cfg .AllowedIPAddresses = append (cfg .AllowedIPAddresses , "178.90.234.0/27" )
510+ cfg .AllowedIPAddresses = append (cfg .AllowedIPAddresses , "8.8.8.8" )
511+
512+ ctx := context .Background ()
513+ next := http .HandlerFunc (func (rw http.ResponseWriter , req * http.Request ) {})
514+
515+ handler , err := geoblock .New (ctx , next , cfg , "GeoBlock" )
516+ if err != nil {
517+ t .Fatal (err )
518+ }
519+
520+ recorder := httptest .NewRecorder ()
521+
522+ req , err := http .NewRequestWithContext (ctx , http .MethodGet , "http://localhost" , nil )
523+ if err != nil {
524+ t .Fatal (err )
525+ }
526+
527+ req .Header .Add (xForwardedFor , "178.90.234.30" )
528+
529+ handler .ServeHTTP (recorder , req )
530+
531+ assertStatusCode (t , recorder .Result (), http .StatusOK )
532+ }
533+
534+ func TestExplicitlyAllowedIPRangeIPV4NoMatch (t * testing.T ) {
535+ cfg := createTesterConfig ()
536+ cfg .Countries = append (cfg .Countries , "CA" )
537+ cfg .AllowedIPAddresses = append (cfg .AllowedIPAddresses , "178.90.234.0/27" )
538+ cfg .AllowedIPAddresses = append (cfg .AllowedIPAddresses , "8.8.8.8" )
539+
540+ ctx := context .Background ()
541+ next := http .HandlerFunc (func (rw http.ResponseWriter , req * http.Request ) {})
542+
543+ handler , err := geoblock .New (ctx , next , cfg , "GeoBlock" )
544+ if err != nil {
545+ t .Fatal (err )
546+ }
547+
548+ recorder := httptest .NewRecorder ()
549+
550+ req , err := http .NewRequestWithContext (ctx , http .MethodGet , "http://localhost" , nil )
551+ if err != nil {
552+ t .Fatal (err )
553+ }
554+
555+ req .Header .Add (xForwardedFor , "178.90.234.55" )
556+
557+ handler .ServeHTTP (recorder , req )
558+
559+ assertStatusCode (t , recorder .Result (), http .StatusForbidden )
560+ }
561+
450562func assertStatusCode (t * testing.T , req * http.Response , expected int ) {
451563 t .Helper ()
452564
0 commit comments