diff --git a/db/c_resourceDBInterface.go b/db/c_resourceDBInterface.go index 628f23a..eebc0ef 100644 --- a/db/c_resourceDBInterface.go +++ b/db/c_resourceDBInterface.go @@ -81,10 +81,6 @@ func AddCResource(cResource CResource) (CResource, error) { InsertOne(mdbInstance.Ctx, cResource) } - if err := mdbInstance.Validate.Struct(cResource); err != nil { - return CResource{}, err - } - insertRes, err := runQuery[*mongo.InsertOneResult](query) if err != nil { return CResource{}, err diff --git a/db/mongodb.go b/db/mongodb.go index 90bd27d..a382597 100644 --- a/db/mongodb.go +++ b/db/mongodb.go @@ -6,7 +6,6 @@ import ( "os" "time" - "github.com/go-playground/validator/v10" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" @@ -16,7 +15,6 @@ type MDB struct { Client mongo.Client Ctx context.Context CancelFunc context.CancelFunc - Validate *validator.Validate } var mdbInstance MDB @@ -26,8 +24,6 @@ func InitDB() error { var mdb MDB - mdb.Validate = validator.New() - mongoClient, err := mongo.NewClient(options.Client().ApplyURI(os.Getenv("MONGODB_URI"))) if err != nil { return err @@ -48,7 +44,7 @@ func InitDB() error { mdbInstance = mdb - if err = setupIndexes(); err != nil { + if err = setupCollections(); err != nil { return err } @@ -59,10 +55,22 @@ func runQuery[T any](f func() (T, error)) (T, error) { return f() } -func setupIndexes() error { +func setupCollections() error { + // create unique index over username if err := createIndex("users", "username", true); err != nil { return err } + + // setup validation + singleRes := mdbInstance.Client.Database(os.Getenv("DB_NAME")).RunCommand(mdbInstance.Ctx, bson.D{ + {Key: "collMod", Value: "users"}, + {Key: "validator", Value: userValidator}, + {Key: "validationLevel", Value: "strict"}, + }) + if singleRes != nil { + return singleRes.Err() + } + return nil } diff --git a/db/reservationDBInterface.go b/db/reservationDBInterface.go index c95828a..3158f83 100644 --- a/db/reservationDBInterface.go +++ b/db/reservationDBInterface.go @@ -137,10 +137,6 @@ func AddReservation(reservation Reservation) (Reservation, error) { InsertOne(mdbInstance.Ctx, reservation) } - if err := mdbInstance.Validate.Struct(reservation); err != nil { - return Reservation{}, err - } - insertRes, err := runQuery[*mongo.InsertOneResult](query) if err != nil { return Reservation{}, err diff --git a/db/usersDBInterface.go b/db/usersDBInterface.go index 36475b9..6250232 100644 --- a/db/usersDBInterface.go +++ b/db/usersDBInterface.go @@ -19,11 +19,30 @@ const ( type User struct { ID primitive.ObjectID `bson:"_id,omitempty" json:"_id,omitempty"` - Username string `bson:"username" json:"username" validate:"required,min=3,max=20"` + Username string `bson:"username" json:"username"` Password string `bson:"password" json:"password"` Type UserType `bson:"type" json:"-"` } +var userValidator = bson.D{ + {Key: "$jsonSchema", Value: bson.D{ + {Key: "bsonType", Value: "object"}, + {Key: "required", Value: bson.A{"username"}}, + {Key: "properties", Value: bson.D{ + {Key: "username", Value: bson.D{ + {Key: "bsonType", Value: "string"}, + {Key: "pattern", Value: "^[a-zA-Z0-9]{3,20}$"}, + }}, + {Key: "password", Value: bson.D{ + {Key: "bsonType", Value: "string"}, + }}, + {Key: "type", Value: bson.D{ + {Key: "bsonType", Value: "number"}, + }}, + }}, + }}, +} + var userDefaultProjection = bson.M{"password": 0} func GetAllUsers() ([]User, error) { @@ -102,10 +121,6 @@ func AddUser(user User) (User, error) { InsertOne(mdbInstance.Ctx, user) } - if err := mdbInstance.Validate.Struct(user); err != nil { - return User{}, err - } - insertRes, err := runQuery[*mongo.InsertOneResult](query) if err != nil { return User{}, err diff --git a/go.mod b/go.mod index 5e8264e..c599b86 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,6 @@ go 1.18 require ( github.com/dgrijalva/jwt-go v3.2.0+incompatible - github.com/go-playground/validator/v10 v10.11.0 github.com/gofiber/fiber/v2 v2.34.0 github.com/gofiber/swagger v0.0.1 github.com/joho/godotenv v1.4.0 @@ -22,16 +21,15 @@ require ( github.com/go-openapi/jsonreference v0.20.0 // indirect github.com/go-openapi/spec v0.20.6 // indirect github.com/go-openapi/swag v0.21.1 // indirect - github.com/go-playground/locales v0.14.0 // indirect - github.com/go-playground/universal-translator v0.18.0 // indirect github.com/go-stack/stack v1.8.0 // indirect github.com/golang/snappy v0.0.1 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/klauspost/compress v1.15.6 // indirect - github.com/leodido/go-urn v1.2.1 // indirect + github.com/kr/pretty v0.3.0 // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/rogpeppe/go-internal v1.8.0 // indirect github.com/swaggo/files v0.0.0-20210815190702-a29dd2bc99b2 // indirect github.com/valyala/bytebufferpool v1.0.0 // indirect github.com/valyala/fasthttp v1.37.0 // indirect @@ -45,6 +43,7 @@ require ( golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a // indirect golang.org/x/text v0.3.7 // indirect golang.org/x/tools v0.1.10 // indirect + gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 150f678..b4f55dd 100644 --- a/go.sum +++ b/go.sum @@ -27,14 +27,6 @@ github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-openapi/swag v0.21.1 h1:wm0rhTb5z7qpJRHBdPOMuY4QjVUMbF6/kwoYeRAOrKU= github.com/go-openapi/swag v0.21.1/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= -github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= -github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= -github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= -github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= -github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= -github.com/go-playground/validator/v10 v10.11.0 h1:0W+xRM511GY47Yy3bZUbJVitCNg2BOGlCyvTqsp/xIw= -github.com/go-playground/validator/v10 v10.11.0/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/gofiber/fiber/v2 v2.32.0/go.mod h1:CMy5ZLiXkn6qwthrl03YMyW1NLfj0rhxz2LKl4t7ZTY= @@ -64,8 +56,6 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= -github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= @@ -125,7 +115,6 @@ go.mongodb.org/mongo-driver v1.9.1/go.mod h1:0sQWfOeY63QTntERDJJ/0SuKK0T1uVSgKCu golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e h1:T8NU3HyQ8ClP4SEE+KbFlg6n0NhuTsN4MyznaarGsZM= golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= @@ -151,7 +140,6 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -189,6 +177,5 @@ gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=