mirror of
				https://github.com/openimsdk/open-im-server.git
				synced 2025-10-29 15:30:03 +08:00 
			
		
		
		
	Merge branch 'main' of github.com:openimsdk/open-im-server
This commit is contained in:
		
						commit
						d63c5b7a65
					
				
							
								
								
									
										6
									
								
								.github/workflows/cla-assistant.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.github/workflows/cla-assistant.yml
									
									
									
									
										vendored
									
									
								
							| @ -33,8 +33,8 @@ jobs: | |||||||
|           remote-repository-name: cla |           remote-repository-name: cla | ||||||
|           create-file-commit-message: 'Creating file for storing CLA Signatures' |           create-file-commit-message: 'Creating file for storing CLA Signatures' | ||||||
|           # signed-commit-message: '$contributorName has signed the CLA in $owner/$repo#$pullRequestNo' |           # 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-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: 'The signature to be committed in order to sign the CLA' |           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).<br> The signed information is recorded [🤖here](https://github.com/openim-sigs/cla/tree/main/signatures/cla.json)' |           custom-allsigned-prcomment: '🤖 All Contributors have signed the [CLA](https://github.com/OpenIM-Robot/cla/blob/main/README.md).<br> 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) |           #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 |           #use-dco-flag: true - If you are using DCO instead of CLA | ||||||
|  | |||||||
| @ -77,7 +77,7 @@ git push origin fix-bug-123 | |||||||
| ### 9. 签署 CLA | ### 9. 签署 CLA | ||||||
| 如果这是你第一次提交 PR,你需要在 PR 的评论中回复: | 如果这是你第一次提交 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 | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| ### 编程规范 | ### 编程规范 | ||||||
|  | |||||||
| @ -75,7 +75,7 @@ Go to your fork on GitHub and click the "Pull Request" button. Ensure the PR des | |||||||
| ### 9. Sign the CLA | ### 9. Sign the CLA | ||||||
| If this is your first time submitting a PR, you will need to reply in the comments of the PR: | 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 | ### Programming Standards | ||||||
|  | |||||||
| @ -1,4 +1,4 @@ | |||||||
| enable: "etcd" | enable: etcd | ||||||
| etcd: | etcd: | ||||||
|   rootDirectory: openim |   rootDirectory: openim | ||||||
|   address: [ localhost:12379 ] |   address: [ localhost:12379 ] | ||||||
|  | |||||||
| @ -3,17 +3,17 @@ username: '' | |||||||
| # Password for authentication | # Password for authentication | ||||||
| password: '' | password: '' | ||||||
| # Producer acknowledgment settings | # Producer acknowledgment settings | ||||||
| producerAck: "" | producerAck:  | ||||||
| # Compression type to use (e.g., none, gzip, snappy) | # Compression type to use (e.g., none, gzip, snappy) | ||||||
| compressType: "none" | compressType: none | ||||||
| # List of Kafka broker addresses | # List of Kafka broker addresses | ||||||
| address: [ localhost:19094 ] | address: [ localhost:19094 ] | ||||||
| # Kafka topic for Redis integration | # Kafka topic for Redis integration | ||||||
| toRedisTopic: "toRedis" | toRedisTopic: toRedis | ||||||
| # Kafka topic for MongoDB integration | # Kafka topic for MongoDB integration | ||||||
| toMongoTopic: "toMongo" | toMongoTopic: toMongo | ||||||
| # Kafka topic for push notifications | # Kafka topic for push notifications | ||||||
| toPushTopic: "toPush" | toPushTopic: toPush | ||||||
| # Consumer group ID for Redis topic | # Consumer group ID for Redis topic | ||||||
| toRedisGroupID: redis | toRedisGroupID: redis | ||||||
| # Consumer group ID for MongoDB topic | # Consumer group ID for MongoDB topic | ||||||
| @ -25,12 +25,12 @@ tls: | |||||||
|   # Enable or disable TLS |   # Enable or disable TLS | ||||||
|   enableTLS: false |   enableTLS: false | ||||||
|   # CA certificate file path |   # CA certificate file path | ||||||
|   caCrt: "" |   caCrt:  | ||||||
|   # Client certificate file path |   # Client certificate file path | ||||||
|   clientCrt: "" |   clientCrt:  | ||||||
|   # Client key file path |   # Client key file path | ||||||
|   clientKey: "" |   clientKey:  | ||||||
|   # Client key password |   # Client key password | ||||||
|   clientKeyPwd: "" |   clientKeyPwd:  | ||||||
|   # Whether to skip TLS verification (not recommended for production) |   # Whether to skip TLS verification (not recommended for production) | ||||||
|   insecureSkipVerify: false |   insecureSkipVerify: false | ||||||
|  | |||||||
| @ -1,15 +1,15 @@ | |||||||
| # Name of the bucket in MinIO | # Name of the bucket in MinIO | ||||||
| bucket: "openim" | bucket: openim | ||||||
| # Access key ID for MinIO authentication | # Access key ID for MinIO authentication | ||||||
| accessKeyID: "root" | accessKeyID: root | ||||||
| # Secret access key for MinIO authentication | # Secret access key for MinIO authentication | ||||||
| secretAccessKey: "openIM123" | secretAccessKey: openIM123 | ||||||
| # Session token for MinIO authentication (optional) | # Session token for MinIO authentication (optional) | ||||||
| sessionToken: '' | sessionToken:  | ||||||
| # Internal address of the MinIO server | # 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 | # 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 | # Flag to enable or disable public read access to the bucket | ||||||
| publicRead: false | publicRead: false | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| # URI for database connection, leave empty if using address and credential settings directly | # URI for database connection, leave empty if using address and credential settings directly | ||||||
| uri: '' | uri:  | ||||||
| # List of MongoDB server addresses | # List of MongoDB server addresses | ||||||
| address: [ localhost:37017 ] | address: [ localhost:37017 ] | ||||||
| # Name of the database | # Name of the database | ||||||
|  | |||||||
| @ -28,11 +28,11 @@ groupCreated: | |||||||
|     # Enables or disables offline push notifications. |     # Enables or disables offline push notifications. | ||||||
|     enable: false |     enable: false | ||||||
|     # Title for the notification when a group is created. |     # Title for the notification when a group is created. | ||||||
|     title: "create group title" |     title: create group title | ||||||
|     # Description for the notification. |     # Description for the notification. | ||||||
|     desc: "create group desc" |     desc: create group desc | ||||||
|     # Additional information for the notification. |     # Additional information for the notification. | ||||||
|     ext: "create group ext" |     ext: create group ext | ||||||
| 
 | 
 | ||||||
