From c0ad9069327cc41b33486cdbdfd401a26f83d144 Mon Sep 17 00:00:00 2001 From: Robert Hoppe Date: Wed, 10 Jul 2024 11:49:13 +0200 Subject: [PATCH] Introduce IPValidation (#217) Co-authored-by: Robert Hoppe --- pkg/validate/validate.go | 13 +++++++++++++ pkg/validate/validate_test.go | 22 ++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/pkg/validate/validate.go b/pkg/validate/validate.go index bcad4f4..a209f63 100644 --- a/pkg/validate/validate.go +++ b/pkg/validate/validate.go @@ -3,6 +3,7 @@ package validate import ( "fmt" "io" + "net" "net/http" "reflect" "regexp" @@ -254,6 +255,18 @@ func Prefix(pr string) error { return nil } +// IsIP validates a given IP +func IsIP(pr string) error { + pr = strings.Trim(pr, "\"") + + trial := net.ParseIP(pr) + if trial == nil { + return fmt.Errorf("given IP: %s. is not valid", pr) + } + + return nil +} + // PublicIP validates a given ID address func PublicIP(ip string) error { exp := "((^\\s*((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))\\s*$)|(^\\s*((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*$))" diff --git a/pkg/validate/validate_test.go b/pkg/validate/validate_test.go index fd1df13..7f5f771 100644 --- a/pkg/validate/validate_test.go +++ b/pkg/validate/validate_test.go @@ -394,6 +394,28 @@ func TestPrefix(t *testing.T) { } } +func TestIP(t *testing.T) { + type args struct { + prefix string + } + tests := []struct { + name string + args args + wantErr bool + }{ + {"not ok", args{"999.999.999.999"}, true}, + {"ok [1]", args{"192.168.1.1"}, false}, + {"ok [1]", args{"\"192.168.1.1\""}, false}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if err := validate.IsIP(tt.args.prefix); (err != nil) != tt.wantErr { + t.Errorf("IsIP() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} + func TestPublicIP(t *testing.T) { type args struct { ip string