diff --git a/.github/workflows/cla-assistant.yml b/.github/workflows/cla-assistant.yml
index 71bdb6799..7d44b05eb 100644
--- a/.github/workflows/cla-assistant.yml
+++ b/.github/workflows/cla-assistant.yml
@@ -33,8 +33,8 @@ jobs:
remote-repository-name: cla
create-file-commit-message: 'Creating file for storing CLA Signatures'
# signed-commit-message: '$contributorName has signed the CLA in $owner/$repo#$pullRequestNo'
- custom-notsigned-prcomment: '💕 Thank you for your contribution and please kindly read and sign our [CLA Docs](https://github.com/OpenIM-Robot/cla/blob/main/README.md)'
- custom-pr-sign-comment: 'The signature to be committed in order to sign the CLA'
- custom-allsigned-prcomment: '🤖 All Contributors have signed the [CLA](https://github.com/OpenIM-Robot/cla/blob/main/README.md).
The signed information is recorded [🤖here](https://github.com/openim-sigs/cla/tree/main/signatures/cla.json)'
+ custom-notsigned-prcomment: '💕 Thank you for your contribution and please kindly read and sign our CLA. [CLA Docs](https://github.com/OpenIM-Robot/cla/blob/main/README.md)'
+ custom-pr-sign-comment: 'I have read the CLA Document and I hereby sign the CLA'
+ custom-allsigned-prcomment: '🤖 All Contributors have signed the [CLA](https://github.com/OpenIM-Robot/cla/blob/main/README.md).
The signed information is recorded [**here**](https://github.com/OpenIM-Robot/cla/blob/main/signatures/cla.json)'
#lock-pullrequest-aftermerge: false - if you don't want this bot to automatically lock the pull request after merging (default - true)
#use-dco-flag: true - If you are using DCO instead of CLA
diff --git a/CONTRIBUTING-zh_CN.md b/CONTRIBUTING-zh_CN.md
index 2f875b140..47965a9f4 100644
--- a/CONTRIBUTING-zh_CN.md
+++ b/CONTRIBUTING-zh_CN.md
@@ -77,7 +77,7 @@ git push origin fix-bug-123
### 9. 签署 CLA
如果这是你第一次提交 PR,你需要在 PR 的评论中回复:
```
-The signature to be committed in order to sign the CLA
+I have read the CLA Document and I hereby sign the CLA
```
### 编程规范
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 6ed419b2f..0aa07393e 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -75,7 +75,7 @@ Go to your fork on GitHub and click the "Pull Request" button. Ensure the PR des
### 9. Sign the CLA
If this is your first time submitting a PR, you will need to reply in the comments of the PR:
```
-The signature to be committed in order to sign the CLA
+I have read the CLA Document and I hereby sign the CLA
```
### Programming Standards
diff --git a/config/discovery.yml b/config/discovery.yml
index 3d96ff9b6..78a36f3d1 100644
--- a/config/discovery.yml
+++ b/config/discovery.yml
@@ -1,4 +1,4 @@
-enable: "etcd"
+enable: etcd
etcd:
rootDirectory: openim
address: [ localhost:12379 ]
diff --git a/config/kafka.yml b/config/kafka.yml
index d412e1be0..e45474f27 100644
--- a/config/kafka.yml
+++ b/config/kafka.yml
@@ -3,17 +3,17 @@ username: ''
# Password for authentication
password: ''
# Producer acknowledgment settings
-producerAck: ""
+producerAck:
# Compression type to use (e.g., none, gzip, snappy)
-compressType: "none"
+compressType: none
# List of Kafka broker addresses
address: [ localhost:19094 ]
# Kafka topic for Redis integration
-toRedisTopic: "toRedis"
+toRedisTopic: toRedis
# Kafka topic for MongoDB integration
-toMongoTopic: "toMongo"
+toMongoTopic: toMongo
# Kafka topic for push notifications
-toPushTopic: "toPush"
+toPushTopic: toPush
# Consumer group ID for Redis topic
toRedisGroupID: redis
# Consumer group ID for MongoDB topic
@@ -25,12 +25,12 @@ tls:
# Enable or disable TLS
enableTLS: false
# CA certificate file path
- caCrt: ""
+ caCrt:
# Client certificate file path
- clientCrt: ""
+ clientCrt:
# Client key file path
- clientKey: ""
+ clientKey:
# Client key password
- clientKeyPwd: ""
+ clientKeyPwd:
# Whether to skip TLS verification (not recommended for production)
insecureSkipVerify: false
diff --git a/config/minio.yml b/config/minio.yml
index 11a9ace35..ad1a32a8c 100644
--- a/config/minio.yml
+++ b/config/minio.yml
@@ -1,15 +1,15 @@
# Name of the bucket in MinIO
-bucket: "openim"
+bucket: openim
# Access key ID for MinIO authentication
-accessKeyID: "root"
+accessKeyID: root
# Secret access key for MinIO authentication
-secretAccessKey: "openIM123"
+secretAccessKey: openIM123
# Session token for MinIO authentication (optional)
-sessionToken: ''
+sessionToken:
# Internal address of the MinIO server
-internalAddress: "localhost:10005"
+internalAddress: localhost:10005
# External address of the MinIO server, accessible from outside. Supports both HTTP and HTTPS using a domain name
-externalAddress: "http://external_ip:10005"
+externalAddress: http://external_ip:10005
# Flag to enable or disable public read access to the bucket
publicRead: false
diff --git a/config/mongodb.yml b/config/mongodb.yml
index 98f5694e4..78f85992c 100644
--- a/config/mongodb.yml
+++ b/config/mongodb.yml
@@ -1,5 +1,5 @@
# URI for database connection, leave empty if using address and credential settings directly
-uri: ''
+uri:
# List of MongoDB server addresses
address: [ localhost:37017 ]
# Name of the database
diff --git a/config/notification.yml b/config/notification.yml
index 278376c24..85ca91af1 100644
--- a/config/notification.yml
+++ b/config/notification.yml
@@ -28,11 +28,11 @@ groupCreated:
# Enables or disables offline push notifications.
enable: false
# Title for the notification when a group is created.
- title: "create group title"
+ title: create group title
# Description for the notification.
- desc: "create group desc"
+ desc: create group desc
# Additional information for the notification.
- ext: "create group ext"
+ ext: create group ext
groupInfoSet:
isSendMsg: false
@@ -40,9 +40,9 @@ groupInfoSet:
unreadCount: false
offlinePush:
enable: false
- title: "groupInfoSet title"
- desc: "groupInfoSet desc"
- ext: "groupInfoSet ext"
+ title: groupInfoSet title
+ desc: groupInfoSet desc
+ ext: groupInfoSet ext
joinGroupApplication:
@@ -51,9 +51,9 @@ joinGroupApplication:
unreadCount: false
offlinePush:
enable: false
- title: "joinGroupApplication title"
- desc: "joinGroupApplication desc"
- ext: "joinGroupApplication ext"
+ title: joinGroupApplication title
+ desc: joinGroupApplication desc
+ ext: joinGroupApplication ext
memberQuit:
isSendMsg: true
@@ -61,9 +61,9 @@ memberQuit:
unreadCount: false
offlinePush:
enable: false
- title: "memberQuit title"
- desc: "memberQuit desc"
- ext: "memberQuit ext"
+ title: memberQuit title
+ desc: memberQuit desc
+ ext: memberQuit ext
groupApplicationAccepted:
isSendMsg: false
@@ -71,9 +71,9 @@ groupApplicationAccepted:
unreadCount: false
offlinePush:
enable: false
- title: "groupApplicationAccepted title"
- desc: "groupApplicationAccepted desc"
- ext: "groupApplicationAccepted ext"
+ title: groupApplicationAccepted title
+ desc: groupApplicationAccepted desc
+ ext: groupApplicationAccepted ext
groupApplicationRejected:
isSendMsg: false
@@ -81,9 +81,9 @@ groupApplicationRejected:
unreadCount: false
offlinePush:
enable: false
- title: "groupApplicationRejected title"
- desc: "groupApplicationRejected desc"
- ext: "groupApplicationRejected ext"
+ title: groupApplicationRejected title
+ desc: groupApplicationRejected desc
+ ext: groupApplicationRejected ext
groupOwnerTransferred:
@@ -92,9 +92,9 @@ groupOwnerTransferred:
unreadCount: false
offlinePush:
enable: false
- title: "groupOwnerTransferred title"
- desc: "groupOwnerTransferred desc"
- ext: "groupOwnerTransferred ext"
+ title: groupOwnerTransferred title
+ desc: groupOwnerTransferred desc
+ ext: groupOwnerTransferred ext
memberKicked:
isSendMsg: true
@@ -102,9 +102,9 @@ memberKicked:
unreadCount: false
offlinePush:
enable: false
- title: "memberKicked title"
- desc: "memberKicked desc"
- ext: "memberKicked ext"
+ title: memberKicked title
+ desc: memberKicked desc
+ ext: memberKicked ext
memberInvited:
isSendMsg: true
@@ -112,9 +112,9 @@ memberInvited:
unreadCount: false
offlinePush:
enable: false
- title: "memberInvited title"
- desc: "memberInvited desc"
- ext: "memberInvited ext"
+ title: memberInvited title
+ desc: memberInvited desc
+ ext: memberInvited ext
memberEnter:
isSendMsg: true
@@ -122,9 +122,9 @@ memberEnter:
unreadCount: false
offlinePush:
enable: false
- title: "memberEnter title"
- desc: "memberEnter desc"
- ext: "memberEnter ext"
+ title: memberEnter title
+ desc: memberEnter desc
+ ext: memberEnter ext
groupDismissed:
isSendMsg: true
@@ -132,9 +132,9 @@ groupDismissed:
unreadCount: false
offlinePush:
enable: false
- title: "groupDismissed title"
- desc: "groupDismissed desc"
- ext: "groupDismissed ext"
+ title: groupDismissed title
+ desc: groupDismissed desc
+ ext: groupDismissed ext
groupMuted:
isSendMsg: true
@@ -142,9 +142,9 @@ groupMuted:
unreadCount: false
offlinePush:
enable: false
- title: "groupMuted title"
- desc: "groupMuted desc"
- ext: "groupMuted ext"
+ title: groupMuted title
+ desc: groupMuted desc
+ ext: groupMuted ext
groupCancelMuted:
isSendMsg: true
@@ -152,11 +152,11 @@ groupCancelMuted:
unreadCount: false
offlinePush:
enable: false
- title: "groupCancelMuted title"
- desc: "groupCancelMuted desc"
- ext: "groupCancelMuted ext"
+ title: groupCancelMuted title
+ desc: groupCancelMuted desc
+ ext: groupCancelMuted ext
defaultTips:
- tips: "group Cancel Muted"
+ tips: group Cancel Muted
groupMemberMuted:
@@ -165,9 +165,9 @@ groupMemberMuted:
unreadCount: false
offlinePush:
enable: false
- title: "groupMemberMuted title"
- desc: "groupMemberMuted desc"
- ext: "groupMemberMuted ext"
+ title: groupMemberMuted title
+ desc: groupMemberMuted desc
+ ext: groupMemberMuted ext
groupMemberCancelMuted:
isSendMsg: true
@@ -175,9 +175,9 @@ groupMemberCancelMuted:
unreadCount: false
offlinePush:
enable: false
- title: "groupMemberCancelMuted title"
- desc: "groupMemberCancelMuted desc"
- ext: "groupMemberCancelMuted ext"
+ title: groupMemberCancelMuted title
+ desc: groupMemberCancelMuted desc
+ ext: groupMemberCancelMuted ext
groupMemberInfoSet:
isSendMsg: false
@@ -185,9 +185,9 @@ groupMemberInfoSet:
unreadCount: false
offlinePush:
enable: false
- title: "groupMemberInfoSet title"
- desc: "groupMemberInfoSet desc"
- ext: "groupMemberInfoSet ext"
+ title: groupMemberInfoSet title
+ desc: groupMemberInfoSet desc
+ ext: groupMemberInfoSet ext
groupInfoSetAnnouncement:
isSendMsg: true
@@ -195,9 +195,9 @@ groupInfoSetAnnouncement:
unreadCount: false
offlinePush:
enable: false
- title: "groupInfoSetAnnouncement title"
- desc: "groupInfoSetAnnouncement desc"
- ext: "groupInfoSetAnnouncement ext"
+ title: groupInfoSetAnnouncement title
+ desc: groupInfoSetAnnouncement desc
+ ext: groupInfoSetAnnouncement ext
groupInfoSetName:
@@ -206,9 +206,9 @@ groupInfoSetName:
unreadCount: false
offlinePush:
enable: false
- title: "groupInfoSetName title"
- desc: "groupInfoSetName desc"
- ext: "groupInfoSetName ext"
+ title: groupInfoSetName title
+ desc: groupInfoSetName desc
+ ext: groupInfoSetName ext
#############################friend#################################
@@ -218,9 +218,9 @@ friendApplicationAdded:
unreadCount: false
offlinePush:
enable: false
- title: "Somebody applies to add you as a friend"
- desc: "Somebody applies to add you as a friend"
- ext: "Somebody applies to add you as a friend"
+ title: Somebody applies to add you as a friend
+ desc: Somebody applies to add you as a friend
+ ext: Somebody applies to add you as a friend
friendApplicationApproved:
isSendMsg: true
@@ -228,9 +228,9 @@ friendApplicationApproved:
unreadCount: false
offlinePush:
enable: true
- title: "Someone applies to add your friend application"
- desc: "Someone applies to add your friend application"
- ext: "Someone applies to add your friend application"
+ title: Someone applies to add your friend application
+ desc: Someone applies to add your friend application
+ ext: Someone applies to add your friend application
friendApplicationRejected:
isSendMsg: false
@@ -238,9 +238,9 @@ friendApplicationRejected:
unreadCount: false
offlinePush:
enable: true
- title: "Someone rejected your friend application"
- desc: "Someone rejected your friend application"
- ext: "Someone rejected your friend application"
+ title: Someone rejected your friend application
+ desc: Someone rejected your friend application
+ ext: Someone rejected your friend application
friendAdded:
isSendMsg: false
@@ -248,9 +248,9 @@ friendAdded:
unreadCount: false
offlinePush:
enable: true
- title: "We have become friends"
- desc: "We have become friends"
- ext: "We have become friends"
+ title: We have become friends
+ desc: We have become friends
+ ext: We have become friends
friendDeleted:
isSendMsg: false
@@ -258,9 +258,9 @@ friendDeleted:
unreadCount: false
offlinePush:
enable: 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
friendRemarkSet:
isSendMsg: false
@@ -268,9 +268,9 @@ friendRemarkSet:
unreadCount: false
offlinePush:
enable: true
- title: "Your friend's profile has been changed"
- desc: "Your friend's profile has been changed"
- ext: "Your friend's profile has been changed"
+ title: Your friend's profile has been changed
+ desc: Your friend's profile has been changed
+ ext: Your friend's profile has been changed
blackAdded:
isSendMsg: false
@@ -278,9 +278,9 @@ blackAdded:
unreadCount: false
offlinePush:
enable: 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
blackDeleted:
isSendMsg: false
@@ -288,9 +288,9 @@ blackDeleted:
unreadCount: false
offlinePush:
enable: true
- title: "Remove a blocked user"
- desc: "Remove a blocked user"
- ext: "Remove a blocked user"
+ title: Remove a blocked user
+ desc: Remove a blocked user
+ ext: Remove a blocked user
friendInfoUpdated:
isSendMsg: false
@@ -298,9 +298,9 @@ friendInfoUpdated:
unreadCount: false
offlinePush:
enable: true
- title: "friend info updated"
- desc: "friend info updated"
- ext: "friend info updated"
+ title: friend info updated
+ desc: friend info updated
+ ext: friend info updated
#####################user#########################
userInfoUpdated:
@@ -309,9 +309,9 @@ userInfoUpdated:
unreadCount: false
offlinePush:
enable: true
- title: "Remove a blocked user"
- desc: "Remove a blocked user"
- ext: "Remove a blocked user"
+ title: Remove a blocked user
+ desc: Remove a blocked user
+ ext: Remove a blocked user
userStatusChanged:
isSendMsg: false
@@ -319,9 +319,9 @@ userStatusChanged:
unreadCount: false
offlinePush:
enable: false
- title: "user status changed"
- desc: "user status changed"
- ext: "user status changed"
+ title: user status changed
+ desc: user status changed
+ ext: user status changed
#####################conversation#########################
conversationChanged:
@@ -330,9 +330,9 @@ conversationChanged:
unreadCount: false
offlinePush:
enable: true
- title: "conversation changed"
- desc: "conversation changed"
- ext: "conversation changed"
+ title: conversation changed
+ desc: conversation changed
+ ext: conversation changed
conversationSetPrivate:
isSendMsg: true
@@ -340,6 +340,6 @@ conversationSetPrivate:
unreadCount: false
offlinePush:
enable: true
- title: "burn after reading"
- desc: "burn after reading"
- ext: "burn after reading"
+ title: burn after reading
+ desc: burn after reading
+ ext: burn after reading
diff --git a/config/openim-crontask.yml b/config/openim-crontask.yml
index 3839104a4..c05bd2485 100644
--- a/config/openim-crontask.yml
+++ b/config/openim-crontask.yml
@@ -1,3 +1,3 @@
-cronExecuteTime: "0 2 * * *"
+cronExecuteTime: 0 2 * * *
retainChatRecords: 365
fileExpireTime: 90
diff --git a/config/openim-msggateway.yml b/config/openim-msggateway.yml
index 0c92d8327..d8068c443 100644
--- a/config/openim-msggateway.yml
+++ b/config/openim-msggateway.yml
@@ -1,6 +1,6 @@
rpc:
# The IP address where this RPC service registers itself; if left blank, it defaults to the internal network IP
- registerIP: ''
+ registerIP:
# List of ports that the RPC service listens on; configuring multiple ports will launch multiple instances. These must match the number of configured prometheus ports
ports: [ 10140 ]
diff --git a/config/openim-push.yml b/config/openim-push.yml
index 9384008a0..1e55cdee8 100644
--- a/config/openim-push.yml
+++ b/config/openim-push.yml
@@ -1,6 +1,6 @@
rpc:
# The IP address where this RPC service registers itself; if left blank, it defaults to the internal network IP
- registerIP: ''
+ registerIP:
# IP address that the RPC service listens on; setting to 0.0.0.0 listens on both internal and external IPs. If left blank, it automatically uses the internal network IP
listenIP: 0.0.0.0
# List of ports that the RPC service listens on; configuring multiple ports will launch multiple instances. These must match the number of configured prometheus ports
@@ -13,28 +13,28 @@ prometheus:
ports: [ 20107 ]
maxConcurrentWorkers: 3
-#"Use geTui for offline push notifications, or choose fcm or jpns; corresponding configuration settings must be specified."
-enable: "geTui"
+#Use geTui for offline push notifications, or choose fcm or jpns; corresponding configuration settings must be specified.
+enable: geTui
geTui:
- pushUrl: "https://restapi.getui.com/v2/$appId"
- masterSecret: ''
- appKey: ''
- intent: ''
- channelID: ''
- channelName: ''
+ pushUrl: https://restapi.getui.com/v2/$appId
+ masterSecret:
+ appKey:
+ intent:
+ channelID:
+ channelName:
fcm:
# Prioritize using file paths. If the file path is empty, use URL
- filePath: "" # File path is concatenated with the parameters passed in through - c(`mage` default pass in `config/`) and filePath.
- authURL: "" # Must start with https or http.
+ filePath: # File path is concatenated with the parameters passed in through - c(`mage` default pass in `config/`) and filePath.
+ authURL: # Must start with https or http.
jpns:
- appKey: ''
- masterSecret: ''
- pushURL: ''
- pushIntent: ''
+ appKey:
+ masterSecret:
+ pushURL:
+ pushIntent:
# iOS system push sound and badge count
iosPush:
- pushSound: "xxx"
+ pushSound: xxx
badgeCount: true
production: false
diff --git a/config/openim-rpc-auth.yml b/config/openim-rpc-auth.yml
index 2d861cd5a..979eca06f 100644
--- a/config/openim-rpc-auth.yml
+++ b/config/openim-rpc-auth.yml
@@ -1,6 +1,6 @@
rpc:
# The IP address where this RPC service registers itself; if left blank, it defaults to the internal network IP
- registerIP: ''
+ registerIP:
# IP address that the RPC service listens on; setting to 0.0.0.0 listens on both internal and external IPs. If left blank, it automatically uses the internal network IP
listenIP: 0.0.0.0
# List of ports that the RPC service listens on; configuring multiple ports will launch multiple instances. These must match the number of configured prometheus ports
diff --git a/config/openim-rpc-conversation.yml b/config/openim-rpc-conversation.yml
index a094bfac1..d3f822501 100644
--- a/config/openim-rpc-conversation.yml
+++ b/config/openim-rpc-conversation.yml
@@ -1,6 +1,6 @@
rpc:
# The IP address where this RPC service registers itself; if left blank, it defaults to the internal network IP
- registerIP: ''
+ registerIP:
# IP address that the RPC service listens on; setting to 0.0.0.0 listens on both internal and external IPs. If left blank, it automatically uses the internal network IP
listenIP: 0.0.0.0
# List of ports that the RPC service listens on; configuring multiple ports will launch multiple instances. These must match the number of configured prometheus ports
diff --git a/config/openim-rpc-friend.yml b/config/openim-rpc-friend.yml
index 7b829f971..8d5869ce8 100644
--- a/config/openim-rpc-friend.yml
+++ b/config/openim-rpc-friend.yml
@@ -1,6 +1,6 @@
rpc:
# The IP address where this RPC service registers itself; if left blank, it defaults to the internal network IP
- registerIP: ''
+ registerIP:
# IP address that the RPC service listens on; setting to 0.0.0.0 listens on both internal and external IPs. If left blank, it automatically uses the internal network IP
listenIP: 0.0.0.0
# List of ports that the RPC service listens on; configuring multiple ports will launch multiple instances. These must match the number of configured prometheus ports
diff --git a/config/openim-rpc-group.yml b/config/openim-rpc-group.yml
index 78b44030e..f49c46207 100644
--- a/config/openim-rpc-group.yml
+++ b/config/openim-rpc-group.yml
@@ -1,6 +1,6 @@
rpc:
# The IP address where this RPC service registers itself; if left blank, it defaults to the internal network IP
- registerIP: ''
+ registerIP:
# IP address that the RPC service listens on; setting to 0.0.0.0 listens on both internal and external IPs. If left blank, it automatically uses the internal network IP
listenIP: 0.0.0.0
# List of ports that the RPC service listens on; configuring multiple ports will launch multiple instances. These must match the number of configured prometheus ports
diff --git a/config/openim-rpc-msg.yml b/config/openim-rpc-msg.yml
index 17ce26e9b..38cc46ecf 100644
--- a/config/openim-rpc-msg.yml
+++ b/config/openim-rpc-msg.yml
@@ -1,6 +1,6 @@
rpc:
# The IP address where this RPC service registers itself; if left blank, it defaults to the internal network IP
- registerIP: ''
+ registerIP:
# IP address that the RPC service listens on; setting to 0.0.0.0 listens on both internal and external IPs. If left blank, it automatically uses the internal network IP
listenIP: 0.0.0.0
# List of ports that the RPC service listens on; configuring multiple ports will launch multiple instances. These must match the number of configured prometheus ports
diff --git a/config/openim-rpc-third.yml b/config/openim-rpc-third.yml
index 6fb60f47f..408251f4d 100644
--- a/config/openim-rpc-third.yml
+++ b/config/openim-rpc-third.yml
@@ -1,6 +1,6 @@
rpc:
# The IP address where this RPC service registers itself; if left blank, it defaults to the internal network IP
- registerIP: ''
+ registerIP:
# IP address that the RPC service listens on; setting to 0.0.0.0 listens on both internal and external IPs. If left blank, it automatically uses the internal network IP
listenIP: 0.0.0.0
# List of ports that the RPC service listens on; configuring multiple ports will launch multiple instances. These must match the number of configured prometheus ports
@@ -15,26 +15,26 @@ prometheus:
object:
# Use MinIO as object storage, or set to "cos", "oss", "kodo", "aws", while also configuring the corresponding settings
- enable: "minio"
+ enable: minio
cos:
bucketURL: https://temp-1252357374.cos.ap-chengdu.myqcloud.com
- secretID: ''
- secretKey: ''
- sessionToken: ''
+ secretID:
+ secretKey:
+ sessionToken:
publicRead: false
oss:
- endpoint: "https://oss-cn-chengdu.aliyuncs.com"
- bucket: "demo-9999999"
- bucketURL: "https://demo-9999999.oss-cn-chengdu.aliyuncs.com"
- accessKeyID: ''
- accessKeySecret: ''
- sessionToken: ''
+ endpoint: https://oss-cn-chengdu.aliyuncs.com
+ bucket: demo-9999999
+ bucketURL: https://demo-9999999.oss-cn-chengdu.aliyuncs.com
+ accessKeyID:
+ accessKeySecret:
+ sessionToken:
publicRead: false
kodo:
- endpoint: "http://s3.cn-south-1.qiniucs.com"
- bucket: "kodo-bucket-test"
- bucketURL: "http://kodo-bucket-test-oetobfb.qiniudns.com"
- accessKeyID: ''
- accessKeySecret: ''
- sessionToken: ''
+ endpoint: http://s3.cn-south-1.qiniucs.com
+ bucket: kodo-bucket-test
+ bucketURL: http://kodo-bucket-test-oetobfb.qiniudns.com
+ accessKeyID:
+ accessKeySecret:
+ sessionToken:
publicRead: false
\ No newline at end of file
diff --git a/config/openim-rpc-user.yml b/config/openim-rpc-user.yml
index cbfb55b6c..ec9bb30dc 100644
--- a/config/openim-rpc-user.yml
+++ b/config/openim-rpc-user.yml
@@ -1,6 +1,6 @@
rpc:
# API or other RPCs can access this RPC through this IP; if left blank, the internal network IP is obtained by default
- registerIP: ''
+ registerIP:
# Listening IP; 0.0.0.0 means both internal and external IPs are listened to, if blank, the internal network IP is automatically obtained by default
listenIP: 0.0.0.0
# Listening ports; if multiple are configured, multiple instances will be launched, and must be consistent with the number of prometheus.ports
diff --git a/config/prometheus.yml b/config/prometheus.yml
index 5db41679f..c7ce4a489 100644
--- a/config/prometheus.yml
+++ b/config/prometheus.yml
@@ -8,76 +8,76 @@ global:
alerting:
alertmanagers:
- static_configs:
- - targets: ['internal_ip:19093']
+ - targets: [internal_ip:19093]
-# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
+# Load rules once and periodically evaluate them according to the global evaluation_interval.
rule_files:
- - "instance-down-rules.yml"
-# - "first_rules.yml"
-# - "second_rules.yml"
+ - instance-down-rules.yml
+# - first_rules.yml
+# - second_rules.yml
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
- # The job name is added as a label "job='job_name'"" to any timeseries scraped from this config.
+ # The job name is added as a label job=job_name" to any timeseries scraped from this config.
# Monitored information captured by prometheus
# prometheus fetches application services
- - job_name: 'node_exporter'
+ - job_name: node_exporter
static_configs:
- - targets: [ 'internal_ip:20114' ]
- - job_name: 'openimserver-openim-api'
+ - targets: [ internal_ip:20114 ]
+ - job_name: openimserver-openim-api
static_configs:
- - targets: [ 'internal_ip:20113' ]
+ - targets: [ internal_ip:20113 ]
labels:
- namespace: 'default'
- - job_name: 'openimserver-openim-msggateway'
+ namespace: default
+ - job_name: openimserver-openim-msggateway
static_configs:
- - targets: [ 'internal_ip:20112' ]
+ - targets: [ internal_ip:20112 ]
labels:
- namespace: 'default'
- - job_name: 'openimserver-openim-msgtransfer'
+ namespace: default
+ - job_name: openimserver-openim-msgtransfer
static_configs:
- - targets: [ 'internal_ip:20111', 'internal_ip:20110', 'internal_ip:20109', 'internal_ip:20108' ]
+ - targets: [ internal_ip:20111, internal_ip:20110, internal_ip:20109, internal_ip:20108 ]
labels:
- namespace: 'default'
- - job_name: 'openimserver-openim-push'
+ namespace: default
+ - job_name: openimserver-openim-push
static_configs:
- - targets: [ 'internal_ip:20107' ]
+ - targets: [ internal_ip:20107 ]
labels:
- namespace: 'default'
- - job_name: 'openimserver-openim-rpc-auth'
+ namespace: default
+ - job_name: openimserver-openim-rpc-auth
static_configs:
- - targets: [ 'internal_ip:20106' ]
+ - targets: [ internal_ip:20106 ]
labels:
- namespace: 'default'
- - job_name: 'openimserver-openim-rpc-conversation'
+ namespace: default
+ - job_name: openimserver-openim-rpc-conversation
static_configs:
- - targets: [ 'internal_ip:20105' ]
+ - targets: [ internal_ip:20105 ]
labels:
- namespace: 'default'
- - job_name: 'openimserver-openim-rpc-friend'
+ namespace: default
+ - job_name: openimserver-openim-rpc-friend
static_configs:
- - targets: [ 'internal_ip:20104' ]
+ - targets: [ internal_ip:20104 ]
labels:
- namespace: 'default'
- - job_name: 'openimserver-openim-rpc-group'
+ namespace: default
+ - job_name: openimserver-openim-rpc-group
static_configs:
- - targets: [ 'internal_ip:20103' ]
+ - targets: [ internal_ip:20103 ]
labels:
- namespace: 'default'
- - job_name: 'openimserver-openim-rpc-msg'
+ namespace: default
+ - job_name: openimserver-openim-rpc-msg
static_configs:
- - targets: [ 'internal_ip:20102' ]
+ - targets: [ internal_ip:20102 ]
labels:
- namespace: 'default'
- - job_name: 'openimserver-openim-rpc-third'
+ namespace: default
+ - job_name: openimserver-openim-rpc-third
static_configs:
- - targets: [ 'internal_ip:20101' ]
+ - targets: [ internal_ip:20101 ]
labels:
- namespace: 'default'
- - job_name: 'openimserver-openim-rpc-user'
+ namespace: default
+ - job_name: openimserver-openim-rpc-user
static_configs:
- - targets: [ 'internal_ip:20100' ]
+ - targets: [ internal_ip:20100 ]
labels:
- namespace: 'default'
\ No newline at end of file
+ namespace: default
\ No newline at end of file
diff --git a/config/redis.yml b/config/redis.yml
index 87abed0e1..83e305459 100644
--- a/config/redis.yml
+++ b/config/redis.yml
@@ -1,5 +1,5 @@
address: [ localhost:16379 ]
-username: ''
+username:
password: openIM123
clusterMode: false
db: 0
diff --git a/config/share.yml b/config/share.yml
index fc97b6a1f..4c5892615 100644
--- a/config/share.yml
+++ b/config/share.yml
@@ -10,5 +10,5 @@ rpcRegisterName:
conversation: conversation
third: third
-imAdminUserID: [ "imAdmin" ]
+imAdminUserID: [ imAdmin ]
diff --git a/config/webhooks.yml b/config/webhooks.yml
index 11a85ba0c..421522ff8 100644
--- a/config/webhooks.yml
+++ b/config/webhooks.yml
@@ -1,4 +1,4 @@
-url: "webhook://127.0.0.1:10008/callbackExample"
+url: webhook://127.0.0.1:10008/callbackExample
beforeSendSingleMsg:
enable: false
timeout: 5
diff --git a/docker-compose.yml b/docker-compose.yml
index 8cc1f24b2..49c44d3d9 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -140,50 +140,50 @@ services:
networks:
- openim
- prometheus:
- image: ${PROMETHEUS_IMAGE}
- container_name: prometheus
- restart: always
- volumes:
- - ./config/prometheus.yml:/etc/prometheus/prometheus.yml
- - ./config/instance-down-rules.yml:/etc/prometheus/instance-down-rules.yml
- - ${DATA_DIR}/components/prometheus/data:/prometheus
- command:
- - '--config.file=/etc/prometheus/prometheus.yml'
- - '--storage.tsdb.path=/prometheus'
- ports:
- - "19091:9090"
- networks:
- - openim
-
- alertmanager:
- image: ${ALERTMANAGER_IMAGE}
- container_name: alertmanager
- restart: always
- volumes:
- - ./config/alertmanager.yml:/etc/alertmanager/alertmanager.yml
- - ./config/email.tmpl:/etc/alertmanager/email.tmpl
- ports:
- - "19093:9093"
- networks:
- - openim
-
- grafana:
- image: ${GRAFANA_IMAGE}
- container_name: grafana
- user: root
- restart: always
- environment:
- - GF_SECURITY_ALLOW_EMBEDDING=true
- - GF_SESSION_COOKIE_SAMESITE=none
- - GF_SESSION_COOKIE_SECURE=true
- - GF_AUTH_ANONYMOUS_ENABLED=true
- - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin
- ports:
- - "13000:3000"
- volumes:
- - ${DATA_DIR:-./}/components/grafana:/var/lib/grafana
- networks:
- - openim
+# prometheus:
+# image: ${PROMETHEUS_IMAGE}
+# container_name: prometheus
+# restart: always
+# volumes:
+# - ./config/prometheus.yml:/etc/prometheus/prometheus.yml
+# - ./config/instance-down-rules.yml:/etc/prometheus/instance-down-rules.yml
+# - ${DATA_DIR}/components/prometheus/data:/prometheus
+# command:
+# - '--config.file=/etc/prometheus/prometheus.yml'
+# - '--storage.tsdb.path=/prometheus'
+# ports:
+# - "19091:9090"
+# networks:
+# - openim
+#
+# alertmanager:
+# image: ${ALERTMANAGER_IMAGE}
+# container_name: alertmanager
+# restart: always
+# volumes:
+# - ./config/alertmanager.yml:/etc/alertmanager/alertmanager.yml
+# - ./config/email.tmpl:/etc/alertmanager/email.tmpl
+# ports:
+# - "19093:9093"
+# networks:
+# - openim
+#
+# grafana:
+# image: ${GRAFANA_IMAGE}
+# container_name: grafana
+# user: root
+# restart: always
+# environment:
+# - GF_SECURITY_ALLOW_EMBEDDING=true
+# - GF_SESSION_COOKIE_SAMESITE=none
+# - GF_SESSION_COOKIE_SECURE=true
+# - GF_AUTH_ANONYMOUS_ENABLED=true
+# - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin
+# ports:
+# - "13000:3000"
+# volumes:
+# - ${DATA_DIR:-./}/components/grafana:/var/lib/grafana
+# networks:
+# - openim
diff --git a/internal/rpc/conversation/conversaion.go b/internal/rpc/conversation/conversaion.go
index 117ed8ca7..2fce2698a 100644
--- a/internal/rpc/conversation/conversaion.go
+++ b/internal/rpc/conversation/conversaion.go
@@ -247,6 +247,7 @@ func (c *conversationServer) SetConversations(ctx context.Context, req *pbconver
}
conv = *cs[0]
}
+
var conversation dbModel.Conversation
conversation.ConversationID = req.Conversation.ConversationID
conversation.ConversationType = req.Conversation.ConversationType
@@ -259,12 +260,14 @@ func (c *conversationServer) SetConversations(ctx context.Context, req *pbconver
unequal++
}
}
+
if req.Conversation.AttachedInfo != nil {
m["attached_info"] = req.Conversation.AttachedInfo.Value
if req.Conversation.AttachedInfo.Value != conv.AttachedInfo {
unequal++
}
}
+
if req.Conversation.Ex != nil {
m["ex"] = req.Conversation.Ex.Value
if req.Conversation.Ex.Value != conv.Ex {
@@ -277,24 +280,48 @@ func (c *conversationServer) SetConversations(ctx context.Context, req *pbconver
unequal++
}
}
+
if req.Conversation.GroupAtType != nil {
m["group_at_type"] = req.Conversation.GroupAtType.Value
if req.Conversation.GroupAtType.Value != conv.GroupAtType {
unequal++
}
}
+
if req.Conversation.MsgDestructTime != nil {
m["msg_destruct_time"] = req.Conversation.MsgDestructTime.Value
if req.Conversation.MsgDestructTime.Value != conv.MsgDestructTime {
unequal++
}
}
+
if req.Conversation.IsMsgDestruct != nil {
m["is_msg_destruct"] = req.Conversation.IsMsgDestruct.Value
if req.Conversation.IsMsgDestruct.Value != conv.IsMsgDestruct {
unequal++
}
}
+
+ if req.Conversation.BurnDuration != nil {
+ m["burn_duration"] = req.Conversation.BurnDuration.Value
+ if req.Conversation.BurnDuration.Value != conv.BurnDuration {
+ unequal++
+ }
+ }
+
+ if len(m) != 0 {
+ if err := c.conversationDatabase.SetUsersConversationFieldTx(ctx, req.UserIDs, &conversation, m); err != nil {
+ return nil, err
+ }
+ }
+
+ if unequal > 0 {
+ for _, v := range req.UserIDs {
+ c.conversationNotificationSender.ConversationChangeNotification(ctx, v, []string{req.Conversation.ConversationID})
+ }
+ return &pbconversation.SetConversationsResp{}, nil
+ }
+
if req.Conversation.IsPrivateChat != nil && req.Conversation.ConversationType != constant.ReadGroupChatType {
var conversations []*dbModel.Conversation
for _, ownerUserID := range req.UserIDs {
@@ -313,23 +340,6 @@ func (c *conversationServer) SetConversations(ctx context.Context, req *pbconver
}
}
- if req.Conversation.BurnDuration != nil {
- m["burn_duration"] = req.Conversation.BurnDuration.Value
- if req.Conversation.BurnDuration.Value != conv.BurnDuration {
- unequal++
- }
- }
-
- if err := c.conversationDatabase.SetUsersConversationFieldTx(ctx, req.UserIDs, &conversation, m); err != nil {
- return nil, err
- }
-
- if unequal > 0 {
- for _, v := range req.UserIDs {
- c.conversationNotificationSender.ConversationChangeNotification(ctx, v, []string{req.Conversation.ConversationID})
- }
- }
-
return &pbconversation.SetConversationsResp{}, nil
}
diff --git a/pkg/common/config/load_config_test.go b/pkg/common/config/load_config_test.go
index 256214565..a0345fc7a 100644
--- a/pkg/common/config/load_config_test.go
+++ b/pkg/common/config/load_config_test.go
@@ -36,3 +36,26 @@ func TestLoadOpenIMRpcUserConfig(t *testing.T) {
//export IMENV_OPENIM_RPC_USER_RPC_PORTS="10110,10111,10112"
assert.Equal(t, []int{10110, 10111, 10112}, user.RPC.Ports)
}
+
+func TestLoadNotificationConfig(t *testing.T) {
+ var noti Notification
+ err := LoadConfig("../../../config/notification.yml", "IMENV_NOTIFICATION", ¬i)
+ assert.Nil(t, err)
+ assert.Equal(t, "Your friend's profile has been changed", noti.FriendRemarkSet.OfflinePush.Title)
+}
+
+func TestLoadOpenIMThirdConfig(t *testing.T) {
+ var third Third
+ err := LoadConfig("../../../config/openim-rpc-third.yml", "IMENV_OPENIM_RPC_THIRD", &third)
+ assert.Nil(t, err)
+ assert.Equal(t, "enabled", third.Object.Enable)
+ assert.Equal(t, "https://oss-cn-chengdu.aliyuncs.com", third.Object.Oss.Endpoint)
+ assert.Equal(t, "my_bucket_name", third.Object.Oss.Bucket)
+ assert.Equal(t, "https://my_bucket_name.oss-cn-chengdu.aliyuncs.com", third.Object.Oss.BucketURL)
+ assert.Equal(t, "AKID1234567890", third.Object.Oss.AccessKeyID)
+ assert.Equal(t, "abc123xyz789", third.Object.Oss.AccessKeySecret)
+ assert.Equal(t, "session_token_value", third.Object.Oss.SessionToken) // Uncomment if session token is needed
+ assert.Equal(t, true, third.Object.Oss.PublicRead)
+
+ // Environment: IMENV_OPENIM_RPC_THIRD_OBJECT_ENABLE=enabled;IMENV_OPENIM_RPC_THIRD_OBJECT_OSS_ENDPOINT=https://oss-cn-chengdu.aliyuncs.com;IMENV_OPENIM_RPC_THIRD_OBJECT_OSS_BUCKET=my_bucket_name;IMENV_OPENIM_RPC_THIRD_OBJECT_OSS_BUCKETURL=https://my_bucket_name.oss-cn-chengdu.aliyuncs.com;IMENV_OPENIM_RPC_THIRD_OBJECT_OSS_ACCESSKEYID=AKID1234567890;IMENV_OPENIM_RPC_THIRD_OBJECT_OSS_ACCESSKEYSECRET=abc123xyz789;IMENV_OPENIM_RPC_THIRD_OBJECT_OSS_SESSIONTOKEN=session_token_value;IMENV_OPENIM_RPC_THIRD_OBJECT_OSS_PUBLICREAD=true
+}
diff --git a/pkg/common/storage/database/mgo/user.go b/pkg/common/storage/database/mgo/user.go
index 8978e64eb..ee92b7554 100644
--- a/pkg/common/storage/database/mgo/user.go
+++ b/pkg/common/storage/database/mgo/user.go
@@ -167,6 +167,10 @@ func (u *UserMgo) DeleteUserCommand(ctx context.Context, userID string, Type int
filter := bson.M{"userID": userID, "type": Type, "uuid": UUID}
result, err := collection.DeleteOne(ctx, filter)
+ // when err is not nil, result might be nil
+ if err != nil {
+ return errs.Wrap(err)
+ }
if result.DeletedCount == 0 {
// No records found to update
return errs.Wrap(errs.ErrRecordNotFound)
diff --git a/pkg/rpcclient/msg.go b/pkg/rpcclient/msg.go
index 124cc49af..da556224f 100644
--- a/pkg/rpcclient/msg.go
+++ b/pkg/rpcclient/msg.go
@@ -174,6 +174,9 @@ func (m *MessageRpcClient) GetMaxSeqs(ctx context.Context, conversationIDs []str
resp, err := m.Client.GetMaxSeqs(ctx, &msg.GetMaxSeqsReq{
ConversationIDs: conversationIDs,
})
+ if err != nil {
+ return nil, err
+ }
return resp.MaxSeqs, err
}
@@ -182,6 +185,9 @@ func (m *MessageRpcClient) GetHasReadSeqs(ctx context.Context, userID string, co
UserID: userID,
ConversationIDs: conversationIDs,
})
+ if err != nil {
+ return nil, err
+ }
return resp.MaxSeqs, err
}
@@ -190,6 +196,9 @@ func (m *MessageRpcClient) GetMsgByConversationIDs(ctx context.Context, docIDs [
ConversationIDs: docIDs,
MaxSeqs: seqs,
})
+ if err != nil {
+ return nil, err
+ }
return resp.MsgDatas, err
}
diff --git a/tools/url2im/pkg/manage.go b/tools/url2im/pkg/manage.go
index 5e1626da9..3664baa25 100644
--- a/tools/url2im/pkg/manage.go
+++ b/tools/url2im/pkg/manage.go
@@ -234,7 +234,7 @@ func (m *Manage) RunTask(ctx context.Context, task Task) (string, error) {
}
for i, currentPartSize := range part.PartSizes {
md5Reader := NewMd5Reader(io.LimitReader(reader, currentPartSize))
- if m.doPut(ctx, m.api.Client, initiateMultipartUploadResp.Upload.Sign, uploadParts[i], md5Reader, currentPartSize); err != nil {
+ if err := m.doPut(ctx, m.api.Client, initiateMultipartUploadResp.Upload.Sign, uploadParts[i], md5Reader, currentPartSize); err != nil {
return "", err
}
if md5val := md5Reader.Md5(); md5val != part.PartMd5s[i] {