| groupInfoSet: | groupInfoSet: | ||||||
|   isSendMsg: false |   isSendMsg: false | ||||||
| @ -40,9 +40,9 @@ groupInfoSet: | |||||||
|   unreadCount: false |   unreadCount: false | ||||||
|   offlinePush: |   offlinePush: | ||||||
|     enable: false |     enable: false | ||||||
|     title: "groupInfoSet title" |     title: groupInfoSet title | ||||||
|     desc: "groupInfoSet desc" |     desc: groupInfoSet desc | ||||||
|     ext: "groupInfoSet ext" |     ext: groupInfoSet ext | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| joinGroupApplication: | joinGroupApplication: | ||||||
| @ -51,9 +51,9 @@ joinGroupApplication: | |||||||
|   unreadCount: false |   unreadCount: false | ||||||
|   offlinePush: |   offlinePush: | ||||||
|     enable: false |     enable: false | ||||||
|     title: "joinGroupApplication title" |     title: joinGroupApplication title | ||||||
|     desc: "joinGroupApplication desc" |     desc: joinGroupApplication desc | ||||||
|     ext: "joinGroupApplication ext" |     ext: joinGroupApplication ext | ||||||
| 
 | 
 | ||||||
| memberQuit: | memberQuit: | ||||||
|   isSendMsg: true |   isSendMsg: true | ||||||
| @ -61,9 +61,9 @@ memberQuit: | |||||||
|   unreadCount: false |   unreadCount: false | ||||||
|   offlinePush: |   offlinePush: | ||||||
|     enable: false |     enable: false | ||||||
|     title: "memberQuit title" |     title: memberQuit title | ||||||
|     desc: "memberQuit desc" |     desc: memberQuit desc | ||||||
|     ext: "memberQuit ext" |     ext: memberQuit ext | ||||||
| 
 | 
 | ||||||
| groupApplicationAccepted: | groupApplicationAccepted: | ||||||
|   isSendMsg: false |   isSendMsg: false | ||||||
| @ -71,9 +71,9 @@ groupApplicationAccepted: | |||||||
|   unreadCount: false |   unreadCount: false | ||||||
|   offlinePush: |   offlinePush: | ||||||
|     enable: false |     enable: false | ||||||
|     title: "groupApplicationAccepted title" |     title: groupApplicationAccepted title | ||||||
|     desc: "groupApplicationAccepted desc" |     desc: groupApplicationAccepted desc | ||||||
|     ext: "groupApplicationAccepted ext" |     ext: groupApplicationAccepted ext | ||||||
| 
 | 
 | ||||||
| groupApplicationRejected: | groupApplicationRejected: | ||||||
|   isSendMsg: false |   isSendMsg: false | ||||||
| @ -81,9 +81,9 @@ groupApplicationRejected: | |||||||
|   unreadCount: false |   unreadCount: false | ||||||
|   offlinePush: |   offlinePush: | ||||||
|     enable: false |     enable: false | ||||||
|     title: "groupApplicationRejected title" |     title: groupApplicationRejected title | ||||||
|     desc: "groupApplicationRejected desc" |     desc: groupApplicationRejected desc | ||||||
|     ext: "groupApplicationRejected ext" |     ext: groupApplicationRejected ext | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| groupOwnerTransferred: | groupOwnerTransferred: | ||||||
| @ -92,9 +92,9 @@ groupOwnerTransferred: | |||||||
|   unreadCount: false |   unreadCount: false | ||||||
|   offlinePush: |   offlinePush: | ||||||
|     enable: false |     enable: false | ||||||
|     title: "groupOwnerTransferred title" |     title: groupOwnerTransferred title | ||||||
|     desc: "groupOwnerTransferred desc" |     desc: groupOwnerTransferred desc | ||||||
|     ext: "groupOwnerTransferred ext" |     ext: groupOwnerTransferred ext | ||||||
| 
 | 
 | ||||||
| memberKicked: | memberKicked: | ||||||
|   isSendMsg: true |   isSendMsg: true | ||||||
| @ -102,9 +102,9 @@ memberKicked: | |||||||
|   unreadCount: false |   unreadCount: false | ||||||
|   offlinePush: |   offlinePush: | ||||||
|     enable: false |     enable: false | ||||||
|     title: "memberKicked title" |     title: memberKicked title | ||||||
|     desc: "memberKicked desc" |     desc: memberKicked desc | ||||||
|     ext: "memberKicked ext" |     ext: memberKicked ext | ||||||
| 
 | 
 | ||||||
| memberInvited: | memberInvited: | ||||||
|   isSendMsg: true |   isSendMsg: true | ||||||
| @ -112,9 +112,9 @@ memberInvited: | |||||||
|   unreadCount: false |   unreadCount: false | ||||||
|   offlinePush: |   offlinePush: | ||||||
|     enable: false |     enable: false | ||||||
|     title: "memberInvited title" |     title: memberInvited title | ||||||
|     desc: "memberInvited desc" |     desc: memberInvited desc | ||||||
|     ext: "memberInvited ext" |     ext: memberInvited ext | ||||||
| 
 | 
 | ||||||
| memberEnter: | memberEnter: | ||||||
|   isSendMsg: true |   isSendMsg: true | ||||||
| @ -122,9 +122,9 @@ memberEnter: | |||||||
|   unreadCount: false |   unreadCount: false | ||||||
|   offlinePush: |   offlinePush: | ||||||
|     enable: false |     enable: false | ||||||
|     title: "memberEnter title" |     title: memberEnter title | ||||||
|     desc: "memberEnter desc" |     desc: memberEnter desc | ||||||
|     ext: "memberEnter ext" |     ext: memberEnter ext | ||||||
| 
 | 
 | ||||||
