diff --git a/pkg/service/v0/validator.go b/pkg/service/v0/validator.go index 5f6b1398b..5b7af6365 100644 --- a/pkg/service/v0/validator.go +++ b/pkg/service/v0/validator.go @@ -39,10 +39,10 @@ func validateGetSettingsBundle(req *proto.GetSettingsBundleRequest) error { } func validateListSettingsBundles(req *proto.ListSettingsBundlesRequest) error { - if err := validateBundleIdentifier(req.Identifier); err != nil { - return err - } - return nil + return validation.ValidateStruct( + req.Identifier, + validation.Field(&req.Identifier.Extension, validation.Match(regexForKeys)), + ) } func validateSaveSettingsValue(req *proto.SaveSettingsValueRequest) error { @@ -60,10 +60,15 @@ func validateGetSettingsValue(req *proto.GetSettingsValueRequest) error { } func validateListSettingsValues(req *proto.ListSettingsValuesRequest) error { - if err := validateValueIdentifier(req.Identifier); err != nil { - return err - } - return nil + return validation.ValidateStruct( + req.Identifier, + validation.Field(&req.Identifier.AccountUuid, is.UUID), + validation.Field(&req.Identifier.Extension, validation.Match(regexForKeys)), + validation.Field(&req.Identifier.Extension, validation.When(req.Identifier.BundleKey != "", validation.Required).Else(validation.Nil)), + validation.Field(&req.Identifier.BundleKey, validation.Match(regexForKeys)), + validation.Field(&req.Identifier.BundleKey, validation.When(req.Identifier.SettingKey != "", validation.Required).Else(validation.Nil)), + validation.Field(&req.Identifier.SettingKey, validation.Match(regexForKeys)), + ) } func validateBundleIdentifier(identifier *proto.Identifier) error { diff --git a/pkg/store/filesystem/bundles.go b/pkg/store/filesystem/bundles.go index b8ad11a7f..d73c4d538 100644 --- a/pkg/store/filesystem/bundles.go +++ b/pkg/store/filesystem/bundles.go @@ -6,8 +6,6 @@ import ( "path" "github.com/owncloud/ocis-settings/pkg/proto/v0" - "google.golang.org/grpc/codes" - gstatus "google.golang.org/grpc/status" ) // ListBundles returns all bundles in the mountPath folder belonging to the given extension @@ -52,11 +50,6 @@ func (s Store) ListBundles(identifier *proto.Identifier) ([]*proto.SettingsBundl // ReadBundle tries to find a bundle by the given identifier within the mountPath. // Extension and BundleKey within the identifier are required. func (s Store) ReadBundle(identifier *proto.Identifier) (*proto.SettingsBundle, error) { - if len(identifier.Extension) < 1 || len(identifier.BundleKey) < 1 { - s.Logger.Error().Msg("extension and bundleKey cannot be empty") - return nil, gstatus.Error(codes.InvalidArgument, "Missing a required identifier attribute") - } - filePath := s.buildFilePathFromBundleArgs(identifier.Extension, identifier.BundleKey) record := proto.SettingsBundle{} if err := s.parseRecordFromFile(&record, filePath); err != nil { @@ -70,11 +63,6 @@ func (s Store) ReadBundle(identifier *proto.Identifier) (*proto.SettingsBundle, // WriteBundle writes the given record into a file within the mountPath // Extension and BundleKey within the record identifier are required. func (s Store) WriteBundle(record *proto.SettingsBundle) (*proto.SettingsBundle, error) { - if len(record.Identifier.Extension) < 1 || len(record.Identifier.BundleKey) < 1 { - s.Logger.Error().Msg("extension and bundleKey cannot be empty") - return nil, gstatus.Error(codes.InvalidArgument, "Missing a required identifier attribute") - } - filePath := s.buildFilePathFromBundle(record) if err := s.writeRecordToFile(record, filePath); err != nil { return nil, err diff --git a/pkg/store/filesystem/values.go b/pkg/store/filesystem/values.go index 1dc05e85b..d322ca0d1 100644 --- a/pkg/store/filesystem/values.go +++ b/pkg/store/filesystem/values.go @@ -14,11 +14,6 @@ import ( // ReadValue tries to find a value by the given identifier attributes within the mountPath // All identifier fields are required. func (s Store) ReadValue(identifier *proto.Identifier) (*proto.SettingsValue, error) { - if len(identifier.AccountUuid) < 1 || len(identifier.Extension) < 1 || len(identifier.BundleKey) < 1 || len(identifier.SettingKey) < 1 { - s.Logger.Error().Msg("account-uuid, extension, bundle and setting are required") - return nil, gstatus.Errorf(codes.InvalidArgument, "Missing a required identifier attribute") - } - filePath := s.buildFilePathFromValueArgs(identifier.AccountUuid, identifier.Extension, identifier.BundleKey) values, err := s.readValuesMapFromFile(filePath) if err != nil { @@ -34,11 +29,6 @@ func (s Store) ReadValue(identifier *proto.Identifier) (*proto.SettingsValue, er // WriteValue writes the given SettingsValue into a file within the mountPath // All identifier fields within the value are required. func (s Store) WriteValue(value *proto.SettingsValue) (*proto.SettingsValue, error) { - if len(value.Identifier.AccountUuid) < 1 || len(value.Identifier.Extension) < 1 || len(value.Identifier.BundleKey) < 1 || len(value.Identifier.SettingKey) < 1 { - s.Logger.Error().Msg("all identifier keys are required") - return nil, gstatus.Errorf(codes.InvalidArgument, "Missing a required identifier attribute") - } - filePath := s.buildFilePathFromValue(value) values, err := s.readValuesMapFromFile(filePath) if err != nil { @@ -54,11 +44,6 @@ func (s Store) WriteValue(value *proto.SettingsValue) (*proto.SettingsValue, err // ListValues reads all values within the scope of the given identifier // AccountUuid is required. func (s Store) ListValues(identifier *proto.Identifier) ([]*proto.SettingsValue, error) { - if len(identifier.AccountUuid) < 1 { - s.Logger.Error().Msg("account-uuid is required") - return nil, gstatus.Errorf(codes.InvalidArgument, "Missing a required identifier attribute") - } - accountFolderPath := path.Join(s.mountPath, folderNameValues, identifier.AccountUuid) var values []*proto.SettingsValue if _, err := os.Stat(accountFolderPath); err != nil {