From 8489e58d2d216f7ad40f68df46dcc93f6dce5892 Mon Sep 17 00:00:00 2001 From: ko_oler <kooler89@gmail.com> Date: Tue, 20 Jun 2023 16:08:47 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20=D0=BF?= =?UTF-8?q?=D0=BE=20=D0=9F=D0=A0:=20-=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA?= =?UTF-8?q?=D0=B8=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BD=D0=B5=D1=81=D0=B5=D0=BD?= =?UTF-8?q?=D1=8B=20=D0=B2=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D0=BD=D1=8B=D0=B5/=D0=BA=D0=BE=D0=BD=D1=81=D1=82=D0=B0=D0=BD?= =?UTF-8?q?=D1=82=D1=8B=20-=20=D1=87=D0=B0=D1=81=D1=82=D1=8C=20=D0=BE?= =?UTF-8?q?=D1=88=D0=B8=D0=B1=D0=BA=D0=B8=20=D1=83=D0=B1=D1=80=D0=B0=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=B2=20=D0=B4=D0=B5=D1=82=D0=B0=D0=BB=D0=B8=20-=20?= =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20Trim=20?= =?UTF-8?q?=D0=B8=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BF=D1=83=D1=81=D1=82=D0=BE=D1=82=D1=83=20?= =?UTF-8?q?=D0=B2=20ValidateID()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/id/id.go | 29 ++++++++++++++++++++--------- pkg/id/id_test.go | 5 ----- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/pkg/id/id.go b/pkg/id/id.go index 090fda2c..5093398e 100644 --- a/pkg/id/id.go +++ b/pkg/id/id.go @@ -2,36 +2,47 @@ package id import ( "regexp" + "strings" "git.perx.ru/perxis/perxis-go/pkg/errors" "github.com/rs/xid" ) const ( - IDMaxLength = 64 - NameMaxLength = 256 + MaxLengthID = 64 + MaxLengthName = 256 ) -var isValidID = regexp.MustCompile(`^[A-Za-z][A-Za-z0-9-_]*$`).MatchString +var ( + ErrEmptyID = errors.New("empty ID") + ErrNotValidID = errors.New("id contains invalid characters") + ErrLongID = errors.New("id too long (max 64 symbols)") + ErrLongName = errors.New("name too long (max 256 symbols)") + isValidID = regexp.MustCompile(`^[A-Za-z][A-Za-z0-9-_]*$`).MatchString +) func GenerateNewID() string { return xid.New().String() } func ValidateID(id string) error { - if len(id) > IDMaxLength { - return errors.New("invalid id: too long (max 64 symbols)") + trimmedID := strings.TrimSpace(id) + if trimmedID == "" { + return ErrEmptyID + } + if len(trimmedID) > MaxLengthID { + return ErrLongID } - if !isValidID(id) { - return errors.New("invalid id: must begin with latin letters and contain latin letters, numbers or '-', '_'") + if !isValidID(trimmedID) { + return errors.WithDetail(ErrNotValidID, "must begin with latin letters and contain latin letters, numbers or '-', '_'") } return nil } func ValidateName(name string) error { - if len(name) > NameMaxLength { - return errors.New("invalid name: too long (max 256 symbols)") + if len(name) > MaxLengthName { + return ErrLongName } return nil diff --git a/pkg/id/id_test.go b/pkg/id/id_test.go index 640b67da..39a0a690 100644 --- a/pkg/id/id_test.go +++ b/pkg/id/id_test.go @@ -28,11 +28,6 @@ func TestValidateID(t *testing.T) { "1test", true, }, - { - "Fail, ID starts with whitespace", - " test", - true, - }, { "Fail, ID to long", "9QoulAlFbIcnQYLSudMistN1IczCWrXUTtN5EgNQJd516DN9UjXYJxieJ1RcsNcs1", -- GitLab