| groupDismissed: | groupDismissed: | ||||||
|   isSendMsg: true |   isSendMsg: true | ||||||
| @ -132,9 +132,9 @@ groupDismissed: | |||||||
|   unreadCount: false |   unreadCount: false | ||||||
|   offlinePush: |   offlinePush: | ||||||
|     enable: false |     enable: false | ||||||
|     title: "groupDismissed title" |     title: groupDismissed title | ||||||
|     desc: "groupDismissed desc" |     desc: groupDismissed desc | ||||||
|     ext: "groupDismissed ext" |     ext: groupDismissed ext | ||||||
| 
 | 
 | ||||||
| groupMuted: | groupMuted: | ||||||
|   isSendMsg: true |   isSendMsg: true | ||||||
| @ -142,9 +142,9 @@ groupMuted: | |||||||
|   unreadCount: false |   unreadCount: false | ||||||
|   offlinePush: |   offlinePush: | ||||||
|     enable: false |     enable: false | ||||||
|     title: "groupMuted title" |     title: groupMuted title | ||||||
|     desc: "groupMuted desc" |     desc: groupMuted desc | ||||||
|     ext: "groupMuted ext" |     ext: groupMuted ext | ||||||
| 
 | 
 | ||||||
| groupCancelMuted: | groupCancelMuted: | ||||||
|   isSendMsg: true |   isSendMsg: true | ||||||
| @ -152,11 +152,11 @@ groupCancelMuted: | |||||||
|   unreadCount: false |   unreadCount: false | ||||||
|   offlinePush: |   offlinePush: | ||||||
|     enable: false |     enable: false | ||||||
|     title: "groupCancelMuted title" |     title: groupCancelMuted title | ||||||
|     desc: "groupCancelMuted desc" |     desc: groupCancelMuted desc | ||||||
|     ext: "groupCancelMuted ext" |     ext: groupCancelMuted ext | ||||||
|   defaultTips: |   defaultTips: | ||||||
|     tips: "group Cancel Muted" |     tips: group Cancel Muted | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| groupMemberMuted: | groupMemberMuted: | ||||||
| @ -165,9 +165,9 @@ groupMemberMuted: | |||||||
|   unreadCount: false |   unreadCount: false | ||||||
|   offlinePush: |   offlinePush: | ||||||
|     enable: false |     enable: false | ||||||
|     title: "groupMemberMuted title" |     title: groupMemberMuted title | ||||||
|     desc: "groupMemberMuted desc" |     desc: groupMemberMuted desc | ||||||
|     ext: "groupMemberMuted ext" |     ext: groupMemberMuted ext | ||||||
| 
 | 
 | ||||||
| groupMemberCancelMuted: | groupMemberCancelMuted: | ||||||
|   isSendMsg: true |   isSendMsg: true | ||||||
| @ -175,9 +175,9 @@ groupMemberCancelMuted: | |||||||
|   unreadCount: false |   unreadCount: false | ||||||
|   offlinePush: |   offlinePush: | ||||||
|     enable: false |     enable: false | ||||||
|     title: "groupMemberCancelMuted title" |     title: groupMemberCancelMuted title | ||||||
|     desc: "groupMemberCancelMuted desc" |     desc: groupMemberCancelMuted desc | ||||||
|     ext: "groupMemberCancelMuted ext" |     ext: groupMemberCancelMuted ext | ||||||
| 
 | 
 | ||||||
| groupMemberInfoSet: | groupMemberInfoSet: | ||||||
|   isSendMsg: false |   isSendMsg: false | ||||||
| @ -185,9 +185,9 @@ groupMemberInfoSet: | |||||||
|   unreadCount: false |   unreadCount: false | ||||||
|   offlinePush: |   offlinePush: | ||||||
|     enable: false |     enable: false | ||||||
|     title: "groupMemberInfoSet title" |     title: groupMemberInfoSet title | ||||||
|     desc: "groupMemberInfoSet desc" |     desc: groupMemberInfoSet desc | ||||||
|     ext: "groupMemberInfoSet ext" |     ext: groupMemberInfoSet ext | ||||||
| 
 | 
 | ||||||
| groupInfoSetAnnouncement: | groupInfoSetAnnouncement: | ||||||
|   isSendMsg: true |   isSendMsg: true | ||||||
| @ -195,9 +195,9 @@ groupInfoSetAnnouncement: | |||||||
|   unreadCount: false |   unreadCount: false | ||||||
|   offlinePush: |   offlinePush: | ||||||
|     enable: false |     enable: false | ||||||
|     title: "groupInfoSetAnnouncement title" |     title: groupInfoSetAnnouncement title | ||||||
|     desc: "groupInfoSetAnnouncement desc" |     desc: groupInfoSetAnnouncement desc | ||||||
|     ext: "groupInfoSetAnnouncement ext" |     ext: groupInfoSetAnnouncement ext | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| groupInfoSetName: | groupInfoSetName: | ||||||
| @ -206,9 +206,9 @@ groupInfoSetName: | |||||||
|   unreadCount: false |   unreadCount: false | ||||||
|   offlinePush: |   offlinePush: | ||||||
|     enable: false |     enable: false | ||||||
|     title: "groupInfoSetName title" |     title: groupInfoSetName title | ||||||
|     desc: "groupInfoSetName desc" |     desc: groupInfoSetName desc | ||||||
|     ext: "groupInfoSetName ext" |     ext: groupInfoSetName ext | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #############################friend################################# | #############################friend################################# | ||||||
| @ -218,9 +218,9 @@ friendApplicationAdded: | |||||||
|   unreadCount: false |   unreadCount: false | ||||||
|   offlinePush: |   offlinePush: | ||||||
|     enable: false |     enable: false | ||||||
|     title: "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" |     desc: Somebody applies to add you as a friend | ||||||
|     ext: "Somebody applies to add you as a friend" |     ext: Somebody applies to add you as a friend | ||||||
| 
 | 
 | ||||||
