Prechádzať zdrojové kódy

add validation checks on tag name

abhishek9686 11 mesiacov pred
rodič
commit
e521393d3e
3 zmenil súbory, kde vykonal 45 pridanie a 0 odobranie
  1. 17 0
      controllers/tags.go
  2. 18 0
      logic/tags.go
  3. 10 0
      logic/util.go

+ 17 - 0
controllers/tags.go

@@ -89,6 +89,17 @@ func createTag(w http.ResponseWriter, r *http.Request) {
 		CreatedBy: user.UserName,
 		CreatedAt: time.Now(),
 	}
+	_, err = logic.GetTag(tag.ID)
+	if err == nil {
+		logic.ReturnErrorResponse(w, r, logic.FormatError(fmt.Errorf("tag with id %s exists already", tag.TagName), "badrequest"))
+		return
+	}
+	// validate name
+	err = logic.CheckIDSyntax(tag.TagName)
+	if err != nil {
+		logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
+		return
+	}
 	err = logic.InsertTag(tag)
 	if err != nil {
 		logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
@@ -135,6 +146,12 @@ func updateTag(w http.ResponseWriter, r *http.Request) {
 	updateTag.NewName = strings.TrimSpace(updateTag.NewName)
 	var newID models.TagID
 	if updateTag.NewName != "" {
+		// validate name
+		err = logic.CheckIDSyntax(updateTag.NewName)
+		if err != nil {
+			logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
+			return
+		}
 		newID = models.TagID(fmt.Sprintf("%s.%s", tag.Network, updateTag.NewName))
 		tag.ID = newID
 		tag.TagName = updateTag.NewName

+ 18 - 0
logic/tags.go

@@ -2,8 +2,10 @@ package logic
 
 import (
 	"encoding/json"
+	"errors"
 	"fmt"
 	"sort"
+	"strings"
 	"sync"
 
 	"github.com/gravitl/netmaker/database"
@@ -178,3 +180,19 @@ func SortTagEntrys(tags []models.TagListResp) {
 		return tags[i].ID < tags[j].ID
 	})
 }
+
+func CheckIDSyntax(id string) error {
+	if id == "" {
+		return errors.New("name is required")
+	}
+	if len(id) < 3 {
+		return errors.New("name should have min 3 characters")
+	}
+	if HasSymbol(id) {
+		return errors.New("symbols are not allowed")
+	}
+	if strings.Contains(id, ".") {
+		return errors.New("dots not allowed")
+	}
+	return nil
+}

+ 10 - 0
logic/util.go

@@ -10,6 +10,7 @@ import (
 	"os"
 	"strings"
 	"time"
+	"unicode"
 
 	"github.com/c-robinson/iplib"
 	"github.com/gravitl/netmaker/database"
@@ -148,4 +149,13 @@ func IsSlicesEqual(a, b []string) bool {
 	return true
 }
 
+func HasSymbol(str string) bool {
+	for _, letter := range str {
+		if unicode.IsSymbol(letter) {
+			return true
+		}
+	}
+	return false
+}
+
 // == private ==