From 265abfe1028412ee30d61ceaf79cbef7ca892d13 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sun, 3 Mar 2024 18:18:54 +0800 Subject: [PATCH] fix: handle error in storage.GetStorageProvider() --- deployment/deploy.go | 5 ++++- go.mod | 2 +- go.sum | 4 ++-- object/storage.go | 7 +++++-- storage/qiniu_cloud.go | 6 +++--- storage/storage.go | 20 ++++++++++---------- 6 files changed, 25 insertions(+), 19 deletions(-) diff --git a/deployment/deploy.go b/deployment/deploy.go index c0bac2dc..d4e5921b 100644 --- a/deployment/deploy.go +++ b/deployment/deploy.go @@ -27,7 +27,10 @@ import ( ) func deployStaticFiles(provider *object.Provider) { - storageProvider := storage.GetStorageProvider(provider.Type, provider.ClientId, provider.ClientSecret, provider.RegionId, provider.Bucket, provider.Endpoint) + storageProvider, err := storage.GetStorageProvider(provider.Type, provider.ClientId, provider.ClientSecret, provider.RegionId, provider.Bucket, provider.Endpoint) + if err != nil { + panic(err) + } if storageProvider == nil { panic(fmt.Sprintf("the provider type: %s is not supported", provider.Type)) } diff --git a/go.mod b/go.mod index 2b1c1913..93ba9560 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,7 @@ require ( github.com/casdoor/go-sms-sender v0.19.0 github.com/casdoor/gomail/v2 v2.0.1 github.com/casdoor/notify v0.45.0 - github.com/casdoor/oss v1.5.0 + github.com/casdoor/oss v1.6.0 github.com/casdoor/xorm-adapter/v3 v3.1.0 github.com/casvisor/casvisor-go-sdk v1.0.3 github.com/dchest/captcha v0.0.0-20200903113550-03f5f0333e1f diff --git a/go.sum b/go.sum index 34e4df8f..7a5316b0 100644 --- a/go.sum +++ b/go.sum @@ -1089,8 +1089,8 @@ github.com/casdoor/gomail/v2 v2.0.1 h1:J+FG6x80s9e5lBHUn8Sv0Y56mud34KiWih5YdmudR github.com/casdoor/gomail/v2 v2.0.1/go.mod h1:VnGPslEAtpix5FjHisR/WKB1qvZDBaujbikxDe9d+2Q= github.com/casdoor/notify v0.45.0 h1:OlaFvcQFjGOgA4mRx07M8AH1gvb5xNo21mcqrVGlLgk= github.com/casdoor/notify v0.45.0/go.mod h1:wNHQu0tiDROMBIvz0j3Om3Lhd5yZ+AIfnFb8MYb8OLQ= -github.com/casdoor/oss v1.5.0 h1:mi1htaXR5fynskDry1S3wk+Dd2nRY1z1pVcnGsqMqP4= -github.com/casdoor/oss v1.5.0/go.mod h1:rJAWA0hLhtu94t6IRpotLUkXO1NWMASirywQYaGizJE= +github.com/casdoor/oss v1.6.0 h1:IOWrGLJ+VO82qS796eaRnzFPPA1Sn3cotYTi7O/VIlQ= +github.com/casdoor/oss v1.6.0/go.mod h1:rJAWA0hLhtu94t6IRpotLUkXO1NWMASirywQYaGizJE= github.com/casdoor/xorm-adapter/v3 v3.1.0 h1:NodWayRtSLVSeCvL9H3Hc61k0G17KhV9IymTCNfh3kk= github.com/casdoor/xorm-adapter/v3 v3.1.0/go.mod h1:4WTcUw+bTgBylGHeGHzTtBvuTXRS23dtwzFLl9tsgFM= github.com/casvisor/casvisor-go-sdk v1.0.3 h1:TKJQWKnhtznEBhzLPEdNsp7nJK2GgdD8JsB0lFPMW7U= diff --git a/object/storage.go b/object/storage.go index bc860e3d..d6de74ca 100644 --- a/object/storage.go +++ b/object/storage.go @@ -109,14 +109,17 @@ func GetUploadFileUrl(provider *Provider, fullFilePath string, hasTimestamp bool func getStorageProvider(provider *Provider, lang string) (oss.StorageInterface, error) { endpoint := getProviderEndpoint(provider) - storageProvider := storage.GetStorageProvider(provider.Type, provider.ClientId, provider.ClientSecret, provider.RegionId, provider.Bucket, endpoint) + storageProvider, err := storage.GetStorageProvider(provider.Type, provider.ClientId, provider.ClientSecret, provider.RegionId, provider.Bucket, endpoint) + if err != nil { + return nil, err + } if storageProvider == nil { return nil, fmt.Errorf(i18n.Translate(lang, "storage:The provider type: %s is not supported"), provider.Type) } if provider.Domain == "" { provider.Domain = storageProvider.GetEndpoint() - _, err := UpdateProvider(provider.GetId(), provider) + _, err = UpdateProvider(provider.GetId(), provider) if err != nil { return nil, err } diff --git a/storage/qiniu_cloud.go b/storage/qiniu_cloud.go index b93144c3..34c5d3bc 100644 --- a/storage/qiniu_cloud.go +++ b/storage/qiniu_cloud.go @@ -19,8 +19,8 @@ import ( "github.com/casdoor/oss/qiniu" ) -func NewQiniuCloudKodoStorageProvider(clientId string, clientSecret string, region string, bucket string, endpoint string) oss.StorageInterface { - sp := qiniu.New(&qiniu.Config{ +func NewQiniuCloudKodoStorageProvider(clientId string, clientSecret string, region string, bucket string, endpoint string) (oss.StorageInterface, error) { + sp, err := qiniu.New(&qiniu.Config{ AccessID: clientId, AccessKey: clientSecret, Region: region, @@ -28,5 +28,5 @@ func NewQiniuCloudKodoStorageProvider(clientId string, clientSecret string, regi Endpoint: endpoint, }) - return sp + return sp, err } diff --git a/storage/storage.go b/storage/storage.go index 22a2afa2..bf0a09f4 100644 --- a/storage/storage.go +++ b/storage/storage.go @@ -16,27 +16,27 @@ package storage import "github.com/casdoor/oss" -func GetStorageProvider(providerType string, clientId string, clientSecret string, region string, bucket string, endpoint string) oss.StorageInterface { +func GetStorageProvider(providerType string, clientId string, clientSecret string, region string, bucket string, endpoint string) (oss.StorageInterface, error) { switch providerType { case "Local File System": - return NewLocalFileSystemStorageProvider() + return NewLocalFileSystemStorageProvider(), nil case "AWS S3": - return NewAwsS3StorageProvider(clientId, clientSecret, region, bucket, endpoint) + return NewAwsS3StorageProvider(clientId, clientSecret, region, bucket, endpoint), nil case "MinIO": - return NewMinIOS3StorageProvider(clientId, clientSecret, "_", bucket, endpoint) + return NewMinIOS3StorageProvider(clientId, clientSecret, "_", bucket, endpoint), nil case "Aliyun OSS": - return NewAliyunOssStorageProvider(clientId, clientSecret, region, bucket, endpoint) + return NewAliyunOssStorageProvider(clientId, clientSecret, region, bucket, endpoint), nil case "Tencent Cloud COS": - return NewTencentCloudCosStorageProvider(clientId, clientSecret, region, bucket, endpoint) + return NewTencentCloudCosStorageProvider(clientId, clientSecret, region, bucket, endpoint), nil case "Azure Blob": - return NewAzureBlobStorageProvider(clientId, clientSecret, region, bucket, endpoint) + return NewAzureBlobStorageProvider(clientId, clientSecret, region, bucket, endpoint), nil case "Qiniu Cloud Kodo": return NewQiniuCloudKodoStorageProvider(clientId, clientSecret, region, bucket, endpoint) case "Google Cloud Storage": - return NewGoogleCloudStorageProvider(clientSecret, bucket, endpoint) + return NewGoogleCloudStorageProvider(clientSecret, bucket, endpoint), nil case "Synology": - return NewSynologyNasStorageProvider(clientId, clientSecret, endpoint) + return NewSynologyNasStorageProvider(clientId, clientSecret, endpoint), nil } - return nil + return nil, nil }