| friendApplicationApproved: | friendApplicationApproved: | ||||||
|   isSendMsg: true |   isSendMsg: true | ||||||
| @ -228,9 +228,9 @@ friendApplicationApproved: | |||||||
|   unreadCount: false |   unreadCount: false | ||||||
|   offlinePush: |   offlinePush: | ||||||
|     enable: true |     enable: true | ||||||
|     title: "Someone applies to add your friend application" |     title: Someone applies to add your friend application | ||||||
|     desc: "Someone applies to add your friend application" |     desc: Someone applies to add your friend application | ||||||
|     ext: "Someone applies to add your friend application" |     ext: Someone applies to add your friend application | ||||||
| 
 | 
 | ||||||
| friendApplicationRejected: | friendApplicationRejected: | ||||||
|   isSendMsg: false |   isSendMsg: false | ||||||
| @ -238,9 +238,9 @@ friendApplicationRejected: | |||||||
|   unreadCount: false |   unreadCount: false | ||||||
|   offlinePush: |   offlinePush: | ||||||
|     enable: true |     enable: true | ||||||
|     title: "Someone rejected your friend application" |     title: Someone rejected your friend application | ||||||
|     desc: "Someone rejected your friend application" |     desc: Someone rejected your friend application | ||||||
|     ext: "Someone rejected your friend application" |     ext: Someone rejected your friend application | ||||||
| 
 | 
 | ||||||
| friendAdded: | friendAdded: | ||||||
|   isSendMsg: false |   isSendMsg: false | ||||||
| @ -248,9 +248,9 @@ friendAdded: | |||||||
|   unreadCount: false |   unreadCount: false | ||||||
|   offlinePush: |   offlinePush: | ||||||
|     enable: true |     enable: true | ||||||
|     title: "We have become friends" |     title: We have become friends | ||||||
|     desc: "We have become friends" |     desc: We have become friends | ||||||
|     ext: "We have become friends" |     ext: We have become friends | ||||||
| 
 | 
 | ||||||
| friendDeleted: | friendDeleted: | ||||||
|   isSendMsg: false |   isSendMsg: false | ||||||
| @ -258,9 +258,9 @@ friendDeleted: | |||||||
|   unreadCount: false |   unreadCount: false | ||||||
|   offlinePush: |   offlinePush: | ||||||
|     enable: true |     enable: true | ||||||
|     title: "deleted a friend" |     title: deleted a friend | ||||||
|     desc: "deleted a friend" |     desc: deleted a friend | ||||||
|     ext: "deleted a friend" |     ext: deleted a friend | ||||||
| 
 | 
 | ||||||
| friendRemarkSet: | friendRemarkSet: | ||||||
|   isSendMsg: false |   isSendMsg: false | ||||||
| @ -268,9 +268,9 @@ friendRemarkSet: | |||||||
|   unreadCount: false |   unreadCount: false | ||||||
|   offlinePush: |   offlinePush: | ||||||
|     enable: true |     enable: true | ||||||
|     title: "Your friend's profile has been changed" |     title: Your friend's profile has been changed | ||||||
|     desc: "Your friend's profile has been changed" |     desc: Your friend's profile has been changed | ||||||
|     ext: "Your friend's profile has been changed" |     ext: Your friend's profile has been changed | ||||||
| 
 | 
 | ||||||
| blackAdded: | blackAdded: | ||||||
|   isSendMsg: false |   isSendMsg: false | ||||||
| @ -278,9 +278,9 @@ blackAdded: | |||||||
|   unreadCount: false |   unreadCount: false | ||||||
|   offlinePush: |   offlinePush: | ||||||
|     enable: true |     enable: true | ||||||
|     title: "blocked a user" |     title: blocked a user | ||||||
|     desc: "blocked a user" |     desc: blocked a user | ||||||
|     ext: "blocked a user" |     ext: blocked a user | ||||||
| 
 | 
 | ||||||
| blackDeleted: | blackDeleted: | ||||||
|   isSendMsg: false |   isSendMsg: false | ||||||
| @ -288,9 +288,9 @@ blackDeleted: | |||||||
|   unreadCount: false |   unreadCount: false | ||||||
|   offlinePush: |   offlinePush: | ||||||
|     enable: true |     enable: true | ||||||
|     title: "Remove a blocked user" |     title: Remove a blocked user | ||||||
|     desc: "Remove a blocked user" |     desc: Remove a blocked user | ||||||
|     ext: "Remove a blocked user" |     ext: Remove a blocked user | ||||||
| 
 | 
 | ||||||
| friendInfoUpdated: | friendInfoUpdated: | ||||||
|   isSendMsg: false |   isSendMsg: false | ||||||
| @ -298,9 +298,9 @@ friendInfoUpdated: | |||||||
|   unreadCount: false |   unreadCount: false | ||||||
|   offlinePush: |   offlinePush: | ||||||
|     enable: true |     enable: true | ||||||
|     title: "friend info updated" |     title: friend info updated | ||||||
|     desc: "friend info updated" |     desc: friend info updated | ||||||
|     ext: "friend info updated" |     ext: friend info updated | ||||||
| 
 | 
 | ||||||
| #####################user######################### | #####################user######################### | ||||||
| userInfoUpdated: | userInfoUpdated: | ||||||
| @ -309,9 +309,9 @@ userInfoUpdated: | |||||||
|   unreadCount: false |   unreadCount: false | ||||||
|   offlinePush: |   offlinePush: | ||||||
|     enable: true |     enable: true | ||||||
|     title: "Remove a blocked user" |     title: Remove a blocked user | ||||||
|     desc: "Remove a blocked user" |     desc: Remove a blocked user | ||||||
|     ext: "Remove a blocked user" |     ext: Remove a blocked user | ||||||
| 
 | 
 | ||||||
| userStatusChanged: | userStatusChanged: | ||||||
|   isSendMsg: false |   isSendMsg: false | ||||||
| @ -319,9 +319,9 @@ userStatusChanged: | |||||||
|   unreadCount: false |   unreadCount: false | ||||||
|   offlinePush: |   offlinePush: | ||||||
|     enable: false |     enable: false | ||||||
|     title: "user status changed" |     title: user status changed | ||||||
|     desc: "user status changed" |     desc: user status changed | ||||||
|     ext: "user status changed" |     ext: user status changed | ||||||
| 
 | 
 | ||||||
