From e17b938ef294c1707b7da5324b2bf4f3632241bc Mon Sep 17 00:00:00 2001 From: denver Date: Tue, 28 Mar 2023 01:26:29 +0300 Subject: [PATCH] reduce validation code and improve algorithm --- osutils/data.go | 68 ++++++++++++------------------------------------- 1 file changed, 16 insertions(+), 52 deletions(-) diff --git a/osutils/data.go b/osutils/data.go index 46cf0da..b9fa4fc 100644 --- a/osutils/data.go +++ b/osutils/data.go @@ -10,60 +10,24 @@ func UuidValidate(uuid string) error { 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") + for i, r := range uuid { + switch i { + case 8, 13, 18, 23: + if r != '-' { + return errors.New("uuid separator not valid") + } + break + default: + if !isLetter(r) && !unicode.IsDigit(r) { + return errors.Errorf("uuid char on %i not valid", i) + } } } return nil } + +func isLetter(r rune) bool { + l := unicode.ToLower(r) + return (l >= 'a' && l <= 'z') +}