diff --git a/entrypoint.go b/entrypoint.go index 8b0befb..3a19549 100644 --- a/entrypoint.go +++ b/entrypoint.go @@ -6,6 +6,7 @@ import ( "cloud.o-forge.io/core/oc-lib/models" "cloud.o-forge.io/core/oc-lib/models/resources" "cloud.o-forge.io/core/oc-lib/models/utils" + "github.com/rs/zerolog" ) type LibDataEnum int @@ -34,7 +35,7 @@ func Init(appName string) { mongo.MONGOService.Init(models.GetModelsNames(), GetConfig()) } -func GetLogger() logs.Logger { +func GetLogger() zerolog.Logger { return logs.GetLogger() } diff --git a/go.mod b/go.mod index 732362b..0e84393 100644 --- a/go.mod +++ b/go.mod @@ -17,10 +17,15 @@ require ( require ( github.com/aws/aws-sdk-go v1.54.19 // indirect github.com/davecgh/go-spew v1.1.1 // indirect + github.com/gabriel-vasile/mimetype v1.4.3 // indirect + github.com/go-playground/locales v0.14.1 // indirect + github.com/go-playground/universal-translator v0.18.1 // indirect + github.com/go-playground/validator/v10 v10.22.0 // indirect github.com/go-stack/stack v1.8.1 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/klauspost/compress v1.17.9 // indirect + github.com/leodido/go-urn v1.4.0 // indirect github.com/montanaflynn/stats v0.7.1 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect @@ -31,6 +36,7 @@ require ( github.com/xdg/stringprep v1.0.3 // indirect github.com/youmark/pkcs8 v0.0.0-20240424034433-3c2c7870ae76 // indirect golang.org/x/crypto v0.25.0 // indirect + golang.org/x/net v0.21.0 // indirect golang.org/x/sync v0.7.0 // indirect golang.org/x/text v0.16.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index 8f3ad6b..7b55d9f 100644 --- a/go.sum +++ b/go.sum @@ -7,6 +7,14 @@ github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSV github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0= +github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk= +github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= +github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= +github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= +github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= +github.com/go-playground/validator/v10 v10.22.0 h1:k6HsTZ0sTnROkhS//R0O+55JgM8C4Bx7ia+JlgcnOao= +github.com/go-playground/validator/v10 v10.22.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= 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= @@ -62,6 +70,8 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= +github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= @@ -138,6 +148,8 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4= +golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/models/resources/data/data_mongo_accessor.go b/models/resources/data/data_mongo_accessor.go index 516dda1..5f6baa2 100644 --- a/models/resources/data/data_mongo_accessor.go +++ b/models/resources/data/data_mongo_accessor.go @@ -18,6 +18,10 @@ func (dma *DataMongoAccessor) UpdateOne(set map[string]interface{}, id string) ( } func (dma *DataMongoAccessor) StoreOne(data utils.DBObject) (utils.DBObject, error) { + err := dma.Validate(data.(*Data)) + if err != nil { + return nil, err + } id, err := mongo.MONGOService.StoreOne(data.(*Data), dma.GetType()) if err != nil { dma.Logger.Error().Msg("Could not store " + data.GetName() + " to db. Error: " + err.Error()) diff --git a/models/resources/datacenter/datacenter_mongo_accessor.go b/models/resources/datacenter/datacenter_mongo_accessor.go index d8f52a2..7f15dd1 100644 --- a/models/resources/datacenter/datacenter_mongo_accessor.go +++ b/models/resources/datacenter/datacenter_mongo_accessor.go @@ -18,6 +18,10 @@ func (dca *DatacenterMongoAccessor) UpdateOne(set map[string]interface{}, id str } func (dca *DatacenterMongoAccessor) StoreOne(data utils.DBObject) (utils.DBObject, error) { + err := dca.Validate(data.(*Datacenter)) + if err != nil { + return nil, err + } id, err := mongo.MONGOService.StoreOne(data.(*Datacenter), dca.GetType()) if err != nil { dca.Logger.Error().Msg("Could not store " + data.GetName() + " to db. Error: " + err.Error()) diff --git a/models/resources/processing/processing_mongo_accessor.go b/models/resources/processing/processing_mongo_accessor.go index c982cfe..40c2098 100644 --- a/models/resources/processing/processing_mongo_accessor.go +++ b/models/resources/processing/processing_mongo_accessor.go @@ -18,6 +18,10 @@ func (pma *ProcessingMongoAccessor) UpdateOne(set map[string]interface{}, id str } func (pma *ProcessingMongoAccessor) StoreOne(data utils.DBObject) (utils.DBObject, error) { + err := pma.Validate(data.(*Processing)) + if err != nil { + return nil, err + } id, err := mongo.MONGOService.StoreOne(data.(*Processing), pma.GetType()) if err != nil { pma.Logger.Error().Msg("Could not store " + data.GetName() + " to db. Error: " + err.Error()) diff --git a/models/resources/storage/storage_mongo_accessor.go b/models/resources/storage/storage_mongo_accessor.go index 669a162..2fe45fe 100644 --- a/models/resources/storage/storage_mongo_accessor.go +++ b/models/resources/storage/storage_mongo_accessor.go @@ -18,6 +18,10 @@ func (sma *StorageMongoAccessor) UpdateOne(set map[string]interface{}, id string } func (sma *StorageMongoAccessor) StoreOne(data utils.DBObject) (utils.DBObject, error) { + err := sma.Validate(data.(*Storage)) + if err != nil { + return nil, err + } id, err := mongo.MONGOService.StoreOne(data.(*Storage), sma.GetType()) if err != nil { sma.Logger.Error().Msg("Could not store " + data.GetName() + " to db. Error: " + err.Error()) diff --git a/models/resources/workflow/workflow_mongo_accessor.go b/models/resources/workflow/workflow_mongo_accessor.go index 5a35c2a..5d19868 100644 --- a/models/resources/workflow/workflow_mongo_accessor.go +++ b/models/resources/workflow/workflow_mongo_accessor.go @@ -18,6 +18,10 @@ func (wfa *WorkflowMongoAccessor) UpdateOne(set map[string]interface{}, id strin } func (wfa *WorkflowMongoAccessor) StoreOne(data utils.DBObject) (utils.DBObject, error) { + err := wfa.Validate(data.(*Workflow)) + if err != nil { + return nil, err + } id, err := mongo.MONGOService.StoreOne(data.(*Workflow), wfa.GetType()) if err != nil { wfa.Logger.Error().Msg("Could not store " + data.GetName() + " to db. Error: " + err.Error()) diff --git a/models/utils/abstracts.go b/models/utils/abstracts.go index 1503cad..7505f3d 100644 --- a/models/utils/abstracts.go +++ b/models/utils/abstracts.go @@ -4,9 +4,12 @@ import ( "cloud.o-forge.io/core/oc-lib/dbs/mongo" "cloud.o-forge.io/core/oc-lib/logs" "cloud.o-forge.io/core/oc-lib/models/resources" + "github.com/go-playground/validator/v10" "github.com/rs/zerolog" ) +var validate = validator.New(validator.WithRequiredStructEnabled()) + type AbstractAccessor struct { Logger zerolog.Logger Type string @@ -16,6 +19,10 @@ func (dma *AbstractAccessor) GetType() string { return dma.Type } +func (dma *AbstractAccessor) Validate(d DBObject) error { + return validate.Struct(d) +} + func (dma *AbstractAccessor) SetLogger(t resources.ResourceType) { dma.Logger = logs.CreateLogger(t.String(), "") dma.Type = t.String()