| #####################conversation######################### | #####################conversation######################### | ||||||
| conversationChanged: | conversationChanged: | ||||||
| @ -330,9 +330,9 @@ conversationChanged: | |||||||
|   unreadCount: false |   unreadCount: false | ||||||
|   offlinePush: |   offlinePush: | ||||||
|     enable: true |     enable: true | ||||||
|     title: "conversation changed" |     title: conversation changed | ||||||
|     desc: "conversation changed" |     desc: conversation changed | ||||||
|     ext: "conversation changed" |     ext: conversation changed | ||||||
| 
 | 
 | ||||||
| conversationSetPrivate: | conversationSetPrivate: | ||||||
|   isSendMsg: true |   isSendMsg: true | ||||||
| @ -340,6 +340,6 @@ conversationSetPrivate: | |||||||
|   unreadCount: false |   unreadCount: false | ||||||
|   offlinePush: |   offlinePush: | ||||||
|     enable: true |     enable: true | ||||||
|     title: "burn after reading" |     title: burn after reading | ||||||
|     desc: "burn after reading" |     desc: burn after reading | ||||||
|     ext: "burn after reading" |     ext: burn after reading | ||||||
|  | |||||||
| @ -1,3 +1,3 @@ | |||||||
| cronExecuteTime: "0 2 * * *" | cronExecuteTime: 0 2 * * * | ||||||
| retainChatRecords: 365 | retainChatRecords: 365 | ||||||
| fileExpireTime: 90 | fileExpireTime: 90 | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| rpc: | rpc: | ||||||
|   # The IP address where this RPC service registers itself; if left blank, it defaults to the internal network IP |   # 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 |   # 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 ] |   ports: [ 10140 ] | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| rpc: | rpc: | ||||||
|   # The IP address where this RPC service registers itself; if left blank, it defaults to the internal network IP |   # 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 |   # 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 |   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 |   # 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 ] |   ports: [ 20107 ] | ||||||
| 
 | 
 | ||||||
| maxConcurrentWorkers: 3 | maxConcurrentWorkers: 3 | ||||||
| #"Use geTui for offline push notifications, or choose fcm or jpns; corresponding configuration settings must be specified." | #Use geTui for offline push notifications, or choose fcm or jpns; corresponding configuration settings must be specified. | ||||||
| enable: "geTui" | enable: geTui | ||||||
| geTui: | geTui: | ||||||
|   pushUrl: "https://restapi.getui.com/v2/$appId" |   pushUrl: https://restapi.getui.com/v2/$appId | ||||||
|   masterSecret: '' |   masterSecret:  | ||||||
|   appKey: '' |   appKey:  | ||||||
|   intent: '' |   intent:  | ||||||
|   channelID: '' |   channelID:  | ||||||
|   channelName: '' |   channelName:  | ||||||
| fcm: | fcm: | ||||||
|   # Prioritize using file paths. If the file path is empty, use URL |   # 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.  |   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. |   authURL:   #  Must start with https or http. | ||||||
| jpns: | jpns: | ||||||
|   appKey: '' |   appKey:  | ||||||
|   masterSecret: '' |   masterSecret:  | ||||||
|   pushURL: '' |   pushURL:  | ||||||
|   pushIntent: '' |   pushIntent:  | ||||||
| 
 | 
 | ||||||
| # iOS system push sound and badge count | # iOS system push sound and badge count | ||||||
| iosPush: | iosPush: | ||||||
|       pushSound: "xxx" |       pushSound: xxx | ||||||
|       badgeCount: true |       badgeCount: true | ||||||
|       production: false |       production: false | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| rpc: | rpc: | ||||||
|   # The IP address where this RPC service registers itself; if left blank, it defaults to the internal network IP |   # 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 |   # 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 |   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 |   # 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 | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| rpc: | rpc: | ||||||
|   # The IP address where this RPC service registers itself; if left blank, it defaults to the internal network IP |   # 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 |   # 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 |   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 |   # 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 | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| rpc: | rpc: | ||||||
|   # The IP address where this RPC service registers itself; if left blank, it defaults to the internal network IP |   # 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 |   # 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 |   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 |   # 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 | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| rpc: | rpc: | ||||||
|   # The IP address where this RPC service registers itself; if left blank, it defaults to the internal network IP |   # 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 |   # 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 |   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 |   # 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 | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| rpc: | rpc: | ||||||
|   # The IP address where this RPC service registers itself; if left blank, it defaults to the internal network IP |   # 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 |   # 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 |   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 |   # 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 | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| rpc: | rpc: | ||||||
|   # The IP address where this RPC service registers itself; if left blank, it defaults to the internal network IP |   # 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 |   # 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 |   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 |   # 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: | object: | ||||||
|   # Use MinIO as object storage, or set to "cos", "oss", "kodo", "aws", while also configuring the corresponding settings |   # Use MinIO as object storage, or set to "cos", "oss", "kodo", "aws", while also configuring the corresponding settings | ||||||
|   enable: "minio" |   enable: minio | ||||||
|   cos: |   cos: | ||||||
|     bucketURL: https://temp-1252357374.cos.ap-chengdu.myqcloud.com |     bucketURL: https://temp-1252357374.cos.ap-chengdu.myqcloud.com | ||||||
|     secretID: '' |     secretID:  | ||||||
|     secretKey: '' |     secretKey:  | ||||||
|     sessionToken: '' |     sessionToken:  | ||||||
|     publicRead: false |     publicRead: false | ||||||
|   oss: |   oss: | ||||||
|     endpoint: "https://oss-cn-chengdu.aliyuncs.com" |     endpoint: https://oss-cn-chengdu.aliyuncs.com | ||||||
|     bucket: "demo-9999999" |     bucket: demo-9999999 | ||||||
|     bucketURL: "https://demo-9999999.oss-cn-chengdu.aliyuncs.com" |     bucketURL: https://demo-9999999.oss-cn-chengdu.aliyuncs.com | ||||||
|     accessKeyID: '' |     accessKeyID:  | ||||||
|     accessKeySecret: '' |     accessKeySecret:  | ||||||
|     sessionToken: '' |     sessionToken:  | ||||||
|     publicRead: false |     publicRead: false | ||||||
|   kodo: |   kodo: | ||||||
|     endpoint: "http://s3.cn-south-1.qiniucs.com" |     endpoint: http://s3.cn-south-1.qiniucs.com | ||||||
|     bucket: "kodo-bucket-test" |     bucket: kodo-bucket-test | ||||||
|     bucketURL: "http://kodo-bucket-test-oetobfb.qiniudns.com" |     bucketURL: http://kodo-bucket-test-oetobfb.qiniudns.com | ||||||
|     accessKeyID: '' |     accessKeyID:  | ||||||
|     accessKeySecret: '' |     accessKeySecret:  | ||||||
|     sessionToken: '' |     sessionToken:  | ||||||
|     publicRead: false |     publicRead: false | ||||||
| @ -1,6 +1,6 @@ | |||||||
| rpc: | rpc: | ||||||
|   # API or other RPCs can access this RPC through this IP; if left blank, the internal network IP is obtained by default |   # 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 |   # 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 |   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 |   # Listening ports; if multiple are configured, multiple instances will be launched, and must be consistent with the number of prometheus.ports | ||||||
|  | |||||||
| @ -8,76 +8,76 @@ global: | |||||||
| alerting: | alerting: | ||||||
|   alertmanagers: |   alertmanagers: | ||||||
|     - static_configs: |     - 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: | rule_files: | ||||||
|   - "instance-down-rules.yml" |   - instance-down-rules.yml | ||||||
| # - "first_rules.yml" | # - first_rules.yml | ||||||
| # - "second_rules.yml" | # - second_rules.yml | ||||||
| 
 | 
 | ||||||
