diff --git a/osutils/data.go b/osutils/data.go new file mode 100644 index 0000000..46cf0da --- /dev/null +++ b/osutils/data.go @@ -0,0 +1,69 @@ +package osutils + +import ( + "github.com/pkg/errors" + "unicode" +) + +func UuidValidate(uuid string) error { + if len(uuid) != 36 { + return errors.New("uuid length not valid") + } + + // validate first 8 octets + for i := 0; i < 8; i++ { + if !(unicode.IsLetter(rune(uuid[i])) || unicode.IsDigit(rune(uuid[i]))) && uuid[i] == '-' { + return errors.New("uuid first 8 octets not valid") + } + } + + // validate separator + if uuid[8] != '-' { + return errors.New("uuid separator not valid") + } + + // validate second 4 octets + for i := 9; i < 13; i++ { + if !(unicode.IsLetter(rune(uuid[i])) || unicode.IsDigit(rune(uuid[i]))) && uuid[i] == '-' { + return errors.New("uuid second 4 octets not valid") + } + } + + // validate separator + if uuid[13] != '-' { + return errors.New("uuid separator not valid") + } + + // validate third 4 octets + for i := 14; i < 18; i++ { + if !(unicode.IsLetter(rune(uuid[i])) || unicode.IsDigit(rune(uuid[i]))) && uuid[i] == '-' { + return errors.New("uuid third 4 octets not valid") + } + } + + // validate separator + if uuid[18] != '-' { + return errors.New("uuid separator not valid") + } + + // validate fourth 4 octets + for i := 19; i < 23; i++ { + if !(unicode.IsLetter(rune(uuid[i])) || unicode.IsDigit(rune(uuid[i]))) && uuid[i] == '-' { + return errors.New("uuid fourth 4 octets not valid") + } + } + + // validate separator + if uuid[23] != '-' { + return errors.New("uuid separator not valid") + } + + // validate fourth 4 octets + for i := 24; i < 36; i++ { + if !(unicode.IsLetter(rune(uuid[i])) || unicode.IsDigit(rune(uuid[i]))) && uuid[i] == '-' { + return errors.New("uuid fifth 12 octets not valid") + } + } + + return nil +}