Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
zhaominxu
Open-IM-Server
提交
a2cd7c80
O
Open-IM-Server
项目概览
zhaominxu
/
Open-IM-Server
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
Open-IM-Server
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
a2cd7c80
编写于
2月 19, 2022
作者:
W
wangchuxiao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add minio
上级
6e9b9341
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
117 addition
and
19 deletion
+117
-19
config/config.yaml
config/config.yaml
+7
-2
go.sum
go.sum
+4
-0
internal/api/third/minio_init.go
internal/api/third/minio_init.go
+48
-0
internal/api/third/minio_storage_credential.go
internal/api/third/minio_storage_credential.go
+42
-12
pkg/base_info/minio_api_struct.go
pkg/base_info/minio_api_struct.go
+6
-5
pkg/common/config/config.go
pkg/common/config/config.go
+7
-0
pkg/common/constant/constant.go
pkg/common/constant/constant.go
+3
-0
未找到文件。
config/config.yaml
浏览文件 @
a2cd7c80
...
...
@@ -19,7 +19,7 @@ mysql:
dbMaxLifeTime
:
120
mongo
:
dbAddress
:
[
127.0.0.1
:
37017
]
dbAddress
:
[
127.0.0.1
:
37017
]
dbDirect
:
false
dbTimeout
:
10
dbDatabase
:
openIM
...
...
@@ -86,7 +86,12 @@ credential:
bucket
:
echat-1302656840
secretID
:
AKIDGNYVChzIQinu7QEgtNp0hnNgqcV8vZTC
secretKey
:
kz15vW83qM6dBUWIq681eBZA0c0vlIbe
minio
:
bucket
:
openim
location
:
us-east-1
endpoint
:
http://127.0.0.1:9000
accessKeyID
:
minioadmin
secretAccessKey
:
minioadmin
rpcport
:
openImUserPort
:
[
10100
]
...
...
go.sum
浏览文件 @
a2cd7c80
...
...
@@ -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.5.0/go.mod h1:
pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
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/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/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=
...
...
@@ -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/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/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/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=
...
...
@@ -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.6.1 h1:
/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k=
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/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=
...
...
internal/api/third/minio_init.go
0 → 100644
浏览文件 @
a2cd7c80
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"
)
}
internal/api/third/minio_storage_credential.go
浏览文件 @
a2cd7c80
...
...
@@ -2,12 +2,15 @@ package apiThird
import
(
apiStruct
"Open_IM/pkg/base_info"
"Open_IM/pkg/common/config"
"Open_IM/pkg/common/constant"
http
"Open_IM/pkg/common/http"
"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"
_
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
)
{
...
...
@@ -15,15 +18,42 @@ func MinioStorageCredential(c *gin.Context) {
req
apiStruct
.
MinioStorageCredentialReq
resp
apiStruct
.
MiniostorageCredentialResp
)
ok
,
_
:=
token_verify
.
GetUserIDFromToken
(
c
.
Request
.
Header
.
Get
(
"token"
))
if
!
ok
{
log
.
NewError
(
""
,
"GetUserIDFromToken false "
,
c
.
Request
.
Header
.
Get
(
"token"
))
http
.
RespHttp200
(
c
,
constant
.
ErrAccess
,
nil
)
if
err
:=
c
.
BindJSON
(
&
req
);
err
!=
nil
{
log
.
NewError
(
"0"
,
utils
.
GetSelfFuncName
(),
"BindJSON failed "
,
err
.
Error
())
c
.
JSON
(
http
.
StatusBadRequest
,
gin
.
H
{
"errCode"
:
400
,
"errMsg"
:
err
.
Error
()})
return
}
//var stsOpts cr.STSAssumeRoleOptions
//stsOpts.AccessKey = minioUsername
//stsOpts.SecretKey = minioPassword
log
.
NewInfo
(
"0"
,
req
,
resp
)
http
.
RespHttp200
(
c
,
constant
.
OK
,
nil
)
//ok, _ := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"))
//if !ok {
// log.NewError("", utils.GetSelfFuncName(), "GetUserIDFromToken false ", c.Request.Header.Get("token"))
// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
// 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
})
}
pkg/base_info/minio_api_struct.go
浏览文件 @
a2cd7c80
package
base_info
type
MinioStorageCredentialReq
struct
{
Action
string
`form:"Action";binding:"required"`
DurationSeconds
int
`form:"DurationSeconds"`
Version
string
`form:"Version"`
Policy
string
OperationID
string
`json:"operationID"`
}
type
MiniostorageCredentialResp
struct
{
SecretAccessKey
string
`json:"secretAccessKey"`
AccessKeyID
string
`json:"accessKeyID"`
SessionToken
string
`json:"sessionToken"`
BucketName
string
`json:"bucketName"`
StsEndpointURL
string
`json:"stsEndpointURL"`
}
pkg/common/config/config.go
浏览文件 @
a2cd7c80
...
...
@@ -36,6 +36,13 @@ type config struct {
SecretID
string
`yaml:"secretID"`
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
{
...
...
pkg/common/constant/constant.go
浏览文件 @
a2cd7c80
...
...
@@ -121,6 +121,9 @@ const (
//UserJoinGroupSource
JoinByAdmin
=
1
//Minio
MinioDurationTimes
=
3600
)
var
ContentType2PushContent
=
map
[
int64
]
string
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录