| # A scrape configuration containing exactly one endpoint to scrape: | # A scrape configuration containing exactly one endpoint to scrape: | ||||||
| # Here it's Prometheus itself. | # Here it's Prometheus itself. | ||||||
| scrape_configs: | 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 |   # Monitored information captured by prometheus | ||||||
| 
 | 
 | ||||||
|   # prometheus fetches application services |   # prometheus fetches application services | ||||||
|   - job_name: 'node_exporter' |   - job_name: node_exporter | ||||||
|     static_configs: |     static_configs: | ||||||
|       - targets: [ 'internal_ip:20114' ] |       - targets: [ internal_ip:20114 ] | ||||||
|   - job_name: 'openimserver-openim-api' |   - job_name: openimserver-openim-api | ||||||
|     static_configs: |     static_configs: | ||||||
|       - targets: [ 'internal_ip:20113' ] |       - targets: [ internal_ip:20113 ] | ||||||
|         labels: |         labels: | ||||||
|           namespace: 'default' |           namespace: default | ||||||
|   - job_name: 'openimserver-openim-msggateway' |   - job_name: openimserver-openim-msggateway | ||||||
|     static_configs: |     static_configs: | ||||||
|       - targets: [ 'internal_ip:20112' ] |       - targets: [ internal_ip:20112 ] | ||||||
|         labels: |         labels: | ||||||
|           namespace: 'default' |           namespace: default | ||||||
|   - job_name: 'openimserver-openim-msgtransfer' |   - job_name: openimserver-openim-msgtransfer | ||||||
|     static_configs: |     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: |         labels: | ||||||
|           namespace: 'default' |           namespace: default | ||||||
|   - job_name: 'openimserver-openim-push' |   - job_name: openimserver-openim-push | ||||||
|     static_configs: |     static_configs: | ||||||
|       - targets: [ 'internal_ip:20107' ] |       - targets: [ internal_ip:20107 ] | ||||||
|         labels: |         labels: | ||||||
|           namespace: 'default' |           namespace: default | ||||||
|   - job_name: 'openimserver-openim-rpc-auth' |   - job_name: openimserver-openim-rpc-auth | ||||||
|     static_configs: |     static_configs: | ||||||
|       - targets: [ 'internal_ip:20106' ] |       - targets: [ internal_ip:20106 ] | ||||||
|         labels: |         labels: | ||||||
|           namespace: 'default' |           namespace: default | ||||||
|   - job_name: 'openimserver-openim-rpc-conversation' |   - job_name: openimserver-openim-rpc-conversation | ||||||
|     static_configs: |     static_configs: | ||||||
|       - targets: [ 'internal_ip:20105' ] |       - targets: [ internal_ip:20105 ] | ||||||
|         labels: |         labels: | ||||||
|           namespace: 'default' |           namespace: default | ||||||
|   - job_name: 'openimserver-openim-rpc-friend' |   - job_name: openimserver-openim-rpc-friend | ||||||
|     static_configs: |     static_configs: | ||||||
|       - targets: [ 'internal_ip:20104' ] |       - targets: [ internal_ip:20104 ] | ||||||
|         labels: |         labels: | ||||||
|           namespace: 'default' |           namespace: default | ||||||
|   - job_name: 'openimserver-openim-rpc-group' |   - job_name: openimserver-openim-rpc-group | ||||||
|     static_configs: |     static_configs: | ||||||
|       - targets: [ 'internal_ip:20103' ] |       - targets: [ internal_ip:20103 ] | ||||||
|         labels: |         labels: | ||||||
|           namespace: 'default' |           namespace: default | ||||||
|   - job_name: 'openimserver-openim-rpc-msg' |   - job_name: openimserver-openim-rpc-msg | ||||||
|     static_configs: |     static_configs: | ||||||
|       - targets: [ 'internal_ip:20102' ] |       - targets: [ internal_ip:20102 ] | ||||||
|         labels: |         labels: | ||||||
|           namespace: 'default' |           namespace: default | ||||||
|   - job_name: 'openimserver-openim-rpc-third' |   - job_name: openimserver-openim-rpc-third | ||||||
|     static_configs: |     static_configs: | ||||||
|       - targets: [ 'internal_ip:20101' ] |       - targets: [ internal_ip:20101 ] | ||||||
|         labels: |         labels: | ||||||
|           namespace: 'default' |           namespace: default | ||||||
|   - job_name: 'openimserver-openim-rpc-user' |   - job_name: openimserver-openim-rpc-user | ||||||
|     static_configs: |     static_configs: | ||||||
|       - targets: [ 'internal_ip:20100' ] |       - targets: [ internal_ip:20100 ] | ||||||
|         labels: |         labels: | ||||||
|           namespace: 'default' |           namespace: default | ||||||
| @ -1,5 +1,5 @@ | |||||||
| address: [ localhost:16379 ] | address: [ localhost:16379 ] | ||||||
| username: '' | username:  | ||||||
| password: openIM123 | password: openIM123 | ||||||
| clusterMode: false | clusterMode: false | ||||||
| db: 0 | db: 0 | ||||||
|  | |||||||
| @ -10,5 +10,5 @@ rpcRegisterName: | |||||||
|   conversation: conversation |   conversation: conversation | ||||||
|   third: third |   third: third | ||||||
| 
 | 
 | ||||||
