From a2cd7c8007d4e1ca7c7c6e582b6de4d7d2aed87a Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Sat, 19 Feb 2022 18:48:15 +0800 Subject: [PATCH 01/37] add minio --- config/config.yaml | 9 +++- go.sum | 4 ++ internal/api/third/minio_init.go | 48 +++++++++++++++++ .../api/third/minio_storage_credential.go | 54 ++++++++++++++----- pkg/base_info/minio_api_struct.go | 11 ++-- pkg/common/config/config.go | 7 +++ pkg/common/constant/constant.go | 3 ++ 7 files changed, 117 insertions(+), 19 deletions(-) create mode 100644 internal/api/third/minio_init.go diff --git a/config/config.yaml b/config/config.yaml index 9b735520c..c9b800b0f 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -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 ] diff --git a/go.sum b/go.sum index 8a47f8dd0..acc8bf998 100644 --- a/go.sum +++ b/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.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= diff --git a/internal/api/third/minio_init.go b/internal/api/third/minio_init.go new file mode 100644 index 000000000..eb087c4dc --- /dev/null +++ b/internal/api/third/minio_init.go @@ -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") +} diff --git a/internal/api/third/minio_storage_credential.go b/internal/api/third/minio_storage_credential.go index c66682b60..4d5800e06 100644 --- a/internal/api/third/minio_storage_credential.go +++ b/internal/api/third/minio_storage_credential.go @@ -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}) } diff --git a/pkg/base_info/minio_api_struct.go b/pkg/base_info/minio_api_struct.go index 228789b11..f15997053 100644 --- a/pkg/base_info/minio_api_struct.go +++ b/pkg/base_info/minio_api_struct.go @@ -1,12 +1,13 @@ 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"` } diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index f6049009d..8f89376cb 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -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 { diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index f3db29b03..34c075a00 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -121,6 +121,9 @@ const ( //UserJoinGroupSource JoinByAdmin = 1 + + //Minio + MinioDurationTimes = 3600 ) var ContentType2PushContent = map[int64]string{ From 8915848a523e97a4237ae8a408b617afca447bd7 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 21 Feb 2022 10:10:11 +0800 Subject: [PATCH 02/37] login modify --- internal/demo/register/login.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/demo/register/login.go b/internal/demo/register/login.go index 944a9d039..b6ec445f6 100644 --- a/internal/demo/register/login.go +++ b/internal/demo/register/login.go @@ -43,7 +43,7 @@ func Login(c *gin.Context) { } if r.Password != params.Password { log.NewError(params.OperationID, "password err", params.Password, account, r.Password, r.Account) - c.JSON(http.StatusOK, gin.H{"errCode": constant.PasswordErr, "errMsg": "Mobile phone number is not registered"}) + c.JSON(http.StatusOK, gin.H{"errCode": constant.PasswordErr, "errMsg": "password err"}) return } url := fmt.Sprintf("http://%s:10000/auth/user_token", utils.ServerIP) From f16f0e30699037219189bfbfdafc8a606a21e919 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Mon, 21 Feb 2022 11:06:06 +0800 Subject: [PATCH 03/37] Refactoring code --- config/config.yaml | 109 +++++++++++++++++++++++---------------------- 1 file changed, 56 insertions(+), 53 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index f40bfa62a..da820f3c5 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -1,47 +1,47 @@ # The class cannot be named by Pascal or camel case. # If it is not used, the corresponding structure will not be set, # and it will not be read naturally. -serverversion: 1.0.3 +serverversion: 3.0.0 #---------------Infrastructure configuration---------------------# etcd: - etcdSchema: openIM - etcdAddr: [ 127.0.0.1:2379 ] + etcdSchema: openIM #默认即可 + etcdAddr: [ 127.0.0.1:2379 ] #单机部署时,默认即可 mysql: - dbMysqlAddress: [ 127.0.0.1:13306 ] - dbMysqlUserName: root - dbMysqlPassword: openIM - dbMysqlDatabaseName: openIM - dbTableName: eMsg + dbMysqlAddress: [ 127.0.0.1:13306 ] #mysql地址 目前仅支持单机,默认即可 + dbMysqlUserName: root #mysql用户名,建议修改 + dbMysqlPassword: openIM # mysql密码,建议修改 + dbMysqlDatabaseName: openIM #默认即可 + dbTableName: eMsg #默认即可 dbMsgTableNum: 1 dbMaxOpenConns: 20 dbMaxIdleConns: 10 dbMaxLifeTime: 120 mongo: - dbAddress: [ 127.0.0.1:37017 ] + dbAddress: [ 127.0.0.1:37017 ] #redis地址 目前仅支持单机,默认即可 dbDirect: false dbTimeout: 10 - dbDatabase: openIM + dbDatabase: openIM #mongo db 默认即可 dbSource: admin - dbUserName: - dbPassword: + dbUserName: #mongo用户名,建议修改 + dbPassword: #mongo密码,建议修改 dbMaxPoolSize: 20 - dbRetainChatRecords: 7 + dbRetainChatRecords: 3650 #mongo保存离线消息时间(天) redis: - dbAddress: 127.0.0.1:16379 + dbAddress: 127.0.0.1:16379 #redis地址 目前仅支持单机,默认即可 dbMaxIdle: 128 dbMaxActive: 0 dbIdleTimeout: 120 - dbPassWord: openIM + dbPassWord: openIM #redis密码 建议修改 kafka: ws2mschat: - addr: [ 127.0.0.1:9092 ] + addr: [ 127.0.0.1:9092 ] #kafka配置,默认即可 topic: "ws2ms_chat" ms2pschat: - addr: [ 127.0.0.1:9092 ] + addr: [ 127.0.0.1:9092 ] #kafka配置,默认即可 topic: "ms2ps_chat" consumergroupid: msgToMongo: mongo @@ -55,6 +55,7 @@ kafka: # The service ip default is empty, # automatically obtain the machine's valid network card ip as the service ip, # otherwise the configuration ip is preferred +#如果是单机模式,用0.0.0.0或者不填,默认即可 serverip: 0.0.0.0 # endpoints 内部组件间访问的端点host名称,访问时,可以内部直接访问 host:port 来访问 @@ -73,13 +74,13 @@ endpoints: rpc_message_cms: openim_rpc_admin_cms api: - openImApiPort: [ 10000 ] + openImApiPort: [ 10000 ] #api服务端口,默认即可,注意开放此端口或做nginx转发 cmsapi: - openImCmsApiPort: [ 8000 ] + openImCmsApiPort: [ 8000 ] #管理后台api服务端口,默认即可,注意开放此端口或做nginx转发 sdk: - openImSdkWsPort: [ 30000 ] + openImSdkWsPort: [ 30000 ] #jssdk服务端口,默认即可,项目中使用jssdk才需开放此端口或做nginx转发 -credential: +credential: #腾讯cos,发送图片、视频、文件时需要,请自行申请后替换,必须修改 tencent: appID: 1302656840 region: ap-chengdu @@ -88,7 +89,7 @@ credential: secretKey: kz15vW83qM6dBUWIq681eBZA0c0vlIbe -rpcport: +rpcport: #rpc服务端口 默认即可 openImUserPort: [ 10100 ] openImFriendPort: [ 10200 ] openImOfflineMessagePort: [ 10300 ] @@ -109,7 +110,7 @@ rpcport: stateChange: switch: false -rpcregistername: +rpcregistername: #rpc注册服务名,默认即可 openImUserName: User openImFriendName: Friend openImOfflineMessageName: OfflineMessage @@ -124,52 +125,54 @@ rpcregistername: log: storageLocation: ../logs/ rotationTime: 24 - remainRotationCount: 5 - remainLogLevel: 6 + remainRotationCount: 5 #日志数量 + remainLogLevel: 6 #日志级别 6表示全都打印,测试阶段建议设置为6 elasticSearchSwitch: false elasticSearchAddr: [ 127.0.0.1:9201 ] elasticSearchUser: "" elasticSearchPassword: "" -modulename: +modulename: #日志文件按模块命名,默认即可 longConnSvrName: msg_gateway msgTransferName: msg_transfer pushName: push longconnsvr: - openImWsPort: [ 17778 ] + openImWsPort: [ 17778 ] # ws服务端口,默认即可,要开放此端口或做nginx转发 websocketMaxConnNum: 10000 websocketMaxMsgLen: 4096 websocketTimeOut: 10 push: - tpns: + tpns: #腾讯推送,暂未测试 暂不要使用 ios: accessID: 1600018281 secretKey: 3cd68a77a95b89e5089a1aca523f318f android: accessID: 111 secretKey: 111 - jpns: + jpns: #极光推送 在极光后台申请后,修改以下四项,必须修改 appKey: cf47465a368f24c659608e7e masterSecret: 02204efe3f3832947a236ee5 pushUrl: "https://api.jpush.cn/v3/push" pushIntent: "intent:#Intent;component=io.openim.app.enterprisechat/io.openim.app.enterprisechat.MainActivity;end" manager: + #app管理员userID和对应的secret 建议修改。 用于管理后台登录,也可以用户管理后台对应的api appManagerUid: [ "openIM123456","openIM654321", "openIM333", "openIMAdmin"] secrets: [ "openIM1","openIM2", "openIM333", "openIMAdmin"] secret: tuoyun - +# 多端互踢策略 +# 1:多平台登录:Android、iOS、Windows、Mac 每种平台只能一个在线,web端可以多个同时在线 multiloginpolicy: 1 #token config tokenpolicy: - accessSecret: "open_im_server" + accessSecret: "open_im_server" #token生成相关,默认即可 # Token effective time day as a unit - accessExpire: 7 + accessExpire: 3650 #token过期时间(天) -messagecallback: +messagecallback: #暂时不要使用 还需完善 callbackUrl: "http://www.xxx.com/msg/judge" #TimeOut use second as unit callbackTimeOut: 10 @@ -182,7 +185,7 @@ messagecallback: # state: # stateChange: # switch: false - +#ios系统推送声音以及标记计数 iospush: pushSound: "xxx" badgeCount: true @@ -246,7 +249,7 @@ notification: desc: "groupApplicationAccepted desc" ext: "groupApplicationAccepted ext" defaultTips: - tips: "was allowed to join the group" # group info changed by xx + tips: "allowed to join the group" # group info changed by xx groupApplicationRejected: conversation: @@ -258,7 +261,7 @@ notification: desc: " desc" ext: " ext" defaultTips: - tips: "was rejected into the group" # group info changed by xx + tips: "rejected into the group" # group info changed by xx groupOwnerTransferred: conversation: @@ -282,7 +285,7 @@ notification: desc: "memberKicked desc" ext: "memberKicked ext" defaultTips: - tips: "was kicked out of the group" # group info changed by xx + tips: "kicked out of the group" # group info changed by xx memberInvited: conversation: @@ -294,7 +297,7 @@ notification: desc: "memberInvited desc" ext: "memberInvited ext" defaultTips: - tips: "was invited into the group" # group info changed by xx + tips: "invited into the group" # group info changed by xx memberEnter: conversation: @@ -371,11 +374,11 @@ notification: unreadCount: false offlinePush: switch: true - title: "Deleted a friend" - desc: "Deleted a friend" - ext: "Deleted a friend" + title: "deleted a friend" + desc: "deleted a friend" + ext: "deleted a friend" defaultTips: - tips: "Deleted a friend" # + tips: "deleted a friend" # friendRemarkSet: @@ -398,11 +401,11 @@ notification: unreadCount: false offlinePush: switch: true - title: "Blocked a user" - desc: "Blocked a user" - ext: "Blocked a user" + title: "blocked a user" + desc: "blocked a user" + ext: "blocked a user" defaultTips: - tips: "Blocked a user" # + tips: "blocked a user" # blackDeleted: @@ -428,7 +431,7 @@ notification: desc: "Remove a blocked user" ext: "Remove a blocked user" defaultTips: - tips: "Remove a blocked user" + tips: "remove a blocked user" #####################conversation######################### conversationOptUpdate: @@ -447,23 +450,23 @@ notification: #---------------demo configuration---------------------# #The following configuration items are applied to openIM Demo configuration -demoswitch: true +demoswitch: true #是否启动demo,如果自身没有账号体系,设置为true demo: - openImDemoPort: [ 42233 ] - alismsverify: + openImDemoPort: [ 42233 ] #demo对外服务端口,默认即可,需要开放此端口或做nginx转发 + alismsverify: #阿里云短信配置,在阿里云申请成功后修改以下四项,必须修改 accessKeyId: LTAI5tJPkn4HuuePdiLdGqe71 accessKeySecret: 4n9OJ7ZCVN1U6KeHDAtOyNeVZcjOuV1 signName: OpenIM Corporation verificationCodeTemplateCode: SMS_2268101641 - superCode: 666666 + superCode: 666666 #超级验证码,建议修改掉,收不到短信验证码时可以用此替代 # second codeTTL: 60 - mail: + mail: #仅支持qq邮箱,具体操作参考 https://service.mail.qq.com/cgi-bin/help?subtype=1&id=28&no=1001256 必须修改 title: "openIM" senderMail: "1765567899@qq.com" senderAuthorizationCode: "1gxyausfoevlzbfag" smtpAddr: "smtp.qq.com" - smtpPort: 25 + smtpPort: 25 #需开放此端口 出口方向 From 344bafff45fabece2645a01485310de2493baaba Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 21 Feb 2022 12:20:05 +0800 Subject: [PATCH 04/37] push modify --- internal/push/logic/push_to_client.go | 46 ++++++++++++++------------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index 721405a78..41c943c4b 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -71,32 +71,34 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) { bCustomContent, _ := json.Marshal(customContent) jsonCustomContent := string(bCustomContent) var content string - switch pushMsg.MsgData.ContentType { - case constant.Text: - content = constant.ContentType2PushContent[constant.Text] - case constant.Picture: - content = constant.ContentType2PushContent[constant.Picture] - case constant.Voice: - content = constant.ContentType2PushContent[constant.Voice] - case constant.Video: - content = constant.ContentType2PushContent[constant.Video] - case constant.File: - content = constant.ContentType2PushContent[constant.File] - case constant.AtText: - a := AtContent{} - _ = utils.JsonStringToStruct(string(pushMsg.MsgData.Content), &a) - if utils.IsContain(v.RecvID, a.AtUserList) { - content = constant.ContentType2PushContent[constant.AtText] + constant.ContentType2PushContent[constant.Common] - } else { - content = constant.ContentType2PushContent[constant.GroupMsg] - } - default: - content = constant.ContentType2PushContent[constant.Common] - } if pushMsg.MsgData.OfflinePushInfo != nil { content = pushMsg.MsgData.OfflinePushInfo.Title + } else { + switch pushMsg.MsgData.ContentType { + case constant.Text: + content = constant.ContentType2PushContent[constant.Text] + case constant.Picture: + content = constant.ContentType2PushContent[constant.Picture] + case constant.Voice: + content = constant.ContentType2PushContent[constant.Voice] + case constant.Video: + content = constant.ContentType2PushContent[constant.Video] + case constant.File: + content = constant.ContentType2PushContent[constant.File] + case constant.AtText: + a := AtContent{} + _ = utils.JsonStringToStruct(string(pushMsg.MsgData.Content), &a) + if utils.IsContain(v.RecvID, a.AtUserList) { + content = constant.ContentType2PushContent[constant.AtText] + constant.ContentType2PushContent[constant.Common] + } else { + content = constant.ContentType2PushContent[constant.GroupMsg] + } + default: + content = constant.ContentType2PushContent[constant.Common] + } } + pushResult, err := push.JGAccountListPush(UIDList, content, jsonCustomContent, constant.PlatformIDToName(t)) if err != nil { log.NewError(pushMsg.OperationID, "offline push error", pushMsg.String(), err.Error(), constant.PlatformIDToName(t)) From d906d49930b64e13ab1a5ea38ef57415de8b6540 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 21 Feb 2022 14:11:51 +0800 Subject: [PATCH 05/37] model modify --- pkg/common/db/model_struct.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/model_struct.go b/pkg/common/db/model_struct.go index 51aa112b4..184f51e9d 100644 --- a/pkg/common/db/model_struct.go +++ b/pkg/common/db/model_struct.go @@ -187,7 +187,7 @@ type ChatLog struct { SessionType int32 `gorm:"column:session_type" json:"sessionType"` MsgFrom int32 `gorm:"column:msg_from" json:"msgFrom"` ContentType int32 `gorm:"column:content_type" json:"contentType"` - Content string `gorm:"column:content;type:varchar(1000)" json:"content"` + Content string `gorm:"column:content;type:varchar(3000)" json:"content"` Status int32 `gorm:"column:status" json:"status"` SendTime time.Time `gorm:"column:send_time" json:"sendTime"` CreateTime time.Time `gorm:"column:create_time" json:"createTime"` From 571c83314a62d5ebc1ab01c29bd65a24e9ee2ad5 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Mon, 21 Feb 2022 15:01:06 +0800 Subject: [PATCH 06/37] Refactoring code --- cmd/Open-IM-SDK-Core | 2 +- cmd/test/main.go | 69 +++++ go.mod | 1 + pkg/base_info/conversation_api_struct.go | 15 + pkg/base_info/public_struct.go | 14 + pkg/common/constant/constant.go | 2 + pkg/common/db/model.go | 30 +- pkg/common/db/mongoModel.go | 334 +++++++++++++++-------- 8 files changed, 351 insertions(+), 116 deletions(-) create mode 100644 cmd/test/main.go diff --git a/cmd/Open-IM-SDK-Core b/cmd/Open-IM-SDK-Core index e43ec7d42..bdb27fcff 160000 --- a/cmd/Open-IM-SDK-Core +++ b/cmd/Open-IM-SDK-Core @@ -1 +1 @@ -Subproject commit e43ec7d427a84702eea7a6aaa358a7a0a809019d +Subproject commit bdb27fcff0e9785cb0f92d9d04bdafe544a04de0 diff --git a/cmd/test/main.go b/cmd/test/main.go new file mode 100644 index 000000000..87d5165f7 --- /dev/null +++ b/cmd/test/main.go @@ -0,0 +1,69 @@ +package main + +import ( + "Open_IM/pkg/utils" + "context" + "fmt" + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/mongo" + "go.mongodb.org/mongo-driver/mongo/options" + "time" +) + +type MongoMsg struct { + UID string + Msg []string +} + + +func main() { + //"mongodb://%s:%s@%s/%s/?maxPoolSize=%d" + uri := "mongodb://user:pass@sample.host:27017/?maxPoolSize=20&w=majority" + DBAddress := "127.0.0.1:37017" + DBDatabase := "new-test-db" + Collection := "new-test-collection" + DBMaxPoolSize := 100 + uri = fmt.Sprintf("mongodb://%s/%s/?maxPoolSize=%d", + DBAddress,DBDatabase, + DBMaxPoolSize) + + mongoClient, err := mongo.Connect(context.TODO(), options.Client().ApplyURI(uri)) + if err != nil { + panic(err) + } + filter := bson.M{"uid":"my_uid"} + ctx, _ := context.WithTimeout(context.Background(), 30*time.Second) + for i:=0; i < 2; i++{ + + if err = mongoClient.Database(DBDatabase).Collection(Collection).FindOneAndUpdate(ctx, filter, + bson.M{"$push": bson.M{"msg": utils.Int32ToString(int32(i))}}).Err(); err != nil{ + fmt.Println("FindOneAndUpdate failed ", i, ) + var mmsg MongoMsg + mmsg.UID = "my_uid" + mmsg.Msg = append(mmsg.Msg, utils.Int32ToString(int32(i))) + _, err := mongoClient.Database(DBDatabase).Collection(Collection).InsertOne(ctx, &mmsg) + if err != nil { + fmt.Println("insertone failed ", err.Error(), i) + } else{ + fmt.Println("insertone ok ", i) + } + + }else { + fmt.Println("FindOneAndUpdate ok ", i) + } + + } + + var mmsg MongoMsg + + if err = mongoClient.Database(DBDatabase).Collection(Collection).FindOne(ctx, filter).Decode(&mmsg); err != nil { + fmt.Println("findone failed ", err.Error()) + }else{ + fmt.Println("findone ok ", mmsg.UID) + for i, v:=range mmsg.Msg{ + fmt.Println("find value: ", i, v) + } + } + + +} diff --git a/go.mod b/go.mod index 75e85fb3f..9fbbf033a 100644 --- a/go.mod +++ b/go.mod @@ -45,6 +45,7 @@ require ( github.com/tencentyun/qcloud-cos-sts-sdk v0.0.0-20210325043845-84a0811633ca github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 // indirect go.etcd.io/etcd v0.0.0-20200402134248-51bdeb39e698 + go.mongodb.org/mongo-driver v1.8.3 golang.org/x/image v0.0.0-20210220032944-ac19c3e999fb golang.org/x/net v0.0.0-20210917221730-978cfadd31cf google.golang.org/grpc v1.40.0 diff --git a/pkg/base_info/conversation_api_struct.go b/pkg/base_info/conversation_api_struct.go index bd54bafbf..95aa8527f 100644 --- a/pkg/base_info/conversation_api_struct.go +++ b/pkg/base_info/conversation_api_struct.go @@ -31,3 +31,18 @@ type SetReceiveMessageOptResp struct { CommResp ConversationOptResultList []*OptResult `json:"data"` } + +//type Conversation struct { +// OwnerUserID string `gorm:"column:owner_user_id;primary_key;type:char(128)" json:"OwnerUserID"` +// ConversationID string `gorm:"column:conversation_id;primary_key;type:char(128)" json:"conversationID"` +// ConversationType int32 `gorm:"column:conversation_type" json:"conversationType"` +// UserID string `gorm:"column:user_id;type:char(64)" json:"userID"` +// GroupID string `gorm:"column:group_id;type:char(128)" json:"groupID"` +// RecvMsgOpt int32 `gorm:"column:recv_msg_opt" json:"recvMsgOpt"` +// UnreadCount int32 `gorm:"column:unread_count" json:"unreadCount"` +// DraftTextTime int64 `gorm:"column:draft_text_time" json:"draftTextTime"` +// IsPinned bool `gorm:"column:is_pinned" json:"isPinned"` +// AttachedInfo string `gorm:"column:attached_info;type:varchar(1024)" json:"attachedInfo"` +// Ex string `gorm:"column:ex;type:varchar(1024)" json:"ex"` +//} + diff --git a/pkg/base_info/public_struct.go b/pkg/base_info/public_struct.go index 1e60ae294..2950dbea8 100644 --- a/pkg/base_info/public_struct.go +++ b/pkg/base_info/public_struct.go @@ -16,6 +16,20 @@ type ApiUserInfo struct { Ex string `json:"ex" binding:"omitempty,max=1024"` } +//type Conversation struct { +// OwnerUserID string `gorm:"column:owner_user_id;primary_key;type:char(128)" json:"OwnerUserID"` +// ConversationID string `gorm:"column:conversation_id;primary_key;type:char(128)" json:"conversationID"` +// ConversationType int32 `gorm:"column:conversation_type" json:"conversationType"` +// UserID string `gorm:"column:user_id;type:char(64)" json:"userID"` +// GroupID string `gorm:"column:group_id;type:char(128)" json:"groupID"` +// RecvMsgOpt int32 `gorm:"column:recv_msg_opt" json:"recvMsgOpt"` +// UnreadCount int32 `gorm:"column:unread_count" json:"unreadCount"` +// DraftTextTime int64 `gorm:"column:draft_text_time" json:"draftTextTime"` +// IsPinned bool `gorm:"column:is_pinned" json:"isPinned"` +// AttachedInfo string `gorm:"column:attached_info;type:varchar(1024)" json:"attachedInfo"` +// Ex string `gorm:"column:ex;type:varchar(1024)" json:"ex"` +//} + type GroupAddMemberInfo struct { UserID string `json:"userID" binding:"required"` RoleLevel int32 `json:"roleLevel" binding:"required"` diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index 34c075a00..dc67ab46e 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -176,3 +176,5 @@ func GroupIsBanPrivateChat(status int32) bool { } return true } + + const BigVersion = "v3" \ No newline at end of file diff --git a/pkg/common/db/model.go b/pkg/common/db/model.go index e2a1fb511..dada4137f 100644 --- a/pkg/common/db/model.go +++ b/pkg/common/db/model.go @@ -3,9 +3,16 @@ package db import ( "Open_IM/pkg/common/config" "Open_IM/pkg/common/log" + "context" + "fmt" "github.com/garyburd/redigo/redis" "gopkg.in/mgo.v2" "time" + + //"go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/mongo" + "go.mongodb.org/mongo-driver/mongo/options" + ) var DB DataBases @@ -14,6 +21,7 @@ type DataBases struct { MysqlDB mysqlDB mgoSession *mgo.Session redisPool *redis.Pool + mongoClient *mongo.Client } func key(dbAddress, dbName string) string { @@ -22,10 +30,21 @@ func key(dbAddress, dbName string) string { func init() { var mgoSession *mgo.Session + var mongoClient *mongo.Client var err1 error //mysql init initMysqlDB() // mongo init + // "mongodb://sysop:moon@localhost/records" + // uri := "mongodb://user:pass@sample.host:27017/?maxPoolSize=20&w=majority" + uri := fmt.Sprintf("mongodb://%s:%s@%s/%s/?maxPoolSize=%d", + config.Config.Mongo.DBUserName, config.Config.Mongo.DBPassword, + config.Config.Mongo.DBAddress[0],config.Config.Mongo.DBDatabase, + config.Config.Mongo.DBMaxPoolSize) + + mongoClient, err := mongo.Connect(context.TODO(), options.Client().ApplyURI(uri)) + + mgoDailInfo := &mgo.DialInfo{ Addrs: config.Config.Mongo.DBAddress, Direct: config.Config.Mongo.DBDirect, @@ -36,17 +55,19 @@ func init() { Password: config.Config.Mongo.DBPassword, PoolLimit: config.Config.Mongo.DBMaxPoolSize, } - mgoSession, err := mgo.DialWithInfo(mgoDailInfo) - if err != nil { - log.NewError("mgo init err", err.Error(), mgoDailInfo) - } + mgoSession, err = mgo.DialWithInfo(mgoDailInfo) + if err != nil { + log.NewError(" mongo.Connect failed, try ", err.Error(), uri) time.Sleep(time.Duration(30) * time.Second) + mongoClient, err1 = mongo.Connect(context.TODO(), options.Client().ApplyURI(uri)) mgoSession, err1 = mgo.DialWithInfo(mgoDailInfo) if err1 != nil { + log.NewError(" mongo.Connect failed, panic", err.Error(), uri) panic(err1.Error()) } } + DB.mongoClient = mongoClient DB.mgoSession = mgoSession DB.mgoSession.SetMode(mgo.Monotonic, true) c := DB.mgoSession.DB(config.Config.Mongo.DBDatabase).C(cChat) @@ -55,6 +76,7 @@ func init() { panic(err.Error()) } + // redis pool init DB.redisPool = &redis.Pool{ MaxIdle: config.Config.Redis.DBMaxIdle, diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index 98318dd65..7a9c4b302 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -6,10 +6,12 @@ import ( pbMsg "Open_IM/pkg/proto/chat" open_im_sdk "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" + "context" "errors" - "github.com/garyburd/redigo/redis" + //"github.com/garyburd/redigo/redis" "github.com/golang/protobuf/proto" "gopkg.in/mgo.v2/bson" + "strconv" "time" ) @@ -34,42 +36,97 @@ type GroupMember_x struct { } func (d *DataBases) GetMinSeqFromMongo(uid string) (MinSeq uint32, err error) { - var i, NB uint32 - var seqUid string + return 1, nil + //var i, NB uint32 + //var seqUid string + //session := d.mgoSession.Clone() + //if session == nil { + // return MinSeq, errors.New("session == nil") + //} + //defer session.Close() + //c := session.DB(config.Config.Mongo.DBDatabase).C(cChat) + //MaxSeq, err := d.GetUserMaxSeq(uid) + //if err != nil && err != redis.ErrNil { + // return MinSeq, err + //} + //NB = uint32(MaxSeq / singleGocMsgNum) + //for i = 0; i <= NB; i++ { + // seqUid = indexGen(uid, i) + // n, err := c.Find(bson.M{"uid": seqUid}).Count() + // if err == nil && n != 0 { + // if i == 0 { + // MinSeq = 1 + // } else { + // MinSeq = uint32(i * singleGocMsgNum) + // } + // break + // } + //} + //return MinSeq, nil +} + +func (d *DataBases) GetMsgBySeqList(uid string, seqList []uint32, operationID string) (seqMsg []*open_im_sdk.MsgData, err error) { + var hasSeqList []uint32 + singleCount := 0 session := d.mgoSession.Clone() if session == nil { - return MinSeq, errors.New("session == nil") + return nil, errors.New("session == nil") } defer session.Close() c := session.DB(config.Config.Mongo.DBDatabase).C(cChat) - MaxSeq, err := d.GetUserMaxSeq(uid) - if err != nil && err != redis.ErrNil { - return MinSeq, err - } - NB = uint32(MaxSeq / singleGocMsgNum) - for i = 0; i <= NB; i++ { - seqUid = indexGen(uid, i) - n, err := c.Find(bson.M{"uid": seqUid}).Count() - if err == nil && n != 0 { - if i == 0 { - MinSeq = 1 + m := func(uid string, seqList []uint32) map[string][]uint32 { + t := make(map[string][]uint32) + for i := 0; i < len(seqList); i++ { + seqUid := getSeqUid(uid, seqList[i]) + if value, ok := t[seqUid]; !ok { + var temp []uint32 + t[seqUid] = append(temp, seqList[i]) } else { - MinSeq = uint32(i * singleGocMsgNum) + t[seqUid] = append(value, seqList[i]) } - break } + return t + }(uid, seqList) + sChat := UserChat{} + for seqUid, value := range m { + if err = c.Find(bson.M{"uid": seqUid}).One(&sChat); err != nil { + log.NewError(operationID, "not find seqUid", seqUid, value, uid, seqList, err.Error()) + continue + } + singleCount = 0 + for i := 0; i < len(sChat.Msg); i++ { + msg := new(open_im_sdk.MsgData) + if err = proto.Unmarshal(sChat.Msg[i].Msg, msg); err != nil { + log.NewError(operationID, "Unmarshal err", seqUid, value, uid, seqList, err.Error()) + return nil, err + } + if isContainInt32(msg.Seq, value) { + seqMsg = append(seqMsg, msg) + hasSeqList = append(hasSeqList, msg.Seq) + singleCount++ + if singleCount == len(value) { + break + } + } + } + } + if len(hasSeqList) != len(seqList) { + var diff []uint32 + diff = utils.Difference(hasSeqList, seqList) + exceptionMSg := genExceptionMessageBySeqList(diff) + seqMsg = append(seqMsg, exceptionMSg...) + } - return MinSeq, nil + return seqMsg, nil } -func (d *DataBases) GetMsgBySeqList(uid string, seqList []uint32, operationID string) (seqMsg []*open_im_sdk.MsgData, err error) { + + +func (d *DataBases) GetMsgBySeqListMongo2(uid string, seqList []uint32, operationID string) (seqMsg []*open_im_sdk.MsgData, err error) { var hasSeqList []uint32 singleCount := 0 - session := d.mgoSession.Clone() - if session == nil { - return nil, errors.New("session == nil") - } - defer session.Close() - c := session.DB(config.Config.Mongo.DBDatabase).C(cChat) + ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) + c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cChat) + m := func(uid string, seqList []uint32) map[string][]uint32 { t := make(map[string][]uint32) for i := 0; i < len(seqList); i++ { @@ -85,7 +142,7 @@ func (d *DataBases) GetMsgBySeqList(uid string, seqList []uint32, operationID st }(uid, seqList) sChat := UserChat{} for seqUid, value := range m { - if err = c.Find(bson.M{"uid": seqUid}).One(&sChat); err != nil { + if err = c.FindOne(ctx, bson.M{"uid": seqUid}).Decode(&sChat); err != nil { log.NewError(operationID, "not find seqUid", seqUid, value, uid, seqList, err.Error()) continue } @@ -115,6 +172,8 @@ func (d *DataBases) GetMsgBySeqList(uid string, seqList []uint32, operationID st } return seqMsg, nil } + + func genExceptionMessageBySeqList(seqList []uint32) (exceptionMsg []*open_im_sdk.MsgData) { for _, v := range seqList { msg := new(open_im_sdk.MsgData) @@ -124,6 +183,37 @@ func genExceptionMessageBySeqList(seqList []uint32) (exceptionMsg []*open_im_sdk return exceptionMsg } +func (d *DataBases) SaveUserChatMongo2(uid string, sendTime int64, m *pbMsg.MsgDataToDB) error { + ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) + c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cChat) + newTime := getCurrentTimestampByMill() + operationID := "" + seqUid := getSeqUid(uid, m.MsgData.Seq) + filter := bson.M{"uid": seqUid} + var err error + sMsg := MsgInfo{} + sMsg.SendTime = sendTime + if sMsg.Msg, err = proto.Marshal(m.MsgData); err != nil { + return utils.Wrap(err,"") + } + err = c.FindOneAndUpdate(ctx, filter, bson.M{"$push": bson.M{"msg": sMsg}}).Err() + log.NewDebug(operationID, "get mgoSession cost time", getCurrentTimestampByMill()-newTime) + if err != nil { + sChat := UserChat{} + sChat.UID = seqUid + sChat.Msg = append(sChat.Msg, sMsg) + if _, err = c.InsertOne(ctx, &sChat) ; err != nil{ + log.NewDebug(operationID, "InsertOne failed", filter) + return utils.Wrap(err, "") + } + }else{ + log.NewDebug(operationID, "FindOneAndUpdate ok", filter) + } + + log.NewDebug(operationID, "find mgo uid cost time", getCurrentTimestampByMill()-newTime) + return nil +} + func (d *DataBases) SaveUserChat(uid string, sendTime int64, m *pbMsg.MsgDataToDB) error { var seqUid string newTime := getCurrentTimestampByMill() @@ -163,115 +253,137 @@ func (d *DataBases) SaveUserChat(uid string, sendTime int64, m *pbMsg.MsgDataToD return nil } + func (d *DataBases) DelUserChat(uid string) error { - session := d.mgoSession.Clone() - if session == nil { - return errors.New("session == nil") - } - defer session.Close() + return nil + //session := d.mgoSession.Clone() + //if session == nil { + // return errors.New("session == nil") + //} + //defer session.Close() + // + //c := session.DB(config.Config.Mongo.DBDatabase).C(cChat) + // + //delTime := time.Now().Unix() - int64(config.Config.Mongo.DBRetainChatRecords)*24*3600 + //if err := c.Update(bson.M{"uid": uid}, bson.M{"$pull": bson.M{"msg": bson.M{"sendtime": bson.M{"$lte": delTime}}}}); err != nil { + // return err + //} + // + //return nil +} - c := session.DB(config.Config.Mongo.DBDatabase).C(cChat) + +func (d *DataBases) DelUserChatMongo2(uid string) error { + ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) + c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cChat) + filter := bson.M{"uid": uid} delTime := time.Now().Unix() - int64(config.Config.Mongo.DBRetainChatRecords)*24*3600 - if err := c.Update(bson.M{"uid": uid}, bson.M{"$pull": bson.M{"msg": bson.M{"sendtime": bson.M{"$lte": delTime}}}}); err != nil { - return err + if _, err := c.UpdateOne(ctx, filter, bson.M{"$pull": bson.M{"msg": bson.M{"sendtime": bson.M{"$lte": delTime}}}}); err != nil { + return utils.Wrap(err, "") } - return nil } -func (d *DataBases) MgoUserCount() (int, error) { - session := d.mgoSession.Clone() - if session == nil { - return 0, errors.New("session == nil") - } - defer session.Close() - c := session.DB(config.Config.Mongo.DBDatabase).C(cChat) - return c.Find(nil).Count() +func (d *DataBases) MgoUserCount() (int, error) { + return 0, nil + //session := d.mgoSession.Clone() + //if session == nil { + // return 0, errors.New("session == nil") + //} + //defer session.Close() + // + //c := session.DB(config.Config.Mongo.DBDatabase).C(cChat) + // + //return c.Find(nil).Count() } func (d *DataBases) MgoSkipUID(count int) (string, error) { - session := d.mgoSession.Clone() - if session == nil { - return "", errors.New("session == nil") - } - defer session.Close() - - c := session.DB(config.Config.Mongo.DBDatabase).C(cChat) - - sChat := UserChat{} - c.Find(nil).Skip(count).Limit(1).One(&sChat) - return sChat.UID, nil + return "", nil + //session := d.mgoSession.Clone() + //if session == nil { + // return "", errors.New("session == nil") + //} + //defer session.Close() + // + //c := session.DB(config.Config.Mongo.DBDatabase).C(cChat) + // + //sChat := UserChat{} + //c.Find(nil).Skip(count).Limit(1).One(&sChat) + //return sChat.UID, nil } func (d *DataBases) GetGroupMember(groupID string) []string { - groupInfo := GroupMember_x{} - groupInfo.GroupID = groupID - groupInfo.UIDList = make([]string, 0) - - session := d.mgoSession.Clone() - if session == nil { - return groupInfo.UIDList - } - defer session.Close() - - c := session.DB(config.Config.Mongo.DBDatabase).C(cGroup) - - if err := c.Find(bson.M{"groupid": groupInfo.GroupID}).One(&groupInfo); err != nil { - return groupInfo.UIDList - } - - return groupInfo.UIDList + return nil + //groupInfo := GroupMember_x{} + //groupInfo.GroupID = groupID + //groupInfo.UIDList = make([]string, 0) + // + //session := d.mgoSession.Clone() + //if session == nil { + // return groupInfo.UIDList + //} + //defer session.Close() + // + //c := session.DB(config.Config.Mongo.DBDatabase).C(cGroup) + // + //if err := c.Find(bson.M{"groupid": groupInfo.GroupID}).One(&groupInfo); err != nil { + // return groupInfo.UIDList + //} + // + //return groupInfo.UIDList } func (d *DataBases) AddGroupMember(groupID, uid string) error { - session := d.mgoSession.Clone() - if session == nil { - return errors.New("session == nil") - } - defer session.Close() - - c := session.DB(config.Config.Mongo.DBDatabase).C(cGroup) - - n, err := c.Find(bson.M{"groupid": groupID}).Count() - if err != nil { - return err - } - - if n == 0 { - groupInfo := GroupMember_x{} - groupInfo.GroupID = groupID - groupInfo.UIDList = append(groupInfo.UIDList, uid) - err = c.Insert(&groupInfo) - if err != nil { - return err - } - } else { - err = c.Update(bson.M{"groupid": groupID}, bson.M{"$addToSet": bson.M{"uidlist": uid}}) - if err != nil { - return err - } - } - return nil + //session := d.mgoSession.Clone() + //if session == nil { + // return errors.New("session == nil") + //} + //defer session.Close() + // + //c := session.DB(config.Config.Mongo.DBDatabase).C(cGroup) + // + //n, err := c.Find(bson.M{"groupid": groupID}).Count() + //if err != nil { + // return err + //} + // + //if n == 0 { + // groupInfo := GroupMember_x{} + // groupInfo.GroupID = groupID + // groupInfo.UIDList = append(groupInfo.UIDList, uid) + // err = c.Insert(&groupInfo) + // if err != nil { + // return err + // } + //} else { + // err = c.Update(bson.M{"groupid": groupID}, bson.M{"$addToSet": bson.M{"uidlist": uid}}) + // if err != nil { + // return err + // } + //} + // + //return nil } func (d *DataBases) DelGroupMember(groupID, uid string) error { - session := d.mgoSession.Clone() - if session == nil { - return errors.New("session == nil") - } - defer session.Close() - - c := session.DB(config.Config.Mongo.DBDatabase).C(cGroup) - - if err := c.Update(bson.M{"groupid": groupID}, bson.M{"$pull": bson.M{"uidlist": uid}}); err != nil { - return err - } - return nil + //session := d.mgoSession.Clone() + //if session == nil { + // return errors.New("session == nil") + //} + //defer session.Close() + // + //c := session.DB(config.Config.Mongo.DBDatabase).C(cGroup) + // + //if err := c.Update(bson.M{"groupid": groupID}, bson.M{"$pull": bson.M{"uidlist": uid}}); err != nil { + // return err + //} + // + //return nil } func getCurrentTimestampByMill() int64 { From c962a19eb7c1d72d43cd079d4dd2f0ccedce5434 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Mon, 21 Feb 2022 15:03:29 +0800 Subject: [PATCH 07/37] replace mongo driver --- internal/msg_transfer/logic/db.go | 3 ++- internal/rpc/msg/pull_message.go | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/internal/msg_transfer/logic/db.go b/internal/msg_transfer/logic/db.go index b9ce8b589..549ebd1cf 100644 --- a/internal/msg_transfer/logic/db.go +++ b/internal/msg_transfer/logic/db.go @@ -18,5 +18,6 @@ func saveUserChat(uid string, msg *pbMsg.MsgDataToMQ) error { pbSaveData := pbMsg.MsgDataToDB{} pbSaveData.MsgData = msg.MsgData log.NewInfo(msg.OperationID, "IncrUserSeq cost time", utils.GetCurrentTimestampByMill()-time) - return db.DB.SaveUserChat(uid, pbSaveData.MsgData.SendTime, &pbSaveData) +// return db.DB.SaveUserChat(uid, pbSaveData.MsgData.SendTime, &pbSaveData) + return db.DB.SaveUserChatMongo2(uid, pbSaveData.MsgData.SendTime, &pbSaveData) } diff --git a/internal/rpc/msg/pull_message.go b/internal/rpc/msg/pull_message.go index 05f1dad39..56b79e39f 100644 --- a/internal/rpc/msg/pull_message.go +++ b/internal/rpc/msg/pull_message.go @@ -39,7 +39,8 @@ func (rpc *rpcChat) GetMaxAndMinSeq(_ context.Context, in *pbMsg.GetMaxAndMinSeq func (rpc *rpcChat) PullMessageBySeqList(_ context.Context, in *open_im_sdk.PullMessageBySeqListReq) (*open_im_sdk.PullMessageBySeqListResp, error) { log.NewInfo(in.OperationID, "rpc PullMessageBySeqList is arriving", in.String()) resp := new(open_im_sdk.PullMessageBySeqListResp) - msgList, err := commonDB.DB.GetMsgBySeqList(in.UserID, in.SeqList, in.OperationID) +// msgList, err := commonDB.DB.GetMsgBySeqList(in.UserID, in.SeqList, in.OperationID) + msgList, err := commonDB.DB.GetMsgBySeqListMongo2(in.UserID, in.SeqList, in.OperationID) if err != nil { log.ErrorByKv("PullMessageBySeqList data error", in.OperationID, in.String()) resp.ErrCode = 201 From bf948789ea5c2485e9564297475f3274f57ff6ac Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Mon, 21 Feb 2022 15:07:50 +0800 Subject: [PATCH 08/37] replace mongo driver --- cmd/Open-IM-SDK-Core | 2 +- config/config.yaml | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/cmd/Open-IM-SDK-Core b/cmd/Open-IM-SDK-Core index bdb27fcff..855e89361 160000 --- a/cmd/Open-IM-SDK-Core +++ b/cmd/Open-IM-SDK-Core @@ -1 +1 @@ -Subproject commit bdb27fcff0e9785cb0f92d9d04bdafe544a04de0 +Subproject commit 855e893610c905e3105484c3519613b993301bd2 diff --git a/config/config.yaml b/config/config.yaml index da820f3c5..08fb9d7e4 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -450,7 +450,8 @@ notification: #---------------demo configuration---------------------# #The following configuration items are applied to openIM Demo configuration -demoswitch: true #是否启动demo,如果自身没有账号体系,设置为true +#是否启动demo,如果自身没有账号体系,设置为true +demoswitch: true demo: openImDemoPort: [ 42233 ] #demo对外服务端口,默认即可,需要开放此端口或做nginx转发 alismsverify: #阿里云短信配置,在阿里云申请成功后修改以下四项,必须修改 From 53a4b90d96d9dea42056da3dfb69c573313693f9 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Mon, 21 Feb 2022 15:12:48 +0800 Subject: [PATCH 09/37] replace mongo driver --- pkg/common/db/model.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkg/common/db/model.go b/pkg/common/db/model.go index dada4137f..729e1323e 100644 --- a/pkg/common/db/model.go +++ b/pkg/common/db/model.go @@ -61,6 +61,10 @@ func init() { log.NewError(" mongo.Connect failed, try ", err.Error(), uri) time.Sleep(time.Duration(30) * time.Second) mongoClient, err1 = mongo.Connect(context.TODO(), options.Client().ApplyURI(uri)) + if err1 != nil { + log.NewError(" mongo.Connect failed, panic", err.Error(), uri) + panic(err1.Error()) + } mgoSession, err1 = mgo.DialWithInfo(mgoDailInfo) if err1 != nil { log.NewError(" mongo.Connect failed, panic", err.Error(), uri) From ede3b07963a82527f438cc610a4350ed2965e123 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Mon, 21 Feb 2022 15:14:24 +0800 Subject: [PATCH 10/37] replace mongo driver --- pkg/common/db/model.go | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/pkg/common/db/model.go b/pkg/common/db/model.go index 729e1323e..f6f074c48 100644 --- a/pkg/common/db/model.go +++ b/pkg/common/db/model.go @@ -43,6 +43,16 @@ func init() { config.Config.Mongo.DBMaxPoolSize) mongoClient, err := mongo.Connect(context.TODO(), options.Client().ApplyURI(uri)) + if err != nil{ + log.NewError(" mongo.Connect failed, try ", err.Error(), uri) + time.Sleep(time.Duration(30) * time.Second) + mongoClient, err1 = mongo.Connect(context.TODO(), options.Client().ApplyURI(uri)) + if err1 != nil { + log.NewError(" mongo.Connect failed, panic", err.Error(), uri) + panic(err1.Error()) + } + } + mgoDailInfo := &mgo.DialInfo{ @@ -58,13 +68,7 @@ func init() { mgoSession, err = mgo.DialWithInfo(mgoDailInfo) if err != nil { - log.NewError(" mongo.Connect failed, try ", err.Error(), uri) - time.Sleep(time.Duration(30) * time.Second) - mongoClient, err1 = mongo.Connect(context.TODO(), options.Client().ApplyURI(uri)) - if err1 != nil { - log.NewError(" mongo.Connect failed, panic", err.Error(), uri) - panic(err1.Error()) - } + mgoSession, err1 = mgo.DialWithInfo(mgoDailInfo) if err1 != nil { log.NewError(" mongo.Connect failed, panic", err.Error(), uri) From 9a35af9fb2beb3aa43572184b1a10b83e6484420 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Mon, 21 Feb 2022 15:17:55 +0800 Subject: [PATCH 11/37] replace mongo driver --- internal/msg_transfer/logic/db.go | 4 ++-- internal/rpc/msg/pull_message.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/internal/msg_transfer/logic/db.go b/internal/msg_transfer/logic/db.go index 549ebd1cf..edc269f9f 100644 --- a/internal/msg_transfer/logic/db.go +++ b/internal/msg_transfer/logic/db.go @@ -18,6 +18,6 @@ func saveUserChat(uid string, msg *pbMsg.MsgDataToMQ) error { pbSaveData := pbMsg.MsgDataToDB{} pbSaveData.MsgData = msg.MsgData log.NewInfo(msg.OperationID, "IncrUserSeq cost time", utils.GetCurrentTimestampByMill()-time) -// return db.DB.SaveUserChat(uid, pbSaveData.MsgData.SendTime, &pbSaveData) - return db.DB.SaveUserChatMongo2(uid, pbSaveData.MsgData.SendTime, &pbSaveData) + return db.DB.SaveUserChat(uid, pbSaveData.MsgData.SendTime, &pbSaveData) +// return db.DB.SaveUserChatMongo2(uid, pbSaveData.MsgData.SendTime, &pbSaveData) } diff --git a/internal/rpc/msg/pull_message.go b/internal/rpc/msg/pull_message.go index 56b79e39f..126c6eb29 100644 --- a/internal/rpc/msg/pull_message.go +++ b/internal/rpc/msg/pull_message.go @@ -39,8 +39,8 @@ func (rpc *rpcChat) GetMaxAndMinSeq(_ context.Context, in *pbMsg.GetMaxAndMinSeq func (rpc *rpcChat) PullMessageBySeqList(_ context.Context, in *open_im_sdk.PullMessageBySeqListReq) (*open_im_sdk.PullMessageBySeqListResp, error) { log.NewInfo(in.OperationID, "rpc PullMessageBySeqList is arriving", in.String()) resp := new(open_im_sdk.PullMessageBySeqListResp) -// msgList, err := commonDB.DB.GetMsgBySeqList(in.UserID, in.SeqList, in.OperationID) - msgList, err := commonDB.DB.GetMsgBySeqListMongo2(in.UserID, in.SeqList, in.OperationID) + msgList, err := commonDB.DB.GetMsgBySeqList(in.UserID, in.SeqList, in.OperationID) +// msgList, err := commonDB.DB.GetMsgBySeqListMongo2(in.UserID, in.SeqList, in.OperationID) if err != nil { log.ErrorByKv("PullMessageBySeqList data error", in.OperationID, in.String()) resp.ErrCode = 201 From 7cf712daff2171b7b69ad5e08e51bc1835a4d7db Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Mon, 21 Feb 2022 15:20:39 +0800 Subject: [PATCH 12/37] replace mongo driver --- pkg/common/db/model.go | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/pkg/common/db/model.go b/pkg/common/db/model.go index f6f074c48..c61416dd4 100644 --- a/pkg/common/db/model.go +++ b/pkg/common/db/model.go @@ -37,21 +37,21 @@ func init() { // mongo init // "mongodb://sysop:moon@localhost/records" // uri := "mongodb://user:pass@sample.host:27017/?maxPoolSize=20&w=majority" - uri := fmt.Sprintf("mongodb://%s:%s@%s/%s/?maxPoolSize=%d", - config.Config.Mongo.DBUserName, config.Config.Mongo.DBPassword, - config.Config.Mongo.DBAddress[0],config.Config.Mongo.DBDatabase, - config.Config.Mongo.DBMaxPoolSize) - - mongoClient, err := mongo.Connect(context.TODO(), options.Client().ApplyURI(uri)) - if err != nil{ - log.NewError(" mongo.Connect failed, try ", err.Error(), uri) - time.Sleep(time.Duration(30) * time.Second) - mongoClient, err1 = mongo.Connect(context.TODO(), options.Client().ApplyURI(uri)) - if err1 != nil { - log.NewError(" mongo.Connect failed, panic", err.Error(), uri) - panic(err1.Error()) - } - } + //uri := fmt.Sprintf("mongodb://%s:%s@%s/%s/?maxPoolSize=%d", + // config.Config.Mongo.DBUserName, config.Config.Mongo.DBPassword, + // config.Config.Mongo.DBAddress[0],config.Config.Mongo.DBDatabase, + // config.Config.Mongo.DBMaxPoolSize) + // + //mongoClient, err := mongo.Connect(context.TODO(), options.Client().ApplyURI(uri)) + //if err != nil{ + // log.NewError(" mongo.Connect failed, try ", err.Error(), uri) + // time.Sleep(time.Duration(30) * time.Second) + // mongoClient, err1 = mongo.Connect(context.TODO(), options.Client().ApplyURI(uri)) + // if err1 != nil { + // log.NewError(" mongo.Connect failed, panic", err.Error(), uri) + // panic(err1.Error()) + // } + //} From 996570cc57d3c1fd68becff3ad17a1cce5c0a8a5 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Mon, 21 Feb 2022 15:21:45 +0800 Subject: [PATCH 13/37] replace mongo driver --- pkg/common/db/model.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/model.go b/pkg/common/db/model.go index c61416dd4..2dbc3bb8c 100644 --- a/pkg/common/db/model.go +++ b/pkg/common/db/model.go @@ -65,7 +65,7 @@ func init() { Password: config.Config.Mongo.DBPassword, PoolLimit: config.Config.Mongo.DBMaxPoolSize, } - mgoSession, err = mgo.DialWithInfo(mgoDailInfo) + mgoSession, err := mgo.DialWithInfo(mgoDailInfo) if err != nil { From ec023ec13e464840dbd67ce87d88f63ba3f55fc4 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Mon, 21 Feb 2022 15:22:12 +0800 Subject: [PATCH 14/37] replace mongo driver --- pkg/common/db/model.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/common/db/model.go b/pkg/common/db/model.go index 2dbc3bb8c..cfa2a566a 100644 --- a/pkg/common/db/model.go +++ b/pkg/common/db/model.go @@ -3,15 +3,15 @@ package db import ( "Open_IM/pkg/common/config" "Open_IM/pkg/common/log" - "context" - "fmt" +// "context" +// "fmt" "github.com/garyburd/redigo/redis" "gopkg.in/mgo.v2" "time" //"go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" - "go.mongodb.org/mongo-driver/mongo/options" +// "go.mongodb.org/mongo-driver/mongo/options" ) From 1e05811c137cc54f20975fc86aa74ecfe4c2c163 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Mon, 21 Feb 2022 15:22:40 +0800 Subject: [PATCH 15/37] replace mongo driver --- pkg/common/db/model.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/model.go b/pkg/common/db/model.go index cfa2a566a..201e5e7cc 100644 --- a/pkg/common/db/model.go +++ b/pkg/common/db/model.go @@ -71,7 +71,7 @@ func init() { mgoSession, err1 = mgo.DialWithInfo(mgoDailInfo) if err1 != nil { - log.NewError(" mongo.Connect failed, panic", err.Error(), uri) +// log.NewError(" mongo.Connect failed, panic", err.Error(), uri) panic(err1.Error()) } } From 2171acc90928fb0dd90026361cb56c11e1770e76 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Mon, 21 Feb 2022 15:23:04 +0800 Subject: [PATCH 16/37] replace mongo driver --- pkg/common/db/model.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/model.go b/pkg/common/db/model.go index 201e5e7cc..f990d95a3 100644 --- a/pkg/common/db/model.go +++ b/pkg/common/db/model.go @@ -71,7 +71,7 @@ func init() { mgoSession, err1 = mgo.DialWithInfo(mgoDailInfo) if err1 != nil { -// log.NewError(" mongo.Connect failed, panic", err.Error(), uri) + log.NewError(" mongo.Connect failed, panic", err.Error()) panic(err1.Error()) } } From 4d28ccebad1af79d6637fd66e3b3858ea6cc1d75 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 21 Feb 2022 16:24:25 +0800 Subject: [PATCH 17/37] add reset pwd --- cmd/open_im_demo/main.go | 1 + internal/cms_api/statistics/statistics.go | 10 ++-- internal/demo/register/reset_password.go | 56 +++++++++++++++++++ internal/demo/register/send_code.go | 38 ++++++++----- internal/demo/register/set_password.go | 7 ++- internal/demo/register/verify.go | 1 + pkg/common/constant/constant.go | 6 ++ pkg/common/constant/error.go | 1 + .../mysql_model/im_mysql_model/demo_model.go | 12 ++++ pkg/common/db/redisModel.go | 14 +++-- 10 files changed, 118 insertions(+), 28 deletions(-) create mode 100644 internal/demo/register/reset_password.go diff --git a/cmd/open_im_demo/main.go b/cmd/open_im_demo/main.go index 58ef79c9a..430b0faaf 100644 --- a/cmd/open_im_demo/main.go +++ b/cmd/open_im_demo/main.go @@ -21,6 +21,7 @@ func main() { authRouterGroup.POST("/verify", register.Verify) authRouterGroup.POST("/password", register.SetPassword) authRouterGroup.POST("/login", register.Login) + authRouterGroup.POST("/reset_password", register.ResetPassword) } log.NewPrivateLog("demo") ginPort := flag.Int("port", 42233, "get ginServerPort from cmd,default 42233 as port") diff --git a/internal/cms_api/statistics/statistics.go b/internal/cms_api/statistics/statistics.go index fd6485591..791e21c6d 100644 --- a/internal/cms_api/statistics/statistics.go +++ b/internal/cms_api/statistics/statistics.go @@ -32,7 +32,7 @@ func GetMessagesStatistics(c *gin.Context) { client := pb.NewUserClient(etcdConn) respPb, err := client.GetMessageStatistics(context.Background(), &reqPb) if err != nil { - openIMHttp.RespHttp200(c, constant.ErrServer, resp) + openIMHttp.RespHttp200(c, err, resp) log.NewError("0", utils.GetSelfFuncName(), err.Error()) return } @@ -78,7 +78,7 @@ func GetUserStatistics(c *gin.Context) { respPb, err := client.GetUserStatistics(context.Background(), &reqPb) if err != nil { log.NewError("0", utils.GetSelfFuncName(), err.Error()) - openIMHttp.RespHttp200(c, constant.ErrServer, nil) + openIMHttp.RespHttp200(c, err, nil) return } // utils.CopyStructFields(&resp, respPb) @@ -132,7 +132,7 @@ func GetGroupStatistics(c *gin.Context) { client := pb.NewUserClient(etcdConn) respPb, err := client.GetGroupStatistics(context.Background(), &reqPb) if err != nil { - openIMHttp.RespHttp200(c, constant.ErrServer, nil) + openIMHttp.RespHttp200(c, err, nil) return } // utils.CopyStructFields(&resp, respPb) @@ -179,7 +179,7 @@ func GetActiveUser(c *gin.Context) { client := pb.NewUserClient(etcdConn) respPb, err := client.GetActiveUser(context.Background(), &reqPb) if err != nil { - openIMHttp.RespHttp200(c, constant.ErrServer, nil) + openIMHttp.RespHttp200(c, err, nil) return } utils.CopyStructFields(&resp.ActiveUserList, respPb.Users) @@ -204,7 +204,7 @@ func GetActiveGroup(c *gin.Context) { respPb, err := client.GetActiveGroup(context.Background(), &reqPb) if err != nil { log.NewError("0", "BindJSON failed ", err.Error()) - openIMHttp.RespHttp200(c, constant.ErrServer, nil) + openIMHttp.RespHttp200(c, err, nil) return } for _, group := range respPb.Groups { diff --git a/internal/demo/register/reset_password.go b/internal/demo/register/reset_password.go new file mode 100644 index 000000000..0ff7115a0 --- /dev/null +++ b/internal/demo/register/reset_password.go @@ -0,0 +1,56 @@ +package register + +import ( + "Open_IM/pkg/common/config" + "Open_IM/pkg/common/constant" + "Open_IM/pkg/common/db" + "Open_IM/pkg/common/db/mysql_model/im_mysql_model" + "Open_IM/pkg/common/log" + "Open_IM/pkg/utils" + "github.com/gin-gonic/gin" + "net/http" +) + +type resetPasswordRequest struct { + VerificationCode string `json:"verificationCode"` + Email string `json:"email"` + PhoneNumber string `json:"phoneNumber"` + NewPassword string `json:"newPassword"` + OperationID string `json:"operationID"` +} + +func ResetPassword(c *gin.Context) { + var ( + req resetPasswordRequest + ) + if err := c.BindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"errCode": constant.FormattingError, "errMsg": err.Error()}) + return + } + var account string + if req.Email != "" { + account = req.Email + } else { + account = req.PhoneNumber + } + if req.VerificationCode != config.Config.Demo.SuperCode { + accountKey := account + "_" + constant.VerificationCodeForResetSuffix + v, err := db.DB.GetAccountCode(accountKey) + if err != nil || v != req.VerificationCode { + log.NewError(req.OperationID, "password Verification code error", account, req.VerificationCode, v) + c.JSON(http.StatusOK, gin.H{"errCode": constant.CodeInvalidOrExpired, "errMsg": "Verification code error!"}) + return + } + } + user, err := im_mysql_model.GetRegister(account) + if err != nil || user.Account == "" { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "get register error", err.Error()) + c.JSON(http.StatusOK, gin.H{"errCode": constant.NotRegistered, "errMsg": "user not register!"}) + return + } + if err := im_mysql_model.ResetPassword(account, req.NewPassword); err != nil { + c.JSON(http.StatusOK, gin.H{"errCode": constant.ResetPasswordFailed, "errMsg": "reset password failed: "+err.Error()}) + return + } + c.JSON(http.StatusOK, gin.H{"errCode": constant.NoError, "errMsg": "reset password success"}) +} diff --git a/internal/demo/register/send_code.go b/internal/demo/register/send_code.go index 5d6e3e20f..2b890a308 100644 --- a/internal/demo/register/send_code.go +++ b/internal/demo/register/send_code.go @@ -21,6 +21,7 @@ type paramsVerificationCode struct { Email string `json:"email"` PhoneNumber string `json:"phoneNumber"` OperationID string `json:"operationID" binding:"required"` + UsedFor int `json:"usedFor" binding:"required"` } func SendVerificationCode(c *gin.Context) { @@ -36,25 +37,32 @@ func SendVerificationCode(c *gin.Context) { } else { account = params.PhoneNumber } - _, err := im_mysql_model.GetRegister(account) - if err == nil { - log.NewError(params.OperationID, "The phone number has been registered", params) - c.JSON(http.StatusOK, gin.H{"errCode": constant.HasRegistered, "errMsg": ""}) - return - } - ok, err := db.DB.JudgeAccountEXISTS(account) - if ok || err != nil { - log.NewError(params.OperationID, "The phone number has been registered", params) - c.JSON(http.StatusOK, gin.H{"errCode": constant.RepeatSendCode, "errMsg": ""}) - return + var accountKey string + switch params.UsedFor { + case constant.VerificationCodeForRegister: + _, err := im_mysql_model.GetRegister(account) + if err == nil { + log.NewError(params.OperationID, "The phone number has been registered", params) + c.JSON(http.StatusOK, gin.H{"errCode": constant.HasRegistered, "errMsg": ""}) + return + } + ok, err := db.DB.JudgeAccountEXISTS(account) + if ok || err != nil { + log.NewError(params.OperationID, "The phone number has been registered", params) + c.JSON(http.StatusOK, gin.H{"errCode": constant.RepeatSendCode, "errMsg": ""}) + return + } + accountKey = account + "_" + constant.VerificationCodeForRegisterSuffix + + case constant.VerificationCodeForReset: + accountKey = account + "_" + constant.VerificationCodeForResetSuffix } - log.InfoByKv("begin sendSms", account) + log.NewInfo(params.OperationID, params.UsedFor,"begin store redis", accountKey) rand.Seed(time.Now().UnixNano()) code := 100000 + rand.Intn(900000) - log.NewInfo(params.OperationID, "begin store redis", account) - err = db.DB.SetAccountCode(account, code, config.Config.Demo.CodeTTL) + err := db.DB.SetAccountCode(accountKey, code, config.Config.Demo.CodeTTL) if err != nil { - log.NewError(params.OperationID, "set redis error", account, "err", err.Error()) + log.NewError(params.OperationID, "set redis error", accountKey, "err", err.Error()) c.JSON(http.StatusOK, gin.H{"errCode": constant.SmsSendCodeErr, "errMsg": "Enter the superCode directly in the verification code box, SuperCode can be configured in config.xml"}) return } diff --git a/internal/demo/register/set_password.go b/internal/demo/register/set_password.go index a0558fa5a..7e27e04b3 100644 --- a/internal/demo/register/set_password.go +++ b/internal/demo/register/set_password.go @@ -11,7 +11,6 @@ import ( "Open_IM/pkg/utils" "encoding/json" "fmt" - "github.com/garyburd/redigo/redis" "github.com/gin-gonic/gin" "net/http" ) @@ -29,6 +28,7 @@ type ParamsSetPassword struct { func SetPassword(c *gin.Context) { params := ParamsSetPassword{} if err := c.BindJSON(¶ms); err != nil { + log.NewError(params.OperationID, utils.GetSelfFuncName(), "bind json failed", err.Error()) c.JSON(http.StatusBadRequest, gin.H{"errCode": constant.FormattingError, "errMsg": err.Error()}) return } @@ -39,7 +39,8 @@ func SetPassword(c *gin.Context) { account = params.PhoneNumber } if params.VerificationCode != config.Config.Demo.SuperCode { - v, err := redis.String(db.DB.Exec("GET", account)) + accountKey := account + "_" + constant.VerificationCodeForRegisterSuffix + v, err := db.DB.GetAccountCode(accountKey) if err != nil || v != params.VerificationCode { log.NewError(params.OperationID, "password Verification code error", account, params.VerificationCode) data := make(map[string]interface{}) @@ -65,7 +66,7 @@ func SetPassword(c *gin.Context) { err = json.Unmarshal(bMsg, &openIMRegisterResp) if err != nil || openIMRegisterResp.ErrCode != 0 { log.NewError(params.OperationID, "request openIM register error", account, "err", "") - c.JSON(http.StatusOK, gin.H{"errCode": constant.RegisterFailed, "errMsg": ""}) + c.JSON(http.StatusOK, gin.H{"errCode": constant.RegisterFailed, "errMsg": "register failed: "+openIMRegisterResp.ErrMsg}) return } log.Info(params.OperationID, "begin store mysql", account, params.Password) diff --git a/internal/demo/register/verify.go b/internal/demo/register/verify.go index d74ce1f66..c4e1b0c78 100644 --- a/internal/demo/register/verify.go +++ b/internal/demo/register/verify.go @@ -15,6 +15,7 @@ type paramsCertification struct { PhoneNumber string `json:"phoneNumber"` VerificationCode string `json:"verificationCode"` OperationID string `json:"operationID" binding:"required"` + UsedFor int `json:"usedFor" binding:"required"` } func Verify(c *gin.Context) { diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index 34c075a00..5b90f5132 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -124,6 +124,12 @@ const ( //Minio MinioDurationTimes = 3600 + + // verificationCode used for + VerificationCodeForRegister = 1 + VerificationCodeForReset = 2 + VerificationCodeForRegisterSuffix = "_forRegister" + VerificationCodeForResetSuffix = "_forReset" ) var ContentType2PushContent = map[int64]string{ diff --git a/pkg/common/constant/error.go b/pkg/common/constant/error.go index 923d0bbd8..339f2c953 100644 --- a/pkg/common/constant/error.go +++ b/pkg/common/constant/error.go @@ -80,6 +80,7 @@ const ( SmsSendCodeErr = 10008 CodeInvalidOrExpired = 10009 RegisterFailed = 10010 + ResetPasswordFailed = 10011 DatabaseError = 10002 ServerError = 10004 HttpError = 10005 diff --git a/pkg/common/db/mysql_model/im_mysql_model/demo_model.go b/pkg/common/db/mysql_model/im_mysql_model/demo_model.go index 5af615f97..2e5d7df86 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/demo_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/demo_model.go @@ -14,6 +14,7 @@ func GetRegister(account string) (*db.Register, error) { return &r, dbConn.Table("registers").Where("account = ?", account).Take(&r).Error } + func SetPassword(account, password, ex string) error { r := db.Register{ Account: account, @@ -25,5 +26,16 @@ func SetPassword(account, password, ex string) error { return err } return dbConn.Table("registers").Create(&r).Error +} +func ResetPassword(account, password string) error { + r := db.Register{ + Password:password, + } + dbConn, err := db.DB.MysqlDB.DefaultGormDB() + dbConn.LogMode(true) + if err != nil { + return err + } + return dbConn.Table("registers").Where("account = ?", account).Update(&r).Error } diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index a314090e4..08c11cf56 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -3,11 +3,13 @@ package db import ( "Open_IM/pkg/common/constant" log2 "Open_IM/pkg/common/log" + "fmt" "github.com/garyburd/redigo/redis" ) const ( - registerAccountTempCode = "REGISTER_ACCOUNT_TEMP_CODE" + AccountTempCode = "ACCOUNT_TEMP_CODE" + resetPwdTempCode = "RESET_PWD_TEMP_CODE" userIncrSeq = "REDIS_USER_INCR_SEQ:" // user incr seq appleDeviceToken = "DEVICE_TOKEN" userMinSeq = "REDIS_USER_MIN_SEQ:" @@ -35,19 +37,21 @@ func (d *DataBases) Exec(cmd string, key interface{}, args ...interface{}) (inte return con.Do(cmd, params...) } func (d *DataBases) JudgeAccountEXISTS(account string) (bool, error) { - key := registerAccountTempCode + account + key := AccountTempCode + account return redis.Bool(d.Exec("EXISTS", key)) } func (d *DataBases) SetAccountCode(account string, code, ttl int) (err error) { - key := registerAccountTempCode + account - _, err = d.Exec("Set", key, code, ttl) + key := AccountTempCode + account + _, err = d.Exec("SET", key, code) return err } func (d *DataBases) GetAccountCode(account string) (string, error) { - key := userIncrSeq + account + key := AccountTempCode + account + fmt.Println(key) return redis.String(d.Exec("GET", key)) } + //Perform seq auto-increment operation of user messages func (d *DataBases) IncrUserSeq(uid string) (uint64, error) { key := userIncrSeq + uid From a3fb32dfc67080c175a055b3758bb817be6ea3cf Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 21 Feb 2022 16:41:56 +0800 Subject: [PATCH 18/37] fix bug and add reset pwd api --- config/config.yaml | 119 ++++++++++++++++--------------- go.sum | 20 +++++- internal/api/third/minio_init.go | 11 ++- 3 files changed, 85 insertions(+), 65 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index 08fb9d7e4..ed82b6748 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -1,47 +1,47 @@ # The class cannot be named by Pascal or camel case. # If it is not used, the corresponding structure will not be set, # and it will not be read naturally. -serverversion: 3.0.0 +serverversion: 1.0.3 #---------------Infrastructure configuration---------------------# etcd: - etcdSchema: openIM #默认即可 - etcdAddr: [ 127.0.0.1:2379 ] #单机部署时,默认即可 + etcdSchema: openIM + etcdAddr: [ 127.0.0.1:2379 ] mysql: - dbMysqlAddress: [ 127.0.0.1:13306 ] #mysql地址 目前仅支持单机,默认即可 - dbMysqlUserName: root #mysql用户名,建议修改 - dbMysqlPassword: openIM # mysql密码,建议修改 - dbMysqlDatabaseName: openIM #默认即可 - dbTableName: eMsg #默认即可 + dbMysqlAddress: [ 127.0.0.1:13306 ] + dbMysqlUserName: root + dbMysqlPassword: openIM + dbMysqlDatabaseName: openIM + dbTableName: eMsg dbMsgTableNum: 1 dbMaxOpenConns: 20 dbMaxIdleConns: 10 dbMaxLifeTime: 120 mongo: - dbAddress: [ 127.0.0.1:37017 ] #redis地址 目前仅支持单机,默认即可 + dbAddress: [ 127.0.0.1:37017 ] dbDirect: false dbTimeout: 10 - dbDatabase: openIM #mongo db 默认即可 + dbDatabase: openIM dbSource: admin - dbUserName: #mongo用户名,建议修改 - dbPassword: #mongo密码,建议修改 + dbUserName: + dbPassword: dbMaxPoolSize: 20 - dbRetainChatRecords: 3650 #mongo保存离线消息时间(天) + dbRetainChatRecords: 7 redis: - dbAddress: 127.0.0.1:16379 #redis地址 目前仅支持单机,默认即可 + dbAddress: 127.0.0.1:16379 dbMaxIdle: 128 dbMaxActive: 0 dbIdleTimeout: 120 - dbPassWord: openIM #redis密码 建议修改 + dbPassWord: openIM kafka: ws2mschat: - addr: [ 127.0.0.1:9092 ] #kafka配置,默认即可 + addr: [ 127.0.0.1:9092 ] topic: "ws2ms_chat" ms2pschat: - addr: [ 127.0.0.1:9092 ] #kafka配置,默认即可 + addr: [ 127.0.0.1:9092 ] topic: "ms2ps_chat" consumergroupid: msgToMongo: mongo @@ -55,7 +55,6 @@ kafka: # The service ip default is empty, # automatically obtain the machine's valid network card ip as the service ip, # otherwise the configuration ip is preferred -#如果是单机模式,用0.0.0.0或者不填,默认即可 serverip: 0.0.0.0 # endpoints 内部组件间访问的端点host名称,访问时,可以内部直接访问 host:port 来访问 @@ -74,22 +73,27 @@ endpoints: rpc_message_cms: openim_rpc_admin_cms api: - openImApiPort: [ 10000 ] #api服务端口,默认即可,注意开放此端口或做nginx转发 + openImApiPort: [ 10000 ] cmsapi: - openImCmsApiPort: [ 8000 ] #管理后台api服务端口,默认即可,注意开放此端口或做nginx转发 + openImCmsApiPort: [ 8000 ] sdk: - openImSdkWsPort: [ 30000 ] #jssdk服务端口,默认即可,项目中使用jssdk才需开放此端口或做nginx转发 + openImSdkWsPort: [ 30000 ] -credential: #腾讯cos,发送图片、视频、文件时需要,请自行申请后替换,必须修改 +credential: tencent: appID: 1302656840 region: ap-chengdu bucket: echat-1302656840 secretID: AKIDGNYVChzIQinu7QEgtNp0hnNgqcV8vZTC secretKey: kz15vW83qM6dBUWIq681eBZA0c0vlIbe - - -rpcport: #rpc服务端口 默认即可 + minio: + bucket: openim + location: us-east-1 + endpoint: http://127.0.0.1:9000 + accessKeyID: minioadmin + secretAccessKey: minioadmin + +rpcport: openImUserPort: [ 10100 ] openImFriendPort: [ 10200 ] openImOfflineMessagePort: [ 10300 ] @@ -110,7 +114,7 @@ rpcport: #rpc服务端口 默认即可 stateChange: switch: false -rpcregistername: #rpc注册服务名,默认即可 +rpcregistername: openImUserName: User openImFriendName: Friend openImOfflineMessageName: OfflineMessage @@ -125,57 +129,57 @@ rpcregistername: #rpc注册服务名,默认即可 log: storageLocation: ../logs/ rotationTime: 24 - remainRotationCount: 5 #日志数量 - remainLogLevel: 6 #日志级别 6表示全都打印,测试阶段建议设置为6 + remainRotationCount: 5 + remainLogLevel: 6 elasticSearchSwitch: false elasticSearchAddr: [ 127.0.0.1:9201 ] elasticSearchUser: "" elasticSearchPassword: "" -modulename: #日志文件按模块命名,默认即可 +modulename: longConnSvrName: msg_gateway msgTransferName: msg_transfer pushName: push longconnsvr: - openImWsPort: [ 17778 ] # ws服务端口,默认即可,要开放此端口或做nginx转发 + openImWsPort: [ 17778 ] websocketMaxConnNum: 10000 websocketMaxMsgLen: 4096 websocketTimeOut: 10 push: - tpns: #腾讯推送,暂未测试 暂不要使用 + tpns: ios: accessID: 1600018281 secretKey: 3cd68a77a95b89e5089a1aca523f318f android: accessID: 111 secretKey: 111 - jpns: #极光推送 在极光后台申请后,修改以下四项,必须修改 + jpns: appKey: cf47465a368f24c659608e7e masterSecret: 02204efe3f3832947a236ee5 pushUrl: "https://api.jpush.cn/v3/push" pushIntent: "intent:#Intent;component=io.openim.app.enterprisechat/io.openim.app.enterprisechat.MainActivity;end" manager: - #app管理员userID和对应的secret 建议修改。 用于管理后台登录,也可以用户管理后台对应的api appManagerUid: [ "openIM123456","openIM654321", "openIM333", "openIMAdmin"] secrets: [ "openIM1","openIM2", "openIM333", "openIMAdmin"] secret: tuoyun -# 多端互踢策略 -# 1:多平台登录:Android、iOS、Windows、Mac 每种平台只能一个在线,web端可以多个同时在线 + multiloginpolicy: 1 #token config tokenpolicy: - accessSecret: "open_im_server" #token生成相关,默认即可 + accessSecret: "open_im_server" # Token effective time day as a unit - accessExpire: 3650 #token过期时间(天) + accessExpire: 7 -messagecallback: #暂时不要使用 还需完善 +messagecallback: callbackUrl: "http://www.xxx.com/msg/judge" #TimeOut use second as unit callbackTimeOut: 10 +messagejudge: + isJudgeFriend: true # c2c: # callbackBeforeSendMsg: # switch: false @@ -185,7 +189,7 @@ messagecallback: #暂时不要使用 还需完善 # state: # stateChange: # switch: false -#ios系统推送声音以及标记计数 + iospush: pushSound: "xxx" badgeCount: true @@ -249,7 +253,7 @@ notification: desc: "groupApplicationAccepted desc" ext: "groupApplicationAccepted ext" defaultTips: - tips: "allowed to join the group" # group info changed by xx + tips: "was allowed to join the group" # group info changed by xx groupApplicationRejected: conversation: @@ -261,7 +265,7 @@ notification: desc: " desc" ext: " ext" defaultTips: - tips: "rejected into the group" # group info changed by xx + tips: "was rejected into the group" # group info changed by xx groupOwnerTransferred: conversation: @@ -285,7 +289,7 @@ notification: desc: "memberKicked desc" ext: "memberKicked ext" defaultTips: - tips: "kicked out of the group" # group info changed by xx + tips: "was kicked out of the group" # group info changed by xx memberInvited: conversation: @@ -297,7 +301,7 @@ notification: desc: "memberInvited desc" ext: "memberInvited ext" defaultTips: - tips: "invited into the group" # group info changed by xx + tips: "was invited into the group" # group info changed by xx memberEnter: conversation: @@ -374,11 +378,11 @@ notification: unreadCount: false offlinePush: switch: true - title: "deleted a friend" - desc: "deleted a friend" - ext: "deleted a friend" + title: "Deleted a friend" + desc: "Deleted a friend" + ext: "Deleted a friend" defaultTips: - tips: "deleted a friend" # + tips: "Deleted a friend" # friendRemarkSet: @@ -401,11 +405,11 @@ notification: unreadCount: false offlinePush: switch: true - title: "blocked a user" - desc: "blocked a user" - ext: "blocked a user" + title: "Blocked a user" + desc: "Blocked a user" + ext: "Blocked a user" defaultTips: - tips: "blocked a user" # + tips: "Blocked a user" # blackDeleted: @@ -431,7 +435,7 @@ notification: desc: "Remove a blocked user" ext: "Remove a blocked user" defaultTips: - tips: "remove a blocked user" + tips: "Remove a blocked user" #####################conversation######################### conversationOptUpdate: @@ -450,24 +454,23 @@ notification: #---------------demo configuration---------------------# #The following configuration items are applied to openIM Demo configuration -#是否启动demo,如果自身没有账号体系,设置为true demoswitch: true demo: - openImDemoPort: [ 42233 ] #demo对外服务端口,默认即可,需要开放此端口或做nginx转发 - alismsverify: #阿里云短信配置,在阿里云申请成功后修改以下四项,必须修改 + openImDemoPort: [ 42233 ] + alismsverify: accessKeyId: LTAI5tJPkn4HuuePdiLdGqe71 accessKeySecret: 4n9OJ7ZCVN1U6KeHDAtOyNeVZcjOuV1 signName: OpenIM Corporation verificationCodeTemplateCode: SMS_2268101641 - superCode: 666666 #超级验证码,建议修改掉,收不到短信验证码时可以用此替代 + superCode: 666666 # second codeTTL: 60 - mail: #仅支持qq邮箱,具体操作参考 https://service.mail.qq.com/cgi-bin/help?subtype=1&id=28&no=1001256 必须修改 + mail: title: "openIM" senderMail: "1765567899@qq.com" senderAuthorizationCode: "1gxyausfoevlzbfag" smtpAddr: "smtp.qq.com" - smtpPort: 25 #需开放此端口 出口方向 + smtpPort: 25 diff --git a/go.sum b/go.sum index acc8bf998..2385d32f5 100644 --- a/go.sum +++ b/go.sum @@ -156,6 +156,7 @@ github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= @@ -200,6 +201,7 @@ github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaS github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -311,8 +313,9 @@ 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/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc= +github.com/klauspost/compress v1.13.6/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= @@ -380,6 +383,7 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ= github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8= @@ -467,6 +471,8 @@ github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/tencentyun/qcloud-cos-sts-sdk v0.0.0-20210325043845-84a0811633ca h1:G/aIr3WiUesWHL2YGYgEqjM5tCAJ43Ml+0C18wDkWWs= github.com/tencentyun/qcloud-cos-sts-sdk v0.0.0-20210325043845-84a0811633ca/go.mod h1:b18KQa4IxHbxeseW1GcZox53d7J0z39VNONTxvvlkXw= +github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= +github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tjfoc/gmsm v1.3.2 h1:7JVkAn5bvUJ7HtU08iW6UiD+UTmJTIToHCfeFzkcCxM= github.com/tjfoc/gmsm v1.3.2/go.mod h1:HaUcFuY0auTiaHB9MHFGCPx5IaLhTUd2atbCFBQXn9w= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= @@ -477,8 +483,16 @@ github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVM github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= +github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= +github.com/xdg-go/scram v1.0.2 h1:akYIkZ28e6A96dkWNJQu3nmCzH3YfwMPQExUYDaRv7w= +github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= +github.com/xdg-go/stringprep v1.0.2 h1:6iq84/ryjjeRmMJwxutI51F2GIPlP5BfTvXHeYjyhBc= +github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA= +github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.30/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -492,6 +506,8 @@ go.etcd.io/etcd v0.0.0-20200402134248-51bdeb39e698/go.mod h1:YoUyTScD3Vcv2RBm3eG go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= +go.mongodb.org/mongo-driver v1.8.3 h1:TDKlTkGDKm9kkJVUOAXDK5/fkqKHJVwYQSpoRfB43R4= +go.mongodb.org/mongo-driver v1.8.3/go.mod h1:0sQWfOeY63QTntERDJJ/0SuKK0T1uVSgKCuAROlKEPY= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -628,6 +644,7 @@ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -716,6 +733,7 @@ golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= diff --git a/internal/api/third/minio_init.go b/internal/api/third/minio_init.go index eb087c4dc..4f54996ba 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" ) @@ -39,10 +38,10 @@ func init() { 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 - } + //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") } From 2d13a5fd358f39b14036910071b83a5abc90edb4 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 21 Feb 2022 18:18:53 +0800 Subject: [PATCH 19/37] msg judge --- internal/rpc/msg/send_msg.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index 281ac2ed3..576d5f8bb 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -44,6 +44,17 @@ type MsgCallBackResp struct { } } +func userRelationshipVerification(data *pbChat.SendMsgReq) { + + //etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + //client := pbChat.NewChatClient(etcdConn) + //reply, err := client.SendMsg(context.Background(), &req) + //if err != nil { + // log.NewError(req.OperationID, "SendMsg rpc failed, ", req.String(), err.Error()) + //} else if reply.ErrCode != 0 { + // log.NewError(req.OperationID, "SendMsg rpc failed, ", req.String()) + //} +} func (rpc *rpcChat) encapsulateMsgData(msg *sdk_ws.MsgData) { msg.ServerMsgID = GetMsgID(msg.SendID) if msg.SendTime == 0 { @@ -96,6 +107,7 @@ func (rpc *rpcChat) encapsulateMsgData(msg *sdk_ws.MsgData) { func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.SendMsgResp, error) { replay := pbChat.SendMsgResp{} log.NewDebug(pb.OperationID, "rpc sendMsg come here", pb.String()) + userRelationshipVerification(pb) //if !utils.VerifyToken(pb.Token, pb.SendID) { // return returnMsg(&replay, pb, http.StatusUnauthorized, "token validate err,not authorized", "", 0) rpc.encapsulateMsgData(pb.MsgData) From 139ef08af3adecbb08888a6e4cec1bcdfaeaecf1 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 21 Feb 2022 18:50:11 +0800 Subject: [PATCH 20/37] fix bug --- internal/cms_api/statistics/statistics.go | 10 +++-- internal/demo/register/send_code.go | 4 +- internal/demo/register/set_password.go | 5 ++- internal/rpc/statistics/statistics.go | 55 ++++++++++++----------- 4 files changed, 41 insertions(+), 33 deletions(-) diff --git a/internal/cms_api/statistics/statistics.go b/internal/cms_api/statistics/statistics.go index 791e21c6d..c8a9488ca 100644 --- a/internal/cms_api/statistics/statistics.go +++ b/internal/cms_api/statistics/statistics.go @@ -32,8 +32,8 @@ func GetMessagesStatistics(c *gin.Context) { client := pb.NewUserClient(etcdConn) respPb, err := client.GetMessageStatistics(context.Background(), &reqPb) if err != nil { + log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "GetMessageStatistics failed", err.Error()) openIMHttp.RespHttp200(c, err, resp) - log.NewError("0", utils.GetSelfFuncName(), err.Error()) return } // utils.CopyStructFields(&resp, respPb) @@ -77,7 +77,7 @@ func GetUserStatistics(c *gin.Context) { client := pb.NewUserClient(etcdConn) respPb, err := client.GetUserStatistics(context.Background(), &reqPb) if err != nil { - log.NewError("0", utils.GetSelfFuncName(), err.Error()) + log.NewError("0", utils.GetSelfFuncName(), "GetUserStatistics failed", err.Error()) openIMHttp.RespHttp200(c, err, nil) return } @@ -132,6 +132,7 @@ func GetGroupStatistics(c *gin.Context) { client := pb.NewUserClient(etcdConn) respPb, err := client.GetGroupStatistics(context.Background(), &reqPb) if err != nil { + log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "GetGroupStatistics failed", err.Error()) openIMHttp.RespHttp200(c, err, nil) return } @@ -179,6 +180,7 @@ func GetActiveUser(c *gin.Context) { client := pb.NewUserClient(etcdConn) respPb, err := client.GetActiveUser(context.Background(), &reqPb) if err != nil { + log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "GetActiveUser failed ", err.Error()) openIMHttp.RespHttp200(c, err, nil) return } @@ -194,7 +196,7 @@ func GetActiveGroup(c *gin.Context) { ) reqPb.StatisticsReq = &pb.StatisticsReq{} if err := c.ShouldBindQuery(&req); err != nil { - log.NewError("0", "BindJSON failed ", err.Error()) + log.NewError("0", utils.GetSelfFuncName(), "BindJSON failed ", err.Error()) openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } @@ -203,7 +205,7 @@ func GetActiveGroup(c *gin.Context) { client := pb.NewUserClient(etcdConn) respPb, err := client.GetActiveGroup(context.Background(), &reqPb) if err != nil { - log.NewError("0", "BindJSON failed ", err.Error()) + log.NewError("0", utils.GetSelfFuncName(), "GetActiveGroup failed ", err.Error()) openIMHttp.RespHttp200(c, err, nil) return } diff --git a/internal/demo/register/send_code.go b/internal/demo/register/send_code.go index 2b890a308..bd22b07bf 100644 --- a/internal/demo/register/send_code.go +++ b/internal/demo/register/send_code.go @@ -43,13 +43,13 @@ func SendVerificationCode(c *gin.Context) { _, err := im_mysql_model.GetRegister(account) if err == nil { log.NewError(params.OperationID, "The phone number has been registered", params) - c.JSON(http.StatusOK, gin.H{"errCode": constant.HasRegistered, "errMsg": ""}) + c.JSON(http.StatusOK, gin.H{"errCode": constant.HasRegistered, "errMsg": "The phone number has been registered"}) return } ok, err := db.DB.JudgeAccountEXISTS(account) if ok || err != nil { log.NewError(params.OperationID, "The phone number has been registered", params) - c.JSON(http.StatusOK, gin.H{"errCode": constant.RepeatSendCode, "errMsg": ""}) + c.JSON(http.StatusOK, gin.H{"errCode": constant.RepeatSendCode, "errMsg": "The phone number has been registered"}) return } accountKey = account + "_" + constant.VerificationCodeForRegisterSuffix diff --git a/internal/demo/register/set_password.go b/internal/demo/register/set_password.go index 7e27e04b3..3fb996a56 100644 --- a/internal/demo/register/set_password.go +++ b/internal/demo/register/set_password.go @@ -65,7 +65,10 @@ func SetPassword(c *gin.Context) { } err = json.Unmarshal(bMsg, &openIMRegisterResp) if err != nil || openIMRegisterResp.ErrCode != 0 { - log.NewError(params.OperationID, "request openIM register error", account, "err", "") + log.NewError(params.OperationID, "request openIM register error", account, "err", "resp: ", openIMRegisterResp.ErrCode) + if err != nil { + log.NewError(params.OperationID, utils.GetSelfFuncName(), err.Error()) + } c.JSON(http.StatusOK, gin.H{"errCode": constant.RegisterFailed, "errMsg": "register failed: "+openIMRegisterResp.ErrMsg}) return } diff --git a/internal/rpc/statistics/statistics.go b/internal/rpc/statistics/statistics.go index 6684f8af7..9554bf116 100644 --- a/internal/rpc/statistics/statistics.go +++ b/internal/rpc/statistics/statistics.go @@ -2,6 +2,7 @@ package statistics import ( "Open_IM/pkg/common/config" + "Open_IM/pkg/common/constant" "context" "sync" "time" @@ -21,6 +22,7 @@ import ( "net" "strconv" "strings" + errors "Open_IM/pkg/common/http" "google.golang.org/grpc" ) @@ -77,13 +79,13 @@ func (s *statisticsServer) GetActiveGroup(_ context.Context, req *pbStatistics.G resp := &pbStatistics.GetActiveGroupResp{} fromTime, toTime, err := ParseTimeFromTo(req.StatisticsReq.From, req.StatisticsReq.To) if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error()) - return resp, err + log.NewError(req.OperationID, utils.GetSelfFuncName(), "ParseTimeFromTo failed", err.Error()) + return resp, errors.WrapError(constant.ErrArgs) } activeGroups, err := imdb.GetActiveGroups(fromTime, toTime, 12) if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error()) - return resp, err + log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetActiveGroups failed", err.Error()) + return resp, errors.WrapError(constant.ErrDB) } for _, activeGroup := range activeGroups { resp.Groups = append(resp.Groups, @@ -101,13 +103,13 @@ func (s *statisticsServer) GetActiveUser(_ context.Context, req *pbStatistics.Ge resp := &pbStatistics.GetActiveUserResp{} fromTime, toTime, err := ParseTimeFromTo(req.StatisticsReq.From, req.StatisticsReq.To) if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error()) - return resp, err + log.NewError(req.OperationID, utils.GetSelfFuncName(), "ParseTimeFromTo failed", err.Error()) + return resp, errors.WrapError(constant.ErrDB) } activeUsers, err := imdb.GetActiveUsers(fromTime, toTime, 12) if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error()) - return resp, err + log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetActiveUsers failed", err.Error()) + return resp, errors.WrapError(constant.ErrDB) } for _, activeUser := range activeUsers { resp.Users = append(resp.Users, @@ -199,18 +201,18 @@ func (s *statisticsServer) GetGroupStatistics(_ context.Context, req *pbStatisti resp := &pbStatistics.GetGroupStatisticsResp{} fromTime, toTime, err := ParseTimeFromTo(req.StatisticsReq.From, req.StatisticsReq.To) if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error()) - return resp, err + log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetGroupStatistics failed", err.Error()) + return resp, errors.WrapError(constant.ErrArgs) } increaseGroupNum, err := imdb.GetIncreaseGroupNum(fromTime, toTime.Add(time.Hour*24)) if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error()) - return resp, err + log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetIncreaseGroupNum failed", err.Error()) + return resp, errors.WrapError(constant.ErrDB) } totalGroupNum, err := imdb.GetTotalGroupNum() if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error()) - return resp, err + return resp, errors.WrapError(constant.ErrDB) } resp.IncreaseGroupNum = increaseGroupNum resp.TotalGroupNum = totalGroupNum @@ -250,17 +252,18 @@ func (s *statisticsServer) GetMessageStatistics(_ context.Context, req *pbStatis resp := &pbStatistics.GetMessageStatisticsResp{} fromTime, toTime, err := ParseTimeFromTo(req.StatisticsReq.From, req.StatisticsReq.To) if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error()) - return resp, err + log.NewError(req.OperationID, utils.GetSelfFuncName(), "ParseTimeFromTo failed", err.Error()) + return resp, errors.WrapError(constant.ErrArgs) } privateMessageNum, err := imdb.GetPrivateMessageNum(fromTime, toTime.Add(time.Hour*24)) if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error()) - return resp, err + log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetPrivateMessageNum failed", err.Error()) + return resp, errors.WrapError(constant.ErrDB) } groupMessageNum, err := imdb.GetGroupMessageNum(fromTime, toTime.Add(time.Hour*24)) if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error()) + log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetGroupMessageNum failed", err.Error()) + return resp, errors.WrapError(constant.ErrDB) } resp.PrivateMessageNum = privateMessageNum resp.GroupMessageNum = groupMessageNum @@ -300,23 +303,23 @@ func (s *statisticsServer) GetUserStatistics(_ context.Context, req *pbStatistic resp := &pbStatistics.GetUserStatisticsResp{} fromTime, toTime, err := ParseTimeFromTo(req.StatisticsReq.From, req.StatisticsReq.To) if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "ParseTimeFromTo", err.Error()) - return resp, err + log.NewError(req.OperationID, utils.GetSelfFuncName(), "ParseTimeFromTo failed", err.Error()) + return resp, errors.WrapError(constant.ErrArgs) } activeUserNum, err := imdb.GetActiveUserNum(fromTime, toTime.Add(time.Hour*24)) if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetActiveUserNum", err.Error()) - return resp, err + log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetActiveUserNum failed", err.Error()) + return resp, errors.WrapError(constant.ErrDB) } increaseUserNum, err := imdb.GetIncreaseUserNum(fromTime, toTime.Add(time.Hour*24)) if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetIncreaseUserNum error", err.Error()) - return resp, err + log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetIncreaseUserNum failed", err.Error()) + return resp, errors.WrapError(constant.ErrDB) } totalUserNum, err := imdb.GetTotalUserNum() if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetTotalUserNum error", err.Error()) - return resp, err + log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetTotalUserNum failed", err.Error()) + return resp, errors.WrapError(constant.ErrDB) } resp.ActiveUserNum = activeUserNum resp.TotalUserNum = totalUserNum From dfdb952e2ba28721cf7f08747cb7d1187b5483f7 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 21 Feb 2022 19:12:51 +0800 Subject: [PATCH 21/37] fix reset password api --- internal/demo/register/send_code.go | 5 ++++- internal/demo/register/verify.go | 9 ++++++--- pkg/common/db/redisModel.go | 2 -- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/internal/demo/register/send_code.go b/internal/demo/register/send_code.go index bd22b07bf..ad5fda3d6 100644 --- a/internal/demo/register/send_code.go +++ b/internal/demo/register/send_code.go @@ -21,7 +21,7 @@ type paramsVerificationCode struct { Email string `json:"email"` PhoneNumber string `json:"phoneNumber"` OperationID string `json:"operationID" binding:"required"` - UsedFor int `json:"usedFor" binding:"required"` + UsedFor int `json:"usedFor"` } func SendVerificationCode(c *gin.Context) { @@ -38,6 +38,9 @@ func SendVerificationCode(c *gin.Context) { account = params.PhoneNumber } var accountKey string + if params.UsedFor == 0 { + params.UsedFor = constant.VerificationCodeForRegister + } switch params.UsedFor { case constant.VerificationCodeForRegister: _, err := im_mysql_model.GetRegister(account) diff --git a/internal/demo/register/verify.go b/internal/demo/register/verify.go index c4e1b0c78..6136b1f76 100644 --- a/internal/demo/register/verify.go +++ b/internal/demo/register/verify.go @@ -15,7 +15,7 @@ type paramsCertification struct { PhoneNumber string `json:"phoneNumber"` VerificationCode string `json:"verificationCode"` OperationID string `json:"operationID" binding:"required"` - UsedFor int `json:"usedFor" binding:"required"` + UsedFor int `json:"usedFor"` } func Verify(c *gin.Context) { @@ -44,8 +44,11 @@ func Verify(c *gin.Context) { } log.NewInfo("0", " params.VerificationCode != config.Config.Demo.SuperCode", params.VerificationCode, config.Config.Demo) log.NewInfo(params.OperationID, "begin get form redis", account) - - code, err := db.DB.GetAccountCode(account) + if params.UsedFor == 0 { + params.UsedFor = 1 + } + accountKey := account + "_" + constant.VerificationCodeForResetSuffix + code, err := db.DB.GetAccountCode(accountKey) log.NewInfo(params.OperationID, "redis phone number and verificating Code", account, code) if err != nil { log.NewError(params.OperationID, "Verification code expired", account, "err", err.Error()) diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index 08c11cf56..9245e7b1f 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -3,7 +3,6 @@ package db import ( "Open_IM/pkg/common/constant" log2 "Open_IM/pkg/common/log" - "fmt" "github.com/garyburd/redigo/redis" ) @@ -47,7 +46,6 @@ func (d *DataBases) SetAccountCode(account string, code, ttl int) (err error) { } func (d *DataBases) GetAccountCode(account string) (string, error) { key := AccountTempCode + account - fmt.Println(key) return redis.String(d.Exec("GET", key)) } From 75590eb76555c0f87bd3ed509c348ddcf7778b52 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Mon, 21 Feb 2022 20:09:26 +0800 Subject: [PATCH 22/37] VerificationCodeForRegisterSuffix --- internal/demo/register/verify.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/demo/register/verify.go b/internal/demo/register/verify.go index 6136b1f76..958e513c1 100644 --- a/internal/demo/register/verify.go +++ b/internal/demo/register/verify.go @@ -15,7 +15,7 @@ type paramsCertification struct { PhoneNumber string `json:"phoneNumber"` VerificationCode string `json:"verificationCode"` OperationID string `json:"operationID" binding:"required"` - UsedFor int `json:"usedFor"` + UsedFor int `json:"usedFor"` } func Verify(c *gin.Context) { @@ -47,7 +47,7 @@ func Verify(c *gin.Context) { if params.UsedFor == 0 { params.UsedFor = 1 } - accountKey := account + "_" + constant.VerificationCodeForResetSuffix + accountKey := account + "_" + constant.VerificationCodeForRegisterSuffix code, err := db.DB.GetAccountCode(accountKey) log.NewInfo(params.OperationID, "redis phone number and verificating Code", account, code) if err != nil { From 55d7c6e6728176c439f7392e9d89a906f669c6cc Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 21 Feb 2022 21:02:37 +0800 Subject: [PATCH 23/37] add log --- internal/demo/register/send_code.go | 2 +- internal/rpc/group/group.go | 20 +++++++++++++++++-- .../mysql_model/im_mysql_model/group_model.go | 15 +++++++------- 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/internal/demo/register/send_code.go b/internal/demo/register/send_code.go index ad5fda3d6..37e355b46 100644 --- a/internal/demo/register/send_code.go +++ b/internal/demo/register/send_code.go @@ -60,9 +60,9 @@ func SendVerificationCode(c *gin.Context) { case constant.VerificationCodeForReset: accountKey = account + "_" + constant.VerificationCodeForResetSuffix } - log.NewInfo(params.OperationID, params.UsedFor,"begin store redis", accountKey) rand.Seed(time.Now().UnixNano()) code := 100000 + rand.Intn(900000) + log.NewInfo(params.OperationID, params.UsedFor,"begin store redis", accountKey, code) err := db.DB.SetAccountCode(accountKey, code, config.Config.Demo.CodeTTL) if err != nil { log.NewError(params.OperationID, "set redis error", accountKey, "err", err.Error()) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 7d5fd547f..2ab59b6ca 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -778,10 +778,26 @@ func (s *groupServer) DeleteGroup(_ context.Context, req *pbGroup.DeleteGroupReq func (s *groupServer) OperateUserRole(_ context.Context, req *pbGroup.OperateUserRoleReq) (*pbGroup.OperateUserRoleResp, error) { log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "args:", req.String()) resp := &pbGroup.OperateUserRoleResp{} - if err := imdb.OperateGroupRole(req.UserId, req.GroupId, req.RoleLevel); err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "OperateGroupRole error", err.Error()) + oldOwnerUserID, err := imdb.GetGroupMaster(req.GroupId) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetGroupMaster failed", err.Error()) return resp, http.WrapError(constant.ErrDB) } + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) + client := pbGroup.NewGroupClient(etcdConn) + var reqPb pbGroup.TransferGroupOwnerReq + reqPb.OperationID = req.OperationID + reqPb.NewOwnerUserID = req.UserId + reqPb.GroupID = req.GroupId + reqPb.OpUserID = "cms admin" + reqPb.OldOwnerUserID = oldOwnerUserID.UserID + reply, err := client.TransferGroupOwner(context.Background(), &reqPb) + if reply.CommonResp.ErrCode != 0 || err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "TransferGroupOwner rpc failed") + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error()) + } + } return resp, nil } diff --git a/pkg/common/db/mysql_model/im_mysql_model/group_model.go b/pkg/common/db/mysql_model/im_mysql_model/group_model.go index 46ec80738..a9fe13236 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/group_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/group_model.go @@ -116,10 +116,10 @@ func DeleteGroup(groupId string) error { return nil } -func OperateGroupRole(userId, groupId string, roleLevel int32) error { +func OperateGroupRole(userId, groupId string, roleLevel int32) (string, string, error) { dbConn, err := db.DB.MysqlDB.DefaultGormDB() if err != nil { - return err + return "", "", err } dbConn.LogMode(true) groupMember := db.GroupMember{ @@ -133,7 +133,7 @@ func OperateGroupRole(userId, groupId string, roleLevel int32) error { } switch roleLevel { case constant.GroupOwner: - return dbConn.Transaction(func(tx *gorm.DB) error { + err = dbConn.Transaction(func(tx *gorm.DB) error { result := dbConn.Table("group_members").Where("group_id = ? and role_level = ?", groupId, constant.GroupOwner).First(&groupMaster).Update(&db.GroupMember{ RoleLevel: constant.GroupOrdinaryUsers, }) @@ -153,14 +153,15 @@ func OperateGroupRole(userId, groupId string, roleLevel int32) error { } return nil }) + case constant.GroupOrdinaryUsers: - return dbConn.Transaction(func(tx *gorm.DB) error { + err = dbConn.Transaction(func(tx *gorm.DB) error { result := dbConn.Table("group_members").Where("group_id = ? and role_level = ?", groupId, constant.GroupOwner).First(&groupMaster) if result.Error != nil { return result.Error } if result.RowsAffected == 0 { - return errors.New(fmt.Sprintf("user %s not exist in group %s or already operate", userId, groupId)) + return errors.New(fmt.Sprintf("user %s not exist in group %s or already operate", userId, groupId)) } if groupMaster.UserID == userId { return errors.New(fmt.Sprintf("user %s is master of %s, cant set to ordinary user", userId, groupId)) @@ -170,13 +171,13 @@ func OperateGroupRole(userId, groupId string, roleLevel int32) error { return result.Error } if result.RowsAffected == 0 { - return errors.New(fmt.Sprintf("user %s not exist in group %s or already operate", userId, groupId)) + return errors.New(fmt.Sprintf("user %s not exist in group %s or already operate", userId, groupId)) } } return nil }) } - return nil + return "", "", nil } func GetGroupsCountNum(group db.Group) (int32, error) { From aad27f40cf75fda3a5cad76720ba52d85ad150e1 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Mon, 21 Feb 2022 21:07:50 +0800 Subject: [PATCH 24/37] verrify --- internal/demo/register/verify.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/demo/register/verify.go b/internal/demo/register/verify.go index 958e513c1..b362fd340 100644 --- a/internal/demo/register/verify.go +++ b/internal/demo/register/verify.go @@ -49,9 +49,9 @@ func Verify(c *gin.Context) { } accountKey := account + "_" + constant.VerificationCodeForRegisterSuffix code, err := db.DB.GetAccountCode(accountKey) - log.NewInfo(params.OperationID, "redis phone number and verificating Code", account, code) + log.NewInfo(params.OperationID, "redis phone number and verificating Code", accountKey, code, params) if err != nil { - log.NewError(params.OperationID, "Verification code expired", account, "err", err.Error()) + log.NewError(params.OperationID, "Verification code expired", accountKey, "err", err.Error()) data := make(map[string]interface{}) data["account"] = account c.JSON(http.StatusOK, gin.H{"errCode": constant.CodeInvalidOrExpired, "errMsg": "Verification code expired!", "data": data}) From b751156b5cff69cb88671aba21f52f76ff03aea7 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 21 Feb 2022 21:19:06 +0800 Subject: [PATCH 25/37] redis ttl --- pkg/common/db/redisModel.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pkg/common/db/redisModel.go b/pkg/common/db/redisModel.go index 9245e7b1f..c8529b97c 100644 --- a/pkg/common/db/redisModel.go +++ b/pkg/common/db/redisModel.go @@ -41,7 +41,7 @@ func (d *DataBases) JudgeAccountEXISTS(account string) (bool, error) { } func (d *DataBases) SetAccountCode(account string, code, ttl int) (err error) { key := AccountTempCode + account - _, err = d.Exec("SET", key, code) + _, err = d.Exec("SET", key, code, "ex", ttl) return err } func (d *DataBases) GetAccountCode(account string) (string, error) { @@ -49,7 +49,6 @@ func (d *DataBases) GetAccountCode(account string) (string, error) { return redis.String(d.Exec("GET", key)) } - //Perform seq auto-increment operation of user messages func (d *DataBases) IncrUserSeq(uid string) (uint64, error) { key := userIncrSeq + uid From 952ad0e162eb0950a0745131641152b19941cb19 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 22 Feb 2022 12:27:39 +0800 Subject: [PATCH 26/37] fix deploy --- deploy/config.example.yaml | 6 +++++- internal/rpc/group/group.go | 2 ++ pkg/common/config/config.go | 3 +++ script/sdk_svr_start.sh | 4 +++- script/start_rpc_service.sh | 2 +- 5 files changed, 14 insertions(+), 3 deletions(-) diff --git a/deploy/config.example.yaml b/deploy/config.example.yaml index 9f14c96d4..f0ae8314e 100644 --- a/deploy/config.example.yaml +++ b/deploy/config.example.yaml @@ -73,6 +73,8 @@ api: openImApiPort: [ 10000 ] sdk: openImSdkWsPort: [ 30000 ] +cmsapi: + openImCmsApiPort: [ 8000 ] credential: tencent: @@ -91,7 +93,9 @@ rpcport: openImGroupPort: [ 10500 ] openImAuthPort: [ 10600 ] openImPushPort: [ 10700 ] - + openImStatisticsPort: [ 10800 ] + openImMessageCmsPort: [ 10900 ] + openImAdminCmsPort: [ 11000 ] rpcregistername: openImUserName: User diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 2ab59b6ca..6e39ab266 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -854,6 +854,8 @@ func (s *groupServer) RemoveGroupMembersCMS(_ context.Context, req *pbGroup.Remo OpUserID: req.OpUserId, } chat.MemberKickedNotification(reqKick, resp.Success) + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "success: ", resp.Success) + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "failed: ", resp.Failed) return resp, nil } diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index 8f89376cb..ae0d3cadc 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -25,6 +25,9 @@ type config struct { Api struct { GinPort []int `yaml:"openImApiPort"` } + CmsApi struct{ + GinPort []int `yaml:"openImCmsApiPort"` + } Sdk struct { WsPort []int `yaml:"openImSdkWsPort"` } diff --git a/script/sdk_svr_start.sh b/script/sdk_svr_start.sh index 97c694233..2ba1295cd 100644 --- a/script/sdk_svr_start.sh +++ b/script/sdk_svr_start.sh @@ -6,13 +6,15 @@ source ./function.sh list1=$(cat $config_path | grep openImApiPort | awk -F '[:]' '{print $NF}') list2=$(cat $config_path | grep openImWsPort | awk -F '[:]' '{print $NF}') list3=$(cat $config_path | grep openImSdkWsPort | awk -F '[:]' '{print $NF}') +list4=$(cat $config_path | grep openImCmsApiPort | awk - F '[:]' '{print $NF}') list_to_string $list1 api_ports=($ports_array) list_to_string $list2 ws_ports=($ports_array) list_to_string $list3 sdk_ws_ports=($ports_array) - +list_to_string $list4 +cms_api_ports=($ports_array) diff --git a/script/start_rpc_service.sh b/script/start_rpc_service.sh index bc5f41e3d..bbd7f3c5a 100644 --- a/script/start_rpc_service.sh +++ b/script/start_rpc_service.sh @@ -29,7 +29,7 @@ service_port_name=( openImUserPort openImFriendPort openImGroupPort - openImAuthPort + openImAdminCmsPort openImMessageCmsPort openImStatisticsPort From a1cbf8724f0032ea1a8d530891bc9c985b4c198f Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 22 Feb 2022 14:13:04 +0800 Subject: [PATCH 27/37] log --- internal/msg_transfer/logic/history_msg_handler.go | 2 +- internal/msg_transfer/logic/persistent_msg_handler.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/msg_transfer/logic/history_msg_handler.go b/internal/msg_transfer/logic/history_msg_handler.go index 78b3ba79c..b78695c11 100644 --- a/internal/msg_transfer/logic/history_msg_handler.go +++ b/internal/msg_transfer/logic/history_msg_handler.go @@ -32,7 +32,7 @@ func (mc *HistoryConsumerHandler) Init() { } func (mc *HistoryConsumerHandler) handleChatWs2Mongo(msg []byte, msgKey string) { - log.InfoByKv("msg come mongo!!!", "", "msg", string(msg)) + log.NewInfo("msg come mongo!!!", "", "msg", string(msg)) time := utils.GetCurrentTimestampByNano() msgFromMQ := pbMsg.MsgDataToMQ{} err := proto.Unmarshal(msg, &msgFromMQ) diff --git a/internal/msg_transfer/logic/persistent_msg_handler.go b/internal/msg_transfer/logic/persistent_msg_handler.go index c90901212..59c338294 100644 --- a/internal/msg_transfer/logic/persistent_msg_handler.go +++ b/internal/msg_transfer/logic/persistent_msg_handler.go @@ -33,7 +33,7 @@ func (pc *PersistentConsumerHandler) Init() { } func (pc *PersistentConsumerHandler) handleChatWs2Mysql(msg []byte, msgKey string) { - log.InfoByKv("msg come here mysql!!!", "", "msg", string(msg)) + log.NewInfo("msg come here mysql!!!", "", "msg", string(msg)) msgFromMQ := pbMsg.MsgDataToMQ{} err := proto.Unmarshal(msg, &msgFromMQ) if err != nil { From 927380741c449cda9cf9732295b6e8e1b15ab41a Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Tue, 22 Feb 2022 14:23:05 +0800 Subject: [PATCH 28/37] v2.0.0 --- docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index ba1e31df1..b8d99cc7d 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -89,7 +89,7 @@ services: command: /usr/local/bin/etcd --name etcd0 --data-dir /etcd-data --listen-client-urls http://0.0.0.0:2379 --advertise-client-urls http://0.0.0.0:2379 --listen-peer-urls http://0.0.0.0:2380 --initial-advertise-peer-urls http://0.0.0.0:2380 --initial-cluster etcd0=http://0.0.0.0:2380 --initial-cluster-token tkn --initial-cluster-state new open_im_server: - image: openim/open_im_server + image: openim/open_im_server:v2.0.0 container_name: open_im_server volumes: - ./logs:/Open-IM-Server/logs From eddcac2343d94aaa64467e1ec5a9faf6b79e4b53 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 22 Feb 2022 16:01:32 +0800 Subject: [PATCH 29/37] send msg time modify --- internal/rpc/msg/send_msg.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index 576d5f8bb..114746da2 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -57,9 +57,7 @@ func userRelationshipVerification(data *pbChat.SendMsgReq) { } func (rpc *rpcChat) encapsulateMsgData(msg *sdk_ws.MsgData) { msg.ServerMsgID = GetMsgID(msg.SendID) - if msg.SendTime == 0 { - msg.SendTime = utils.GetCurrentTimestampByMill() - } + msg.SendTime = utils.GetCurrentTimestampByMill() switch msg.ContentType { case constant.Text: fallthrough From e3937c5ef2881a8a88f5fe5280cb720109d79e4f Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 22 Feb 2022 17:14:29 +0800 Subject: [PATCH 30/37] alter yaml --- config/config.yaml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index ed82b6748..e4f3cdaa9 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -8,7 +8,7 @@ etcd: etcdAddr: [ 127.0.0.1:2379 ] mysql: - dbMysqlAddress: [ 127.0.0.1:13306 ] + dbMysqlAddress: [ 43.128.5.63:13306 ] dbMysqlUserName: root dbMysqlPassword: openIM dbMysqlDatabaseName: openIM @@ -19,7 +19,7 @@ mysql: dbMaxLifeTime: 120 mongo: - dbAddress: [ 127.0.0.1:37017 ] + dbAddress: [ 43.128.5.63:37017 ] dbDirect: false dbTimeout: 10 dbDatabase: openIM @@ -30,7 +30,7 @@ mongo: dbRetainChatRecords: 7 redis: - dbAddress: 127.0.0.1:16379 + dbAddress: 43.128.5.63:16379 dbMaxIdle: 128 dbMaxActive: 0 dbIdleTimeout: 120 @@ -38,10 +38,10 @@ redis: kafka: ws2mschat: - addr: [ 127.0.0.1:9092 ] + addr: [ 43.128.5.63:9092 ] topic: "ws2ms_chat" ms2pschat: - addr: [ 127.0.0.1:9092 ] + addr: [ 43.128.5.63:9092 ] topic: "ms2ps_chat" consumergroupid: msgToMongo: mongo @@ -458,19 +458,19 @@ demoswitch: true demo: openImDemoPort: [ 42233 ] alismsverify: - accessKeyId: LTAI5tJPkn4HuuePdiLdGqe71 - accessKeySecret: 4n9OJ7ZCVN1U6KeHDAtOyNeVZcjOuV1 - signName: OpenIM Corporation - verificationCodeTemplateCode: SMS_2268101641 + accessKeyId: LTAI5tJPkn4HuuePdiLdGqe7 + accessKeySecret: 4n9OJ7ZCVN1U6KeHDAtOyNeVZcjOuV + signName: 托云信息技术 + verificationCodeTemplateCode: SMS_226810164 superCode: 666666 # second codeTTL: 60 mail: title: "openIM" - senderMail: "1765567899@qq.com" - senderAuthorizationCode: "1gxyausfoevlzbfag" + senderMail: "765567899@qq.com" + senderAuthorizationCode: "gxyausfoevlzbfag" smtpAddr: "smtp.qq.com" - smtpPort: 25 + smtpPort: From 2bbf794501bbe384bd693d8c9a37eb3948d5289c Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 22 Feb 2022 17:19:56 +0800 Subject: [PATCH 31/37] alter cfg --- config/config.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index e4f3cdaa9..a2d08fcbf 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -8,7 +8,7 @@ etcd: etcdAddr: [ 127.0.0.1:2379 ] mysql: - dbMysqlAddress: [ 43.128.5.63:13306 ] + dbMysqlAddress: [ 127.0.0.1:13306 ] dbMysqlUserName: root dbMysqlPassword: openIM dbMysqlDatabaseName: openIM @@ -19,7 +19,7 @@ mysql: dbMaxLifeTime: 120 mongo: - dbAddress: [ 43.128.5.63:37017 ] + dbAddress: [ 127.0.0.1:37017 ] dbDirect: false dbTimeout: 10 dbDatabase: openIM @@ -30,7 +30,7 @@ mongo: dbRetainChatRecords: 7 redis: - dbAddress: 43.128.5.63:16379 + dbAddress: 127.0.0.1:16379 dbMaxIdle: 128 dbMaxActive: 0 dbIdleTimeout: 120 @@ -38,10 +38,10 @@ redis: kafka: ws2mschat: - addr: [ 43.128.5.63:9092 ] + addr: [ 127.0.0.1:9092 ] topic: "ws2ms_chat" ms2pschat: - addr: [ 43.128.5.63:9092 ] + addr: [ 127.0.0.1:9092 ] topic: "ms2ps_chat" consumergroupid: msgToMongo: mongo From dcacd88f118e935978d55360573bad2b82f8e271 Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Tue, 22 Feb 2022 18:02:00 +0800 Subject: [PATCH 32/37] UserNotificationBegin = 1301 --- pkg/common/constant/constant.go | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index 50c0e544f..c5e2d38b9 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -54,10 +54,16 @@ const ( FriendRemarkSetNotification = 1206 //set_friend_remark? BlackAddedNotification = 1207 //add_black BlackDeletedNotification = 1208 //remove_black + ConversationOptChangeNotification = 1300 // change conversation opt + UserNotificationBegin = 1301 UserInfoUpdatedNotification = 1303 //SetSelfInfoTip = 204 + ConversationNotification = 1307 + ConversationNotNotification = 1308 + ConversationDefault = 0 + UserNotificationEnd = 1399 - ConversationOptChangeNotification = 1300 // change conversation opt + GroupNotificationBegin = 1500 GroupCreatedNotification = 1501 GroupInfoSetNotification = 1502 @@ -126,10 +132,10 @@ const ( MinioDurationTimes = 3600 // verificationCode used for - VerificationCodeForRegister = 1 - VerificationCodeForReset = 2 + VerificationCodeForRegister = 1 + VerificationCodeForReset = 2 VerificationCodeForRegisterSuffix = "_forRegister" - VerificationCodeForResetSuffix = "_forReset" + VerificationCodeForResetSuffix = "_forReset" ) var ContentType2PushContent = map[int64]string{ @@ -183,4 +189,4 @@ func GroupIsBanPrivateChat(status int32) bool { return true } - const BigVersion = "v3" \ No newline at end of file +const BigVersion = "v3" From d22935703d7fe5a5cf984c340854768f725fb4d8 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Tue, 22 Feb 2022 19:05:12 +0800 Subject: [PATCH 33/37] forget pwd --- internal/demo/register/verify.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/internal/demo/register/verify.go b/internal/demo/register/verify.go index b362fd340..01fafbb92 100644 --- a/internal/demo/register/verify.go +++ b/internal/demo/register/verify.go @@ -45,9 +45,16 @@ func Verify(c *gin.Context) { log.NewInfo("0", " params.VerificationCode != config.Config.Demo.SuperCode", params.VerificationCode, config.Config.Demo) log.NewInfo(params.OperationID, "begin get form redis", account) if params.UsedFor == 0 { - params.UsedFor = 1 + params.UsedFor = constant.VerificationCodeForRegister } - accountKey := account + "_" + constant.VerificationCodeForRegisterSuffix + var accountKey string + switch params.UsedFor { + case constant.VerificationCodeForRegister: + accountKey = account + "_" + constant.VerificationCodeForRegisterSuffix + case constant.VerificationCodeForReset: + accountKey = account + "_" + constant.VerificationCodeForResetSuffix + } + code, err := db.DB.GetAccountCode(accountKey) log.NewInfo(params.OperationID, "redis phone number and verificating Code", accountKey, code, params) if err != nil { From ebbdcbe5a56784868e6dccf866be992284ed5ab0 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 23 Feb 2022 09:49:02 +0800 Subject: [PATCH 34/37] shell update --- script/start_rpc_service.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/start_rpc_service.sh b/script/start_rpc_service.sh index bbd7f3c5a..bc5f41e3d 100644 --- a/script/start_rpc_service.sh +++ b/script/start_rpc_service.sh @@ -29,7 +29,7 @@ service_port_name=( openImUserPort openImFriendPort openImGroupPort - + openImAuthPort openImAdminCmsPort openImMessageCmsPort openImStatisticsPort From d2ba299f42ea05f3e710ac3386de659c33db8478 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 23 Feb 2022 10:10:28 +0800 Subject: [PATCH 35/37] shell update --- script/sdk_svr_start.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/script/sdk_svr_start.sh b/script/sdk_svr_start.sh index 2ba1295cd..e9604e5ea 100644 --- a/script/sdk_svr_start.sh +++ b/script/sdk_svr_start.sh @@ -6,7 +6,6 @@ source ./function.sh list1=$(cat $config_path | grep openImApiPort | awk -F '[:]' '{print $NF}') list2=$(cat $config_path | grep openImWsPort | awk -F '[:]' '{print $NF}') list3=$(cat $config_path | grep openImSdkWsPort | awk -F '[:]' '{print $NF}') -list4=$(cat $config_path | grep openImCmsApiPort | awk - F '[:]' '{print $NF}') list_to_string $list1 api_ports=($ports_array) list_to_string $list2 @@ -14,7 +13,6 @@ ws_ports=($ports_array) list_to_string $list3 sdk_ws_ports=($ports_array) list_to_string $list4 -cms_api_ports=($ports_array) From 5defc18a640a53689a1e4627c4a9b62105fcd3a7 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 23 Feb 2022 10:18:43 +0800 Subject: [PATCH 36/37] alter cfg codettl --- config/config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index a2d08fcbf..4ff741619 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -464,13 +464,13 @@ demo: verificationCodeTemplateCode: SMS_226810164 superCode: 666666 # second - codeTTL: 60 + codeTTL: 300 mail: title: "openIM" senderMail: "765567899@qq.com" senderAuthorizationCode: "gxyausfoevlzbfag" smtpAddr: "smtp.qq.com" - smtpPort: + smtpPort: 25 From 8f5b5ab0f9ff5fada9e604abf2f785fdeda2034c Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Wed, 23 Feb 2022 10:31:11 +0800 Subject: [PATCH 37/37] openIM_v2 --- cmd/Open-IM-SDK-Core | 2 +- config/config.yaml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cmd/Open-IM-SDK-Core b/cmd/Open-IM-SDK-Core index 855e89361..23f31958d 160000 --- a/cmd/Open-IM-SDK-Core +++ b/cmd/Open-IM-SDK-Core @@ -1 +1 @@ -Subproject commit 855e893610c905e3105484c3519613b993301bd2 +Subproject commit 23f31958dae08260c5f9631f4937389a8e2d6751 diff --git a/config/config.yaml b/config/config.yaml index a2d08fcbf..29bc4416c 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -1,7 +1,7 @@ # The class cannot be named by Pascal or camel case. # If it is not used, the corresponding structure will not be set, # and it will not be read naturally. -serverversion: 1.0.3 +serverversion: 2.0.0 #---------------Infrastructure configuration---------------------# etcd: etcdSchema: openIM @@ -11,7 +11,7 @@ mysql: dbMysqlAddress: [ 127.0.0.1:13306 ] dbMysqlUserName: root dbMysqlPassword: openIM - dbMysqlDatabaseName: openIM + dbMysqlDatabaseName: openIM_v2 dbTableName: eMsg dbMsgTableNum: 1 dbMaxOpenConns: 20