mirror of
https://github.com/openimsdk/open-im-server.git
synced 2025-04-06 04:15:46 +08:00
add minio
This commit is contained in:
parent
6e9b9341d4
commit
a2cd7c8007
@ -19,7 +19,7 @@ mysql:
|
|||||||
dbMaxLifeTime: 120
|
dbMaxLifeTime: 120
|
||||||
|
|
||||||
mongo:
|
mongo:
|
||||||
dbAddress: [ 127.0.0.1:37017 ]
|
dbAddress: [ 127.0.0.1:37017 ]
|
||||||
dbDirect: false
|
dbDirect: false
|
||||||
dbTimeout: 10
|
dbTimeout: 10
|
||||||
dbDatabase: openIM
|
dbDatabase: openIM
|
||||||
@ -86,7 +86,12 @@ credential:
|
|||||||
bucket: echat-1302656840
|
bucket: echat-1302656840
|
||||||
secretID: AKIDGNYVChzIQinu7QEgtNp0hnNgqcV8vZTC
|
secretID: AKIDGNYVChzIQinu7QEgtNp0hnNgqcV8vZTC
|
||||||
secretKey: kz15vW83qM6dBUWIq681eBZA0c0vlIbe
|
secretKey: kz15vW83qM6dBUWIq681eBZA0c0vlIbe
|
||||||
|
minio:
|
||||||
|
bucket: openim
|
||||||
|
location: us-east-1
|
||||||
|
endpoint: http://127.0.0.1:9000
|
||||||
|
accessKeyID: minioadmin
|
||||||
|
secretAccessKey: minioadmin
|
||||||
|
|
||||||
rpcport:
|
rpcport:
|
||||||
openImUserPort: [ 10100 ]
|
openImUserPort: [ 10100 ]
|
||||||
|
4
go.sum
4
go.sum
@ -311,8 +311,10 @@ github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7V
|
|||||||
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
|
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
|
||||||
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
|
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
|
||||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
||||||
|
github.com/klauspost/compress v1.13.5 h1:9O69jUPDcsT9fEm74W92rZL9FQY7rCdaXVneq+yyzl4=
|
||||||
github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
|
github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
|
||||||
github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
|
github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
|
||||||
|
github.com/klauspost/cpuid v1.3.1 h1:5JNjFYYQrZeKRJ0734q51WCEEn2huer72Dc7K+R/b6s=
|
||||||
github.com/klauspost/cpuid v1.3.1/go.mod h1:bYW4mA6ZgKPob1/Dlai2LviZJO7KGI3uoWLd42rAQw4=
|
github.com/klauspost/cpuid v1.3.1/go.mod h1:bYW4mA6ZgKPob1/Dlai2LviZJO7KGI3uoWLd42rAQw4=
|
||||||
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||||
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
|
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
|
||||||
@ -358,6 +360,7 @@ github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0j
|
|||||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
||||||
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
|
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
|
||||||
github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso=
|
github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso=
|
||||||
|
github.com/minio/md5-simd v1.1.0 h1:QPfiOqlZH+Cj9teu0t9b1nTBfPbyTl16Of5MeuShdK4=
|
||||||
github.com/minio/md5-simd v1.1.0/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw=
|
github.com/minio/md5-simd v1.1.0/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw=
|
||||||
github.com/minio/minio-go/v7 v7.0.22 h1:iXhsiRyYh1ozm/+jN2qGgEIahYjEkvcpuu6NcdpSxcA=
|
github.com/minio/minio-go/v7 v7.0.22 h1:iXhsiRyYh1ozm/+jN2qGgEIahYjEkvcpuu6NcdpSxcA=
|
||||||
github.com/minio/minio-go/v7 v7.0.22/go.mod h1:ei5JjmxwHaMrgsMrn4U/+Nmg+d8MKS1U2DAn1ou4+Do=
|
github.com/minio/minio-go/v7 v7.0.22/go.mod h1:ei5JjmxwHaMrgsMrn4U/+Nmg+d8MKS1U2DAn1ou4+Do=
|
||||||
@ -421,6 +424,7 @@ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L
|
|||||||
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
||||||
github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k=
|
github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k=
|
||||||
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
|
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
|
||||||
|
github.com/rs/xid v1.2.1 h1:mhH9Nq+C1fY2l1XIpgxIiUOfNpRBYH1kKcr+qfKgjRc=
|
||||||
github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
|
github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
|
||||||
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
|
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
|
||||||
github.com/sagikazarmark/crypt v0.1.0/go.mod h1:B/mN0msZuINBtQ1zZLEQcegFJJf9vnYIR88KRMEuODE=
|
github.com/sagikazarmark/crypt v0.1.0/go.mod h1:B/mN0msZuINBtQ1zZLEQcegFJJf9vnYIR88KRMEuODE=
|
||||||
|
48
internal/api/third/minio_init.go
Normal file
48
internal/api/third/minio_init.go
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
package apiThird
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Open_IM/pkg/common/config"
|
||||||
|
"Open_IM/pkg/common/log"
|
||||||
|
"Open_IM/pkg/utils"
|
||||||
|
"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"
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
minioUrl, err := url2.Parse(config.Config.Credential.Minio.Endpoint)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError("", utils.GetSelfFuncName(), "parse failed, please check config/config.yaml", err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
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("", utils.GetSelfFuncName(), "init minio client failed", err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
opt := minio.MakeBucketOptions{
|
||||||
|
Region: config.Config.Credential.Minio.Location,
|
||||||
|
ObjectLocking: false,
|
||||||
|
}
|
||||||
|
err = minioClient.MakeBucket(context.Background(), config.Config.Credential.Minio.Bucket, opt)
|
||||||
|
if err != nil {
|
||||||
|
exists, err := minioClient.BucketExists(context.Background(), config.Config.Credential.Minio.Bucket)
|
||||||
|
if err == nil && exists {
|
||||||
|
log.NewInfo("", utils.GetSelfFuncName(), "We already own %s\n", config.Config.Credential.Minio.Bucket)
|
||||||
|
} else {
|
||||||
|
log.NewError("", utils.GetSelfFuncName(), "create bucket failed and bucket not exists", err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
err = minioClient.SetBucketPolicy(context.Background(), config.Config.Credential.Minio.Bucket, policy.BucketPolicyReadWrite)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError("", utils.GetSelfFuncName(), "SetBucketPolicy failed please set in ", err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo("", utils.GetSelfFuncName(), "minio create and set policy success")
|
||||||
|
}
|
@ -2,12 +2,15 @@ package apiThird
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
apiStruct "Open_IM/pkg/base_info"
|
apiStruct "Open_IM/pkg/base_info"
|
||||||
|
"Open_IM/pkg/common/config"
|
||||||
"Open_IM/pkg/common/constant"
|
"Open_IM/pkg/common/constant"
|
||||||
http "Open_IM/pkg/common/http"
|
|
||||||
"Open_IM/pkg/common/log"
|
"Open_IM/pkg/common/log"
|
||||||
"Open_IM/pkg/common/token_verify"
|
_ "Open_IM/pkg/common/token_verify"
|
||||||
|
"Open_IM/pkg/utils"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
_ cr "github.com/minio/minio-go/v7/pkg/credentials"
|
_ "github.com/minio/minio-go/v7"
|
||||||
|
cr "github.com/minio/minio-go/v7/pkg/credentials"
|
||||||
|
"net/http"
|
||||||
)
|
)
|
||||||
|
|
||||||
func MinioStorageCredential(c *gin.Context) {
|
func MinioStorageCredential(c *gin.Context) {
|
||||||
@ -15,15 +18,42 @@ func MinioStorageCredential(c *gin.Context) {
|
|||||||
req apiStruct.MinioStorageCredentialReq
|
req apiStruct.MinioStorageCredentialReq
|
||||||
resp apiStruct.MiniostorageCredentialResp
|
resp apiStruct.MiniostorageCredentialResp
|
||||||
)
|
)
|
||||||
ok, _ := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"))
|
if err := c.BindJSON(&req); err != nil {
|
||||||
if !ok {
|
log.NewError("0", utils.GetSelfFuncName(), "BindJSON failed ", err.Error())
|
||||||
log.NewError("", "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
http.RespHttp200(c, constant.ErrAccess, nil)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
//var stsOpts cr.STSAssumeRoleOptions
|
//ok, _ := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"))
|
||||||
//stsOpts.AccessKey = minioUsername
|
//if !ok {
|
||||||
//stsOpts.SecretKey = minioPassword
|
// log.NewError("", utils.GetSelfFuncName(), "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
log.NewInfo("0", req, resp)
|
// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
http.RespHttp200(c, constant.OK, nil)
|
// return
|
||||||
|
//}
|
||||||
|
var stsOpts cr.STSAssumeRoleOptions
|
||||||
|
stsOpts.AccessKey = config.Config.Credential.Minio.AccessKeyID
|
||||||
|
stsOpts.SecretKey = config.Config.Credential.Minio.SecretAccessKey
|
||||||
|
stsOpts.DurationSeconds = constant.MinioDurationTimes
|
||||||
|
li, err := cr.NewSTSAssumeRole(config.Config.Credential.Minio.Endpoint, stsOpts)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError("", utils.GetSelfFuncName(), "NewSTSAssumeRole failed", err.Error(), stsOpts, config.Config.Credential.Minio.Endpoint)
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
v, err := li.Get()
|
||||||
|
if err != nil {
|
||||||
|
log.NewError("0", utils.GetSelfFuncName(), "li.Get error", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
log.NewError("0", utils.GetSelfFuncName(), err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp.SessionToken = v.SessionToken
|
||||||
|
resp.SecretAccessKey = v.SecretAccessKey
|
||||||
|
resp.AccessKeyID = v.AccessKeyID
|
||||||
|
resp.BucketName = config.Config.Credential.Minio.Bucket
|
||||||
|
resp.StsEndpointURL = config.Config.Credential.Minio.Endpoint
|
||||||
|
c.JSON(http.StatusOK, gin.H{"errCode": 0, "errMsg": "", "data":resp})
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
package base_info
|
package base_info
|
||||||
|
|
||||||
type MinioStorageCredentialReq struct {
|
type MinioStorageCredentialReq struct {
|
||||||
Action string `form:"Action";binding:"required"`
|
OperationID string `json:"operationID"`
|
||||||
DurationSeconds int `form:"DurationSeconds"`
|
|
||||||
Version string `form:"Version"`
|
|
||||||
Policy string
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type MiniostorageCredentialResp struct {
|
type MiniostorageCredentialResp struct {
|
||||||
|
SecretAccessKey string `json:"secretAccessKey"`
|
||||||
|
AccessKeyID string `json:"accessKeyID"`
|
||||||
|
SessionToken string `json:"sessionToken"`
|
||||||
|
BucketName string `json:"bucketName"`
|
||||||
|
StsEndpointURL string `json:"stsEndpointURL"`
|
||||||
}
|
}
|
||||||
|
@ -36,6 +36,13 @@ type config struct {
|
|||||||
SecretID string `yaml:"secretID"`
|
SecretID string `yaml:"secretID"`
|
||||||
SecretKey string `yaml:"secretKey"`
|
SecretKey string `yaml:"secretKey"`
|
||||||
}
|
}
|
||||||
|
Minio struct {
|
||||||
|
Bucket string `yaml:"bucket"`
|
||||||
|
Location string `yaml:"location"`
|
||||||
|
Endpoint string `yaml:"endpoint"`
|
||||||
|
AccessKeyID string `yaml:"accessKeyID"`
|
||||||
|
SecretAccessKey string `yaml:"secretAccessKey"`
|
||||||
|
} `yaml:"minio"`
|
||||||
}
|
}
|
||||||
|
|
||||||
Mysql struct {
|
Mysql struct {
|
||||||
|
@ -121,6 +121,9 @@ const (
|
|||||||
|
|
||||||
//UserJoinGroupSource
|
//UserJoinGroupSource
|
||||||
JoinByAdmin = 1
|
JoinByAdmin = 1
|
||||||
|
|
||||||
|
//Minio
|
||||||
|
MinioDurationTimes = 3600
|
||||||
)
|
)
|
||||||
|
|
||||||
var ContentType2PushContent = map[int64]string{
|
var ContentType2PushContent = map[int64]string{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user