0
Fork 0
mirror of https://github.com/project-zot/zot.git synced 2025-04-08 02:54:41 -05:00

More validation for DynamoDB cache driver cachetablename (#2949)

fix: More validation for DynamoDB cache driver cachetablename

Signed-off-by: Andrei Aaron <aaaron@luxoft.com>
This commit is contained in:
Andrei Aaron 2025-02-09 18:56:02 +02:00 committed by GitHub
parent d0ad93532f
commit e3c42a76c5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 46 additions and 5 deletions

View file

@ -225,6 +225,30 @@ func TestCreateCacheDatabaseDriver(t *testing.T) {
}
endpoint := os.Getenv("DYNAMODBMOCK_ENDPOINT")
// missing cachetablename key
conf.Storage.CacheDriver = map[string]interface{}{
"name": "dynamodb",
"endpoint": endpoint,
"region": "us-east-2",
}
driver, err := storage.CreateCacheDatabaseDriver(conf.Storage.StorageConfig, log)
So(err, ShouldNotBeNil)
So(driver, ShouldBeNil)
// invalid cachetablename type
conf.Storage.CacheDriver = map[string]interface{}{
"name": "dynamodb",
"endpoint": endpoint,
"region": "us-east-2",
"cachetablename": false,
}
driver, err = storage.CreateCacheDatabaseDriver(conf.Storage.StorageConfig, log)
So(err, ShouldNotBeNil)
So(driver, ShouldBeNil)
conf.Storage.CacheDriver = map[string]interface{}{
"name": "dynamodb",
"endpoint": endpoint,
@ -237,7 +261,7 @@ func TestCreateCacheDatabaseDriver(t *testing.T) {
"versiontablename": "Version",
}
driver, err := storage.CreateCacheDatabaseDriver(conf.Storage.StorageConfig, log)
driver, err = storage.CreateCacheDatabaseDriver(conf.Storage.StorageConfig, log)
So(err, ShouldBeNil)
So(driver, ShouldNotBeNil)

View file

@ -1,6 +1,8 @@
package storage
import (
"fmt"
zerr "zotregistry.dev/zot/errors"
"zotregistry.dev/zot/pkg/api/config"
rediscfg "zotregistry.dev/zot/pkg/api/config/redis"
@ -43,7 +45,12 @@ func CreateCacheDatabaseDriver(storageConfig config.StorageConfig, log zlog.Logg
if name == constants.DynamoDBDriverName {
// dynamodb
return Create(name, getDynamoParams(&storageConfig), log)
dynamoParams, err := getDynamoParams(&storageConfig)
if err != nil {
return nil, err
}
return Create(name, dynamoParams, log)
}
if name == constants.RedisDriverName {
@ -86,13 +93,23 @@ func getUseRelPaths(storageConfig *config.StorageConfig) bool {
return storageConfig.StorageDriver == nil
}
func getDynamoParams(storageConfig *config.StorageConfig) cache.DynamoDBDriverParameters {
func getDynamoParams(storageConfig *config.StorageConfig) (cache.DynamoDBDriverParameters, error) {
dynamoParams := cache.DynamoDBDriverParameters{}
dynamoParams.Endpoint, _ = storageConfig.CacheDriver["endpoint"].(string)
dynamoParams.Region, _ = storageConfig.CacheDriver["region"].(string)
dynamoParams.TableName, _ = storageConfig.CacheDriver["cachetablename"].(string)
return dynamoParams
cachetable, ok := storageConfig.CacheDriver["cachetablename"]
if !ok {
return dynamoParams, fmt.Errorf("%w: cachetablename key is mandatory for dynamodb cache driver", zerr.ErrBadConfig)
}
dynamoParams.TableName, ok = cachetable.(string)
if !ok {
return dynamoParams, fmt.Errorf("%w: failed to cast cachetablename %s to string type", zerr.ErrBadConfig, cachetable)
}
return dynamoParams, nil
}
func getRedisParams(storageConfig *config.StorageConfig, log zlog.Logger) (cache.RedisDriverParameters, error) {

View file

@ -65,7 +65,7 @@ func NewDynamoDBCache(parameters interface{}, log zlog.Logger) (*DynamoDBDriver,
properParameters, ok := parameters.(DynamoDBDriverParameters)
if !ok {
log.Error().Err(zerr.ErrTypeAssertionFailed).Msgf("failed to cast type, expected type '%T' but got '%T'",
BoltDBDriverParameters{}, parameters)
DynamoDBDriverParameters{}, parameters)
return nil, zerr.ErrTypeAssertionFailed
}