From 30fc4c28b708f84a5b4286e1de4c1f4a48d1c69f Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 10 May 2022 11:17:54 +0800 Subject: [PATCH 01/44] cache --- internal/api/third/minio_init.go | 1 + internal/cms_api/admin/admin.go | 2 +- pkg/common/db/model_struct.go | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/internal/api/third/minio_init.go b/internal/api/third/minio_init.go index e9aa7c1aa..e49651061 100644 --- a/internal/api/third/minio_init.go +++ b/internal/api/third/minio_init.go @@ -75,6 +75,7 @@ func MinioInit() { } // 自动化桶public的代码 err = MinioClient.SetBucketPolicy(context.Background(), config.Config.Credential.Minio.Bucket, policy.BucketPolicyReadWrite) + err = MinioClient.SetBucketPolicy(context.Background(), config.Config.Credential.Minio.AppBucket, policy.BucketPolicyReadWrite) if err != nil { log.NewDebug("", utils.GetSelfFuncName(), "SetBucketPolicy failed please set in web", err.Error()) return diff --git a/internal/cms_api/admin/admin.go b/internal/cms_api/admin/admin.go index eb5ccd156..524f1eeb2 100644 --- a/internal/cms_api/admin/admin.go +++ b/internal/cms_api/admin/admin.go @@ -69,7 +69,7 @@ func UploadUpdateApp(c *gin.Context) { c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "invalid file path" + err.Error()}) return } - log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "name: ", newFileName, newYamlName) + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "name: ", newFileName, newYamlName, fileObj, yamlObj, req.File.Size, req.Yaml.Size) // v2.0.9_app_linux v2.0.9_yaml_linux _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newFileName, fileObj, req.File.Size, minio.PutObjectOptions{}) _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newYamlName, yamlObj, req.Yaml.Size, minio.PutObjectOptions{}) diff --git a/pkg/common/db/model_struct.go b/pkg/common/db/model_struct.go index 6ed3f2dc1..eae008542 100644 --- a/pkg/common/db/model_struct.go +++ b/pkg/common/db/model_struct.go @@ -274,8 +274,8 @@ func (DepartmentMember) TableName() string { } type AppVersion struct { - Version string `gorm:"column:user_id;size:64"` - Type int `gorm:"column:user_id;primary_key"` + Version string `gorm:"column:version;size:64"` + Type int `gorm:"column:type;primary_key"` UpdateTime int `gorm:"column:update_time"` ForceUpdate bool `gorm:"column:force_update"` } From 8af500462fdd0b3a6597e6d1f01ddced4e0dbcf4 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 10 May 2022 11:22:10 +0800 Subject: [PATCH 02/44] update app --- internal/cms_api/admin/admin.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/internal/cms_api/admin/admin.go b/internal/cms_api/admin/admin.go index 524f1eeb2..a2f889097 100644 --- a/internal/cms_api/admin/admin.go +++ b/internal/cms_api/admin/admin.go @@ -11,6 +11,7 @@ import ( pbAdmin "Open_IM/pkg/proto/admin_cms" "Open_IM/pkg/utils" "context" + "fmt" "github.com/minio/minio-go/v7" "net/http" "strings" @@ -69,7 +70,7 @@ func UploadUpdateApp(c *gin.Context) { c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "invalid file path" + err.Error()}) return } - log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "name: ", newFileName, newYamlName, fileObj, yamlObj, req.File.Size, req.Yaml.Size) + fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", newFileName, newYamlName, fileObj, yamlObj, req.File.Size, req.Yaml.Size) // v2.0.9_app_linux v2.0.9_yaml_linux _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newFileName, fileObj, req.File.Size, minio.PutObjectOptions{}) _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newYamlName, yamlObj, req.Yaml.Size, minio.PutObjectOptions{}) From e27b98cdc1a7ac8d0a01cb137586c225ed938370 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 10 May 2022 11:40:40 +0800 Subject: [PATCH 03/44] update app --- internal/cms_api/admin/admin.go | 34 ++++++++++++++++++++++++++------- pkg/cms_api_struct/admin.go | 13 ++++++------- 2 files changed, 33 insertions(+), 14 deletions(-) diff --git a/internal/cms_api/admin/admin.go b/internal/cms_api/admin/admin.go index a2f889097..bc814bb9b 100644 --- a/internal/cms_api/admin/admin.go +++ b/internal/cms_api/admin/admin.go @@ -63,17 +63,37 @@ func UploadUpdateApp(c *gin.Context) { c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "invalid file type" + err.Error()}) return } - fileObj, err := req.File.Open() - yamlObj, err := req.Yaml.Open() + + file, err := c.FormFile("file") if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "Open file error", err.Error()) - c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "invalid file path" + err.Error()}) + log.NewError(req.OperationID, utils.GetSelfFuncName(), "missing file arg", err.Error()) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "missing file arg: " + err.Error()}) return } - fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", newFileName, newYamlName, fileObj, yamlObj, req.File.Size, req.Yaml.Size) + fileObj, err := file.Open() + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "Open file error", err.Error()) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "Open file error:" + err.Error()}) + return + } + + yaml, err := c.FormFile("yaml") + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "missing yaml arg", err.Error()) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "missing yaml arg: " + err.Error()}) + return + } + yamlObj, err := yaml.Open() + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "open yaml failed", err.Error()) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "Open file error:" + err.Error()}) + return + } + + //fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", newFileName, newYamlName, fileObj, yamlObj, file.Size, yaml.Size) // v2.0.9_app_linux v2.0.9_yaml_linux - _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newFileName, fileObj, req.File.Size, minio.PutObjectOptions{}) - _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newYamlName, yamlObj, req.Yaml.Size, minio.PutObjectOptions{}) + _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newFileName, fileObj, file.Size, minio.PutObjectOptions{}) + _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newYamlName, yamlObj, yaml.Size, minio.PutObjectOptions{}) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "open file error") c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "invalid file path" + err.Error()}) diff --git a/pkg/cms_api_struct/admin.go b/pkg/cms_api_struct/admin.go index e06a04324..f74d1fcf4 100644 --- a/pkg/cms_api_struct/admin.go +++ b/pkg/cms_api_struct/admin.go @@ -2,7 +2,6 @@ package cms_api_struct import ( apiStruct "Open_IM/pkg/base_info" - "mime/multipart" ) type AdminLoginRequest struct { @@ -15,12 +14,12 @@ type AdminLoginResponse struct { } type UploadUpdateAppReq struct { - OperationID string `form:"operationID" binding:"required"` - Type int `form:"type" binding:"required"` - Version string `form:"version" binding:"required"` - File multipart.FileHeader `form:"file" binding:"required"` - Yaml multipart.FileHeader `form:"yaml" binding:"required"` - ForceUpdate bool `form:"forceUpdate" binding:"required"` + OperationID string `form:"operationID" binding:"required"` + Type int `form:"type" binding:"required"` + Version string `form:"version" binding:"required"` + //File multipart.FileHeader `form:"file" binding:"required"` + //Yaml multipart.FileHeader `form:"yaml" binding:"required"` + ForceUpdate bool `form:"forceUpdate" binding:"required"` } type UploadUpdateAppResp struct { From b6a5501f71140aa8e6e1879f347775daad1a9740 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 10 May 2022 11:41:13 +0800 Subject: [PATCH 04/44] update app --- internal/cms_api/admin/admin.go | 1 - 1 file changed, 1 deletion(-) diff --git a/internal/cms_api/admin/admin.go b/internal/cms_api/admin/admin.go index bc814bb9b..73ad9436c 100644 --- a/internal/cms_api/admin/admin.go +++ b/internal/cms_api/admin/admin.go @@ -11,7 +11,6 @@ import ( pbAdmin "Open_IM/pkg/proto/admin_cms" "Open_IM/pkg/utils" "context" - "fmt" "github.com/minio/minio-go/v7" "net/http" "strings" From 2073bc77c88e463333299f6601c2c6a7a9ffcfb1 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Tue, 10 May 2022 11:48:10 +0800 Subject: [PATCH 05/44] add ParseToken --- pkg/base_info/auth_api_struct.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/base_info/auth_api_struct.go b/pkg/base_info/auth_api_struct.go index 54c0025ef..1f1bdc6ba 100644 --- a/pkg/base_info/auth_api_struct.go +++ b/pkg/base_info/auth_api_struct.go @@ -44,5 +44,5 @@ type ParseTokenReq struct { type ParseTokenResp struct { CommResp - ExpireTime int64 `json:"token" binding:"required"` + ExpireTime int64 `json:"expireTime" binding:"required"` } From 46f9a00b7555e76c2caa763a256533de6476dbff Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 10 May 2022 11:48:33 +0800 Subject: [PATCH 06/44] update app --- internal/cms_api/admin/admin.go | 33 +++++++-------------------------- pkg/cms_api_struct/admin.go | 13 +++++++------ 2 files changed, 14 insertions(+), 32 deletions(-) diff --git a/internal/cms_api/admin/admin.go b/internal/cms_api/admin/admin.go index 73ad9436c..a3c8c6aaf 100644 --- a/internal/cms_api/admin/admin.go +++ b/internal/cms_api/admin/admin.go @@ -62,37 +62,18 @@ func UploadUpdateApp(c *gin.Context) { c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "invalid file type" + err.Error()}) return } - - file, err := c.FormFile("file") - if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "missing file arg", err.Error()) - c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "missing file arg: " + err.Error()}) - return - } - fileObj, err := file.Open() + fileObj, err := req.File.Open() + yamlObj, err := req.Yaml.Open() if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "Open file error", err.Error()) - c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "Open file error:" + err.Error()}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "invalid file path" + err.Error()}) return } - - yaml, err := c.FormFile("yaml") - if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "missing yaml arg", err.Error()) - c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "missing yaml arg: " + err.Error()}) - return - } - yamlObj, err := yaml.Open() - if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "open yaml failed", err.Error()) - c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "Open file error:" + err.Error()}) - return - } - - //fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", newFileName, newYamlName, fileObj, yamlObj, file.Size, yaml.Size) + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "name: ", newFileName, newYamlName, fileObj, yamlObj, req.File.Size, req.Yaml.Size) // v2.0.9_app_linux v2.0.9_yaml_linux - _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newFileName, fileObj, file.Size, minio.PutObjectOptions{}) - _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newYamlName, yamlObj, yaml.Size, minio.PutObjectOptions{}) + _, newType := utils.GetNewFileNameAndContentType("", constant.OtherType) + _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newFileName, fileObj, req.File.Size, minio.PutObjectOptions{ContentType: newType}) + _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newYamlName, yamlObj, req.Yaml.Size, minio.PutObjectOptions{ContentType: newType}) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "open file error") c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "invalid file path" + err.Error()}) diff --git a/pkg/cms_api_struct/admin.go b/pkg/cms_api_struct/admin.go index f74d1fcf4..e06a04324 100644 --- a/pkg/cms_api_struct/admin.go +++ b/pkg/cms_api_struct/admin.go @@ -2,6 +2,7 @@ package cms_api_struct import ( apiStruct "Open_IM/pkg/base_info" + "mime/multipart" ) type AdminLoginRequest struct { @@ -14,12 +15,12 @@ type AdminLoginResponse struct { } type UploadUpdateAppReq struct { - OperationID string `form:"operationID" binding:"required"` - Type int `form:"type" binding:"required"` - Version string `form:"version" binding:"required"` - //File multipart.FileHeader `form:"file" binding:"required"` - //Yaml multipart.FileHeader `form:"yaml" binding:"required"` - ForceUpdate bool `form:"forceUpdate" binding:"required"` + OperationID string `form:"operationID" binding:"required"` + Type int `form:"type" binding:"required"` + Version string `form:"version" binding:"required"` + File multipart.FileHeader `form:"file" binding:"required"` + Yaml multipart.FileHeader `form:"yaml" binding:"required"` + ForceUpdate bool `form:"forceUpdate" binding:"required"` } type UploadUpdateAppResp struct { From 31bd106ffdfef51fea84ef988d7f11183cd35d15 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 10 May 2022 11:52:52 +0800 Subject: [PATCH 07/44] update app --- internal/cms_api/admin/admin.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/internal/cms_api/admin/admin.go b/internal/cms_api/admin/admin.go index a3c8c6aaf..56248f080 100644 --- a/internal/cms_api/admin/admin.go +++ b/internal/cms_api/admin/admin.go @@ -11,6 +11,7 @@ import ( pbAdmin "Open_IM/pkg/proto/admin_cms" "Open_IM/pkg/utils" "context" + "fmt" "github.com/minio/minio-go/v7" "net/http" "strings" @@ -69,7 +70,9 @@ func UploadUpdateApp(c *gin.Context) { c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "invalid file path" + err.Error()}) return } - log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "name: ", newFileName, newYamlName, fileObj, yamlObj, req.File.Size, req.Yaml.Size) + fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", config.Config.Credential.Minio.AppBucket, newFileName, fileObj, req.File.Size) + fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", config.Config.Credential.Minio.AppBucket, newYamlName, yamlObj, req.Yaml.Size) + // v2.0.9_app_linux v2.0.9_yaml_linux _, newType := utils.GetNewFileNameAndContentType("", constant.OtherType) _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newFileName, fileObj, req.File.Size, minio.PutObjectOptions{ContentType: newType}) From 2dab5e4a78efb25edb05a358d361fd5427f2e55d Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Tue, 10 May 2022 11:57:25 +0800 Subject: [PATCH 08/44] add ParseToken --- internal/api/auth/auth.go | 2 +- pkg/base_info/auth_api_struct.go | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/internal/api/auth/auth.go b/internal/api/auth/auth.go index c4e944acc..d27cbb684 100644 --- a/internal/api/auth/auth.go +++ b/internal/api/auth/auth.go @@ -118,7 +118,7 @@ func ParseToken(c *gin.Context) { return } - resp := api.ParseTokenResp{CommResp: api.CommResp{ErrCode: 0, ErrMsg: ""}, ExpireTime: expireTime} + resp := api.ParseTokenResp{CommResp: api.CommResp{ErrCode: 0, ErrMsg: ""}, ExpireTime: api.ExpireTime{ExpireTimeSeconds: expireTime}} log.NewInfo(params.OperationID, "ParseToken return ", resp) c.JSON(http.StatusOK, resp) } diff --git a/pkg/base_info/auth_api_struct.go b/pkg/base_info/auth_api_struct.go index 1f1bdc6ba..1735e74ea 100644 --- a/pkg/base_info/auth_api_struct.go +++ b/pkg/base_info/auth_api_struct.go @@ -42,7 +42,16 @@ type ParseTokenReq struct { OperationID string `json:"operationID" binding:"required"` } +//type ParseTokenResp struct { +// CommResp +// ExpireTime int64 `json:"expireTime" binding:"required"` +//} + +type ExpireTime struct { + ExpireTimeSeconds int64 `json:"expireTimeSeconds" ` +} + type ParseTokenResp struct { CommResp - ExpireTime int64 `json:"expireTime" binding:"required"` + ExpireTime ExpireTime `json:"expireTime"` } From d4608eec26bf90eac8523a63c3f21723047ef541 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 10 May 2022 12:05:02 +0800 Subject: [PATCH 09/44] update app --- pkg/utils/file.go | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/pkg/utils/file.go b/pkg/utils/file.go index c5db776d0..b852098b8 100644 --- a/pkg/utils/file.go +++ b/pkg/utils/file.go @@ -40,29 +40,29 @@ func GetNewFileNameAndContentType(fileName string, fileType int) (string, string } func GetUploadAppNewName(appType int, version string) (string, string, error) { - var newFileName, newYamlName = version + "_app_", version + "_yaml_" + var newFileName, newYamlName = "_" + version + "_app_", version + "_yaml" switch appType { case constant.IOSPlatformID: - newFileName += constant.IOSPlatformStr - newYamlName += constant.IOSPlatformStr + newFileName = constant.IOSPlatformStr + newFileName + newYamlName = constant.IOSPlatformStr + newYamlName case constant.AndroidPlatformID: - newFileName += constant.AndroidPlatformStr - newYamlName += constant.AndroidPlatformStr + newFileName = constant.AndroidPlatformStr + newFileName + newYamlName = constant.AndroidPlatformStr + newYamlName case constant.WindowsPlatformID: - newFileName += constant.WindowsPlatformStr - newYamlName += constant.WindowsPlatformStr + newFileName = constant.WindowsPlatformStr + newFileName + newYamlName = constant.WindowsPlatformStr + newYamlName case constant.OSXPlatformID: - newFileName += constant.OSXPlatformStr - newYamlName += constant.OSXPlatformStr + newFileName = constant.OSXPlatformStr + newFileName + newYamlName = constant.OSXPlatformStr + newYamlName case constant.WebPlatformID: - newFileName += constant.WebPlatformStr - newYamlName += constant.WebPlatformStr + newFileName = constant.WebPlatformStr + newFileName + newYamlName = constant.WebPlatformStr + newYamlName case constant.MiniWebPlatformID: - newFileName += constant.MiniWebPlatformStr - newYamlName += constant.MiniWebPlatformStr + newFileName = constant.MiniWebPlatformStr + newFileName + newYamlName = constant.MiniWebPlatformStr + newYamlName case constant.LinuxPlatformID: - newFileName += constant.LinuxPlatformStr - newYamlName += constant.LinuxPlatformStr + newFileName = constant.LinuxPlatformStr + newFileName + newYamlName = constant.LinuxPlatformStr + newYamlName default: return "", "", errors.New("invalid app type") } From c37d2e78d2b4cde9ea904a4c4e6b936318b28a5c Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Tue, 10 May 2022 12:07:09 +0800 Subject: [PATCH 10/44] add ParseToken --- internal/api/auth/auth.go | 2 +- pkg/base_info/auth_api_struct.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/api/auth/auth.go b/internal/api/auth/auth.go index d27cbb684..3f6d52831 100644 --- a/internal/api/auth/auth.go +++ b/internal/api/auth/auth.go @@ -118,7 +118,7 @@ func ParseToken(c *gin.Context) { return } - resp := api.ParseTokenResp{CommResp: api.CommResp{ErrCode: 0, ErrMsg: ""}, ExpireTime: api.ExpireTime{ExpireTimeSeconds: expireTime}} + resp := api.ParseTokenResp{CommResp: api.CommResp{ErrCode: 0, ErrMsg: ""}, ExpireTime: api.ExpireTime{ExpireTimeSeconds: uint32(expireTime)}} log.NewInfo(params.OperationID, "ParseToken return ", resp) c.JSON(http.StatusOK, resp) } diff --git a/pkg/base_info/auth_api_struct.go b/pkg/base_info/auth_api_struct.go index 1735e74ea..777072499 100644 --- a/pkg/base_info/auth_api_struct.go +++ b/pkg/base_info/auth_api_struct.go @@ -48,7 +48,7 @@ type ParseTokenReq struct { //} type ExpireTime struct { - ExpireTimeSeconds int64 `json:"expireTimeSeconds" ` + ExpireTimeSeconds uint32 `json:"expireTimeSeconds" ` } type ParseTokenResp struct { From 7ad555a41be8d3f6e254f2221412212023be97ac Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Tue, 10 May 2022 12:20:53 +0800 Subject: [PATCH 11/44] add ParseToken --- internal/api/auth/auth.go | 2 ++ pkg/base_info/auth_api_struct.go | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/internal/api/auth/auth.go b/internal/api/auth/auth.go index 3f6d52831..59ad579ca 100644 --- a/internal/api/auth/auth.go +++ b/internal/api/auth/auth.go @@ -10,6 +10,7 @@ import ( open_im_sdk "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "context" + "github.com/fatih/structs" "github.com/gin-gonic/gin" "net/http" "strings" @@ -119,6 +120,7 @@ func ParseToken(c *gin.Context) { } resp := api.ParseTokenResp{CommResp: api.CommResp{ErrCode: 0, ErrMsg: ""}, ExpireTime: api.ExpireTime{ExpireTimeSeconds: uint32(expireTime)}} + resp.Data = structs.Map(&resp.ExpireTime) log.NewInfo(params.OperationID, "ParseToken return ", resp) c.JSON(http.StatusOK, resp) } diff --git a/pkg/base_info/auth_api_struct.go b/pkg/base_info/auth_api_struct.go index 777072499..431a00c2c 100644 --- a/pkg/base_info/auth_api_struct.go +++ b/pkg/base_info/auth_api_struct.go @@ -53,5 +53,6 @@ type ExpireTime struct { type ParseTokenResp struct { CommResp - ExpireTime ExpireTime `json:"expireTime"` + Data map[string]interface{} `json:"data"` + ExpireTime ExpireTime `json:"-"` } From 7be5208daf6b4be60e6f48a3f8c7a34cc3661eda Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 10 May 2022 12:30:00 +0800 Subject: [PATCH 12/44] update app --- internal/cms_api/admin/admin.go | 20 +++++++++---------- pkg/common/db/model_struct.go | 2 ++ .../mysql_model/im_mysql_model/file_model.go | 4 +++- pkg/utils/file.go | 8 ++++++-- 4 files changed, 21 insertions(+), 13 deletions(-) diff --git a/internal/cms_api/admin/admin.go b/internal/cms_api/admin/admin.go index 56248f080..ec93d8346 100644 --- a/internal/cms_api/admin/admin.go +++ b/internal/cms_api/admin/admin.go @@ -57,7 +57,7 @@ func UploadUpdateApp(c *gin.Context) { return } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req) - newFileName, newYamlName, err := utils.GetUploadAppNewName(req.Type, req.Version) + newFileName, newYamlName, err := utils.GetUploadAppNewName(req.Type, req.Version, req.File.Filename, req.Yaml.Filename) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetUploadAppNewName failed", err.Error()) c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "invalid file type" + err.Error()}) @@ -82,7 +82,7 @@ func UploadUpdateApp(c *gin.Context) { c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "invalid file path" + err.Error()}) return } - if err := imdb.UpdateAppVersion(req.Type, req.Version, req.ForceUpdate); err != nil { + if err := imdb.UpdateAppVersion(req.Type, req.Version, req.ForceUpdate, newFileName, newYamlName); err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "UpdateAppVersion error", err.Error()) resp.ErrCode = http.StatusInternalServerError resp.ErrMsg = err.Error() @@ -107,12 +107,12 @@ func GetDownloadURL(c *gin.Context) { return } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req) - fileName, yamlName, err := utils.GetUploadAppNewName(req.Type, req.Version) - if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetUploadAppNewName failed", err.Error()) - c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "invalid file type" + err.Error()}) - return - } + //fileName, yamlName, err := utils.GetUploadAppNewName(req.Type, req.Version, req.) + //if err != nil { + // log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetUploadAppNewName failed", err.Error()) + // c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "invalid file type" + err.Error()}) + // return + //} app, err := imdb.GetNewestVersion(req.Type) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "getNewestVersion failed", err.Error()) @@ -124,8 +124,8 @@ func GetDownloadURL(c *gin.Context) { if app.ForceUpdate == true { resp.Data.ForceUpdate = true } - resp.Data.YamlURL = config.Config.Credential.Minio.Endpoint + "/" + config.Config.Credential.Minio.AppBucket + "/" + yamlName - resp.Data.FileURL = config.Config.Credential.Minio.Endpoint + "/" + config.Config.Credential.Minio.AppBucket + "/" + fileName + resp.Data.YamlURL = config.Config.Credential.Minio.Endpoint + "/" + config.Config.Credential.Minio.AppBucket + "/" + app.YamlName + resp.Data.FileURL = config.Config.Credential.Minio.Endpoint + "/" + config.Config.Credential.Minio.AppBucket + "/" + app.FileName c.JSON(http.StatusOK, resp) } else { resp.Data.HasNewVersion = false diff --git a/pkg/common/db/model_struct.go b/pkg/common/db/model_struct.go index eae008542..6eb18630d 100644 --- a/pkg/common/db/model_struct.go +++ b/pkg/common/db/model_struct.go @@ -278,6 +278,8 @@ type AppVersion struct { Type int `gorm:"column:type;primary_key"` UpdateTime int `gorm:"column:update_time"` ForceUpdate bool `gorm:"column:force_update"` + FileName string `gorm:"column:file_name"` + YamlName string `gorm:"column:yaml_name"` } func (AppVersion) TableName() string { diff --git a/pkg/common/db/mysql_model/im_mysql_model/file_model.go b/pkg/common/db/mysql_model/im_mysql_model/file_model.go index 8265ee9de..7d6144633 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/file_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/file_model.go @@ -5,7 +5,7 @@ import ( "time" ) -func UpdateAppVersion(appType int, version string, forceUpdate bool) error { +func UpdateAppVersion(appType int, version string, forceUpdate bool, fileName, yamlName string) error { dbConn, err := db.DB.MysqlDB.DefaultGormDB() if err != nil { return err @@ -15,6 +15,8 @@ func UpdateAppVersion(appType int, version string, forceUpdate bool) error { Type: appType, UpdateTime: int(time.Now().Unix()), ForceUpdate: forceUpdate, + FileName: fileName, + YamlName: yamlName, } result := dbConn.Model(db.AppVersion{}).Where("app_type = ?", appType).Updates(&app) if result.Error != nil { diff --git a/pkg/utils/file.go b/pkg/utils/file.go index b852098b8..d09b105ef 100644 --- a/pkg/utils/file.go +++ b/pkg/utils/file.go @@ -39,8 +39,8 @@ func GetNewFileNameAndContentType(fileName string, fileType int) (string, string return newName, contentType } -func GetUploadAppNewName(appType int, version string) (string, string, error) { - var newFileName, newYamlName = "_" + version + "_app_", version + "_yaml" +func GetUploadAppNewName(appType int, version, fileName, yamlName string) (string, string, error) { + var newFileName, newYamlName = "_" + version + "_app", "_" + version + "_yaml" switch appType { case constant.IOSPlatformID: newFileName = constant.IOSPlatformStr + newFileName @@ -66,5 +66,9 @@ func GetUploadAppNewName(appType int, version string) (string, string, error) { default: return "", "", errors.New("invalid app type") } + suffixFile := path.Ext(fileName) + suffixYaml := path.Ext(yamlName) + newFileName = fmt.Sprintf("%s.%s", newFileName, suffixFile) + newYamlName = fmt.Sprintf("%s.%s", newYamlName, suffixYaml) return newFileName, newYamlName, nil } From 1efa654e7d94c042ea907142000744c715116c8a Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 10 May 2022 13:06:13 +0800 Subject: [PATCH 13/44] update app --- pkg/utils/file.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/utils/file.go b/pkg/utils/file.go index d09b105ef..94a30917b 100644 --- a/pkg/utils/file.go +++ b/pkg/utils/file.go @@ -68,7 +68,7 @@ func GetUploadAppNewName(appType int, version, fileName, yamlName string) (strin } suffixFile := path.Ext(fileName) suffixYaml := path.Ext(yamlName) - newFileName = fmt.Sprintf("%s.%s", newFileName, suffixFile) - newYamlName = fmt.Sprintf("%s.%s", newYamlName, suffixYaml) + newFileName = fmt.Sprintf("%s%s", newFileName, suffixFile) + newYamlName = fmt.Sprintf("%s%s", newYamlName, suffixYaml) return newFileName, newYamlName, nil } From e412abd0178106b8ebc4bfcf8e3a6666f5375e79 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 10 May 2022 14:07:44 +0800 Subject: [PATCH 14/44] update app --- internal/cms_api/admin/admin.go | 24 +++++++++++++++++------- pkg/cms_api_struct/admin.go | 12 ++++++------ 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/internal/cms_api/admin/admin.go b/internal/cms_api/admin/admin.go index ec93d8346..7e5226121 100644 --- a/internal/cms_api/admin/admin.go +++ b/internal/cms_api/admin/admin.go @@ -14,6 +14,7 @@ import ( "fmt" "github.com/minio/minio-go/v7" "net/http" + "path" "strings" "Open_IM/internal/api/third" @@ -64,22 +65,31 @@ func UploadUpdateApp(c *gin.Context) { return } fileObj, err := req.File.Open() - yamlObj, err := req.Yaml.Open() if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "Open file error", err.Error()) - c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "invalid file path" + err.Error()}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "Open file error" + err.Error()}) + return + } + yamlObj, err := req.Yaml.Open() + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "Open Yaml error", err.Error()) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "Open Yaml error" + err.Error()}) return } fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", config.Config.Credential.Minio.AppBucket, newFileName, fileObj, req.File.Size) fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", config.Config.Credential.Minio.AppBucket, newYamlName, yamlObj, req.Yaml.Size) // v2.0.9_app_linux v2.0.9_yaml_linux - _, newType := utils.GetNewFileNameAndContentType("", constant.OtherType) - _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newFileName, fileObj, req.File.Size, minio.PutObjectOptions{ContentType: newType}) - _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newYamlName, yamlObj, req.Yaml.Size, minio.PutObjectOptions{ContentType: newType}) + _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newFileName, fileObj, req.File.Size, minio.PutObjectOptions{ContentType: path.Ext(newFileName)}) if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "open file error") - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "invalid file path" + err.Error()}) + log.NewError(req.OperationID, utils.GetSelfFuncName(), "PutObject file error") + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "PutObject file error" + err.Error()}) + return + } + _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newYamlName, yamlObj, req.Yaml.Size, minio.PutObjectOptions{ContentType: path.Ext(newYamlName)}) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "PutObject yaml error") + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "PutObject yaml error" + err.Error()}) return } if err := imdb.UpdateAppVersion(req.Type, req.Version, req.ForceUpdate, newFileName, newYamlName); err != nil { diff --git a/pkg/cms_api_struct/admin.go b/pkg/cms_api_struct/admin.go index e06a04324..72df69529 100644 --- a/pkg/cms_api_struct/admin.go +++ b/pkg/cms_api_struct/admin.go @@ -15,12 +15,12 @@ type AdminLoginResponse struct { } type UploadUpdateAppReq struct { - OperationID string `form:"operationID" binding:"required"` - Type int `form:"type" binding:"required"` - Version string `form:"version" binding:"required"` - File multipart.FileHeader `form:"file" binding:"required"` - Yaml multipart.FileHeader `form:"yaml" binding:"required"` - ForceUpdate bool `form:"forceUpdate" binding:"required"` + OperationID string `form:"operationID" binding:"required"` + Type int `form:"type" binding:"required"` + Version string `form:"version" binding:"required"` + File *multipart.FileHeader `form:"file" binding:"required"` + Yaml *multipart.FileHeader `form:"yaml" binding:"required"` + ForceUpdate bool `form:"forceUpdate" binding:"required"` } type UploadUpdateAppResp struct { From f85645a78a456b4f62fafbd3e84ac28edba2bf72 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 10 May 2022 14:17:31 +0800 Subject: [PATCH 15/44] update app --- internal/cms_api/admin/admin.go | 41 +++++++++++++++++++++++++++------ pkg/cms_api_struct/admin.go | 13 +++++------ 2 files changed, 40 insertions(+), 14 deletions(-) diff --git a/internal/cms_api/admin/admin.go b/internal/cms_api/admin/admin.go index 7e5226121..244f8a377 100644 --- a/internal/cms_api/admin/admin.go +++ b/internal/cms_api/admin/admin.go @@ -53,7 +53,7 @@ func UploadUpdateApp(c *gin.Context) { resp apiStruct.UploadUpdateAppResp ) if err := c.Bind(&req); err != nil { - log.NewError("0", utils.GetSelfFuncName(), "BindJSON failed ", err.Error()) + log.NewError(req.OperationID, utils.GetSelfFuncName(), "BindJSON failed ", err.Error()) c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) return } @@ -64,22 +64,49 @@ func UploadUpdateApp(c *gin.Context) { c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "invalid file type" + err.Error()}) return } - fileObj, err := req.File.Open() + //fileObj, err := req.File.Open() + //if err != nil { + // log.NewError(req.OperationID, utils.GetSelfFuncName(), "Open file error", err.Error()) + // c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "Open file error" + err.Error()}) + // return + //} + //yamlObj, err := req.Yaml.Open() + //if err != nil { + // log.NewError(req.OperationID, utils.GetSelfFuncName(), "Open Yaml error", err.Error()) + // c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "Open Yaml error" + err.Error()}) + // return + //} + + // v2.0.9_app_linux v2.0.9_yaml_linux + file, err := c.FormFile("file") + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "FormFile failed", err.Error()) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "missing file arg: " + err.Error()}) + return + } + fileObj, err := file.Open() if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "Open file error", err.Error()) - c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "Open file error" + err.Error()}) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "invalid file path" + err.Error()}) return } - yamlObj, err := req.Yaml.Open() + + yaml, err := c.FormFile("yaml") if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "Open Yaml error", err.Error()) - c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "Open Yaml error" + err.Error()}) + log.NewError(req.OperationID, utils.GetSelfFuncName(), "FormFile failed", err.Error()) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "missing file arg: " + err.Error()}) return } + yamlObj, err := yaml.Open() + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "Open file error", err.Error()) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "invalid file path" + err.Error()}) + return + } + fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", config.Config.Credential.Minio.AppBucket, newFileName, fileObj, req.File.Size) fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", config.Config.Credential.Minio.AppBucket, newYamlName, yamlObj, req.Yaml.Size) - // v2.0.9_app_linux v2.0.9_yaml_linux _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newFileName, fileObj, req.File.Size, minio.PutObjectOptions{ContentType: path.Ext(newFileName)}) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "PutObject file error") diff --git a/pkg/cms_api_struct/admin.go b/pkg/cms_api_struct/admin.go index 72df69529..02463f6e5 100644 --- a/pkg/cms_api_struct/admin.go +++ b/pkg/cms_api_struct/admin.go @@ -2,7 +2,6 @@ package cms_api_struct import ( apiStruct "Open_IM/pkg/base_info" - "mime/multipart" ) type AdminLoginRequest struct { @@ -15,12 +14,12 @@ type AdminLoginResponse struct { } type UploadUpdateAppReq struct { - OperationID string `form:"operationID" binding:"required"` - Type int `form:"type" binding:"required"` - Version string `form:"version" binding:"required"` - File *multipart.FileHeader `form:"file" binding:"required"` - Yaml *multipart.FileHeader `form:"yaml" binding:"required"` - ForceUpdate bool `form:"forceUpdate" binding:"required"` + OperationID string `form:"operationID" binding:"required"` + Type int `form:"type" binding:"required"` + Version string `form:"version" binding:"required"` + //File *multipart.FileHeader `form:"file" binding:"required"` + //Yaml *multipart.FileHeader `form:"yaml" binding:"required"` + ForceUpdate bool `form:"forceUpdate" binding:"required"` } type UploadUpdateAppResp struct { From ed3e299e0b353be72b7fde4390904c2bde7168aa Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 10 May 2022 14:18:36 +0800 Subject: [PATCH 16/44] update app --- internal/cms_api/admin/admin.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/internal/cms_api/admin/admin.go b/internal/cms_api/admin/admin.go index 244f8a377..7cf205ae9 100644 --- a/internal/cms_api/admin/admin.go +++ b/internal/cms_api/admin/admin.go @@ -104,16 +104,16 @@ func UploadUpdateApp(c *gin.Context) { return } - fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", config.Config.Credential.Minio.AppBucket, newFileName, fileObj, req.File.Size) - fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", config.Config.Credential.Minio.AppBucket, newYamlName, yamlObj, req.Yaml.Size) + fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", config.Config.Credential.Minio.AppBucket, newFileName, fileObj, file.Size) + fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", config.Config.Credential.Minio.AppBucket, newYamlName, yamlObj, yaml.Size) - _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newFileName, fileObj, req.File.Size, minio.PutObjectOptions{ContentType: path.Ext(newFileName)}) + _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newFileName, fileObj, file.Size, minio.PutObjectOptions{ContentType: path.Ext(newFileName)}) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "PutObject file error") c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "PutObject file error" + err.Error()}) return } - _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newYamlName, yamlObj, req.Yaml.Size, minio.PutObjectOptions{ContentType: path.Ext(newYamlName)}) + _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newYamlName, yamlObj, file.Size, minio.PutObjectOptions{ContentType: path.Ext(newYamlName)}) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "PutObject yaml error") c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "PutObject yaml error" + err.Error()}) From 1338cf875a25c81697585cd0d1ffdd9fb51e5dfb Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 10 May 2022 14:20:15 +0800 Subject: [PATCH 17/44] update app --- internal/cms_api/admin/admin.go | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/internal/cms_api/admin/admin.go b/internal/cms_api/admin/admin.go index 7cf205ae9..b88680abe 100644 --- a/internal/cms_api/admin/admin.go +++ b/internal/cms_api/admin/admin.go @@ -58,12 +58,7 @@ func UploadUpdateApp(c *gin.Context) { return } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req) - newFileName, newYamlName, err := utils.GetUploadAppNewName(req.Type, req.Version, req.File.Filename, req.Yaml.Filename) - if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetUploadAppNewName failed", err.Error()) - c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "invalid file type" + err.Error()}) - return - } + //fileObj, err := req.File.Open() //if err != nil { // log.NewError(req.OperationID, utils.GetSelfFuncName(), "Open file error", err.Error()) @@ -103,6 +98,12 @@ func UploadUpdateApp(c *gin.Context) { c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "invalid file path" + err.Error()}) return } + newFileName, newYamlName, err := utils.GetUploadAppNewName(req.Type, req.Version, file.Filename, yaml.Filename) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetUploadAppNewName failed", err.Error()) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "invalid file type" + err.Error()}) + return + } fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", config.Config.Credential.Minio.AppBucket, newFileName, fileObj, file.Size) fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", config.Config.Credential.Minio.AppBucket, newYamlName, yamlObj, yaml.Size) From dcf119ae59ce3e73f31f8c54c318f1117c271aa2 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 10 May 2022 14:38:43 +0800 Subject: [PATCH 18/44] update app --- internal/cms_api/admin/admin.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/cms_api/admin/admin.go b/internal/cms_api/admin/admin.go index b88680abe..b407a0b39 100644 --- a/internal/cms_api/admin/admin.go +++ b/internal/cms_api/admin/admin.go @@ -114,7 +114,7 @@ func UploadUpdateApp(c *gin.Context) { c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "PutObject file error" + err.Error()}) return } - _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newYamlName, yamlObj, file.Size, minio.PutObjectOptions{ContentType: path.Ext(newYamlName)}) + _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newYamlName, yamlObj, yaml.Size, minio.PutObjectOptions{ContentType: path.Ext(newYamlName)}) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "PutObject yaml error") c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "PutObject yaml error" + err.Error()}) From ff37d1cb0271f0a3019499b793eff496522a2a54 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 10 May 2022 14:57:54 +0800 Subject: [PATCH 19/44] update app --- internal/cms_api/admin/admin.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/cms_api/admin/admin.go b/internal/cms_api/admin/admin.go index b407a0b39..5261c55f8 100644 --- a/internal/cms_api/admin/admin.go +++ b/internal/cms_api/admin/admin.go @@ -108,13 +108,13 @@ func UploadUpdateApp(c *gin.Context) { fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", config.Config.Credential.Minio.AppBucket, newFileName, fileObj, file.Size) fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", config.Config.Credential.Minio.AppBucket, newYamlName, yamlObj, yaml.Size) - _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newFileName, fileObj, file.Size, minio.PutObjectOptions{ContentType: path.Ext(newFileName)}) + _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.Bucket, newFileName, fileObj, file.Size, minio.PutObjectOptions{ContentType: path.Ext(newFileName)}) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "PutObject file error") c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "PutObject file error" + err.Error()}) return } - _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newYamlName, yamlObj, yaml.Size, minio.PutObjectOptions{ContentType: path.Ext(newYamlName)}) + _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.Bucket, newYamlName, yamlObj, yaml.Size, minio.PutObjectOptions{ContentType: path.Ext(newYamlName)}) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "PutObject yaml error") c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "PutObject yaml error" + err.Error()}) From d58e34ed3dbdd8e9b23597a2e97a7badc44138d0 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 10 May 2022 15:07:07 +0800 Subject: [PATCH 20/44] update app --- internal/cms_api/admin/admin.go | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/internal/cms_api/admin/admin.go b/internal/cms_api/admin/admin.go index 5261c55f8..1c5754008 100644 --- a/internal/cms_api/admin/admin.go +++ b/internal/cms_api/admin/admin.go @@ -14,7 +14,6 @@ import ( "fmt" "github.com/minio/minio-go/v7" "net/http" - "path" "strings" "Open_IM/internal/api/third" @@ -73,7 +72,7 @@ func UploadUpdateApp(c *gin.Context) { //} // v2.0.9_app_linux v2.0.9_yaml_linux - file, err := c.FormFile("file") + file, err := c.FormFile("app") if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "FormFile failed", err.Error()) c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "missing file arg: " + err.Error()}) @@ -108,13 +107,13 @@ func UploadUpdateApp(c *gin.Context) { fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", config.Config.Credential.Minio.AppBucket, newFileName, fileObj, file.Size) fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", config.Config.Credential.Minio.AppBucket, newYamlName, yamlObj, yaml.Size) - _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.Bucket, newFileName, fileObj, file.Size, minio.PutObjectOptions{ContentType: path.Ext(newFileName)}) + _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newFileName, fileObj, file.Size, minio.PutObjectOptions{}) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "PutObject file error") c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "PutObject file error" + err.Error()}) return } - _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.Bucket, newYamlName, yamlObj, yaml.Size, minio.PutObjectOptions{ContentType: path.Ext(newYamlName)}) + _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newYamlName, yamlObj, yaml.Size, minio.PutObjectOptions{}) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "PutObject yaml error") c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "PutObject yaml error" + err.Error()}) From 6c821dc42a89ad25d44618c2c89d8838627c8593 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 10 May 2022 15:16:20 +0800 Subject: [PATCH 21/44] update app --- internal/api/third/minio_storage_credential.go | 2 +- internal/cms_api/admin/admin.go | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/internal/api/third/minio_storage_credential.go b/internal/api/third/minio_storage_credential.go index d6552518a..40ae13c4a 100644 --- a/internal/api/third/minio_storage_credential.go +++ b/internal/api/third/minio_storage_credential.go @@ -83,7 +83,7 @@ func MinioUploadFile(c *gin.Context) { return } newName, newType := utils.GetNewFileNameAndContentType(file.Filename, req.FileType) - log.Debug(req.OperationID, utils.GetSelfFuncName(), newName, newType) + log.Debug(req.OperationID, utils.GetSelfFuncName(), config.Config.Credential.Minio.Bucket, newName, fileObj, file.Size, newType) _, err = MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.Bucket, newName, fileObj, file.Size, minio.PutObjectOptions{ContentType: newType}) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "upload file error") diff --git a/internal/cms_api/admin/admin.go b/internal/cms_api/admin/admin.go index 1c5754008..2f9d9e35c 100644 --- a/internal/cms_api/admin/admin.go +++ b/internal/cms_api/admin/admin.go @@ -14,6 +14,7 @@ import ( "fmt" "github.com/minio/minio-go/v7" "net/http" + "path" "strings" "Open_IM/internal/api/third" @@ -107,13 +108,13 @@ func UploadUpdateApp(c *gin.Context) { fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", config.Config.Credential.Minio.AppBucket, newFileName, fileObj, file.Size) fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", config.Config.Credential.Minio.AppBucket, newYamlName, yamlObj, yaml.Size) - _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newFileName, fileObj, file.Size, minio.PutObjectOptions{}) + _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newFileName, fileObj, file.Size, minio.PutObjectOptions{ContentType: path.Ext(newFileName)}) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "PutObject file error") c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "PutObject file error" + err.Error()}) return } - _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newYamlName, yamlObj, yaml.Size, minio.PutObjectOptions{}) + _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newYamlName, yamlObj, yaml.Size, minio.PutObjectOptions{ContentType: path.Ext(newYamlName)}) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "PutObject yaml error") c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "PutObject yaml error" + err.Error()}) From d9a4fa3f49eb7909bb4403c88f4bf56d89eeff3f Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 10 May 2022 15:21:51 +0800 Subject: [PATCH 22/44] update app --- internal/cms_api/admin/admin.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/cms_api/admin/admin.go b/internal/cms_api/admin/admin.go index 2f9d9e35c..0a6be311e 100644 --- a/internal/cms_api/admin/admin.go +++ b/internal/cms_api/admin/admin.go @@ -105,8 +105,8 @@ func UploadUpdateApp(c *gin.Context) { return } - fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", config.Config.Credential.Minio.AppBucket, newFileName, fileObj, file.Size) - fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", config.Config.Credential.Minio.AppBucket, newYamlName, yamlObj, yaml.Size) + fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", config.Config.Credential.Minio.AppBucket, "app.apk", fileObj, file.Size) + fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", config.Config.Credential.Minio.AppBucket, "test.yaml", yamlObj, yaml.Size) _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newFileName, fileObj, file.Size, minio.PutObjectOptions{ContentType: path.Ext(newFileName)}) if err != nil { From 9fcc41aeff88ce6d15e638fdd0c5a8076904ef22 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 10 May 2022 15:34:00 +0800 Subject: [PATCH 23/44] update app --- internal/cms_api/admin/admin.go | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/internal/cms_api/admin/admin.go b/internal/cms_api/admin/admin.go index 0a6be311e..d79b37a8c 100644 --- a/internal/cms_api/admin/admin.go +++ b/internal/cms_api/admin/admin.go @@ -13,12 +13,14 @@ import ( "context" "fmt" "github.com/minio/minio-go/v7" + "github.com/minio/minio-go/v7/pkg/credentials" "net/http" "path" "strings" "Open_IM/internal/api/third" "github.com/gin-gonic/gin" + url2 "net/url" ) // register @@ -105,10 +107,32 @@ func UploadUpdateApp(c *gin.Context) { return } - fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", config.Config.Credential.Minio.AppBucket, "app.apk", fileObj, file.Size) - fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", config.Config.Credential.Minio.AppBucket, "test.yaml", yamlObj, yaml.Size) + fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", config.Config.Credential.Minio.AppBucket, newFileName, fileObj, file.Size) + fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", config.Config.Credential.Minio.AppBucket, newYamlName, yamlObj, yaml.Size) - _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newFileName, fileObj, file.Size, minio.PutObjectOptions{ContentType: path.Ext(newFileName)}) + var initUrl string + if config.Config.Credential.Minio.EndpointInnerEnable { + initUrl = config.Config.Credential.Minio.EndpointInner + } else { + initUrl = config.Config.Credential.Minio.Endpoint + } + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "use initUrl: ", initUrl) + minioUrl, err := url2.Parse(initUrl) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "parse failed, please check config/config.yaml", err.Error()) + return + } + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "Parse ok ", config.Config.Credential.Minio) + MinioClient, err := minio.New(minioUrl.Host, &minio.Options{ + Creds: credentials.NewStaticV4(config.Config.Credential.Minio.AccessKeyID, config.Config.Credential.Minio.SecretAccessKey, ""), + Secure: false, + }) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "init minio client failed", err.Error()) + return + } + + _, err = MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newFileName, fileObj, file.Size, minio.PutObjectOptions{ContentType: path.Ext(newFileName)}) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "PutObject file error") c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "PutObject file error" + err.Error()}) From ccfa48749314e3eb19a783728201abc56b817a68 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 10 May 2022 15:41:59 +0800 Subject: [PATCH 24/44] update app --- internal/cms_api/admin/admin.go | 29 +++-------------------------- 1 file changed, 3 insertions(+), 26 deletions(-) diff --git a/internal/cms_api/admin/admin.go b/internal/cms_api/admin/admin.go index d79b37a8c..067abf2d2 100644 --- a/internal/cms_api/admin/admin.go +++ b/internal/cms_api/admin/admin.go @@ -13,14 +13,12 @@ import ( "context" "fmt" "github.com/minio/minio-go/v7" - "github.com/minio/minio-go/v7/pkg/credentials" "net/http" "path" "strings" "Open_IM/internal/api/third" "github.com/gin-gonic/gin" - url2 "net/url" ) // register @@ -75,7 +73,7 @@ func UploadUpdateApp(c *gin.Context) { //} // v2.0.9_app_linux v2.0.9_yaml_linux - file, err := c.FormFile("app") + file, err := c.FormFile("file") if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "FormFile failed", err.Error()) c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "missing file arg: " + err.Error()}) @@ -106,33 +104,12 @@ func UploadUpdateApp(c *gin.Context) { c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "invalid file type" + err.Error()}) return } + fmt.Println(apiThird.MinioClient.EndpointURL()) fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", config.Config.Credential.Minio.AppBucket, newFileName, fileObj, file.Size) fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", config.Config.Credential.Minio.AppBucket, newYamlName, yamlObj, yaml.Size) - var initUrl string - if config.Config.Credential.Minio.EndpointInnerEnable { - initUrl = config.Config.Credential.Minio.EndpointInner - } else { - initUrl = config.Config.Credential.Minio.Endpoint - } - log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "use initUrl: ", initUrl) - minioUrl, err := url2.Parse(initUrl) - if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "parse failed, please check config/config.yaml", err.Error()) - return - } - log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "Parse ok ", config.Config.Credential.Minio) - MinioClient, err := minio.New(minioUrl.Host, &minio.Options{ - Creds: credentials.NewStaticV4(config.Config.Credential.Minio.AccessKeyID, config.Config.Credential.Minio.SecretAccessKey, ""), - Secure: false, - }) - if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "init minio client failed", err.Error()) - return - } - - _, err = MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newFileName, fileObj, file.Size, minio.PutObjectOptions{ContentType: path.Ext(newFileName)}) + _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newFileName, fileObj, file.Size, minio.PutObjectOptions{ContentType: path.Ext(newFileName)}) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "PutObject file error") c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "PutObject file error" + err.Error()}) From 59aa71b3b85b5beb4584c073ecb6a9643bfbf2b0 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 10 May 2022 15:58:29 +0800 Subject: [PATCH 25/44] update app --- internal/cms_api/admin/admin.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/internal/cms_api/admin/admin.go b/internal/cms_api/admin/admin.go index 067abf2d2..9886ba1dc 100644 --- a/internal/cms_api/admin/admin.go +++ b/internal/cms_api/admin/admin.go @@ -13,6 +13,7 @@ import ( "context" "fmt" "github.com/minio/minio-go/v7" + "github.com/minio/minio-go/v7/pkg/credentials" "net/http" "path" "strings" @@ -108,8 +109,12 @@ func UploadUpdateApp(c *gin.Context) { fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", config.Config.Credential.Minio.AppBucket, newFileName, fileObj, file.Size) fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", config.Config.Credential.Minio.AppBucket, newYamlName, yamlObj, yaml.Size) + minioClient, err := minio.New(config.Config.Credential.Minio.EndpointInner, &minio.Options{ + Creds: credentials.NewStaticV4(config.Config.Credential.Minio.AccessKeyID, config.Config.Credential.Minio.SecretAccessKey, ""), + Secure: false, + }) - _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newFileName, fileObj, file.Size, minio.PutObjectOptions{ContentType: path.Ext(newFileName)}) + _, err = minioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newFileName, fileObj, file.Size, minio.PutObjectOptions{ContentType: path.Ext(newFileName)}) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "PutObject file error") c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "PutObject file error" + err.Error()}) From db6acacf2ed4d3783467ff43798b57638da064a7 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 10 May 2022 16:02:05 +0800 Subject: [PATCH 26/44] update app --- internal/cms_api/admin/admin.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/cms_api/admin/admin.go b/internal/cms_api/admin/admin.go index 9886ba1dc..f079194f1 100644 --- a/internal/cms_api/admin/admin.go +++ b/internal/cms_api/admin/admin.go @@ -105,7 +105,6 @@ func UploadUpdateApp(c *gin.Context) { c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "invalid file type" + err.Error()}) return } - fmt.Println(apiThird.MinioClient.EndpointURL()) fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", config.Config.Credential.Minio.AppBucket, newFileName, fileObj, file.Size) fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", config.Config.Credential.Minio.AppBucket, newYamlName, yamlObj, yaml.Size) @@ -113,6 +112,7 @@ func UploadUpdateApp(c *gin.Context) { Creds: credentials.NewStaticV4(config.Config.Credential.Minio.AccessKeyID, config.Config.Credential.Minio.SecretAccessKey, ""), Secure: false, }) + fmt.Println(apiThird.MinioClient.EndpointURL()) _, err = minioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newFileName, fileObj, file.Size, minio.PutObjectOptions{ContentType: path.Ext(newFileName)}) if err != nil { From 4ea8cb5903652dcb6ef85929c74375ae57ef1082 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 10 May 2022 16:04:26 +0800 Subject: [PATCH 27/44] update app --- internal/api/third/minio_init.go | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/internal/api/third/minio_init.go b/internal/api/third/minio_init.go index e49651061..a93ad9bb7 100644 --- a/internal/api/third/minio_init.go +++ b/internal/api/third/minio_init.go @@ -7,7 +7,6 @@ import ( "context" "github.com/minio/minio-go/v7" "github.com/minio/minio-go/v7/pkg/credentials" - "github.com/minio/minio-go/v7/pkg/policy" url2 "net/url" ) @@ -30,11 +29,16 @@ func MinioInit() { log.NewError(operationID, utils.GetSelfFuncName(), "parse failed, please check config/config.yaml", err.Error()) return } + opts := &minio.Options{ + Creds: credentials.NewStaticV4(config.Config.Credential.Minio.AccessKeyID, config.Config.Credential.Minio.SecretAccessKey, ""), + } + if minioUrl.Scheme == "http" { + opts.Secure = false + } else if minioUrl.Scheme == "https" { + opts.Secure = true + } log.NewInfo(operationID, utils.GetSelfFuncName(), "Parse ok ", config.Config.Credential.Minio) - MinioClient, err = minio.New(minioUrl.Host, &minio.Options{ - Creds: credentials.NewStaticV4(config.Config.Credential.Minio.AccessKeyID, config.Config.Credential.Minio.SecretAccessKey, ""), - Secure: false, - }) + MinioClient, err = minio.New(minioUrl.Host, opts) log.NewInfo(operationID, utils.GetSelfFuncName(), "new ok ", config.Config.Credential.Minio) if err != nil { log.NewError(operationID, utils.GetSelfFuncName(), "init minio client failed", err.Error()) @@ -74,11 +78,11 @@ func MinioInit() { } } // 自动化桶public的代码 - err = MinioClient.SetBucketPolicy(context.Background(), config.Config.Credential.Minio.Bucket, policy.BucketPolicyReadWrite) - err = MinioClient.SetBucketPolicy(context.Background(), config.Config.Credential.Minio.AppBucket, policy.BucketPolicyReadWrite) - if err != nil { - log.NewDebug("", utils.GetSelfFuncName(), "SetBucketPolicy failed please set in web", err.Error()) - return - } + //err = MinioClient.SetBucketPolicy(context.Background(), config.Config.Credential.Minio.Bucket, policy.BucketPolicyReadWrite) + //err = MinioClient.SetBucketPolicy(context.Background(), config.Config.Credential.Minio.AppBucket, policy.BucketPolicyReadWrite) + //if err != nil { + // log.NewDebug("", utils.GetSelfFuncName(), "SetBucketPolicy failed please set in web", err.Error()) + // return + //} log.NewInfo(operationID, utils.GetSelfFuncName(), "minio create and set policy success") } From 928fc374c7af94c742ce225dc20b233cc78fbb20 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 10 May 2022 16:07:58 +0800 Subject: [PATCH 28/44] update app --- internal/api/third/minio_storage_credential.go | 2 +- internal/cms_api/admin/admin.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/api/third/minio_storage_credential.go b/internal/api/third/minio_storage_credential.go index 40ae13c4a..7a6926360 100644 --- a/internal/api/third/minio_storage_credential.go +++ b/internal/api/third/minio_storage_credential.go @@ -83,7 +83,7 @@ func MinioUploadFile(c *gin.Context) { return } newName, newType := utils.GetNewFileNameAndContentType(file.Filename, req.FileType) - log.Debug(req.OperationID, utils.GetSelfFuncName(), config.Config.Credential.Minio.Bucket, newName, fileObj, file.Size, newType) + log.Debug(req.OperationID, utils.GetSelfFuncName(), config.Config.Credential.Minio.Bucket, newName, fileObj, file.Size, newType, MinioClient.EndpointURL()) _, err = MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.Bucket, newName, fileObj, file.Size, minio.PutObjectOptions{ContentType: newType}) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "upload file error") diff --git a/internal/cms_api/admin/admin.go b/internal/cms_api/admin/admin.go index f079194f1..4fadfb180 100644 --- a/internal/cms_api/admin/admin.go +++ b/internal/cms_api/admin/admin.go @@ -112,7 +112,7 @@ func UploadUpdateApp(c *gin.Context) { Creds: credentials.NewStaticV4(config.Config.Credential.Minio.AccessKeyID, config.Config.Credential.Minio.SecretAccessKey, ""), Secure: false, }) - fmt.Println(apiThird.MinioClient.EndpointURL()) + fmt.Println(minioClient.EndpointURL()) _, err = minioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newFileName, fileObj, file.Size, minio.PutObjectOptions{ContentType: path.Ext(newFileName)}) if err != nil { From 7aa84607c84383edfd7f8841ed98bd78d5fa7095 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 10 May 2022 16:21:26 +0800 Subject: [PATCH 29/44] update app --- internal/cms_api/admin/admin.go | 83 +++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/internal/cms_api/admin/admin.go b/internal/cms_api/admin/admin.go index 4fadfb180..4fef01c8a 100644 --- a/internal/cms_api/admin/admin.go +++ b/internal/cms_api/admin/admin.go @@ -1,12 +1,14 @@ package admin import ( + apiStruct2 "Open_IM/pkg/base_info" apiStruct "Open_IM/pkg/cms_api_struct" "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" imdb "Open_IM/pkg/common/db/mysql_model/im_mysql_model" openIMHttp "Open_IM/pkg/common/http" "Open_IM/pkg/common/log" + "Open_IM/pkg/common/token_verify" "Open_IM/pkg/grpc-etcdv3/getcdv3" pbAdmin "Open_IM/pkg/proto/admin_cms" "Open_IM/pkg/utils" @@ -176,3 +178,84 @@ func GetDownloadURL(c *gin.Context) { c.JSON(http.StatusOK, resp) } } + +func MinioUploadFile(c *gin.Context) { + var ( + req apiStruct2.MinioUploadFileReq + resp apiStruct2.MinioUploadFileResp + ) + defer func() { + if r := recover(); r != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), r) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "missing file or snapShot args"}) + return + } + }() + if err := c.Bind(&req); err != nil { + log.NewError("0", utils.GetSelfFuncName(), "BindJSON failed ", err.Error()) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) + return + } + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), req) + var ok bool + var errInfo string + ok, _, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID) + if !ok { + errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), req) + switch req.FileType { + // videoType upload snapShot + case constant.VideoType: + snapShotFile, err := c.FormFile("snapShot") + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "missing snapshot arg: " + err.Error()}) + return + } + snapShotFileObj, err := snapShotFile.Open() + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "Open file error", err.Error()) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) + return + } + snapShotNewName, snapShotNewType := utils.GetNewFileNameAndContentType(snapShotFile.Filename, constant.ImageType) + log.Debug(req.OperationID, utils.GetSelfFuncName(), snapShotNewName, snapShotNewType) + _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.Bucket, snapShotNewName, snapShotFileObj, snapShotFile.Size, minio.PutObjectOptions{ContentType: snapShotNewType}) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "PutObject snapShotFile error", err.Error()) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) + return + } + resp.SnapshotURL = config.Config.Credential.Minio.Endpoint + "/" + config.Config.Credential.Minio.Bucket + "/" + snapShotNewName + resp.SnapshotNewName = snapShotNewName + } + file, err := c.FormFile("file") + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "FormFile failed", err.Error()) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "missing file arg: " + err.Error()}) + return + } + fileObj, err := file.Open() + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "Open file error", err.Error()) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "invalid file path" + err.Error()}) + return + } + newName, newType := utils.GetNewFileNameAndContentType(file.Filename, req.FileType) + log.Debug(req.OperationID, utils.GetSelfFuncName(), config.Config.Credential.Minio.Bucket, newName, fileObj, file.Size, newType, apiThird.MinioClient.EndpointURL()) + _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.Bucket, newName, fileObj, file.Size, minio.PutObjectOptions{ContentType: newType}) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "upload file error") + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "upload file error" + err.Error()}) + return + } + resp.NewName = newName + resp.URL = config.Config.Credential.Minio.Endpoint + "/" + config.Config.Credential.Minio.Bucket + "/" + newName + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp) + c.JSON(http.StatusOK, gin.H{"errCode": 0, "errMsg": "", "data": resp}) + return +} From e98ef5f5f24238ffd253d21b89aa81fbdc0c62c4 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 10 May 2022 16:22:16 +0800 Subject: [PATCH 30/44] update app --- internal/cms_api/router.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/cms_api/router.go b/internal/cms_api/router.go index fbd3b9fcc..2ebee65fc 100644 --- a/internal/cms_api/router.go +++ b/internal/cms_api/router.go @@ -22,6 +22,7 @@ func NewGinRouter() *gin.Engine { adminRouterGroup.POST("/login", admin.AdminLogin) adminRouterGroup.POST("/upload_update_app", admin.UploadUpdateApp) adminRouterGroup.POST("/get_download_url", admin.GetDownloadURL) + adminRouterGroup.POST("/test", admin.UploadUpdateApp) } r2 := router.Group("") r2.Use(middleware.JWTAuth()) From fab52b6a5695603b3e806eed557da9d8a465837a Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 10 May 2022 16:23:56 +0800 Subject: [PATCH 31/44] update app --- internal/cms_api/router.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/cms_api/router.go b/internal/cms_api/router.go index 2ebee65fc..9ec506fe9 100644 --- a/internal/cms_api/router.go +++ b/internal/cms_api/router.go @@ -22,7 +22,7 @@ func NewGinRouter() *gin.Engine { adminRouterGroup.POST("/login", admin.AdminLogin) adminRouterGroup.POST("/upload_update_app", admin.UploadUpdateApp) adminRouterGroup.POST("/get_download_url", admin.GetDownloadURL) - adminRouterGroup.POST("/test", admin.UploadUpdateApp) + adminRouterGroup.POST("/test", admin.MinioUploadFile) } r2 := router.Group("") r2.Use(middleware.JWTAuth()) From 8effca3a7c4e49eebdabe9693766b3b6394403b3 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 10 May 2022 16:39:08 +0800 Subject: [PATCH 32/44] update app --- internal/cms_api/admin/admin.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/internal/cms_api/admin/admin.go b/internal/cms_api/admin/admin.go index 4fef01c8a..e1adb2318 100644 --- a/internal/cms_api/admin/admin.go +++ b/internal/cms_api/admin/admin.go @@ -184,13 +184,13 @@ func MinioUploadFile(c *gin.Context) { req apiStruct2.MinioUploadFileReq resp apiStruct2.MinioUploadFileResp ) - defer func() { - if r := recover(); r != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), r) - c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "missing file or snapShot args"}) - return - } - }() + //defer func() { + // if r := recover(); r != nil { + // log.NewError(req.OperationID, utils.GetSelfFuncName(), r) + // c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "missing file or snapShot args"}) + // return + // } + //}() if err := c.Bind(&req); err != nil { log.NewError("0", utils.GetSelfFuncName(), "BindJSON failed ", err.Error()) c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) From 7a78e5d869468049af72580a6f7c0fb6f70676ec Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 10 May 2022 16:53:58 +0800 Subject: [PATCH 33/44] update app --- cmd/open_im_api/main.go | 2 + .../api/third/minio_storage_credential.go | 127 ++++++++++++++++++ pkg/base_info/minio_api_struct.go | 31 +++++ 3 files changed, 160 insertions(+) diff --git a/cmd/open_im_api/main.go b/cmd/open_im_api/main.go index e5d7c9930..cd774627b 100644 --- a/cmd/open_im_api/main.go +++ b/cmd/open_im_api/main.go @@ -106,6 +106,8 @@ func main() { thirdGroup.POST("/ali_oss_credential", apiThird.AliOSSCredential) thirdGroup.POST("/minio_storage_credential", apiThird.MinioStorageCredential) thirdGroup.POST("/minio_upload", apiThird.MinioUploadFile) + thirdGroup.POST("/upload_update_app", apiThird.UploadUpdateApp) + thirdGroup.POST("/get_download_url", apiThird.GetDownloadURL) } //Message chatGroup := r.Group("/msg") diff --git a/internal/api/third/minio_storage_credential.go b/internal/api/third/minio_storage_credential.go index 7a6926360..f1c4401e6 100644 --- a/internal/api/third/minio_storage_credential.go +++ b/internal/api/third/minio_storage_credential.go @@ -4,16 +4,19 @@ import ( apiStruct "Open_IM/pkg/base_info" "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" + imdb "Open_IM/pkg/common/db/mysql_model/im_mysql_model" "Open_IM/pkg/common/log" "Open_IM/pkg/common/token_verify" _ "Open_IM/pkg/common/token_verify" "Open_IM/pkg/utils" "context" + "fmt" "github.com/gin-gonic/gin" "github.com/minio/minio-go/v7" _ "github.com/minio/minio-go/v7" cr "github.com/minio/minio-go/v7/pkg/credentials" "net/http" + "path" ) func MinioUploadFile(c *gin.Context) { @@ -147,3 +150,127 @@ func MinioStorageCredential(c *gin.Context) { resp.StsEndpointURL = config.Config.Credential.Minio.Endpoint c.JSON(http.StatusOK, gin.H{"errCode": 0, "errMsg": "", "data": resp}) } + +func UploadUpdateApp(c *gin.Context) { + var ( + req apiStruct.UploadUpdateAppReq + resp apiStruct.UploadUpdateAppResp + ) + if err := c.Bind(&req); err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "BindJSON failed ", err.Error()) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) + return + } + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req) + + fileObj, err := req.File.Open() + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "Open file error", err.Error()) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "Open file error" + err.Error()}) + return + } + yamlObj, err := req.Yaml.Open() + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "Open Yaml error", err.Error()) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "Open Yaml error" + err.Error()}) + return + } + + // v2.0.9_app_linux v2.0.9_yaml_linux + + //file, err := c.FormFile("file") + //if err != nil { + // log.NewError(req.OperationID, utils.GetSelfFuncName(), "FormFile failed", err.Error()) + // c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "missing file arg: " + err.Error()}) + // return + //} + //fileObj, err := file.Open() + //if err != nil { + // log.NewError(req.OperationID, utils.GetSelfFuncName(), "Open file error", err.Error()) + // c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "invalid file path" + err.Error()}) + // return + //} + // + //yaml, err := c.FormFile("yaml") + //if err != nil { + // log.NewError(req.OperationID, utils.GetSelfFuncName(), "FormFile failed", err.Error()) + // c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "missing file arg: " + err.Error()}) + // return + //} + //yamlObj, err := yaml.Open() + //if err != nil { + // log.NewError(req.OperationID, utils.GetSelfFuncName(), "Open file error", err.Error()) + // c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "invalid file path" + err.Error()}) + // return + //} + newFileName, newYamlName, err := utils.GetUploadAppNewName(req.Type, req.Version, req.File.Filename, req.Yaml.Filename) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetUploadAppNewName failed", err.Error()) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "invalid file type" + err.Error()}) + return + } + fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", config.Config.Credential.Minio.AppBucket, newFileName, fileObj, req.File.Size) + fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", config.Config.Credential.Minio.AppBucket, newYamlName, yamlObj, req.Yaml.Size) + + _, err = MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newFileName, fileObj, req.File.Size, minio.PutObjectOptions{ContentType: path.Ext(newFileName)}) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "PutObject file error") + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "PutObject file error" + err.Error()}) + return + } + _, err = MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newYamlName, yamlObj, req.Yaml.Size, minio.PutObjectOptions{ContentType: path.Ext(newYamlName)}) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "PutObject yaml error") + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "PutObject yaml error" + err.Error()}) + return + } + if err := imdb.UpdateAppVersion(req.Type, req.Version, req.ForceUpdate, newFileName, newYamlName); err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "UpdateAppVersion error", err.Error()) + resp.ErrCode = http.StatusInternalServerError + resp.ErrMsg = err.Error() + c.JSON(http.StatusInternalServerError, resp) + return + } + log.NewInfo(req.OperationID, utils.GetSelfFuncName()) + c.JSON(http.StatusOK, resp) +} + +func GetDownloadURL(c *gin.Context) { + var ( + req apiStruct.GetDownloadURLReq + resp apiStruct.GetDownloadURLResp + ) + defer func() { + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp) + }() + if err := c.Bind(&req); err != nil { + log.NewError("0", utils.GetSelfFuncName(), "BindJSON failed ", err.Error()) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) + return + } + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req) + //fileName, yamlName, err := utils.GetUploadAppNewName(req.Type, req.Version, req.) + //if err != nil { + // log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetUploadAppNewName failed", err.Error()) + // c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "invalid file type" + err.Error()}) + // return + //} + app, err := imdb.GetNewestVersion(req.Type) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "getNewestVersion failed", err.Error()) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "getNewestVersion failed" + err.Error()}) + return + } + if app.Version != req.Version { + resp.Data.HasNewVersion = true + if app.ForceUpdate == true { + resp.Data.ForceUpdate = true + } + resp.Data.YamlURL = config.Config.Credential.Minio.Endpoint + "/" + config.Config.Credential.Minio.AppBucket + "/" + app.YamlName + resp.Data.FileURL = config.Config.Credential.Minio.Endpoint + "/" + config.Config.Credential.Minio.AppBucket + "/" + app.FileName + c.JSON(http.StatusOK, resp) + } else { + resp.Data.HasNewVersion = false + c.JSON(http.StatusOK, resp) + } +} diff --git a/pkg/base_info/minio_api_struct.go b/pkg/base_info/minio_api_struct.go index 6d3b0ecac..8a3f2d00a 100644 --- a/pkg/base_info/minio_api_struct.go +++ b/pkg/base_info/minio_api_struct.go @@ -1,5 +1,7 @@ package base_info +import "mime/multipart" + type MinioStorageCredentialReq struct { OperationID string `json:"operationID"` } @@ -23,3 +25,32 @@ type MinioUploadFileResp struct { SnapshotURL string `json:"snapshotURL,omitempty"` SnapshotNewName string `json:"snapshotName,omitempty"` } + +type UploadUpdateAppReq struct { + OperationID string `form:"operationID" binding:"required"` + Type int `form:"type" binding:"required"` + Version string `form:"version" binding:"required"` + File *multipart.FileHeader `form:"file" binding:"required"` + Yaml *multipart.FileHeader `form:"yaml" binding:"required"` + ForceUpdate bool `form:"forceUpdate" binding:"required"` +} + +type UploadUpdateAppResp struct { + CommResp +} + +type GetDownloadURLReq struct { + OperationID string `json:"operationID" binding:"required"` + Type int `json:"type" binding:"required"` + Version string `json:"version" binding:"required"` +} + +type GetDownloadURLResp struct { + CommResp + Data struct { + HasNewVersion bool `json:"hasNewVersion"` + ForceUpdate bool `json:"forceUpdate"` + FileURL string `json:"fileURL"` + YamlURL string `json:"yamlURL"` + } `json:"data"` +} From 472cda83159b6862b605645e223456a6961362a8 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 10 May 2022 16:59:45 +0800 Subject: [PATCH 34/44] update app --- .../api/third/minio_storage_credential.go | 29 ------------------- .../mysql_model/im_mysql_model/file_model.go | 2 +- 2 files changed, 1 insertion(+), 30 deletions(-) diff --git a/internal/api/third/minio_storage_credential.go b/internal/api/third/minio_storage_credential.go index f1c4401e6..1b3b6aeb3 100644 --- a/internal/api/third/minio_storage_credential.go +++ b/internal/api/third/minio_storage_credential.go @@ -176,41 +176,12 @@ func UploadUpdateApp(c *gin.Context) { return } - // v2.0.9_app_linux v2.0.9_yaml_linux - - //file, err := c.FormFile("file") - //if err != nil { - // log.NewError(req.OperationID, utils.GetSelfFuncName(), "FormFile failed", err.Error()) - // c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "missing file arg: " + err.Error()}) - // return - //} - //fileObj, err := file.Open() - //if err != nil { - // log.NewError(req.OperationID, utils.GetSelfFuncName(), "Open file error", err.Error()) - // c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "invalid file path" + err.Error()}) - // return - //} - // - //yaml, err := c.FormFile("yaml") - //if err != nil { - // log.NewError(req.OperationID, utils.GetSelfFuncName(), "FormFile failed", err.Error()) - // c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "missing file arg: " + err.Error()}) - // return - //} - //yamlObj, err := yaml.Open() - //if err != nil { - // log.NewError(req.OperationID, utils.GetSelfFuncName(), "Open file error", err.Error()) - // c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "invalid file path" + err.Error()}) - // return - //} newFileName, newYamlName, err := utils.GetUploadAppNewName(req.Type, req.Version, req.File.Filename, req.Yaml.Filename) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetUploadAppNewName failed", err.Error()) c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "invalid file type" + err.Error()}) return } - fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", config.Config.Credential.Minio.AppBucket, newFileName, fileObj, req.File.Size) - fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", config.Config.Credential.Minio.AppBucket, newYamlName, yamlObj, req.Yaml.Size) _, err = MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newFileName, fileObj, req.File.Size, minio.PutObjectOptions{ContentType: path.Ext(newFileName)}) if err != nil { diff --git a/pkg/common/db/mysql_model/im_mysql_model/file_model.go b/pkg/common/db/mysql_model/im_mysql_model/file_model.go index 7d6144633..babcc13be 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/file_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/file_model.go @@ -18,7 +18,7 @@ func UpdateAppVersion(appType int, version string, forceUpdate bool, fileName, y FileName: fileName, YamlName: yamlName, } - result := dbConn.Model(db.AppVersion{}).Where("app_type = ?", appType).Updates(&app) + result := dbConn.Model(db.AppVersion{}).Where("type = ?", appType).Updates(&app) if result.Error != nil { return result.Error } From 608b166b32178734200fbf08eeb9beef545abb27 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 10 May 2022 17:00:52 +0800 Subject: [PATCH 35/44] update app --- internal/api/third/minio_storage_credential.go | 1 - 1 file changed, 1 deletion(-) diff --git a/internal/api/third/minio_storage_credential.go b/internal/api/third/minio_storage_credential.go index 1b3b6aeb3..2c0329fb9 100644 --- a/internal/api/third/minio_storage_credential.go +++ b/internal/api/third/minio_storage_credential.go @@ -10,7 +10,6 @@ import ( _ "Open_IM/pkg/common/token_verify" "Open_IM/pkg/utils" "context" - "fmt" "github.com/gin-gonic/gin" "github.com/minio/minio-go/v7" _ "github.com/minio/minio-go/v7" From f5d4397f0b48cd38f60bc5f820cac1039203ac6f Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 10 May 2022 17:17:20 +0800 Subject: [PATCH 36/44] update app --- .../api/third/minio_storage_credential.go | 25 ++++++++------- internal/cms_api/admin/admin.go | 31 ++++++++----------- pkg/base_info/minio_api_struct.go | 2 +- .../mysql_model/im_mysql_model/file_model.go | 4 +-- 4 files changed, 29 insertions(+), 33 deletions(-) diff --git a/internal/api/third/minio_storage_credential.go b/internal/api/third/minio_storage_credential.go index 2c0329fb9..ff0802fc1 100644 --- a/internal/api/third/minio_storage_credential.go +++ b/internal/api/third/minio_storage_credential.go @@ -228,19 +228,20 @@ func GetDownloadURL(c *gin.Context) { app, err := imdb.GetNewestVersion(req.Type) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "getNewestVersion failed", err.Error()) - c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "getNewestVersion failed" + err.Error()}) - return } - if app.Version != req.Version { - resp.Data.HasNewVersion = true - if app.ForceUpdate == true { - resp.Data.ForceUpdate = true + if app != nil { + if app.Version != req.Version && app.Version != "" { + resp.Data.HasNewVersion = true + if app.ForceUpdate == true { + resp.Data.ForceUpdate = true + } + resp.Data.YamlURL = config.Config.Credential.Minio.Endpoint + "/" + config.Config.Credential.Minio.AppBucket + "/" + app.YamlName + resp.Data.FileURL = config.Config.Credential.Minio.Endpoint + "/" + config.Config.Credential.Minio.AppBucket + "/" + app.FileName + c.JSON(http.StatusOK, resp) + } else { + resp.Data.HasNewVersion = false + c.JSON(http.StatusOK, resp) } - resp.Data.YamlURL = config.Config.Credential.Minio.Endpoint + "/" + config.Config.Credential.Minio.AppBucket + "/" + app.YamlName - resp.Data.FileURL = config.Config.Credential.Minio.Endpoint + "/" + config.Config.Credential.Minio.AppBucket + "/" + app.FileName - c.JSON(http.StatusOK, resp) - } else { - resp.Data.HasNewVersion = false - c.JSON(http.StatusOK, resp) } + c.JSON(http.StatusBadRequest, gin.H{"errCode": 0, "errMsg": "not found app version"}) } diff --git a/internal/cms_api/admin/admin.go b/internal/cms_api/admin/admin.go index e1adb2318..8ee2c8d4f 100644 --- a/internal/cms_api/admin/admin.go +++ b/internal/cms_api/admin/admin.go @@ -153,30 +153,25 @@ func GetDownloadURL(c *gin.Context) { return } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req) - //fileName, yamlName, err := utils.GetUploadAppNewName(req.Type, req.Version, req.) - //if err != nil { - // log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetUploadAppNewName failed", err.Error()) - // c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "invalid file type" + err.Error()}) - // return - //} app, err := imdb.GetNewestVersion(req.Type) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "getNewestVersion failed", err.Error()) - c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "getNewestVersion failed" + err.Error()}) - return } - if app.Version != req.Version { - resp.Data.HasNewVersion = true - if app.ForceUpdate == true { - resp.Data.ForceUpdate = true + if app != nil { + if app.Version != req.Version { + resp.Data.HasNewVersion = true + if app.ForceUpdate == true { + resp.Data.ForceUpdate = true + } + resp.Data.YamlURL = config.Config.Credential.Minio.Endpoint + "/" + config.Config.Credential.Minio.AppBucket + "/" + app.YamlName + resp.Data.FileURL = config.Config.Credential.Minio.Endpoint + "/" + config.Config.Credential.Minio.AppBucket + "/" + app.FileName + c.JSON(http.StatusOK, resp) + } else { + resp.Data.HasNewVersion = false + c.JSON(http.StatusOK, resp) } - resp.Data.YamlURL = config.Config.Credential.Minio.Endpoint + "/" + config.Config.Credential.Minio.AppBucket + "/" + app.YamlName - resp.Data.FileURL = config.Config.Credential.Minio.Endpoint + "/" + config.Config.Credential.Minio.AppBucket + "/" + app.FileName - c.JSON(http.StatusOK, resp) - } else { - resp.Data.HasNewVersion = false - c.JSON(http.StatusOK, resp) } + c.JSON(http.StatusBadRequest, gin.H{"errCode": 0, "errMsg": "not found app version"}) } func MinioUploadFile(c *gin.Context) { diff --git a/pkg/base_info/minio_api_struct.go b/pkg/base_info/minio_api_struct.go index 8a3f2d00a..902310de5 100644 --- a/pkg/base_info/minio_api_struct.go +++ b/pkg/base_info/minio_api_struct.go @@ -32,7 +32,7 @@ type UploadUpdateAppReq struct { Version string `form:"version" binding:"required"` File *multipart.FileHeader `form:"file" binding:"required"` Yaml *multipart.FileHeader `form:"yaml" binding:"required"` - ForceUpdate bool `form:"forceUpdate" binding:"required"` + ForceUpdate bool `form:"forceUpdate"` } type UploadUpdateAppResp struct { diff --git a/pkg/common/db/mysql_model/im_mysql_model/file_model.go b/pkg/common/db/mysql_model/im_mysql_model/file_model.go index babcc13be..62c032b75 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/file_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/file_model.go @@ -31,10 +31,10 @@ func UpdateAppVersion(appType int, version string, forceUpdate bool, fileName, y func GetNewestVersion(appType int) (*db.AppVersion, error) { dbConn, err := db.DB.MysqlDB.DefaultGormDB() + app := db.AppVersion{} if err != nil { - return nil, err + return &app, err } dbConn.LogMode(true) - app := db.AppVersion{} return &app, dbConn.Model(db.AppVersion{}).First(&app, appType).Error } From c998bce34ffbcdcc86d7b6e38980c7e60ff7629a Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 10 May 2022 17:23:28 +0800 Subject: [PATCH 37/44] update app --- internal/api/third/minio_storage_credential.go | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/internal/api/third/minio_storage_credential.go b/internal/api/third/minio_storage_credential.go index ff0802fc1..eed21b126 100644 --- a/internal/api/third/minio_storage_credential.go +++ b/internal/api/third/minio_storage_credential.go @@ -219,16 +219,11 @@ func GetDownloadURL(c *gin.Context) { return } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req) - //fileName, yamlName, err := utils.GetUploadAppNewName(req.Type, req.Version, req.) - //if err != nil { - // log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetUploadAppNewName failed", err.Error()) - // c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "invalid file type" + err.Error()}) - // return - //} app, err := imdb.GetNewestVersion(req.Type) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "getNewestVersion failed", err.Error()) } + log.Debug(req.OperationID, utils.GetSelfFuncName(), "app: ", app) if app != nil { if app.Version != req.Version && app.Version != "" { resp.Data.HasNewVersion = true @@ -238,9 +233,11 @@ func GetDownloadURL(c *gin.Context) { resp.Data.YamlURL = config.Config.Credential.Minio.Endpoint + "/" + config.Config.Credential.Minio.AppBucket + "/" + app.YamlName resp.Data.FileURL = config.Config.Credential.Minio.Endpoint + "/" + config.Config.Credential.Minio.AppBucket + "/" + app.FileName c.JSON(http.StatusOK, resp) + return } else { resp.Data.HasNewVersion = false c.JSON(http.StatusOK, resp) + return } } c.JSON(http.StatusBadRequest, gin.H{"errCode": 0, "errMsg": "not found app version"}) From 7137924baabee0298e6cdf1e2b0401d59f4d7b55 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 10 May 2022 17:39:27 +0800 Subject: [PATCH 38/44] update app --- internal/cms_api/admin/admin.go | 129 ++++++------------ internal/cms_api/router.go | 1 - .../mysql_model/im_mysql_model/file_model.go | 13 +- 3 files changed, 47 insertions(+), 96 deletions(-) diff --git a/internal/cms_api/admin/admin.go b/internal/cms_api/admin/admin.go index 8ee2c8d4f..06533bae8 100644 --- a/internal/cms_api/admin/admin.go +++ b/internal/cms_api/admin/admin.go @@ -22,8 +22,45 @@ import ( "Open_IM/internal/api/third" "github.com/gin-gonic/gin" + url2 "net/url" ) +var ( + minioClient *minio.Client +) + +func init() { + operationID := utils.OperationIDGenerator() + log.NewInfo(operationID, utils.GetSelfFuncName(), "minio config: ", config.Config.Credential.Minio) + var initUrl string + if config.Config.Credential.Minio.EndpointInnerEnable { + initUrl = config.Config.Credential.Minio.EndpointInner + } else { + initUrl = config.Config.Credential.Minio.Endpoint + } + log.NewInfo(operationID, utils.GetSelfFuncName(), "use initUrl: ", initUrl) + minioUrl, err := url2.Parse(initUrl) + if err != nil { + log.NewError(operationID, utils.GetSelfFuncName(), "parse failed, please check config/config.yaml", err.Error()) + return + } + opts := &minio.Options{ + Creds: credentials.NewStaticV4(config.Config.Credential.Minio.AccessKeyID, config.Config.Credential.Minio.SecretAccessKey, ""), + } + if minioUrl.Scheme == "http" { + opts.Secure = false + } else if minioUrl.Scheme == "https" { + opts.Secure = true + } + log.NewInfo(operationID, utils.GetSelfFuncName(), "Parse ok ", config.Config.Credential.Minio) + minioClient, err = minio.New(minioUrl.Host, opts) + log.NewInfo(operationID, utils.GetSelfFuncName(), "new ok ", config.Config.Credential.Minio) + if err != nil { + log.NewError(operationID, utils.GetSelfFuncName(), "init minio client failed", err.Error()) + return + } +} + // register func AdminLogin(c *gin.Context) { var ( @@ -110,11 +147,6 @@ func UploadUpdateApp(c *gin.Context) { fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", config.Config.Credential.Minio.AppBucket, newFileName, fileObj, file.Size) fmt.Println(req.OperationID, utils.GetSelfFuncName(), "name: ", config.Config.Credential.Minio.AppBucket, newYamlName, yamlObj, yaml.Size) - minioClient, err := minio.New(config.Config.Credential.Minio.EndpointInner, &minio.Options{ - Creds: credentials.NewStaticV4(config.Config.Credential.Minio.AccessKeyID, config.Config.Credential.Minio.SecretAccessKey, ""), - Secure: false, - }) - fmt.Println(minioClient.EndpointURL()) _, err = minioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newFileName, fileObj, file.Size, minio.PutObjectOptions{ContentType: path.Ext(newFileName)}) if err != nil { @@ -122,7 +154,7 @@ func UploadUpdateApp(c *gin.Context) { c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "PutObject file error" + err.Error()}) return } - _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newYamlName, yamlObj, yaml.Size, minio.PutObjectOptions{ContentType: path.Ext(newYamlName)}) + _, err = minioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newYamlName, yamlObj, yaml.Size, minio.PutObjectOptions{ContentType: path.Ext(newYamlName)}) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "PutObject yaml error") c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "PutObject yaml error" + err.Error()}) @@ -158,7 +190,7 @@ func GetDownloadURL(c *gin.Context) { log.NewError(req.OperationID, utils.GetSelfFuncName(), "getNewestVersion failed", err.Error()) } if app != nil { - if app.Version != req.Version { + if app.Version != req.Version && app.Version != "" { resp.Data.HasNewVersion = true if app.ForceUpdate == true { resp.Data.ForceUpdate = true @@ -166,91 +198,12 @@ func GetDownloadURL(c *gin.Context) { resp.Data.YamlURL = config.Config.Credential.Minio.Endpoint + "/" + config.Config.Credential.Minio.AppBucket + "/" + app.YamlName resp.Data.FileURL = config.Config.Credential.Minio.Endpoint + "/" + config.Config.Credential.Minio.AppBucket + "/" + app.FileName c.JSON(http.StatusOK, resp) + return } else { resp.Data.HasNewVersion = false c.JSON(http.StatusOK, resp) + return } } c.JSON(http.StatusBadRequest, gin.H{"errCode": 0, "errMsg": "not found app version"}) } - -func MinioUploadFile(c *gin.Context) { - var ( - req apiStruct2.MinioUploadFileReq - resp apiStruct2.MinioUploadFileResp - ) - //defer func() { - // if r := recover(); r != nil { - // log.NewError(req.OperationID, utils.GetSelfFuncName(), r) - // c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "missing file or snapShot args"}) - // return - // } - //}() - if err := c.Bind(&req); err != nil { - log.NewError("0", utils.GetSelfFuncName(), "BindJSON failed ", err.Error()) - c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) - return - } - log.NewInfo(req.OperationID, utils.GetSelfFuncName(), req) - var ok bool - var errInfo string - ok, _, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID) - if !ok { - errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") - log.NewError(req.OperationID, errMsg) - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) - return - } - - log.NewInfo(req.OperationID, utils.GetSelfFuncName(), req) - switch req.FileType { - // videoType upload snapShot - case constant.VideoType: - snapShotFile, err := c.FormFile("snapShot") - if err != nil { - c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "missing snapshot arg: " + err.Error()}) - return - } - snapShotFileObj, err := snapShotFile.Open() - if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "Open file error", err.Error()) - c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) - return - } - snapShotNewName, snapShotNewType := utils.GetNewFileNameAndContentType(snapShotFile.Filename, constant.ImageType) - log.Debug(req.OperationID, utils.GetSelfFuncName(), snapShotNewName, snapShotNewType) - _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.Bucket, snapShotNewName, snapShotFileObj, snapShotFile.Size, minio.PutObjectOptions{ContentType: snapShotNewType}) - if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "PutObject snapShotFile error", err.Error()) - c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) - return - } - resp.SnapshotURL = config.Config.Credential.Minio.Endpoint + "/" + config.Config.Credential.Minio.Bucket + "/" + snapShotNewName - resp.SnapshotNewName = snapShotNewName - } - file, err := c.FormFile("file") - if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "FormFile failed", err.Error()) - c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "missing file arg: " + err.Error()}) - return - } - fileObj, err := file.Open() - if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "Open file error", err.Error()) - c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "invalid file path" + err.Error()}) - return - } - newName, newType := utils.GetNewFileNameAndContentType(file.Filename, req.FileType) - log.Debug(req.OperationID, utils.GetSelfFuncName(), config.Config.Credential.Minio.Bucket, newName, fileObj, file.Size, newType, apiThird.MinioClient.EndpointURL()) - _, err = apiThird.MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.Bucket, newName, fileObj, file.Size, minio.PutObjectOptions{ContentType: newType}) - if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "upload file error") - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "upload file error" + err.Error()}) - return - } - resp.NewName = newName - resp.URL = config.Config.Credential.Minio.Endpoint + "/" + config.Config.Credential.Minio.Bucket + "/" + newName - log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp) - c.JSON(http.StatusOK, gin.H{"errCode": 0, "errMsg": "", "data": resp}) - return -} diff --git a/internal/cms_api/router.go b/internal/cms_api/router.go index 9ec506fe9..fbd3b9fcc 100644 --- a/internal/cms_api/router.go +++ b/internal/cms_api/router.go @@ -22,7 +22,6 @@ func NewGinRouter() *gin.Engine { adminRouterGroup.POST("/login", admin.AdminLogin) adminRouterGroup.POST("/upload_update_app", admin.UploadUpdateApp) adminRouterGroup.POST("/get_download_url", admin.GetDownloadURL) - adminRouterGroup.POST("/test", admin.MinioUploadFile) } r2 := router.Group("") r2.Use(middleware.JWTAuth()) diff --git a/pkg/common/db/mysql_model/im_mysql_model/file_model.go b/pkg/common/db/mysql_model/im_mysql_model/file_model.go index 62c032b75..9a72b1ad0 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/file_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/file_model.go @@ -11,14 +11,13 @@ func UpdateAppVersion(appType int, version string, forceUpdate bool, fileName, y return err } app := db.AppVersion{ - Version: version, - Type: appType, - UpdateTime: int(time.Now().Unix()), - ForceUpdate: forceUpdate, - FileName: fileName, - YamlName: yamlName, + Version: version, + Type: appType, + UpdateTime: int(time.Now().Unix()), + FileName: fileName, + YamlName: yamlName, } - result := dbConn.Model(db.AppVersion{}).Where("type = ?", appType).Updates(&app) + result := dbConn.Model(db.AppVersion{}).Where("type = ?", appType).Updates(&app).Update(map[string]interface{}{"force_update": forceUpdate}) if result.Error != nil { return result.Error } From 7a423eb6e1d766164e28bbc67f2414ae60ab5be0 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 10 May 2022 17:50:22 +0800 Subject: [PATCH 39/44] update app --- pkg/common/db/model_struct.go | 12 ++++++------ .../db/mysql_model/im_mysql_model/file_model.go | 15 +++++++++------ 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/pkg/common/db/model_struct.go b/pkg/common/db/model_struct.go index 6eb18630d..03709a67d 100644 --- a/pkg/common/db/model_struct.go +++ b/pkg/common/db/model_struct.go @@ -274,12 +274,12 @@ func (DepartmentMember) TableName() string { } type AppVersion struct { - Version string `gorm:"column:version;size:64"` - Type int `gorm:"column:type;primary_key"` - UpdateTime int `gorm:"column:update_time"` - ForceUpdate bool `gorm:"column:force_update"` - FileName string `gorm:"column:file_name"` - YamlName string `gorm:"column:yaml_name"` + Version string `gorm:"column:version;size:64" json:"version"` + Type int `gorm:"column:type;primary_key" json:"type"` + UpdateTime int `gorm:"column:update_time" json:"update_time"` + ForceUpdate bool `gorm:"column:force_update" json:"force_update"` + FileName string `gorm:"column:file_name" json:"file_name"` + YamlName string `gorm:"column:yaml_name" json:"yaml_name"` } func (AppVersion) TableName() string { diff --git a/pkg/common/db/mysql_model/im_mysql_model/file_model.go b/pkg/common/db/mysql_model/im_mysql_model/file_model.go index 9a72b1ad0..983dec328 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/file_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/file_model.go @@ -10,14 +10,17 @@ func UpdateAppVersion(appType int, version string, forceUpdate bool, fileName, y if err != nil { return err } + updateTime := int(time.Now().Unix()) app := db.AppVersion{ - Version: version, - Type: appType, - UpdateTime: int(time.Now().Unix()), - FileName: fileName, - YamlName: yamlName, + Version: version, + Type: appType, + UpdateTime: updateTime, + FileName: fileName, + YamlName: yamlName, + ForceUpdate: forceUpdate, } - result := dbConn.Model(db.AppVersion{}).Where("type = ?", appType).Updates(&app).Update(map[string]interface{}{"force_update": forceUpdate}) + result := dbConn.Model(db.AppVersion{}).Where("type = ?", appType).Update(map[string]interface{}{"force_update": forceUpdate, + "version": version, "update_time": int(time.Now().Unix()), "file_name": fileName, "yaml_name": yamlName, "type": appType}) if result.Error != nil { return result.Error } From affbe9f5a972c0860d61bb1b83900ff5b9966397 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 10 May 2022 17:50:57 +0800 Subject: [PATCH 40/44] update app --- internal/cms_api/admin/admin.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/internal/cms_api/admin/admin.go b/internal/cms_api/admin/admin.go index 06533bae8..6390fe166 100644 --- a/internal/cms_api/admin/admin.go +++ b/internal/cms_api/admin/admin.go @@ -1,14 +1,12 @@ package admin import ( - apiStruct2 "Open_IM/pkg/base_info" apiStruct "Open_IM/pkg/cms_api_struct" "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" imdb "Open_IM/pkg/common/db/mysql_model/im_mysql_model" openIMHttp "Open_IM/pkg/common/http" "Open_IM/pkg/common/log" - "Open_IM/pkg/common/token_verify" "Open_IM/pkg/grpc-etcdv3/getcdv3" pbAdmin "Open_IM/pkg/proto/admin_cms" "Open_IM/pkg/utils" @@ -20,7 +18,6 @@ import ( "path" "strings" - "Open_IM/internal/api/third" "github.com/gin-gonic/gin" url2 "net/url" ) From e314fd4a0ab0b72c69b18fafc11af629f38829a3 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 10 May 2022 18:22:18 +0800 Subject: [PATCH 41/44] update app --- .../api/third/minio_storage_credential.go | 42 +++++++++---------- pkg/base_info/minio_api_struct.go | 2 +- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/internal/api/third/minio_storage_credential.go b/internal/api/third/minio_storage_credential.go index eed21b126..3f59deec9 100644 --- a/internal/api/third/minio_storage_credential.go +++ b/internal/api/third/minio_storage_credential.go @@ -161,38 +161,36 @@ func UploadUpdateApp(c *gin.Context) { return } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req) - - fileObj, err := req.File.Open() - if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "Open file error", err.Error()) - c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "Open file error" + err.Error()}) - return - } - yamlObj, err := req.Yaml.Open() - if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "Open Yaml error", err.Error()) - c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "Open Yaml error" + err.Error()}) - return - } - newFileName, newYamlName, err := utils.GetUploadAppNewName(req.Type, req.Version, req.File.Filename, req.Yaml.Filename) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetUploadAppNewName failed", err.Error()) c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "invalid file type" + err.Error()}) return } - + fileObj, err := req.File.Open() + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "Open file error", err.Error()) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "Open file error" + err.Error()}) + return + } _, err = MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newFileName, fileObj, req.File.Size, minio.PutObjectOptions{ContentType: path.Ext(newFileName)}) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "PutObject file error") c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "PutObject file error" + err.Error()}) return } - _, err = MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newYamlName, yamlObj, req.Yaml.Size, minio.PutObjectOptions{ContentType: path.Ext(newYamlName)}) - if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "PutObject yaml error") - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "PutObject yaml error" + err.Error()}) - return + + yamlObj, err := req.Yaml.Open() + if err == nil { + _, err = MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newYamlName, yamlObj, req.Yaml.Size, minio.PutObjectOptions{ContentType: path.Ext(newYamlName)}) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "PutObject yaml error") + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "PutObject yaml error" + err.Error()}) + return + } + } else { + log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error()) + newYamlName = "" } if err := imdb.UpdateAppVersion(req.Type, req.Version, req.ForceUpdate, newFileName, newYamlName); err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "UpdateAppVersion error", err.Error()) @@ -230,7 +228,9 @@ func GetDownloadURL(c *gin.Context) { if app.ForceUpdate == true { resp.Data.ForceUpdate = true } - resp.Data.YamlURL = config.Config.Credential.Minio.Endpoint + "/" + config.Config.Credential.Minio.AppBucket + "/" + app.YamlName + if app.YamlName != "" { + resp.Data.YamlURL = config.Config.Credential.Minio.Endpoint + "/" + config.Config.Credential.Minio.AppBucket + "/" + app.YamlName + } resp.Data.FileURL = config.Config.Credential.Minio.Endpoint + "/" + config.Config.Credential.Minio.AppBucket + "/" + app.FileName c.JSON(http.StatusOK, resp) return diff --git a/pkg/base_info/minio_api_struct.go b/pkg/base_info/minio_api_struct.go index 902310de5..a95b4c427 100644 --- a/pkg/base_info/minio_api_struct.go +++ b/pkg/base_info/minio_api_struct.go @@ -31,7 +31,7 @@ type UploadUpdateAppReq struct { Type int `form:"type" binding:"required"` Version string `form:"version" binding:"required"` File *multipart.FileHeader `form:"file" binding:"required"` - Yaml *multipart.FileHeader `form:"yaml" binding:"required"` + Yaml *multipart.FileHeader `form:"yaml"` ForceUpdate bool `form:"forceUpdate"` } From 2c89d80a27fdad34bbeb732b0c581a5de9a85621 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 10 May 2022 18:28:57 +0800 Subject: [PATCH 42/44] update app --- .../api/third/minio_storage_credential.go | 31 ++++++++++++------- pkg/utils/file.go | 3 ++ 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/internal/api/third/minio_storage_credential.go b/internal/api/third/minio_storage_credential.go index 3f59deec9..c80035c5a 100644 --- a/internal/api/third/minio_storage_credential.go +++ b/internal/api/third/minio_storage_credential.go @@ -161,7 +161,13 @@ func UploadUpdateApp(c *gin.Context) { return } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req) - newFileName, newYamlName, err := utils.GetUploadAppNewName(req.Type, req.Version, req.File.Filename, req.Yaml.Filename) + var yamlName string + if req.Yaml == nil { + yamlName = "" + } else { + yamlName = req.Yaml.Filename + } + newFileName, newYamlName, err := utils.GetUploadAppNewName(req.Type, req.Version, req.File.Filename, yamlName) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetUploadAppNewName failed", err.Error()) c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "invalid file type" + err.Error()}) @@ -179,18 +185,19 @@ func UploadUpdateApp(c *gin.Context) { c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "PutObject file error" + err.Error()}) return } - - yamlObj, err := req.Yaml.Open() - if err == nil { - _, err = MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newYamlName, yamlObj, req.Yaml.Size, minio.PutObjectOptions{ContentType: path.Ext(newYamlName)}) - if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "PutObject yaml error") - c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "PutObject yaml error" + err.Error()}) - return + if newYamlName != "" { + yamlObj, err := req.Yaml.Open() + if err == nil { + _, err = MinioClient.PutObject(context.Background(), config.Config.Credential.Minio.AppBucket, newYamlName, yamlObj, req.Yaml.Size, minio.PutObjectOptions{ContentType: path.Ext(newYamlName)}) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "PutObject yaml error") + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "PutObject yaml error" + err.Error()}) + return + } + } else { + log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error()) + newYamlName = "" } - } else { - log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error()) - newYamlName = "" } if err := imdb.UpdateAppVersion(req.Type, req.Version, req.ForceUpdate, newFileName, newYamlName); err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "UpdateAppVersion error", err.Error()) diff --git a/pkg/utils/file.go b/pkg/utils/file.go index 94a30917b..9108ede8f 100644 --- a/pkg/utils/file.go +++ b/pkg/utils/file.go @@ -70,5 +70,8 @@ func GetUploadAppNewName(appType int, version, fileName, yamlName string) (strin suffixYaml := path.Ext(yamlName) newFileName = fmt.Sprintf("%s%s", newFileName, suffixFile) newYamlName = fmt.Sprintf("%s%s", newYamlName, suffixYaml) + if yamlName == "" { + newYamlName = "" + } return newFileName, newYamlName, nil } From 6c0e96213f1b715e132ad5fe382ffabcd5f7b8b3 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 10 May 2022 19:04:08 +0800 Subject: [PATCH 43/44] update app --- pkg/common/db/model_struct.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/common/db/model_struct.go b/pkg/common/db/model_struct.go index 03709a67d..a4ab8c73f 100644 --- a/pkg/common/db/model_struct.go +++ b/pkg/common/db/model_struct.go @@ -280,6 +280,7 @@ type AppVersion struct { ForceUpdate bool `gorm:"column:force_update" json:"force_update"` FileName string `gorm:"column:file_name" json:"file_name"` YamlName string `gorm:"column:yaml_name" json:"yaml_name"` + TestField string `gorm:"column:test_field" json:"test_field"` } func (AppVersion) TableName() string { From 17759f9a98601297e35cea83c972a1c0f5149d74 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 10 May 2022 19:28:36 +0800 Subject: [PATCH 44/44] update app --- pkg/common/db/model_struct.go | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/common/db/model_struct.go b/pkg/common/db/model_struct.go index a4ab8c73f..03709a67d 100644 --- a/pkg/common/db/model_struct.go +++ b/pkg/common/db/model_struct.go @@ -280,7 +280,6 @@ type AppVersion struct { ForceUpdate bool `gorm:"column:force_update" json:"force_update"` FileName string `gorm:"column:file_name" json:"file_name"` YamlName string `gorm:"column:yaml_name" json:"yaml_name"` - TestField string `gorm:"column:test_field" json:"test_field"` } func (AppVersion) TableName() string {