| imAdminUserID: [ "imAdmin" ] | imAdminUserID: [ imAdmin ] | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,4 +1,4 @@ | |||||||
| url: "webhook://127.0.0.1:10008/callbackExample" | url: webhook://127.0.0.1:10008/callbackExample | ||||||
| beforeSendSingleMsg: | beforeSendSingleMsg: | ||||||
|   enable: false |   enable: false | ||||||
|   timeout: 5 |   timeout: 5 | ||||||
|  | |||||||
| @ -140,50 +140,50 @@ services: | |||||||
|     networks: |     networks: | ||||||
|       - openim |       - openim | ||||||
| 
 | 
 | ||||||
|   prometheus: | #  prometheus: | ||||||
|     image: ${PROMETHEUS_IMAGE} | #    image: ${PROMETHEUS_IMAGE} | ||||||
|     container_name: prometheus | #    container_name: prometheus | ||||||
|     restart: always | #    restart: always | ||||||
|     volumes: | #    volumes: | ||||||
|       - ./config/prometheus.yml:/etc/prometheus/prometheus.yml | #      - ./config/prometheus.yml:/etc/prometheus/prometheus.yml | ||||||
|       - ./config/instance-down-rules.yml:/etc/prometheus/instance-down-rules.yml | #      - ./config/instance-down-rules.yml:/etc/prometheus/instance-down-rules.yml | ||||||
|       - ${DATA_DIR}/components/prometheus/data:/prometheus | #      - ${DATA_DIR}/components/prometheus/data:/prometheus | ||||||
|     command: | #    command: | ||||||
|       - '--config.file=/etc/prometheus/prometheus.yml' | #      - '--config.file=/etc/prometheus/prometheus.yml' | ||||||
|       - '--storage.tsdb.path=/prometheus' | #      - '--storage.tsdb.path=/prometheus' | ||||||
|     ports: | #    ports: | ||||||
|       - "19091:9090" | #      - "19091:9090" | ||||||
|     networks: | #    networks: | ||||||
|       - openim | #      - openim | ||||||
| 
 | # | ||||||
|   alertmanager: | #  alertmanager: | ||||||
|     image: ${ALERTMANAGER_IMAGE} | #    image: ${ALERTMANAGER_IMAGE} | ||||||
|     container_name: alertmanager | #    container_name: alertmanager | ||||||
|     restart: always | #    restart: always | ||||||
|     volumes: | #    volumes: | ||||||
|       - ./config/alertmanager.yml:/etc/alertmanager/alertmanager.yml | #      - ./config/alertmanager.yml:/etc/alertmanager/alertmanager.yml | ||||||
|       - ./config/email.tmpl:/etc/alertmanager/email.tmpl | #      - ./config/email.tmpl:/etc/alertmanager/email.tmpl | ||||||
|     ports: | #    ports: | ||||||
|       - "19093:9093" | #      - "19093:9093" | ||||||
|     networks: | #    networks: | ||||||
|       - openim | #      - openim | ||||||
| 
 | # | ||||||
|   grafana: | #  grafana: | ||||||
|     image: ${GRAFANA_IMAGE} | #    image: ${GRAFANA_IMAGE} | ||||||
|     container_name: grafana | #    container_name: grafana | ||||||
|     user: root | #    user: root | ||||||
|     restart: always | #    restart: always | ||||||
|     environment: | #    environment: | ||||||
|       - GF_SECURITY_ALLOW_EMBEDDING=true | #      - GF_SECURITY_ALLOW_EMBEDDING=true | ||||||
|       - GF_SESSION_COOKIE_SAMESITE=none | #      - GF_SESSION_COOKIE_SAMESITE=none | ||||||
|       - GF_SESSION_COOKIE_SECURE=true | #      - GF_SESSION_COOKIE_SECURE=true | ||||||
|       - GF_AUTH_ANONYMOUS_ENABLED=true | #      - GF_AUTH_ANONYMOUS_ENABLED=true | ||||||
|       - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin | #      - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin | ||||||
|     ports: | #    ports: | ||||||
|       - "13000:3000" | #      - "13000:3000" | ||||||
|     volumes: | #    volumes: | ||||||
|       - ${DATA_DIR:-./}/components/grafana:/var/lib/grafana | #      - ${DATA_DIR:-./}/components/grafana:/var/lib/grafana | ||||||
|     networks: | #    networks: | ||||||
|       - openim | #      - openim | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -247,6 +247,7 @@ func (c *conversationServer) SetConversations(ctx context.Context, req *pbconver | |||||||
| 		} | 		} | ||||||
| 		conv = *cs[0] | 		conv = *cs[0] | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
| 	var conversation dbModel.Conversation | 	var conversation dbModel.Conversation | ||||||
| 	conversation.ConversationID = req.Conversation.ConversationID | 	conversation.ConversationID = req.Conversation.ConversationID | ||||||
| 	conversation.ConversationType = req.Conversation.ConversationType | 	conversation.ConversationType = req.Conversation.ConversationType | ||||||
| @ -259,12 +260,14 @@ func (c *conversationServer) SetConversations(ctx context.Context, req *pbconver | |||||||
| 			unequal++ | 			unequal++ | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
| 	if req.Conversation.AttachedInfo != nil { | 	if req.Conversation.AttachedInfo != nil { | ||||||
| 		m["attached_info"] = req.Conversation.AttachedInfo.Value | 		m["attached_info"] = req.Conversation.AttachedInfo.Value | ||||||
| 		if req.Conversation.AttachedInfo.Value != conv.AttachedInfo { | 		if req.Conversation.AttachedInfo.Value != conv.AttachedInfo { | ||||||
| 			unequal++ | 			unequal++ | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
| 	if req.Conversation.Ex != nil { | 	if req.Conversation.Ex != nil { | ||||||
| 		m["ex"] = req.Conversation.Ex.Value | 		m["ex"] = req.Conversation.Ex.Value | ||||||
| 		if req.Conversation.Ex.Value != conv.Ex { | 		if req.Conversation.Ex.Value != conv.Ex { | ||||||
| @ -277,24 +280,48 @@ func (c *conversationServer) SetConversations(ctx context.Context, req *pbconver | |||||||
| 			unequal++ | 			unequal++ | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
| 	if req.Conversation.GroupAtType != nil { | 	if req.Conversation.GroupAtType != nil { | ||||||
| 		m["group_at_type"] = req.Conversation.GroupAtType.Value | 		m["group_at_type"] = req.Conversation.GroupAtType.Value | ||||||
| 		if req.Conversation.GroupAtType.Value != conv.GroupAtType { | 		if req.Conversation.GroupAtType.Value != conv.GroupAtType { | ||||||
| 			unequal++ | 			unequal++ | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
| 	if req.Conversation.MsgDestructTime != nil { | 	if req.Conversation.MsgDestructTime != nil { | ||||||
| 		m["msg_destruct_time"] = req.Conversation.MsgDestructTime.Value | 		m["msg_destruct_time"] = req.Conversation.MsgDestructTime.Value | ||||||
| 		if req.Conversation.MsgDestructTime.Value != conv.MsgDestructTime { | 		if req.Conversation.MsgDestructTime.Value != conv.MsgDestructTime { | ||||||
| 			unequal++ | 			unequal++ | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
| 	if req.Conversation.IsMsgDestruct != nil { | 	if req.Conversation.IsMsgDestruct != nil { | ||||||
| 		m["is_msg_destruct"] = req.Conversation.IsMsgDestruct.Value | 		m["is_msg_destruct"] = req.Conversation.IsMsgDestruct.Value | ||||||
| 		if req.Conversation.IsMsgDestruct.Value != conv.IsMsgDestruct { | 		if req.Conversation.IsMsgDestruct.Value != conv.IsMsgDestruct { | ||||||
| 			unequal++ | 			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 { | 	if req.Conversation.IsPrivateChat != nil && req.Conversation.ConversationType != constant.ReadGroupChatType { | ||||||
| 		var conversations []*dbModel.Conversation | 		var conversations []*dbModel.Conversation | ||||||
| 		for _, ownerUserID := range req.UserIDs { | 		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 | 	return &pbconversation.SetConversationsResp{}, nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -36,3 +36,26 @@ func TestLoadOpenIMRpcUserConfig(t *testing.T) { | |||||||
| 	//export IMENV_OPENIM_RPC_USER_RPC_PORTS="10110,10111,10112" | 	//export IMENV_OPENIM_RPC_USER_RPC_PORTS="10110,10111,10112" | ||||||
| 	assert.Equal(t, []int{10110, 10111, 10112}, user.RPC.Ports) | 	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 | ||||||
|  | } | ||||||
|  | |||||||
| @ -167,6 +167,10 @@ func (u *UserMgo) DeleteUserCommand(ctx context.Context, userID string, Type int | |||||||
| 	filter := bson.M{"userID": userID, "type": Type, "uuid": UUID} | 	filter := bson.M{"userID": userID, "type": Type, "uuid": UUID} | ||||||
| 
 | 
 | ||||||
| 	result, err := collection.DeleteOne(ctx, filter) | 	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 { | 	if result.DeletedCount == 0 { | ||||||
| 		// No records found to update | 		// No records found to update | ||||||
| 		return errs.Wrap(errs.ErrRecordNotFound) | 		return errs.Wrap(errs.ErrRecordNotFound) | ||||||
|  | |||||||
| @ -174,6 +174,9 @@ func (m *MessageRpcClient) GetMaxSeqs(ctx context.Context, conversationIDs []str | |||||||
| 	resp, err := m.Client.GetMaxSeqs(ctx, &msg.GetMaxSeqsReq{ | 	resp, err := m.Client.GetMaxSeqs(ctx, &msg.GetMaxSeqsReq{ | ||||||
| 		ConversationIDs: conversationIDs, | 		ConversationIDs: conversationIDs, | ||||||
| 	}) | 	}) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
| 	return resp.MaxSeqs, err | 	return resp.MaxSeqs, err | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -182,6 +185,9 @@ func (m *MessageRpcClient) GetHasReadSeqs(ctx context.Context, userID string, co | |||||||
| 		UserID:          userID, | 		UserID:          userID, | ||||||
| 		ConversationIDs: conversationIDs, | 		ConversationIDs: conversationIDs, | ||||||
| 	}) | 	}) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
| 	return resp.MaxSeqs, err | 	return resp.MaxSeqs, err | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -190,6 +196,9 @@ func (m *MessageRpcClient) GetMsgByConversationIDs(ctx context.Context, docIDs [ | |||||||
| 		ConversationIDs: docIDs, | 		ConversationIDs: docIDs, | ||||||
| 		MaxSeqs:         seqs, | 		MaxSeqs:         seqs, | ||||||
| 	}) | 	}) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
| 	return resp.MsgDatas, err | 	return resp.MsgDatas, err | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -234,7 +234,7 @@ func (m *Manage) RunTask(ctx context.Context, task Task) (string, error) { | |||||||
| 	} | 	} | ||||||
| 	for i, currentPartSize := range part.PartSizes { | 	for i, currentPartSize := range part.PartSizes { | ||||||
| 		md5Reader := NewMd5Reader(io.LimitReader(reader, currentPartSize)) | 		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 | 			return "", err | ||||||
| 		} | 		} | ||||||
| 		if md5val := md5Reader.Md5(); md5val != part.PartMd5s[i] { | 		if md5val := md5Reader.Md5(); md5val != part.PartMd5s[i] { | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user