@ -0,0 +1,37 @@
|
|||||||
|
---
|
||||||
|
name: "\U0001F41E Bug"
|
||||||
|
about: File a bug/issue
|
||||||
|
title: "[BUG] <title>"
|
||||||
|
labels: ''
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Note: Please search to see if an issue already exists for the bug you encountered.
|
||||||
|
-->
|
||||||
|
|
||||||
|
### Environment:
|
||||||
|
<!-- linux? windows? or Mac?
|
||||||
|
Example:
|
||||||
|
- OS: Ubuntu 20.04 -->
|
||||||
|
|
||||||
|
### Physical Memory Capacity:
|
||||||
|
<!-- 8G or above is better -->
|
||||||
|
|
||||||
|
### Docker Image:
|
||||||
|
<!-- Did you pull the docker image before execute docker images -->
|
||||||
|
|
||||||
|
### Code Version:
|
||||||
|
<!-- Did you pull code from github? Make sure the code is up to date-->
|
||||||
|
|
||||||
|
### Component installation:
|
||||||
|
<!-- Has etcd, mysql, mongodb, redis or Kafka been installed on the server before Open-IM-Server deployment-->
|
||||||
|
|
||||||
|
|
||||||
|
### Log File:
|
||||||
|
<!-- view log file(logs/openIM.log) content. -->
|
||||||
|
|
||||||
|
|
||||||
|
### screenshot:
|
||||||
|
<!---->
|
@ -0,0 +1,36 @@
|
|||||||
|
---
|
||||||
|
name: Deployment issues
|
||||||
|
about: Deployment issues
|
||||||
|
title: ''
|
||||||
|
labels: ''
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
If you are deploying OpenIM for the first time
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
git clone https://github.com/OpenIMSDK/Open-IM-Server.git --recursive
|
||||||
|
```
|
||||||
|
|
||||||
|
screenshot here
|
||||||
|
|
||||||
|
```
|
||||||
|
cd Open-IM-Server/script ; chmod +x *.sh ; ./env_check.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
screenshot here
|
||||||
|
|
||||||
|
```
|
||||||
|
cd .. ; docker-compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
screenshot here
|
||||||
|
|
||||||
|
```
|
||||||
|
cd script ; ./docker_check_service.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
screenshot here
|
@ -0,0 +1,38 @@
|
|||||||
|
---
|
||||||
|
name: 'update '
|
||||||
|
about: update docker image
|
||||||
|
title: update docker image
|
||||||
|
labels: ''
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
```
|
||||||
|
cd Open-IM-Server ; docker-compose down
|
||||||
|
```
|
||||||
|
|
||||||
|
screenshot here
|
||||||
|
|
||||||
|
```
|
||||||
|
git pull
|
||||||
|
```
|
||||||
|
|
||||||
|
screenshot here
|
||||||
|
|
||||||
|
```
|
||||||
|
docker-compose pull
|
||||||
|
```
|
||||||
|
|
||||||
|
screenshot here
|
||||||
|
|
||||||
|
```
|
||||||
|
chmod +x script/*.sh ; docker-compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
screenshot here
|
||||||
|
|
||||||
|
```
|
||||||
|
cd script ; ./docker_check_service.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
screenshot here
|
@ -0,0 +1,22 @@
|
|||||||
|
bin
|
||||||
|
logs
|
||||||
|
.devcontainer
|
||||||
|
components
|
||||||
|
logs
|
||||||
|
out-test
|
||||||
|
.github
|
||||||
|
.idea
|
||||||
|
|
||||||
|
|
||||||
|
deploy/open_im_demo
|
||||||
|
deploy/open_im_api
|
||||||
|
deploy/open_im_msg_gateway
|
||||||
|
deploy/open_im_msg_transfer
|
||||||
|
deploy/open_im_push
|
||||||
|
deploy/open_im_timer_task
|
||||||
|
deploy/open_im_rpc_user
|
||||||
|
deploy/open_im_rpc_friend
|
||||||
|
deploy/open_im_rpc_group
|
||||||
|
deploy/open_im_rpc_msg
|
||||||
|
deploy/open_im_rpc_auth
|
||||||
|
deploy/Open-IM-SDK-Core
|
@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
[submodule "cmd/Open-IM-SDK-Core"]
|
||||||
|
path = cmd/Open-IM-SDK-Core
|
||||||
|
url = https://github.com/OpenIMSDK/Open-IM-SDK-Core.git
|
@ -0,0 +1,201 @@
|
|||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
@ -0,0 +1,159 @@
|
|||||||
|
# Open-IM-Server
|
||||||
|
|
||||||
|
![avatar](https://github.com/OpenIMSDK/Open-IM-Server/blob/main/docs/open-im-logo.png)
|
||||||
|
|
||||||
|
[![LICENSE](https://img.shields.io/badge/license-Apache--2.0-green)](https://github.com/OpenIMSDK/Open-IM-Server/blob/main/LICENSE) [![Language](https://img.shields.io/badge/Language-Go-blue.svg)](https://golang.org/)
|
||||||
|
|
||||||
|
## Open-IM-Server: Open source Instant Messaging Server
|
||||||
|
|
||||||
|
Instant messaging server. Backend in pure Golang, wire transport protocol is JSON over websocket.
|
||||||
|
|
||||||
|
Everything is a message in Open-IM-Server, so you can extend custom messages easily, there is no need to modify the server code.
|
||||||
|
|
||||||
|
Using microservice architectures, Open-IM-Server can be deployed using clusters.
|
||||||
|
|
||||||
|
By deployment of the Open-IM-Server on the customer's server, developers can integrate instant messaging and real-time network capabilities into their own applications free of charge and quickly, and ensure the security and privacy of business data.
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- Everything in Free
|
||||||
|
- Scalable architecture
|
||||||
|
- Easy integration
|
||||||
|
- Good scalability
|
||||||
|
- High performance
|
||||||
|
- Lightweight
|
||||||
|
- Supports multiple protocols
|
||||||
|
|
||||||
|
## Community
|
||||||
|
|
||||||
|
- Join the Telegram-OpenIM group: https://t.me/joinchat/zSJLPaHBNLZmODI1
|
||||||
|
- 中文官网访问这里:[Open-IM中文开发文档](https://doc.rentsoft.cn/)
|
||||||
|
|
||||||
|
## Quick start
|
||||||
|
|
||||||
|
### Installing Open-IM-Server
|
||||||
|
|
||||||
|
> Open-IM relies on five open source high-performance components: ETCD, MySQL, MongoDB, Redis, and Kafka. Privatization deployment Before Open-IM-Server, please make sure that the above five components have been installed. If your server does not have the above components, you must first install Missing components. If you have the above components, it is recommended to use them directly. If not, it is recommended to use Docker-compose, no To install dependencies, one-click deployment, faster and more convenient.
|
||||||
|
|
||||||
|
#### Source code deployment
|
||||||
|
|
||||||
|
1. Install [Go environment](https://golang.org/doc/install). Make sure Go version is at least 1.15.
|
||||||
|
|
||||||
|
2. Clone the Open-IM project to your server.
|
||||||
|
|
||||||
|
```
|
||||||
|
git clone https://github.com/OpenIMSDK/Open-IM-Server.git --recursive
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Build and start Service.
|
||||||
|
|
||||||
|
1. Shell authorization
|
||||||
|
|
||||||
|
```
|
||||||
|
#cd Open-IM-server/script
|
||||||
|
|
||||||
|
chmod +x *.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Execute the build shell
|
||||||
|
|
||||||
|
```
|
||||||
|
./build_all_service.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Start service
|
||||||
|
|
||||||
|
```
|
||||||
|
./start_all.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Check service
|
||||||
|
|
||||||
|
```
|
||||||
|
./check_all.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
![OpenIMServersonSystempng](https://github.com/OpenIMSDK/Open-IM-Server/blob/main/docs/Open-IM-Servers-on-System.png)
|
||||||
|
|
||||||
|
#### Docker deployment
|
||||||
|
|
||||||
|
All images are available at https://hub.docker.com/r/lyt1123/open_im_server
|
||||||
|
|
||||||
|
1. [Install Docker](https://docs.docker.com/install/) 1.13 or above.
|
||||||
|
|
||||||
|
2. [Install Docker Compose](https://docs.docker.com/compose/install/) 1.22 or above.
|
||||||
|
|
||||||
|
3. Clone the Open-IM project to your server.
|
||||||
|
|
||||||
|
```
|
||||||
|
git clone https://github.com/OpenIMSDK/Open-IM-Server.git --recursive
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Start docker-compose with one click(Docker automatically pulls all images)
|
||||||
|
|
||||||
|
```
|
||||||
|
cd Open-IM-Server
|
||||||
|
docker-compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
5. Check service
|
||||||
|
|
||||||
|
```
|
||||||
|
./docker_check_service.sh
|
||||||
|
./check_all.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
![OpenIMServersondockerpng](https://github.com/OpenIMSDK/Open-IM-Server/blob/main/docs/Open-IM-Servers-on-docker.png)
|
||||||
|
|
||||||
|
### CONFIGURATION INSTRUCTIONS
|
||||||
|
|
||||||
|
> Open-IM configuration is divided into basic component configuration and business internal service configuration. Developers need to fill in the address of each component as the address of their server component when using the product, and ensure that the internal service port of the business is not occupied
|
||||||
|
|
||||||
|
#### Basic Component Configuration Instructions
|
||||||
|
|
||||||
|
- ETCD
|
||||||
|
- Etcd is used for the discovery and registration of rpc services, etcd Schema is the prefix of the registered name, it is recommended to modify it to your company name, etcd address (ip+port) supports clustered deployment, you can fill in multiple ETCD addresses separated by commas, and also only one etcd address.
|
||||||
|
- MySQL
|
||||||
|
- mysql is used for full storage of messages and user relationships. Cluster deployment is not supported for the time being. Modify addresses and users, passwords, and database names.
|
||||||
|
- Mongo
|
||||||
|
- Mongo is used for offline storage of messages. The default storage is 7 days. Cluster deployment is temporarily not supported. Just modify the address and database name.
|
||||||
|
- Redis
|
||||||
|
- Redis is currently mainly used for message serial number storage and user token information storage. Cluster deployment is temporarily not supported. Just modify the corresponding redis address and password.
|
||||||
|
- Kafka
|
||||||
|
- Kafka is used as a message transfer storage queue to support cluster deployment, just modify the corresponding address
|
||||||
|
|
||||||
|
#### Internal Service Configuration Instructions
|
||||||
|
|
||||||
|
- credential&&push
|
||||||
|
- The Open-IM needs to use the three-party offline push function. Currently, Tencent's three-party push is used. It supports IOS, Android and OSX push. This information is some registration information pushed by Tencent. Developers need to go to Tencent Cloud Mobile Push to register the corresponding information. If you do not fill in the corresponding information, you cannot use the offline message push function
|
||||||
|
- api&&rpcport&&longconnsvr&&rpcregistername
|
||||||
|
- The api port is the http interface, longconnsvr is the websocket listening port, and rpcport is the internal service startup port. Both support cluster deployment. Make sure that these ports are not used. If you want to open multiple services for a single service, fill in multiple ports separated by commas. rpcregistername is the service name registered by each service to the registry etcd, no need to modify
|
||||||
|
- log&&modulename
|
||||||
|
- The log configuration includes the storage path of the log file, and the log is sent to elasticsearch for log viewing. Currently, the log is not supported to be sent to elasticsearch. The configuration does not need to be modified for the time being. The modulename is used to split the log according to the name of the service module. The default configuration is fine.
|
||||||
|
- multiloginpolicy&&tokenpolicy
|
||||||
|
- Open-IM supports multi-terminal login. Currently, there are three multi-terminal login policies. The PC terminal and the mobile terminal are online at the same time by default. When multiple policies are configured to be true, the first policy with true is used by default, and the token policy is the generated token policy. , The developer can customize the expiration time of the token
|
||||||
|
|
||||||
|
### SCRIPT DESCRIPTION
|
||||||
|
|
||||||
|
> Open-IM script provides service compilation, start, and stop scripts. There are four Open-IM script start modules, one is the http+rpc service start module, the second is the websocket service start module, then the msg_transfer module, and the last is the push module
|
||||||
|
|
||||||
|
- path_info.cfg&&style_info.cfg&&functions.sh
|
||||||
|
- Contains the path information of each module, including the path where the source code is located, the name of the service startup, the shell print font style, and some functions for processing shell strings
|
||||||
|
- build_all_service.sh
|
||||||
|
- Compile the module, compile all the source code of Open-IM into a binary file and put it into the bin directory
|
||||||
|
- start_rpc_api_service.sh&&msg_gateway_start.sh&&msg_transfer_start.sh&&push_start.sh
|
||||||
|
- Independent script startup module, followed by api and rpc modules, message gateway module, message transfer module, and push module
|
||||||
|
- start_all.sh&&stop_all.sh
|
||||||
|
- Total script, start all services and close all services
|
||||||
|
|
||||||
|
## Authentication Clow Chart
|
||||||
|
|
||||||
|
![avatar](https://github.com/OpenIMSDK/Open-IM-Server/blob/main/docs/open-im-server.png)
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
![avatar](https://github.com/OpenIMSDK/Open-IM-Server/blob/main/docs/Architecture.jpg)
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
Open-IM-Server is under the Apache 2.0 license. See the [LICENSE](https://github.com/OpenIMSDK/Open-IM-Server/blob/main/LICENSE) file for details
|
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 3ecd23203cd6bd746b1fcb0c70755bd2cbf5361c
|
@ -0,0 +1,25 @@
|
|||||||
|
.PHONY: all build run gotool install clean help
|
||||||
|
|
||||||
|
BINARY_NAME=open_im_api
|
||||||
|
BIN_DIR=../../bin/
|
||||||
|
|
||||||
|
|
||||||
|
all: gotool build
|
||||||
|
|
||||||
|
build:
|
||||||
|
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-w -s"
|
||||||
|
|
||||||
|
run:
|
||||||
|
@go run ./
|
||||||
|
|
||||||
|
gotool:
|
||||||
|
go fmt ./
|
||||||
|
go vet ./
|
||||||
|
|
||||||
|
install:
|
||||||
|
make build
|
||||||
|
mv ${BINARY_NAME} ${BIN_DIR}
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@if [ -f ${BINARY_NAME} ] ; then rm ${BINARY_NAME} ; fi
|
||||||
|
|
@ -0,0 +1,177 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
apiAuth "Open_IM/internal/api/auth"
|
||||||
|
apiChat "Open_IM/internal/api/chat"
|
||||||
|
"Open_IM/internal/api/conversation"
|
||||||
|
"Open_IM/internal/api/friend"
|
||||||
|
"Open_IM/internal/api/group"
|
||||||
|
"Open_IM/internal/api/manage"
|
||||||
|
"Open_IM/internal/api/office"
|
||||||
|
"Open_IM/internal/api/organization"
|
||||||
|
apiThird "Open_IM/internal/api/third"
|
||||||
|
"Open_IM/internal/api/user"
|
||||||
|
"Open_IM/pkg/common/config"
|
||||||
|
"Open_IM/pkg/common/log"
|
||||||
|
"Open_IM/pkg/utils"
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"os"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
//"syscall"
|
||||||
|
"Open_IM/pkg/common/constant"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
log.NewPrivateLog(constant.LogFileName)
|
||||||
|
gin.SetMode(gin.ReleaseMode)
|
||||||
|
f, _ := os.Create("../logs/api.log")
|
||||||
|
gin.DefaultWriter = io.MultiWriter(f)
|
||||||
|
|
||||||
|
r := gin.Default()
|
||||||
|
r.Use(utils.CorsHandler())
|
||||||
|
|
||||||
|
log.Info("load config: ", config.Config)
|
||||||
|
// user routing group, which handles user registration and login services
|
||||||
|
userRouterGroup := r.Group("/user")
|
||||||
|
{
|
||||||
|
userRouterGroup.POST("/update_user_info", user.UpdateUserInfo) //1
|
||||||
|
userRouterGroup.POST("/get_users_info", user.GetUsersInfo) //1
|
||||||
|
userRouterGroup.POST("/get_self_user_info", user.GetSelfUserInfo) //1
|
||||||
|
}
|
||||||
|
//friend routing group
|
||||||
|
friendRouterGroup := r.Group("/friend")
|
||||||
|
{
|
||||||
|
// friendRouterGroup.POST("/get_friends_info", friend.GetFriendsInfo)
|
||||||
|
friendRouterGroup.POST("/add_friend", friend.AddFriend) //1
|
||||||
|
friendRouterGroup.POST("/delete_friend", friend.DeleteFriend) //1
|
||||||
|
friendRouterGroup.POST("/get_friend_apply_list", friend.GetFriendApplyList) //1
|
||||||
|
friendRouterGroup.POST("/get_self_friend_apply_list", friend.GetSelfFriendApplyList) //1
|
||||||
|
friendRouterGroup.POST("/get_friend_list", friend.GetFriendList) //1
|
||||||
|
friendRouterGroup.POST("/add_friend_response", friend.AddFriendResponse) //1
|
||||||
|
friendRouterGroup.POST("/set_friend_remark", friend.SetFriendRemark) //1
|
||||||
|
|
||||||
|
friendRouterGroup.POST("/add_black", friend.AddBlack) //1
|
||||||
|
friendRouterGroup.POST("/get_black_list", friend.GetBlacklist) //1
|
||||||
|
friendRouterGroup.POST("/remove_black", friend.RemoveBlack) //1
|
||||||
|
|
||||||
|
friendRouterGroup.POST("/import_friend", friend.ImportFriend) //1
|
||||||
|
friendRouterGroup.POST("/is_friend", friend.IsFriend) //1
|
||||||
|
}
|
||||||
|
//group related routing group
|
||||||
|
groupRouterGroup := r.Group("/group")
|
||||||
|
{
|
||||||
|
groupRouterGroup.POST("/create_group", group.CreateGroup) //1
|
||||||
|
groupRouterGroup.POST("/set_group_info", group.SetGroupInfo) //1
|
||||||
|
groupRouterGroup.POST("join_group", group.JoinGroup) //1
|
||||||
|
groupRouterGroup.POST("/quit_group", group.QuitGroup) //1
|
||||||
|
groupRouterGroup.POST("/group_application_response", group.ApplicationGroupResponse) //1
|
||||||
|
groupRouterGroup.POST("/transfer_group", group.TransferGroupOwner) //1
|
||||||
|
groupRouterGroup.POST("/get_recv_group_applicationList", group.GetRecvGroupApplicationList) //1
|
||||||
|
groupRouterGroup.POST("/get_user_req_group_applicationList", group.GetUserReqGroupApplicationList)
|
||||||
|
groupRouterGroup.POST("/get_groups_info", group.GetGroupsInfo) //1
|
||||||
|
groupRouterGroup.POST("/kick_group", group.KickGroupMember) //1
|
||||||
|
groupRouterGroup.POST("/get_group_member_list", group.GetGroupMemberList) //no use
|
||||||
|
groupRouterGroup.POST("/get_group_all_member_list", group.GetGroupAllMemberList) //1
|
||||||
|
groupRouterGroup.POST("/get_group_members_info", group.GetGroupMembersInfo) //1
|
||||||
|
groupRouterGroup.POST("/invite_user_to_group", group.InviteUserToGroup) //1
|
||||||
|
groupRouterGroup.POST("/get_joined_group_list", group.GetJoinedGroupList) //1
|
||||||
|
groupRouterGroup.POST("/dismiss_group", group.DismissGroup) //
|
||||||
|
groupRouterGroup.POST("/mute_group_member", group.MuteGroupMember)
|
||||||
|
groupRouterGroup.POST("/cancel_mute_group_member", group.CancelMuteGroupMember) //MuteGroup
|
||||||
|
groupRouterGroup.POST("/mute_group", group.MuteGroup)
|
||||||
|
groupRouterGroup.POST("/cancel_mute_group", group.CancelMuteGroup)
|
||||||
|
}
|
||||||
|
//certificate
|
||||||
|
authRouterGroup := r.Group("/auth")
|
||||||
|
{
|
||||||
|
authRouterGroup.POST("/user_register", apiAuth.UserRegister) //1
|
||||||
|
authRouterGroup.POST("/user_token", apiAuth.UserToken) //1
|
||||||
|
}
|
||||||
|
//Third service
|
||||||
|
thirdGroup := r.Group("/third")
|
||||||
|
{
|
||||||
|
thirdGroup.POST("/tencent_cloud_storage_credential", apiThird.TencentCloudStorageCredential)
|
||||||
|
thirdGroup.POST("/ali_oss_credential", apiThird.AliOSSCredential)
|
||||||
|
thirdGroup.POST("/minio_storage_credential", apiThird.MinioStorageCredential)
|
||||||
|
thirdGroup.POST("/minio_upload", apiThird.MinioUploadFile)
|
||||||
|
}
|
||||||
|
//Message
|
||||||
|
chatGroup := r.Group("/msg")
|
||||||
|
{
|
||||||
|
chatGroup.POST("/newest_seq", apiChat.GetSeq)
|
||||||
|
chatGroup.POST("/send_msg", apiChat.SendMsg)
|
||||||
|
chatGroup.POST("/pull_msg_by_seq", apiChat.PullMsgBySeqList)
|
||||||
|
chatGroup.POST("/del_msg", apiChat.DelMsg)
|
||||||
|
}
|
||||||
|
//Manager
|
||||||
|
managementGroup := r.Group("/manager")
|
||||||
|
{
|
||||||
|
managementGroup.POST("/delete_user", manage.DeleteUser) //1
|
||||||
|
managementGroup.POST("/send_msg", manage.ManagementSendMsg)
|
||||||
|
managementGroup.POST("/get_all_users_uid", manage.GetAllUsersUid) //1
|
||||||
|
managementGroup.POST("/account_check", manage.AccountCheck) //1
|
||||||
|
managementGroup.POST("/get_users_online_status", manage.GetUsersOnlineStatus) //1
|
||||||
|
}
|
||||||
|
//Conversation
|
||||||
|
conversationGroup := r.Group("/conversation")
|
||||||
|
{ //1
|
||||||
|
conversationGroup.POST("/get_all_conversations", conversation.GetAllConversations)
|
||||||
|
conversationGroup.POST("/get_conversation", conversation.GetConversation)
|
||||||
|
conversationGroup.POST("/get_conversations", conversation.GetConversations)
|
||||||
|
conversationGroup.POST("/set_conversation", conversation.SetConversation)
|
||||||
|
conversationGroup.POST("/batch_set_conversation", conversation.BatchSetConversations)
|
||||||
|
conversationGroup.POST("/set_recv_msg_opt", conversation.SetRecvMsgOpt)
|
||||||
|
}
|
||||||
|
// office
|
||||||
|
officeGroup := r.Group("/office")
|
||||||
|
{
|
||||||
|
officeGroup.POST("/get_user_tags", office.GetUserTags)
|
||||||
|
officeGroup.POST("/get_user_tag_by_id", office.GetUserTagByID)
|
||||||
|
officeGroup.POST("/create_tag", office.CreateTag)
|
||||||
|
officeGroup.POST("/delete_tag", office.DeleteTag)
|
||||||
|
officeGroup.POST("/set_tag", office.SetTag)
|
||||||
|
officeGroup.POST("/send_msg_to_tag", office.SendMsg2Tag)
|
||||||
|
officeGroup.POST("/get_send_tag_log", office.GetTagSendLogs)
|
||||||
|
|
||||||
|
officeGroup.POST("/create_one_work_moment", office.CreateOneWorkMoment)
|
||||||
|
officeGroup.POST("/delete_one_work_moment", office.DeleteOneWorkMoment)
|
||||||
|
officeGroup.POST("/like_one_work_moment", office.LikeOneWorkMoment)
|
||||||
|
officeGroup.POST("/comment_one_work_moment", office.CommentOneWorkMoment)
|
||||||
|
officeGroup.POST("/get_user_work_moments", office.GetUserWorkMoments)
|
||||||
|
officeGroup.POST("/get_user_friend_work_moments", office.GetUserFriendWorkMoments)
|
||||||
|
officeGroup.POST("/get_user_work_moments_comments_msg", office.GetUserWorkMomentsCommentsMsg)
|
||||||
|
officeGroup.POST("/clear_user_work_moments_comments_msg", office.ClearUserWorkMomentsCommentsMsg)
|
||||||
|
officeGroup.POST("/set_user_work_moments_level", office.SetUserWorkMomentsLevel)
|
||||||
|
}
|
||||||
|
|
||||||
|
organizationGroup := r.Group("/organization")
|
||||||
|
{
|
||||||
|
organizationGroup.POST("/create_department", organization.CreateDepartment)
|
||||||
|
organizationGroup.POST("/update_department", organization.UpdateDepartment)
|
||||||
|
organizationGroup.POST("/get_sub_department", organization.GetSubDepartment)
|
||||||
|
organizationGroup.POST("/delete_department", organization.DeleteDepartment)
|
||||||
|
|
||||||
|
organizationGroup.POST("/create_organization_user", organization.CreateOrganizationUser)
|
||||||
|
organizationGroup.POST("/update_organization_user", organization.UpdateOrganizationUser)
|
||||||
|
organizationGroup.POST("/create_department_member", organization.CreateDepartmentMember)
|
||||||
|
|
||||||
|
organizationGroup.POST("/get_user_in_department", organization.GetUserInDepartment)
|
||||||
|
organizationGroup.POST("/update_user_In_department", organization.UpdateUserInDepartment)
|
||||||
|
organizationGroup.POST("/delete_organization_user", organization.DeleteOrganizationUser)
|
||||||
|
organizationGroup.POST("/get_department_member", organization.GetDepartmentMember)
|
||||||
|
organizationGroup.POST("/delete_user_in_department", organization.DeleteUserInDepartment)
|
||||||
|
}
|
||||||
|
|
||||||
|
go apiThird.MinioInit()
|
||||||
|
ginPort := flag.Int("port", 10000, "get ginServerPort from cmd,default 10000 as port")
|
||||||
|
flag.Parse()
|
||||||
|
fmt.Println("start api server, port: ", *ginPort)
|
||||||
|
err := r.Run(":" + strconv.Itoa(*ginPort))
|
||||||
|
if err != nil {
|
||||||
|
log.Error("", "run failed ", *ginPort, err.Error())
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
.PHONY: all build run gotool install clean help
|
||||||
|
|
||||||
|
BINARY_NAME=open_im_cms_api
|
||||||
|
BIN_DIR=../../bin/
|
||||||
|
|
||||||
|
|
||||||
|
all: gotool build
|
||||||
|
|
||||||
|
build:
|
||||||
|
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-w -s"
|
||||||
|
|
||||||
|
run:
|
||||||
|
@go run ./
|
||||||
|
|
||||||
|
gotool:
|
||||||
|
go fmt ./
|
||||||
|
go vet ./
|
||||||
|
|
||||||
|
install:
|
||||||
|
make build
|
||||||
|
mv ${BINARY_NAME} ${BIN_DIR}
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@if [ -f ${BINARY_NAME} ] ; then rm ${BINARY_NAME} ; fi
|
||||||
|
|
@ -0,0 +1,17 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Open_IM/internal/cms_api"
|
||||||
|
"Open_IM/pkg/utils"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
gin.SetMode(gin.ReleaseMode)
|
||||||
|
router := cms_api.NewGinRouter()
|
||||||
|
router.Use(utils.CorsHandler())
|
||||||
|
fmt.Println("start cms api server, port: ", 8000)
|
||||||
|
router.Run(":" + "8000")
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
.PHONY: all build run gotool install clean help
|
||||||
|
|
||||||
|
BINARY_NAME=open_im_demo
|
||||||
|
BIN_DIR=../../bin/
|
||||||
|
|
||||||
|
|
||||||
|
all: gotool build
|
||||||
|
|
||||||
|
build:
|
||||||
|
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-w -s"
|
||||||
|
|
||||||
|
run:
|
||||||
|
@go run ./
|
||||||
|
|
||||||
|
gotool:
|
||||||
|
go fmt ./
|
||||||
|
go vet ./
|
||||||
|
|
||||||
|
install:
|
||||||
|
make build
|
||||||
|
mv ${BINARY_NAME} ${BIN_DIR}
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@if [ -f ${BINARY_NAME} ] ; then rm ${BINARY_NAME} ; fi
|
||||||
|
|
@ -0,0 +1,42 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Open_IM/internal/demo/register"
|
||||||
|
"Open_IM/pkg/utils"
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"os"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
|
"Open_IM/pkg/common/constant"
|
||||||
|
"Open_IM/pkg/common/log"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
log.NewPrivateLog(constant.LogFileName)
|
||||||
|
gin.SetMode(gin.ReleaseMode)
|
||||||
|
f, _ := os.Create("../logs/api.log")
|
||||||
|
gin.DefaultWriter = io.MultiWriter(f)
|
||||||
|
|
||||||
|
r := gin.Default()
|
||||||
|
r.Use(utils.CorsHandler())
|
||||||
|
|
||||||
|
authRouterGroup := r.Group("/auth")
|
||||||
|
{
|
||||||
|
authRouterGroup.POST("/code", register.SendVerificationCode)
|
||||||
|
authRouterGroup.POST("/verify", register.Verify)
|
||||||
|
authRouterGroup.POST("/password", register.SetPassword)
|
||||||
|
authRouterGroup.POST("/login", register.Login)
|
||||||
|
authRouterGroup.POST("/reset_password", register.ResetPassword)
|
||||||
|
}
|
||||||
|
|
||||||
|
ginPort := flag.Int("port", 42233, "get ginServerPort from cmd,default 42233 as port")
|
||||||
|
flag.Parse()
|
||||||
|
fmt.Println("start demo api server, port: ", *ginPort)
|
||||||
|
err := r.Run(":" + strconv.Itoa(*ginPort))
|
||||||
|
if err != nil {
|
||||||
|
log.Error("", "run failed ", *ginPort, err.Error())
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,24 @@
|
|||||||
|
.PHONY: all build run gotool install clean help
|
||||||
|
|
||||||
|
BINARY_NAME=open_im_msg_gateway
|
||||||
|
BIN_DIR=../../bin/
|
||||||
|
|
||||||
|
all: gotool build
|
||||||
|
|
||||||
|
build:
|
||||||
|
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-w -s"
|
||||||
|
|
||||||
|
run:
|
||||||
|
@go run ./
|
||||||
|
|
||||||
|
gotool:
|
||||||
|
go fmt ./
|
||||||
|
go vet ./
|
||||||
|
|
||||||
|
install:
|
||||||
|
make build
|
||||||
|
mv ${BINARY_NAME} ${BIN_DIR}
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@if [ -f ${BINARY_NAME} ] ; then rm ${BINARY_NAME} ; fi
|
||||||
|
|
@ -0,0 +1,23 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Open_IM/internal/msg_gateway/gate"
|
||||||
|
"Open_IM/pkg/common/constant"
|
||||||
|
"Open_IM/pkg/common/log"
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
"sync"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
log.NewPrivateLog(constant.LogFileName)
|
||||||
|
rpcPort := flag.Int("rpc_port", 10400, "rpc listening port")
|
||||||
|
wsPort := flag.Int("ws_port", 17778, "ws listening port")
|
||||||
|
flag.Parse()
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
wg.Add(1)
|
||||||
|
fmt.Println("start rpc/msg_gateway server, port: ", *rpcPort, *wsPort)
|
||||||
|
gate.Init(*rpcPort, *wsPort)
|
||||||
|
gate.Run()
|
||||||
|
wg.Wait()
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
.PHONY: all build run gotool install clean help
|
||||||
|
|
||||||
|
BINARY_NAME=open_im_msg_transfer
|
||||||
|
BIN_DIR=../../bin/
|
||||||
|
|
||||||
|
|
||||||
|
all: gotool build
|
||||||
|
|
||||||
|
build:
|
||||||
|
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-w -s"
|
||||||
|
|
||||||
|
run:
|
||||||
|
@go run ./
|
||||||
|
|
||||||
|
gotool:
|
||||||
|
go fmt ./
|
||||||
|
go vet ./
|
||||||
|
|
||||||
|
install:
|
||||||
|
make build
|
||||||
|
mv ${BINARY_NAME} ${BIN_DIR}
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@if [ -f ${BINARY_NAME} ] ; then rm ${BINARY_NAME} ; fi
|
||||||
|
|
@ -0,0 +1,19 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Open_IM/internal/msg_transfer/logic"
|
||||||
|
"Open_IM/pkg/common/constant"
|
||||||
|
"Open_IM/pkg/common/log"
|
||||||
|
"fmt"
|
||||||
|
"sync"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
wg.Add(1)
|
||||||
|
log.NewPrivateLog(constant.LogFileName)
|
||||||
|
logic.Init()
|
||||||
|
fmt.Println("start msg_transfer server")
|
||||||
|
logic.Run()
|
||||||
|
wg.Wait()
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
.PHONY: all build run gotool install clean help
|
||||||
|
|
||||||
|
BINARY_NAME=open_im_push
|
||||||
|
BIN_DIR=../../bin/
|
||||||
|
|
||||||
|
all: gotool build
|
||||||
|
|
||||||
|
build:
|
||||||
|
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-w -s"
|
||||||
|
|
||||||
|
run:
|
||||||
|
@go run ./
|
||||||
|
|
||||||
|
gotool:
|
||||||
|
go fmt ./
|
||||||
|
go vet ./
|
||||||
|
|
||||||
|
install:
|
||||||
|
make build
|
||||||
|
mv ${BINARY_NAME} ${BIN_DIR}
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@if [ -f ${BINARY_NAME} ] ; then rm ${BINARY_NAME} ; fi
|
||||||
|
|
||||||
|
|
@ -0,0 +1,22 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Open_IM/internal/push/logic"
|
||||||
|
"Open_IM/pkg/common/constant"
|
||||||
|
"Open_IM/pkg/common/log"
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
"sync"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
rpcPort := flag.Int("port", 10700, "rpc listening port")
|
||||||
|
flag.Parse()
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
wg.Add(1)
|
||||||
|
log.NewPrivateLog(constant.LogFileName)
|
||||||
|
fmt.Println("start push rpc server, port: ", *rpcPort)
|
||||||
|
logic.Init(*rpcPort)
|
||||||
|
logic.Run()
|
||||||
|
wg.Wait()
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
.PHONY: all build run gotool install clean help
|
||||||
|
|
||||||
|
BINARY_NAME=open_im_timer_task
|
||||||
|
BIN_DIR=../../bin/
|
||||||
|
|
||||||
|
all: gotool build
|
||||||
|
|
||||||
|
build:
|
||||||
|
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-w -s"
|
||||||
|
|
||||||
|
run:
|
||||||
|
@go run ./
|
||||||
|
|
||||||
|
gotool:
|
||||||
|
go fmt ./
|
||||||
|
go vet ./
|
||||||
|
|
||||||
|
install:
|
||||||
|
make build
|
||||||
|
mv ${BINARY_NAME} ${BIN_DIR}
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@if [ -f ${BINARY_NAME} ] ; then rm ${BINARY_NAME} ; fi
|
||||||
|
|
||||||
|
|
@ -0,0 +1,63 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Open_IM/pkg/common/constant"
|
||||||
|
"Open_IM/pkg/common/log"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
log.NewPrivateLog(constant.LogFileName)
|
||||||
|
//for {
|
||||||
|
// fmt.Println("start delete mongodb expired record")
|
||||||
|
// timeUnixBegin := time.Now().Unix()
|
||||||
|
// count, _ := db.DB.MgoUserCount()
|
||||||
|
// fmt.Println("mongodb record count: ", count)
|
||||||
|
// for i := 0; i < count; i++ {
|
||||||
|
// time.Sleep(1 * time.Millisecond)
|
||||||
|
// uid, _ := db.DB.MgoSkipUID(i)
|
||||||
|
// fmt.Println("operate uid: ", uid)
|
||||||
|
// err := db.DB.DelUserChat(uid)
|
||||||
|
// if err != nil {
|
||||||
|
// fmt.Println("operate uid failed: ", uid, err.Error())
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// timeUnixEnd := time.Now().Unix()
|
||||||
|
// costTime := timeUnixEnd - timeUnixBegin
|
||||||
|
// if costTime > int64(config.Config.Mongo.DBRetainChatRecords*24*3600) {
|
||||||
|
// continue
|
||||||
|
// } else {
|
||||||
|
// sleepTime := 0
|
||||||
|
// if int64(config.Config.Mongo.DBRetainChatRecords*24*3600)-costTime > 24*3600 {
|
||||||
|
// sleepTime = 24 * 3600
|
||||||
|
// } else {
|
||||||
|
// sleepTime = config.Config.Mongo.DBRetainChatRecords*24*3600 - int(costTime)
|
||||||
|
// }
|
||||||
|
// fmt.Println("sleep: ", sleepTime)
|
||||||
|
// time.Sleep(time.Duration(sleepTime) * time.Second)
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//for {
|
||||||
|
// uidList, err := im_mysql_model.SelectAllUserID()
|
||||||
|
// if err != nil {
|
||||||
|
// //log.NewError("999999", err.Error())
|
||||||
|
// } else {
|
||||||
|
// for _, v := range uidList {
|
||||||
|
// minSeq, err := commonDB.DB.GetMinSeqFromMongo(v)
|
||||||
|
// if err != nil {
|
||||||
|
// //log.NewError("999999", "get user minSeq err", err.Error(), v)
|
||||||
|
// continue
|
||||||
|
// } else {
|
||||||
|
// err := commonDB.DB.SetUserMinSeq(v, minSeq)
|
||||||
|
// if err != nil {
|
||||||
|
// //log.NewError("999999", "set user minSeq err", err.Error(), v)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// time.Sleep(time.Duration(100) * time.Millisecond)
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
.PHONY: all build run gotool install clean help
|
||||||
|
|
||||||
|
BINARY_NAME=open_im_admin_cms
|
||||||
|
BIN_DIR=../../../bin/
|
||||||
|
|
||||||
|
all: gotool build
|
||||||
|
|
||||||
|
build:
|
||||||
|
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-w -s"
|
||||||
|
|
||||||
|
run:
|
||||||
|
@go run ./
|
||||||
|
|
||||||
|
gotool:
|
||||||
|
go fmt ./
|
||||||
|
go vet ./
|
||||||
|
|
||||||
|
install:
|
||||||
|
make build
|
||||||
|
mv ${BINARY_NAME} ${BIN_DIR}
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@if [ -f ${BINARY_NAME} ] ; then rm ${BINARY_NAME} ; fi
|
@ -0,0 +1,15 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
rpcMessageCMS "Open_IM/internal/rpc/admin_cms"
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
rpcPort := flag.Int("port", 11000, "rpc listening port")
|
||||||
|
flag.Parse()
|
||||||
|
fmt.Println("start cms rpc server, port: ", *rpcPort)
|
||||||
|
rpcServer := rpcMessageCMS.NewAdminCMSServer(*rpcPort)
|
||||||
|
rpcServer.Run()
|
||||||
|
}
|
@ -0,0 +1,24 @@
|
|||||||
|
.PHONY: all build run gotool install clean help
|
||||||
|
|
||||||
|
BINARY_NAME=open_im_auth
|
||||||
|
BIN_DIR=../../../bin/
|
||||||
|
|
||||||
|
all: gotool build
|
||||||
|
|
||||||
|
build:
|
||||||
|
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-w -s"
|
||||||
|
|
||||||
|
run:
|
||||||
|
@go run ./
|
||||||
|
|
||||||
|
gotool:
|
||||||
|
go fmt ./
|
||||||
|
go vet ./
|
||||||
|
|
||||||
|
install:
|
||||||
|
make build
|
||||||
|
mv ${BINARY_NAME} ${BIN_DIR}
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@if [ -f ${BINARY_NAME} ] ; then rm ${BINARY_NAME} ; fi
|
||||||
|
|
@ -0,0 +1,16 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
rpcAuth "Open_IM/internal/rpc/auth"
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
rpcPort := flag.Int("port", 10600, "RpcToken default listen port 10800")
|
||||||
|
flag.Parse()
|
||||||
|
fmt.Println("start auth rpc server, port: ", *rpcPort)
|
||||||
|
rpcServer := rpcAuth.NewRpcAuthServer(*rpcPort)
|
||||||
|
rpcServer.Run()
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
.PHONY: all build run gotool install clean help
|
||||||
|
|
||||||
|
BINARY_NAME=open_im_friend
|
||||||
|
BIN_DIR=../../../bin/
|
||||||
|
|
||||||
|
all: gotool build
|
||||||
|
|
||||||
|
build:
|
||||||
|
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-w -s"
|
||||||
|
|
||||||
|
run:
|
||||||
|
@go run ./
|
||||||
|
|
||||||
|
gotool:
|
||||||
|
go fmt ./
|
||||||
|
go vet ./
|
||||||
|
|
||||||
|
install:
|
||||||
|
make build
|
||||||
|
mv ${BINARY_NAME} ${BIN_DIR}
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@if [ -f ${BINARY_NAME} ] ; then rm ${BINARY_NAME} ; fi
|
||||||
|
|
||||||
|
|
@ -0,0 +1,16 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Open_IM/internal/rpc/friend"
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
|
||||||
|
rpcPort := flag.Int("port", 10200, "get RpcFriendPort from cmd,default 12000 as port")
|
||||||
|
flag.Parse()
|
||||||
|
fmt.Println("start friend rpc server, port: ", *rpcPort)
|
||||||
|
rpcServer := friend.NewFriendServer(*rpcPort)
|
||||||
|
rpcServer.Run()
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
.PHONY: all build run gotool install clean help
|
||||||
|
|
||||||
|
BINARY_NAME=open_im_group
|
||||||
|
BIN_DIR=../../../bin/
|
||||||
|
|
||||||
|
all: gotool build
|
||||||
|
|
||||||
|
build:
|
||||||
|
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-w -s"
|
||||||
|
|
||||||
|
run:
|
||||||
|
@go run ./
|
||||||
|
|
||||||
|
gotool:
|
||||||
|
go fmt ./
|
||||||
|
go vet ./
|
||||||
|
|
||||||
|
install:
|
||||||
|
make build
|
||||||
|
mv ${BINARY_NAME} ${BIN_DIR}
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@if [ -f ${BINARY_NAME} ] ; then rm ${BINARY_NAME} ; fi
|
||||||
|
|
||||||
|
|
@ -0,0 +1,15 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Open_IM/internal/rpc/group"
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
rpcPort := flag.Int("port", 10500, "get RpcGroupPort from cmd,default 16000 as port")
|
||||||
|
flag.Parse()
|
||||||
|
fmt.Println("start group rpc server, port: ", *rpcPort)
|
||||||
|
rpcServer := group.NewGroupServer(*rpcPort)
|
||||||
|
rpcServer.Run()
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
.PHONY: all build run gotool install clean help
|
||||||
|
|
||||||
|
BINARY_NAME=open_im_message_cms
|
||||||
|
BIN_DIR=../../../bin/
|
||||||
|
|
||||||
|
all: gotool build
|
||||||
|
|
||||||
|
build:
|
||||||
|
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-w -s"
|
||||||
|
|
||||||
|
run:
|
||||||
|
@go run ./
|
||||||
|
|
||||||
|
gotool:
|
||||||
|
go fmt ./
|
||||||
|
go vet ./
|
||||||
|
|
||||||
|
install:
|
||||||
|
make build
|
||||||
|
mv ${BINARY_NAME} ${BIN_DIR}
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@if [ -f ${BINARY_NAME} ] ; then rm ${BINARY_NAME} ; fi
|
@ -0,0 +1,15 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
rpcMessageCMS "Open_IM/internal/rpc/message_cms"
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
rpcPort := flag.Int("port", 10900, "rpc listening port")
|
||||||
|
flag.Parse()
|
||||||
|
fmt.Println("start msg cms rpc server, port: ", *rpcPort)
|
||||||
|
rpcServer := rpcMessageCMS.NewMessageCMSServer(*rpcPort)
|
||||||
|
rpcServer.Run()
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
.PHONY: all build run gotool install clean help
|
||||||
|
|
||||||
|
BINARY_NAME=open_im_msg
|
||||||
|
BIN_DIR=../../../bin/
|
||||||
|
|
||||||
|
all: gotool build
|
||||||
|
|
||||||
|
build:
|
||||||
|
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-w -s"
|
||||||
|
|
||||||
|
run:
|
||||||
|
@go run ./
|
||||||
|
|
||||||
|
gotool:
|
||||||
|
go fmt ./
|
||||||
|
go vet ./
|
||||||
|
|
||||||
|
install:
|
||||||
|
make build
|
||||||
|
mv ${BINARY_NAME} ${BIN_DIR}
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@if [ -f ${BINARY_NAME} ] ; then rm ${BINARY_NAME} ; fi
|
@ -0,0 +1,15 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
rpcChat "Open_IM/internal/rpc/msg"
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
rpcPort := flag.Int("port", 10300, "rpc listening port")
|
||||||
|
flag.Parse()
|
||||||
|
fmt.Println("start msg rpc server, port: ", *rpcPort)
|
||||||
|
rpcServer := rpcChat.NewRpcChatServer(*rpcPort)
|
||||||
|
rpcServer.Run()
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
.PHONY: all build run gotool install clean help
|
||||||
|
|
||||||
|
BINARY_NAME=open_im_office
|
||||||
|
BIN_DIR=../../../bin/
|
||||||
|
|
||||||
|
all: gotool build
|
||||||
|
|
||||||
|
build:
|
||||||
|
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-w -s"
|
||||||
|
|
||||||
|
run:
|
||||||
|
@go run ./
|
||||||
|
|
||||||
|
gotool:
|
||||||
|
go fmt ./
|
||||||
|
go vet ./
|
||||||
|
|
||||||
|
install:
|
||||||
|
make build
|
||||||
|
mv ${BINARY_NAME} ${BIN_DIR}
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@if [ -f ${BINARY_NAME} ] ; then rm ${BINARY_NAME} ; fi
|
@ -0,0 +1,15 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
rpc "Open_IM/internal/rpc/office"
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
rpcPort := flag.Int("port", 11100, "rpc listening port")
|
||||||
|
flag.Parse()
|
||||||
|
fmt.Println("start office rpc server, port: ", *rpcPort)
|
||||||
|
rpcServer := rpc.NewOfficeServer(*rpcPort)
|
||||||
|
rpcServer.Run()
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
.PHONY: all build run gotool install clean help
|
||||||
|
|
||||||
|
BINARY_NAME=open_im_organization
|
||||||
|
BIN_DIR=../../../bin/
|
||||||
|
|
||||||
|
all: gotool build
|
||||||
|
|
||||||
|
build:
|
||||||
|
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-w -s"
|
||||||
|
|
||||||
|
run:
|
||||||
|
@go run ./
|
||||||
|
|
||||||
|
gotool:
|
||||||
|
go fmt ./
|
||||||
|
go vet ./
|
||||||
|
|
||||||
|
install:
|
||||||
|
make build
|
||||||
|
mv ${BINARY_NAME} ${BIN_DIR}
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@if [ -f ${BINARY_NAME} ] ; then rm ${BINARY_NAME} ; fi
|
||||||
|
|
||||||
|
|
@ -0,0 +1,15 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Open_IM/internal/rpc/organization"
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
rpcPort := flag.Int("port", 11200, "get RpcOrganizationPort from cmd,default 11200 as port")
|
||||||
|
flag.Parse()
|
||||||
|
fmt.Println("start organization rpc server, port: ", *rpcPort)
|
||||||
|
rpcServer := organization.NewServer(*rpcPort)
|
||||||
|
rpcServer.Run()
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
.PHONY: all build run gotool install clean help
|
||||||
|
|
||||||
|
BINARY_NAME=open_im_statistics
|
||||||
|
BIN_DIR=../../../bin/
|
||||||
|
|
||||||
|
all: gotool build
|
||||||
|
|
||||||
|
build:
|
||||||
|
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-w -s"
|
||||||
|
|
||||||
|
run:
|
||||||
|
@go run ./
|
||||||
|
|
||||||
|
gotool:
|
||||||
|
go fmt ./
|
||||||
|
go vet ./
|
||||||
|
|
||||||
|
install:
|
||||||
|
make build
|
||||||
|
mv ${BINARY_NAME} ${BIN_DIR}
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@if [ -f ${BINARY_NAME} ] ; then rm ${BINARY_NAME} ; fi
|
@ -0,0 +1,15 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Open_IM/internal/rpc/statistics"
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
rpcPort := flag.Int("port", 10800, "rpc listening port")
|
||||||
|
flag.Parse()
|
||||||
|
fmt.Println("start statistics rpc server, port: ", *rpcPort)
|
||||||
|
rpcServer := statistics.NewStatisticsServer(*rpcPort)
|
||||||
|
rpcServer.Run()
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
.PHONY: all build run gotool install clean help
|
||||||
|
|
||||||
|
BINARY_NAME=open_im_user
|
||||||
|
BIN_DIR=../../../bin/
|
||||||
|
|
||||||
|
all: gotool build
|
||||||
|
|
||||||
|
build:
|
||||||
|
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-w -s"
|
||||||
|
|
||||||
|
run:
|
||||||
|
@go run ./
|
||||||
|
|
||||||
|
gotool:
|
||||||
|
go fmt ./
|
||||||
|
go vet ./
|
||||||
|
|
||||||
|
install:
|
||||||
|
make build
|
||||||
|
mv ${BINARY_NAME} ${BIN_DIR}
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@if [ -f ${BINARY_NAME} ] ; then rm ${BINARY_NAME} ; fi
|
||||||
|
|
||||||
|
|
@ -0,0 +1,15 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Open_IM/internal/rpc/user"
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
rpcPort := flag.Int("port", 10100, "rpc listening port")
|
||||||
|
flag.Parse()
|
||||||
|
fmt.Println("start user rpc server, port: ", *rpcPort)
|
||||||
|
rpcServer := user.NewUserServer(*rpcPort)
|
||||||
|
rpcServer.Run()
|
||||||
|
}
|
@ -0,0 +1,69 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Open_IM/pkg/utils"
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"go.mongodb.org/mongo-driver/bson"
|
||||||
|
"go.mongodb.org/mongo-driver/mongo"
|
||||||
|
"go.mongodb.org/mongo-driver/mongo/options"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MongoMsg struct {
|
||||||
|
UID string
|
||||||
|
Msg []string
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
//"mongodb://%s:%s@%s/%s/?maxPoolSize=%d"
|
||||||
|
uri := "mongodb://user:pass@sample.host:27017/?maxPoolSize=20&w=majority"
|
||||||
|
DBAddress := "127.0.0.1:37017"
|
||||||
|
DBDatabase := "new-test-db"
|
||||||
|
Collection := "new-test-collection"
|
||||||
|
DBMaxPoolSize := 100
|
||||||
|
uri = fmt.Sprintf("mongodb://%s/%s/?maxPoolSize=%d",
|
||||||
|
DBAddress,DBDatabase,
|
||||||
|
DBMaxPoolSize)
|
||||||
|
|
||||||
|
mongoClient, err := mongo.Connect(context.TODO(), options.Client().ApplyURI(uri))
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
filter := bson.M{"uid":"my_uid"}
|
||||||
|
ctx, _ := context.WithTimeout(context.Background(), 30*time.Second)
|
||||||
|
for i:=0; i < 2; i++{
|
||||||
|
|
||||||
|
if err = mongoClient.Database(DBDatabase).Collection(Collection).FindOneAndUpdate(ctx, filter,
|
||||||
|
bson.M{"$push": bson.M{"msg": utils.Int32ToString(int32(i))}}).Err(); err != nil{
|
||||||
|
fmt.Println("FindOneAndUpdate failed ", i, )
|
||||||
|
var mmsg MongoMsg
|
||||||
|
mmsg.UID = "my_uid"
|
||||||
|
mmsg.Msg = append(mmsg.Msg, utils.Int32ToString(int32(i)))
|
||||||
|
_, err := mongoClient.Database(DBDatabase).Collection(Collection).InsertOne(ctx, &mmsg)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("insertone failed ", err.Error(), i)
|
||||||
|
} else{
|
||||||
|
fmt.Println("insertone ok ", i)
|
||||||
|
}
|
||||||
|
|
||||||
|
}else {
|
||||||
|
fmt.Println("FindOneAndUpdate ok ", i)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
var mmsg MongoMsg
|
||||||
|
|
||||||
|
if err = mongoClient.Database(DBDatabase).Collection(Collection).FindOne(ctx, filter).Decode(&mmsg); err != nil {
|
||||||
|
fmt.Println("findone failed ", err.Error())
|
||||||
|
}else{
|
||||||
|
fmt.Println("findone ok ", mmsg.UID)
|
||||||
|
for i, v:=range mmsg.Msg{
|
||||||
|
fmt.Println("find value: ", i, v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,39 @@
|
|||||||
|
FROM golang as build
|
||||||
|
|
||||||
|
# go mod Installation source, container environment variable addition will override the default variable value
|
||||||
|
ENV GO111MODULE=on
|
||||||
|
ENV GOPROXY=https://goproxy.cn,direct
|
||||||
|
|
||||||
|
# Set up the working directory
|
||||||
|
WORKDIR /Open-IM-Server
|
||||||
|
# add all files to the container
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
WORKDIR /Open-IM-Server/script
|
||||||
|
RUN chmod +x *.sh
|
||||||
|
|
||||||
|
RUN /bin/sh -c ./build_all_service.sh
|
||||||
|
|
||||||
|
#Blank image Multi-Stage Build
|
||||||
|
FROM ubuntu
|
||||||
|
|
||||||
|
RUN rm -rf /var/lib/apt/lists/*
|
||||||
|
RUN apt-get update && apt-get install apt-transport-https && apt-get install procps\
|
||||||
|
&&apt-get install net-tools
|
||||||
|
#Non-interactive operation
|
||||||
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
|
RUN apt-get install -y vim curl tzdata gawk
|
||||||
|
#Time zone adjusted to East eighth District
|
||||||
|
RUN ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && dpkg-reconfigure -f noninteractive tzdata
|
||||||
|
|
||||||
|
|
||||||
|
#set directory to map logs,config file,script file.
|
||||||
|
VOLUME ["/Open-IM-Server/logs","/Open-IM-Server/config","/Open-IM-Server/script","/Open-IM-Server/db/sdk"]
|
||||||
|
|
||||||
|
#Copy scripts files and binary files to the blank image
|
||||||
|
COPY --from=build /Open-IM-Server/script /Open-IM-Server/script
|
||||||
|
COPY --from=build /Open-IM-Server/bin /Open-IM-Server/bin
|
||||||
|
|
||||||
|
WORKDIR /Open-IM-Server/script
|
||||||
|
|
||||||
|
CMD ["./docker_start_all.sh"]
|
@ -0,0 +1,6 @@
|
|||||||
|
# 先设为忽略所有内容
|
||||||
|
**/**
|
||||||
|
|
||||||
|
|
||||||
|
# 然后逐个排除
|
||||||
|
!open_im_*
|
@ -0,0 +1,158 @@
|
|||||||
|
|
||||||
|
GREEN_PREFIX="\033[32m"
|
||||||
|
COLOR_SUFFIX="\033[0m"
|
||||||
|
SKY_BLUE_PREFIX="\033[36m"
|
||||||
|
|
||||||
|
|
||||||
|
# 编译所有需要的组件源码
|
||||||
|
win-build-all:
|
||||||
|
go env -w GOOS=linux
|
||||||
|
|
||||||
|
make build-api && make build-msg-gateway && make build-msg-transfer && make build-push && make build-timer-task
|
||||||
|
make build-rpc-user && make build-rpc-friend && make build-rpc-group && make build-rpc-msg && make build-rpc-auth
|
||||||
|
make build-demo
|
||||||
|
|
||||||
|
go env -w GOOS=windows
|
||||||
|
|
||||||
|
# 编译 open_im_api
|
||||||
|
build-api:
|
||||||
|
echo -e ${GREEN_PREFIX} "open_im_api building..." ${COLOR_SUFFIX}
|
||||||
|
go build -ldflags="-w -s" -o open_im_api ../cmd/open_im_api/main.go
|
||||||
|
echo -e ${GREEN_PREFIX} "open_im_api build ok" ${COLOR_SUFFIX}
|
||||||
|
|
||||||
|
# 编译 open_im_msg_gateway
|
||||||
|
build-msg-gateway:
|
||||||
|
echo -e ${GREEN_PREFIX} "open_im_msg_gateway building..." ${COLOR_SUFFIX}
|
||||||
|
go build -ldflags="-w -s" -o open_im_msg_gateway ../cmd/open_im_msg_gateway/main.go
|
||||||
|
echo -e ${GREEN_PREFIX} "open_im_msg_gateway build ok" ${COLOR_SUFFIX}
|
||||||
|
|
||||||
|
# 编译 open_im_msg_transfer
|
||||||
|
build-msg-transfer:
|
||||||
|
echo -e ${GREEN_PREFIX} "open_im_msg_transfer building..." ${COLOR_SUFFIX}
|
||||||
|
go build -ldflags="-w -s" -o open_im_msg_transfer ../cmd/open_im_msg_transfer/main.go
|
||||||
|
echo -e ${GREEN_PREFIX} "open_im_msg_transfer build ok" ${COLOR_SUFFIX}
|
||||||
|
|
||||||
|
# 编译 open_im_push
|
||||||
|
build-push:
|
||||||
|
echo -e ${GREEN_PREFIX} "open_im_push building..." ${COLOR_SUFFIX}
|
||||||
|
go build -ldflags="-w -s" -o open_im_push ../cmd/open_im_push/main.go
|
||||||
|
echo -e ${GREEN_PREFIX} "open_im_push build ok" ${COLOR_SUFFIX}
|
||||||
|
|
||||||
|
# 编译 open_im_timer_task
|
||||||
|
build-timer-task:
|
||||||
|
echo -e ${GREEN_PREFIX} "open_im_timer_task building..." ${COLOR_SUFFIX}
|
||||||
|
go build -ldflags="-w -s" -o open_im_timer_task ../cmd/open_im_timer_task/main.go
|
||||||
|
echo -e ${GREEN_PREFIX} "open_im_timer_task build ok" ${COLOR_SUFFIX}
|
||||||
|
|
||||||
|
# 编译 build-rpc-user
|
||||||
|
build-rpc-user:
|
||||||
|
echo -e ${SKY_BLUE_PREFIX} "open_im_rpc_user building..." ${COLOR_SUFFIX}
|
||||||
|
go build -ldflags="-w -s" -o open_im_rpc_user ../cmd/rpc/open_im_user/main.go
|
||||||
|
echo -e ${SKY_BLUE_PREFIX} "open_im_rpc_user build ok" ${COLOR_SUFFIX}
|
||||||
|
|
||||||
|
# 编译 build-rpc-friend
|
||||||
|
build-rpc-friend:
|
||||||
|
echo -e ${SKY_BLUE_PREFIX} "open_im_rpc_friend building..." ${COLOR_SUFFIX}
|
||||||
|
go build -ldflags="-w -s" -o open_im_rpc_friend ../cmd/rpc/open_im_friend/main.go
|
||||||
|
echo -e ${SKY_BLUE_PREFIX} "open_im_rpc_friend build ok" ${COLOR_SUFFIX}
|
||||||
|
|
||||||
|
# 编译 build-rpc-group
|
||||||
|
build-rpc-group:
|
||||||
|
echo -e ${SKY_BLUE_PREFIX} "open_im_rpc_group building..." ${COLOR_SUFFIX}
|
||||||
|
go build -ldflags="-w -s" -o open_im_rpc_group ../cmd/rpc/open_im_group/main.go
|
||||||
|
echo -e ${SKY_BLUE_PREFIX} "open_im_rpc_group build ok" ${COLOR_SUFFIX}
|
||||||
|
|
||||||
|
# 编译 build-rpc-auth
|
||||||
|
build-rpc-auth:
|
||||||
|
echo -e ${SKY_BLUE_PREFIX} "open_im_rpc_auth building..." ${COLOR_SUFFIX}
|
||||||
|
go build -ldflags="-w -s" -o open_im_rpc_auth ../cmd/rpc/open_im_auth/main.go
|
||||||
|
echo -e ${SKY_BLUE_PREFIX} "open_im_rpc_auth build ok" ${COLOR_SUFFIX}
|
||||||
|
|
||||||
|
# 编译 build-rpc-msg
|
||||||
|
build-rpc-msg:
|
||||||
|
echo -e ${SKY_BLUE_PREFIX} "open_im_rpc_msg building..." ${COLOR_SUFFIX}
|
||||||
|
go build -ldflags="-w -s" -o open_im_rpc_msg ../cmd/rpc/open_im_msg/main.go
|
||||||
|
echo -e ${SKY_BLUE_PREFIX} "open_im_rpc_msg build ok" ${COLOR_SUFFIX}
|
||||||
|
|
||||||
|
# 编译 open_im_demo
|
||||||
|
build-demo:
|
||||||
|
echo -e ${SKY_BLUE_PREFIX} "open_im_demo building..." ${COLOR_SUFFIX}
|
||||||
|
go build -ldflags="-w -s" -o open_im_demo ../cmd/open_im_demo/main.go
|
||||||
|
echo -e ${SKY_BLUE_PREFIX} "open_im_demo build ok" ${COLOR_SUFFIX}
|
||||||
|
|
||||||
|
# 打包所有组件为镜像
|
||||||
|
image-all:
|
||||||
|
make image-api && make image-msg-gateway && make image-msg-transfer & make image-push && make image-timer-task
|
||||||
|
make image-rpc-user && make image-rpc-friend && make image-rpc-group && make image-rpc-msg && make image-rpc-auth
|
||||||
|
make image-demo
|
||||||
|
|
||||||
|
# 打包 open_im_api
|
||||||
|
image-api:
|
||||||
|
echo -e ${GREEN_PREFIX} "IMAGE:openim/api building..." ${COLOR_SUFFIX}
|
||||||
|
docker build -t openim/api:latest -f ./dockerfiles/Dockerfile.api .
|
||||||
|
echo -e ${GREEN_PREFIX} "IMAGE:openim/api build ok" ${COLOR_SUFFIX}
|
||||||
|
|
||||||
|
# 打包 open_im_msg_gateway
|
||||||
|
image-msg-gateway:
|
||||||
|
echo -e ${GREEN_PREFIX} "IMAGE:openim/msg_gateway building..." ${COLOR_SUFFIX}
|
||||||
|
docker build -t openim/msg_gateway:latest -f ./dockerfiles/Dockerfile.msg_gateway .
|
||||||
|
echo -e ${GREEN_PREFIX} "IMAGE:openim/msg_gateway build ok" ${COLOR_SUFFIX}
|
||||||
|
|
||||||
|
# 打包 open_im_msg_transfer
|
||||||
|
image-msg-transfer:
|
||||||
|
echo -e ${GREEN_PREFIX} "IMAGE:openim/msg_transfer building..." ${COLOR_SUFFIX}
|
||||||
|
docker build -t openim/msg_transfer:latest -f ./dockerfiles/Dockerfile.msg_transfer .
|
||||||
|
echo -e ${GREEN_PREFIX} "IMAGE:openim/msg_transfer build ok" ${COLOR_SUFFIX}
|
||||||
|
|
||||||
|
# 打包 open_im_push
|
||||||
|
image-push:
|
||||||
|
echo -e ${GREEN_PREFIX} "IMAGE:openim/push building..." ${COLOR_SUFFIX}
|
||||||
|
docker build -t openim/push:latest -f ./dockerfiles/Dockerfile.push .
|
||||||
|
echo -e ${GREEN_PREFIX} "IMAGE:openim/push build ok" ${COLOR_SUFFIX}
|
||||||
|
|
||||||
|
# 打包 open_im_timer_task
|
||||||
|
image-timer-task:
|
||||||
|
echo -e ${GREEN_PREFIX} "IMAGE:openim/timer_task building..." ${COLOR_SUFFIX}
|
||||||
|
docker build -t openim/timer_task:latest -f ./dockerfiles/Dockerfile.timer_task .
|
||||||
|
echo -e ${GREEN_PREFIX} "IMAGE:openim/timer_task build ok" ${COLOR_SUFFIX}
|
||||||
|
|
||||||
|
# 打包 build-rpc-user
|
||||||
|
image-rpc-user:
|
||||||
|
echo -e ${SKY_BLUE_PREFIX} "IMAGE:openim/rpc_user building..." ${COLOR_SUFFIX}
|
||||||
|
docker build -t openim/rpc_user:latest -f ./dockerfiles/Dockerfile.rpc_user .
|
||||||
|
echo -e ${SKY_BLUE_PREFIX} "IMAGE:openim/rpc_user build ok" ${COLOR_SUFFIX}
|
||||||
|
|
||||||
|
# 打包 build-rpc-friend
|
||||||
|
image-rpc-friend:
|
||||||
|
echo -e ${SKY_BLUE_PREFIX} "IMAGE:openim/rpc_friend building..." ${COLOR_SUFFIX}
|
||||||
|
docker build -t openim/rpc_friend:latest -f ./dockerfiles/Dockerfile.rpc_friend .
|
||||||
|
echo -e ${SKY_BLUE_PREFIX} "IMAGE:openim/rpc_friend build ok" ${COLOR_SUFFIX}
|
||||||
|
|
||||||
|
# 打包 build-rpc-group
|
||||||
|
image-rpc-group:
|
||||||
|
echo -e ${SKY_BLUE_PREFIX} "IMAGE:openim/rpc_group building..." ${COLOR_SUFFIX}
|
||||||
|
docker build -t openim/rpc_group:latest -f ./dockerfiles/Dockerfile.rpc_group .
|
||||||
|
echo -e ${SKY_BLUE_PREFIX} "IMAGE:openim/rpc_group build ok" ${COLOR_SUFFIX}
|
||||||
|
|
||||||
|
# 打包 build-rpc-auth
|
||||||
|
image-rpc-auth:
|
||||||
|
echo -e ${SKY_BLUE_PREFIX} "IMAGE:openim/rpc_auth building..." ${COLOR_SUFFIX}
|
||||||
|
docker build -t openim/rpc_auth:latest -f ./dockerfiles/Dockerfile.rpc_auth .
|
||||||
|
echo -e ${SKY_BLUE_PREFIX} "IMAGE:openim/rpc_auth build ok" ${COLOR_SUFFIX}
|
||||||
|
|
||||||
|
# 打包 build-rpc-msg
|
||||||
|
image-rpc-msg:
|
||||||
|
echo -e ${SKY_BLUE_PREFIX} "IMAGE:openim/rpc_msg building..." ${COLOR_SUFFIX}
|
||||||
|
docker build -t openim/rpc_msg:latest -f ./dockerfiles/Dockerfile.rpc_msg .
|
||||||
|
echo -e ${SKY_BLUE_PREFIX} "IMAGE:openim/rpc_msg build ok" ${COLOR_SUFFIX}
|
||||||
|
|
||||||
|
# 打包 open_im_demo
|
||||||
|
image-demo:
|
||||||
|
echo -e ${SKY_BLUE_PREFIX} "IMAGE:openim/demo building..." ${COLOR_SUFFIX}
|
||||||
|
docker build -t openim/demo:latest -f ./dockerfiles/Dockerfile.demo .
|
||||||
|
echo -e ${SKY_BLUE_PREFIX} "IMAGE:openim/demo build ok" ${COLOR_SUFFIX}
|
||||||
|
|
||||||
|
.PHONY: win-build-all build-api build-msg-gateway build-msg-transfer build-push
|
||||||
|
build-timer-task build-rpc-user build-rpc-friend build-rpc-group build-rpc-msg build-demo
|
||||||
|
image-all image-api image-msg-gateway image-msg-transfer image-push
|
||||||
|
image-timer-task image-rpc-user image-rpc-friend image-rpc-group image-rpc-msg image-demo
|
@ -0,0 +1,16 @@
|
|||||||
|
FROM alpine:3.13
|
||||||
|
|
||||||
|
# 设置固定的项目路径
|
||||||
|
ENV WORKDIR /app
|
||||||
|
ENV CONFIG_NAME $WORKDIR/config/config.yaml
|
||||||
|
|
||||||
|
# 将可执行文件复制到目标目录
|
||||||
|
ADD ./open_im_api $WORKDIR/main
|
||||||
|
|
||||||
|
# 创建用于挂载的几个目录,添加可执行权限
|
||||||
|
RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \
|
||||||
|
chmod +x $WORKDIR/main
|
||||||
|
|
||||||
|
|
||||||
|
WORKDIR $WORKDIR
|
||||||
|
CMD ./main
|
@ -0,0 +1,16 @@
|
|||||||
|
FROM alpine:3.13
|
||||||
|
|
||||||
|
# 设置固定的项目路径
|
||||||
|
ENV WORKDIR /app
|
||||||
|
ENV CONFIG_NAME $WORKDIR/config/config.yaml
|
||||||
|
|
||||||
|
# 将可执行文件复制到目标目录
|
||||||
|
ADD ./open_im_demo $WORKDIR/main
|
||||||
|
|
||||||
|
# 创建用于挂载的几个目录,添加可执行权限
|
||||||
|
RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \
|
||||||
|
chmod +x $WORKDIR/main
|
||||||
|
|
||||||
|
|
||||||
|
WORKDIR $WORKDIR
|
||||||
|
CMD ./main
|
@ -0,0 +1,16 @@
|
|||||||
|
FROM alpine:3.13
|
||||||
|
|
||||||
|
# 设置固定的项目路径
|
||||||
|
ENV WORKDIR /app
|
||||||
|
ENV CONFIG_NAME $WORKDIR/config/config.yaml
|
||||||
|
|
||||||
|
# 将可执行文件复制到目标目录
|
||||||
|
ADD ./open_im_msg_transfer $WORKDIR/main
|
||||||
|
|
||||||
|
# 创建用于挂载的几个目录,添加可执行权限
|
||||||
|
RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \
|
||||||
|
chmod +x $WORKDIR/main
|
||||||
|
|
||||||
|
|
||||||
|
WORKDIR $WORKDIR
|
||||||
|
CMD ./main
|
@ -0,0 +1,16 @@
|
|||||||
|
FROM alpine:3.13
|
||||||
|
|
||||||
|
# 设置固定的项目路径
|
||||||
|
ENV WORKDIR /app
|
||||||
|
ENV CONFIG_NAME $WORKDIR/config/config.yaml
|
||||||
|
|
||||||
|
# 将可执行文件复制到目标目录
|
||||||
|
ADD ./open_im_push $WORKDIR/main
|
||||||
|
|
||||||
|
# 创建用于挂载的几个目录,添加可执行权限
|
||||||
|
RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \
|
||||||
|
chmod +x $WORKDIR/main
|
||||||
|
|
||||||
|
|
||||||
|
WORKDIR $WORKDIR
|
||||||
|
CMD ./main
|
@ -0,0 +1,16 @@
|
|||||||
|
FROM alpine:3.13
|
||||||
|
|
||||||
|
# 设置固定的项目路径
|
||||||
|
ENV WORKDIR /app
|
||||||
|
ENV CONFIG_NAME $WORKDIR/config/config.yaml
|
||||||
|
|
||||||
|
# 将可执行文件复制到目标目录
|
||||||
|
ADD ./open_im_rpc_auth $WORKDIR/main
|
||||||
|
|
||||||
|
# 创建用于挂载的几个目录,添加可执行权限
|
||||||
|
RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \
|
||||||
|
chmod +x $WORKDIR/main
|
||||||
|
|
||||||
|
|
||||||
|
WORKDIR $WORKDIR
|
||||||
|
CMD ./main
|
@ -0,0 +1,16 @@
|
|||||||
|
FROM alpine:3.13
|
||||||
|
|
||||||
|
# 设置固定的项目路径
|
||||||
|
ENV WORKDIR /app
|
||||||
|
ENV CONFIG_NAME $WORKDIR/config/config.yaml
|
||||||
|
|
||||||
|
# 将可执行文件复制到目标目录
|
||||||
|
ADD ./open_im_rpc_friend $WORKDIR/main
|
||||||
|
|
||||||
|
# 创建用于挂载的几个目录,添加可执行权限
|
||||||
|
RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \
|
||||||
|
chmod +x $WORKDIR/main
|
||||||
|
|
||||||
|
|
||||||
|
WORKDIR $WORKDIR
|
||||||
|
CMD ./main
|
@ -0,0 +1,16 @@
|
|||||||
|
FROM alpine:3.13
|
||||||
|
|
||||||
|
# 设置固定的项目路径
|
||||||
|
ENV WORKDIR /app
|
||||||
|
ENV CONFIG_NAME $WORKDIR/config/config.yaml
|
||||||
|
|
||||||
|
# 将可执行文件复制到目标目录
|
||||||
|
ADD ./open_im_rpc_group $WORKDIR/main
|
||||||
|
|
||||||
|
# 创建用于挂载的几个目录,添加可执行权限
|
||||||
|
RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \
|
||||||
|
chmod +x $WORKDIR/main
|
||||||
|
|
||||||
|
|
||||||
|
WORKDIR $WORKDIR
|
||||||
|
CMD ./main
|
@ -0,0 +1,16 @@
|
|||||||
|
FROM alpine:3.13
|
||||||
|
|
||||||
|
# 设置固定的项目路径
|
||||||
|
ENV WORKDIR /app
|
||||||
|
ENV CONFIG_NAME $WORKDIR/config/config.yaml
|
||||||
|
|
||||||
|
# 将可执行文件复制到目标目录
|
||||||
|
ADD ./open_im_rpc_msg $WORKDIR/main
|
||||||
|
|
||||||
|
# 创建用于挂载的几个目录,添加可执行权限
|
||||||
|
RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \
|
||||||
|
chmod +x $WORKDIR/main
|
||||||
|
|
||||||
|
|
||||||
|
WORKDIR $WORKDIR
|
||||||
|
CMD ./main
|
@ -0,0 +1,16 @@
|
|||||||
|
FROM alpine:3.13
|
||||||
|
|
||||||
|
# 设置固定的项目路径
|
||||||
|
ENV WORKDIR /app
|
||||||
|
ENV CONFIG_NAME $WORKDIR/config/config.yaml
|
||||||
|
|
||||||
|
# 将可执行文件复制到目标目录
|
||||||
|
ADD ./open_im_rpc_user $WORKDIR/main
|
||||||
|
|
||||||
|
# 创建用于挂载的几个目录,添加可执行权限
|
||||||
|
RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \
|
||||||
|
chmod +x $WORKDIR/main
|
||||||
|
|
||||||
|
|
||||||
|
WORKDIR $WORKDIR
|
||||||
|
CMD ./main
|
@ -0,0 +1,16 @@
|
|||||||
|
FROM alpine:3.13
|
||||||
|
|
||||||
|
# 设置固定的项目路径
|
||||||
|
ENV WORKDIR /app
|
||||||
|
ENV CONFIG_NAME $WORKDIR/config/config.yaml
|
||||||
|
|
||||||
|
# 将可执行文件复制到目标目录
|
||||||
|
ADD ./open_im_timer_task $WORKDIR/main
|
||||||
|
|
||||||
|
# 创建用于挂载的几个目录,添加可执行权限
|
||||||
|
RUN mkdir $WORKDIR/logs $WORKDIR/config $WORKDIR/db && \
|
||||||
|
chmod +x $WORKDIR/main
|
||||||
|
|
||||||
|
|
||||||
|
WORKDIR $WORKDIR
|
||||||
|
CMD ./main
|
@ -0,0 +1,101 @@
|
|||||||
|
version: "3.7"
|
||||||
|
networks:
|
||||||
|
openim:
|
||||||
|
external: true
|
||||||
|
|
||||||
|
services:
|
||||||
|
mysql:
|
||||||
|
networks:
|
||||||
|
- openim
|
||||||
|
image: mysql:5.7
|
||||||
|
# ports:
|
||||||
|
# #- 13306:3306
|
||||||
|
# - 23306:33060
|
||||||
|
container_name: openim_mysql
|
||||||
|
volumes:
|
||||||
|
- ./components/mysql/data:/var/lib/mysql
|
||||||
|
- /etc/localtime:/etc/localtime
|
||||||
|
environment:
|
||||||
|
MYSQL_ROOT_PASSWORD: openIM
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
mongodb:
|
||||||
|
networks:
|
||||||
|
- openim
|
||||||
|
image: mongo:4.4.5-bionic
|
||||||
|
# ports:
|
||||||
|
# - 37017:27017
|
||||||
|
container_name: openim_mongo
|
||||||
|
volumes:
|
||||||
|
- ./components/mongodb/data/db:/data/db
|
||||||
|
- ./components/mongodb/data/logs:/data/logs
|
||||||
|
- ./components/mongodb/data/conf:/etc/mongo
|
||||||
|
environment:
|
||||||
|
TZ: Asia/Shanghai
|
||||||
|
# - MONGO_INITDB_ROOT_USERNAME=openIM
|
||||||
|
# - MONGO_INITDB_ROOT_PASSWORD=openIM
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
redis:
|
||||||
|
networks:
|
||||||
|
- openim
|
||||||
|
image: redis:6.2.4-alpine
|
||||||
|
# ports:
|
||||||
|
# - 16379:6379
|
||||||
|
container_name: openim_redis
|
||||||
|
volumes:
|
||||||
|
- ./components/redis/data:/data
|
||||||
|
#redis config file
|
||||||
|
#- ./components/redis/config/redis.conf:/usr/local/redis/config/redis.conf
|
||||||
|
environment:
|
||||||
|
TZ: Asia/Shanghai
|
||||||
|
restart: always
|
||||||
|
sysctls:
|
||||||
|
net.core.somaxconn: 1024
|
||||||
|
command: redis-server --requirepass openIM --appendonly yes
|
||||||
|
|
||||||
|
|
||||||
|
zookeeper:
|
||||||
|
networks:
|
||||||
|
- openim
|
||||||
|
image: wurstmeister/zookeeper
|
||||||
|
# ports:
|
||||||
|
# - 2181:2181
|
||||||
|
container_name: openim_zookeeper
|
||||||
|
volumes:
|
||||||
|
- /etc/localtime:/etc/localtime
|
||||||
|
environment:
|
||||||
|
TZ: Asia/Shanghai
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
kafka:
|
||||||
|
networks:
|
||||||
|
- openim
|
||||||
|
image: wurstmeister/kafka
|
||||||
|
container_name: openim_kafka
|
||||||
|
restart: always
|
||||||
|
environment:
|
||||||
|
TZ: Asia/Shanghai
|
||||||
|
KAFKA_BROKER_ID: 0
|
||||||
|
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
|
||||||
|
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092
|
||||||
|
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
|
||||||
|
depends_on:
|
||||||
|
- zookeeper
|
||||||
|
|
||||||
|
etcd:
|
||||||
|
networks:
|
||||||
|
- openim
|
||||||
|
image: quay.io/coreos/etcd
|
||||||
|
# ports:
|
||||||
|
# - 2379:2379
|
||||||
|
# - 2380:2380
|
||||||
|
container_name: openim_etcd
|
||||||
|
volumes:
|
||||||
|
- /etc/timezone:/etc/timezone
|
||||||
|
- /etc/localtime:/etc/localtime
|
||||||
|
environment:
|
||||||
|
ETCDCTL_API: 3
|
||||||
|
restart: always
|
||||||
|
command: /usr/local/bin/etcd --name etcd0 --data-dir /etcd-data --listen-client-urls http://0.0.0.0:2379 --advertise-client-urls http://0.0.0.0:2379 --listen-peer-urls http://0.0.0.0:2380 --initial-advertise-peer-urls http://0.0.0.0:2380 --initial-cluster etcd0=http://0.0.0.0:2380 --initial-cluster-token tkn --initial-cluster-state new
|
||||||
|
|
After Width: | Height: | Size: 207 KiB |
After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 9.9 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 208 KiB |
After Width: | Height: | Size: 240 KiB |
After Width: | Height: | Size: 107 KiB |
@ -0,0 +1,69 @@
|
|||||||
|
module Open_IM
|
||||||
|
|
||||||
|
go 1.15
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/Shopify/sarama v1.19.0
|
||||||
|
github.com/Shopify/toxiproxy v2.1.4+incompatible // indirect
|
||||||
|
github.com/alibabacloud-go/darabonba-openapi v0.1.11
|
||||||
|
github.com/alibabacloud-go/dysmsapi-20170525/v2 v2.0.8
|
||||||
|
github.com/alibabacloud-go/sts-20150401 v1.1.0
|
||||||
|
github.com/alibabacloud-go/tea v1.1.17
|
||||||
|
github.com/antonfisher/nested-logrus-formatter v1.3.0
|
||||||
|
github.com/bwmarrin/snowflake v0.3.0
|
||||||
|
github.com/coreos/etcd v3.3.27+incompatible // indirect
|
||||||
|
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f // indirect
|
||||||
|
github.com/eapache/go-resiliency v1.2.0 // indirect
|
||||||
|
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 // indirect
|
||||||
|
github.com/eapache/queue v1.1.0 // indirect
|
||||||
|
github.com/fatih/structs v1.1.0
|
||||||
|
github.com/frankban/quicktest v1.14.0 // indirect
|
||||||
|
github.com/garyburd/redigo v1.6.2
|
||||||
|
github.com/gin-gonic/gin v1.7.0
|
||||||
|
github.com/go-playground/validator/v10 v10.4.1
|
||||||
|
github.com/go-sql-driver/mysql v1.6.0 // indirect
|
||||||
|
github.com/gogo/protobuf v1.3.2
|
||||||
|
github.com/golang-jwt/jwt/v4 v4.1.0
|
||||||
|
github.com/golang/protobuf v1.5.2
|
||||||
|
github.com/golang/snappy v0.0.4 // indirect
|
||||||
|
github.com/gorilla/websocket v1.4.2
|
||||||
|
github.com/jinzhu/copier v0.3.4
|
||||||
|
github.com/jinzhu/gorm v1.9.16
|
||||||
|
github.com/jinzhu/now v1.1.3 // indirect
|
||||||
|
github.com/jonboulle/clockwork v0.2.2 // indirect
|
||||||
|
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible
|
||||||
|
github.com/lestrrat-go/strftime v1.0.4 // indirect
|
||||||
|
github.com/lib/pq v1.2.0 // indirect
|
||||||
|
//github.com/livekit/protocol v0.11.14-0.20220223195254-d8c251e13231 // indirect
|
||||||
|
//github.com/livekit/server-sdk-go v0.9.1
|
||||||
|
github.com/mattn/go-sqlite3 v1.14.6 // indirect
|
||||||
|
github.com/minio/minio-go/v7 v7.0.22
|
||||||
|
github.com/mitchellh/mapstructure v1.4.2
|
||||||
|
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646
|
||||||
|
github.com/olivere/elastic/v7 v7.0.23
|
||||||
|
github.com/pierrec/lz4 v2.6.1+incompatible // indirect
|
||||||
|
github.com/pkg/errors v0.9.1
|
||||||
|
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect
|
||||||
|
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5
|
||||||
|
github.com/sirupsen/logrus v1.8.1
|
||||||
|
github.com/spf13/viper v1.9.0
|
||||||
|
github.com/stretchr/testify v1.7.0
|
||||||
|
github.com/tencentyun/qcloud-cos-sts-sdk v0.0.0-20210325043845-84a0811633ca
|
||||||
|
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 // indirect
|
||||||
|
//go.etcd.io/etcd v3.3.27+incompatible
|
||||||
|
go.etcd.io/etcd v0.0.0-20200402134248-51bdeb39e698
|
||||||
|
go.mongodb.org/mongo-driver v1.8.3
|
||||||
|
golang.org/x/image v0.0.0-20210220032944-ac19c3e999fb
|
||||||
|
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd
|
||||||
|
google.golang.org/grpc v1.42.0
|
||||||
|
google.golang.org/grpc/examples v0.0.0-20220311002955-722367c4a737 // indirect
|
||||||
|
google.golang.org/protobuf v1.27.1
|
||||||
|
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
|
||||||
|
gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
|
||||||
|
gopkg.in/ini.v1 v1.66.2 // indirect
|
||||||
|
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22
|
||||||
|
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b
|
||||||
|
sigs.k8s.io/yaml v1.2.0 // indirect
|
||||||
|
)
|
||||||
|
|
||||||
|
replace google.golang.org/grpc => google.golang.org/grpc v1.29.0
|
@ -0,0 +1,91 @@
|
|||||||
|
package apiAuth
|
||||||
|
|
||||||
|
import (
|
||||||
|
api "Open_IM/pkg/base_info"
|
||||||
|
"Open_IM/pkg/common/config"
|
||||||
|
"Open_IM/pkg/common/log"
|
||||||
|
"Open_IM/pkg/grpc-etcdv3/getcdv3"
|
||||||
|
rpc "Open_IM/pkg/proto/auth"
|
||||||
|
open_im_sdk "Open_IM/pkg/proto/sdk_ws"
|
||||||
|
"Open_IM/pkg/utils"
|
||||||
|
"context"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"net/http"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func UserRegister(c *gin.Context) {
|
||||||
|
params := api.UserRegisterReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if params.Secret != config.Config.Secret {
|
||||||
|
log.NewError(params.OperationID, "params.Secret != config.Config.Secret", params.Secret, config.Config.Secret)
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 401, "errMsg": "not authorized"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.UserRegisterReq{UserInfo: &open_im_sdk.UserInfo{}}
|
||||||
|
utils.CopyStructFields(req.UserInfo, ¶ms)
|
||||||
|
//copier.Copy(req.UserInfo, ¶ms)
|
||||||
|
req.OperationID = params.OperationID
|
||||||
|
log.NewInfo(req.OperationID, "UserRegister args ", req.String())
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImAuthName)
|
||||||
|
client := rpc.NewAuthClient(etcdConn)
|
||||||
|
reply, err := client.UserRegister(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, "call rpc err ", err)
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "internal service err"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if reply.CommonResp.ErrCode != 0 {
|
||||||
|
log.NewError(req.OperationID, "UserRegister failed ", err)
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": reply.CommonResp.ErrMsg})
|
||||||
|
return
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
pbDataToken := &rpc.UserTokenReq{Platform: params.Platform, FromUserID: params.UserID, OperationID: params.OperationID}
|
||||||
|
replyToken, err := client.UserToken(context.Background(), pbDataToken)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, "UserToken failed ", err.Error(), pbDataToken)
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp := api.UserRegisterResp{CommResp: api.CommResp{ErrCode: replyToken.CommonResp.ErrCode, ErrMsg: replyToken.CommonResp.ErrMsg},
|
||||||
|
UserToken: api.UserTokenInfo{UserID: req.UserInfo.UserID, Token: replyToken.Token, ExpiredTime: replyToken.ExpiredTime}}
|
||||||
|
log.NewInfo(req.OperationID, "UserRegister return ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func UserToken(c *gin.Context) {
|
||||||
|
params := api.UserTokenReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if params.Secret != config.Config.Secret {
|
||||||
|
log.NewError(params.OperationID, "params.Secret != config.Config.Secret", params.Secret, config.Config.Secret)
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 401, "errMsg": "not authorized"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.UserTokenReq{Platform: params.Platform, FromUserID: params.UserID, OperationID: params.OperationID}
|
||||||
|
log.NewInfo(req.OperationID, "UserToken args ", req.String())
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImAuthName)
|
||||||
|
client := rpc.NewAuthClient(etcdConn)
|
||||||
|
reply, err := client.UserToken(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, "UserToken failed ", err.Error(), req.String())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp := api.UserTokenResp{CommResp: api.CommResp{ErrCode: reply.CommonResp.ErrCode, ErrMsg: reply.CommonResp.ErrMsg},
|
||||||
|
UserToken: api.UserTokenInfo{UserID: req.FromUserID, Token: reply.Token, ExpiredTime: reply.ExpiredTime}}
|
||||||
|
log.NewInfo(req.OperationID, "UserRegister return ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
package apiChat
|
||||||
|
|
||||||
|
import (
|
||||||
|
api "Open_IM/pkg/base_info"
|
||||||
|
"Open_IM/pkg/common/config"
|
||||||
|
"Open_IM/pkg/common/constant"
|
||||||
|
"Open_IM/pkg/common/log"
|
||||||
|
"Open_IM/pkg/grpc-etcdv3/getcdv3"
|
||||||
|
pbChat "Open_IM/pkg/proto/chat"
|
||||||
|
pbCommon "Open_IM/pkg/proto/sdk_ws"
|
||||||
|
"Open_IM/pkg/utils"
|
||||||
|
"context"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"net/http"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func DelMsg(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req api.DelMsgReq
|
||||||
|
resp api.DelMsgResp
|
||||||
|
reqPb pbCommon.DelMsgListReq
|
||||||
|
)
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := utils.CopyStructFields(&reqPb, &req); err != nil {
|
||||||
|
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields", err.Error())
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req:", req)
|
||||||
|
grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName)
|
||||||
|
msgClient := pbChat.NewChatClient(grpcConn)
|
||||||
|
respPb, err := msgClient.DelMsgList(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "DelMsgList failed", err.Error(), reqPb)
|
||||||
|
c.JSON(http.StatusOK, gin.H{"errCode": constant.ErrServer.ErrCode, "errMsg": constant.ErrServer.ErrMsg + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp.ErrCode = respPb.ErrCode
|
||||||
|
resp.ErrMsg = respPb.ErrMsg
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
@ -0,0 +1,61 @@
|
|||||||
|
package apiChat
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Open_IM/pkg/common/config"
|
||||||
|
"Open_IM/pkg/common/log"
|
||||||
|
"Open_IM/pkg/common/token_verify"
|
||||||
|
"Open_IM/pkg/grpc-etcdv3/getcdv3"
|
||||||
|
pbMsg "Open_IM/pkg/proto/chat"
|
||||||
|
"context"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"net/http"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
type paramsUserNewestSeq struct {
|
||||||
|
ReqIdentifier int `json:"reqIdentifier" binding:"required"`
|
||||||
|
SendID string `json:"sendID" binding:"required"`
|
||||||
|
OperationID string `json:"operationID" binding:"required"`
|
||||||
|
MsgIncr int `json:"msgIncr" binding:"required"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetSeq(c *gin.Context) {
|
||||||
|
params := paramsUserNewestSeq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
token := c.Request.Header.Get("token")
|
||||||
|
if ok, err := token_verify.VerifyToken(token, params.SendID); !ok {
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "token validate err" + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
pbData := pbMsg.GetMaxAndMinSeqReq{}
|
||||||
|
pbData.UserID = params.SendID
|
||||||
|
pbData.OperationID = params.OperationID
|
||||||
|
grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName)
|
||||||
|
|
||||||
|
if grpcConn == nil {
|
||||||
|
log.ErrorByKv("get grpcConn err", pbData.OperationID, "args", params)
|
||||||
|
}
|
||||||
|
msgClient := pbMsg.NewChatClient(grpcConn)
|
||||||
|
reply, err := msgClient.GetMaxAndMinSeq(context.Background(), &pbData)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(params.OperationID, "UserGetSeq rpc failed, ", params, err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 401, "errMsg": "UserGetSeq rpc failed, " + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
c.JSON(http.StatusOK, gin.H{
|
||||||
|
"errCode": reply.ErrCode,
|
||||||
|
"errMsg": reply.ErrMsg,
|
||||||
|
"msgIncr": params.MsgIncr,
|
||||||
|
"reqIdentifier": params.ReqIdentifier,
|
||||||
|
"data": gin.H{
|
||||||
|
"maxSeq": reply.MaxSeq,
|
||||||
|
"minSeq": reply.MinSeq,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,68 @@
|
|||||||
|
package apiChat
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Open_IM/pkg/common/config"
|
||||||
|
"Open_IM/pkg/common/log"
|
||||||
|
"Open_IM/pkg/common/token_verify"
|
||||||
|
"Open_IM/pkg/grpc-etcdv3/getcdv3"
|
||||||
|
"Open_IM/pkg/proto/chat"
|
||||||
|
open_im_sdk "Open_IM/pkg/proto/sdk_ws"
|
||||||
|
"Open_IM/pkg/utils"
|
||||||
|
"context"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"net/http"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
type paramsUserPullMsg struct {
|
||||||
|
ReqIdentifier *int `json:"reqIdentifier" binding:"required"`
|
||||||
|
SendID string `json:"sendID" binding:"required"`
|
||||||
|
OperationID string `json:"operationID" binding:"required"`
|
||||||
|
Data struct {
|
||||||
|
SeqBegin *int64 `json:"seqBegin" binding:"required"`
|
||||||
|
SeqEnd *int64 `json:"seqEnd" binding:"required"`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type paramsUserPullMsgBySeqList struct {
|
||||||
|
ReqIdentifier int `json:"reqIdentifier" binding:"required"`
|
||||||
|
SendID string `json:"sendID" binding:"required"`
|
||||||
|
OperationID string `json:"operationID" binding:"required"`
|
||||||
|
SeqList []uint32 `json:"seqList"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func PullMsgBySeqList(c *gin.Context) {
|
||||||
|
params := paramsUserPullMsgBySeqList{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
token := c.Request.Header.Get("token")
|
||||||
|
if ok, err := token_verify.VerifyToken(token, params.SendID); !ok {
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(params.OperationID, utils.GetSelfFuncName(), err.Error(), token, params.SendID)
|
||||||
|
}
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "token validate err"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
pbData := open_im_sdk.PullMessageBySeqListReq{}
|
||||||
|
pbData.UserID = params.SendID
|
||||||
|
pbData.OperationID = params.OperationID
|
||||||
|
pbData.SeqList = params.SeqList
|
||||||
|
|
||||||
|
grpcConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName)
|
||||||
|
msgClient := pbChat.NewChatClient(grpcConn)
|
||||||
|
reply, err := msgClient.PullMessageBySeqList(context.Background(), &pbData)
|
||||||
|
if err != nil {
|
||||||
|
log.ErrorByKv("PullMessageBySeqList error", pbData.OperationID, "err", err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.InfoByKv("rpc call success to PullMessageBySeqList", pbData.OperationID, "ReplyArgs", reply.String(), len(reply.List))
|
||||||
|
c.JSON(http.StatusOK, gin.H{
|
||||||
|
"errCode": reply.ErrCode,
|
||||||
|
"errMsg": reply.ErrMsg,
|
||||||
|
"reqIdentifier": params.ReqIdentifier,
|
||||||
|
"data": reply.List,
|
||||||
|
})
|
||||||
|
}
|
@ -0,0 +1,99 @@
|
|||||||
|
package apiChat
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Open_IM/pkg/common/config"
|
||||||
|
"Open_IM/pkg/common/log"
|
||||||
|
pbChat "Open_IM/pkg/proto/chat"
|
||||||
|
open_im_sdk "Open_IM/pkg/proto/sdk_ws"
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"Open_IM/pkg/grpc-etcdv3/getcdv3"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"net/http"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
type paramsUserSendMsg struct {
|
||||||
|
SenderPlatformID int32 `json:"senderPlatformID" binding:"required"`
|
||||||
|
SendID string `json:"sendID" binding:"required"`
|
||||||
|
SenderNickName string `json:"senderNickName"`
|
||||||
|
SenderFaceURL string `json:"senderFaceUrl"`
|
||||||
|
OperationID string `json:"operationID" binding:"required"`
|
||||||
|
Data struct {
|
||||||
|
SessionType int32 `json:"sessionType" binding:"required"`
|
||||||
|
MsgFrom int32 `json:"msgFrom" binding:"required"`
|
||||||
|
ContentType int32 `json:"contentType" binding:"required"`
|
||||||
|
RecvID string `json:"recvID" `
|
||||||
|
GroupID string `json:"groupID" `
|
||||||
|
ForceList []string `json:"forceList"`
|
||||||
|
Content []byte `json:"content" binding:"required"`
|
||||||
|
Options map[string]bool `json:"options" `
|
||||||
|
ClientMsgID string `json:"clientMsgID" binding:"required"`
|
||||||
|
CreateTime int64 `json:"createTime" binding:"required"`
|
||||||
|
OffLineInfo *open_im_sdk.OfflinePushInfo `json:"offlineInfo" `
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func newUserSendMsgReq(token string, params *paramsUserSendMsg) *pbChat.SendMsgReq {
|
||||||
|
pbData := pbChat.SendMsgReq{
|
||||||
|
Token: token,
|
||||||
|
OperationID: params.OperationID,
|
||||||
|
MsgData: &open_im_sdk.MsgData{
|
||||||
|
SendID: params.SendID,
|
||||||
|
RecvID: params.Data.RecvID,
|
||||||
|
GroupID: params.Data.GroupID,
|
||||||
|
ClientMsgID: params.Data.ClientMsgID,
|
||||||
|
SenderPlatformID: params.SenderPlatformID,
|
||||||
|
SenderNickname: params.SenderNickName,
|
||||||
|
SenderFaceURL: params.SenderFaceURL,
|
||||||
|
SessionType: params.Data.SessionType,
|
||||||
|
MsgFrom: params.Data.MsgFrom,
|
||||||
|
ContentType: params.Data.ContentType,
|
||||||
|
Content: params.Data.Content,
|
||||||
|
CreateTime: params.Data.CreateTime,
|
||||||
|
Options: params.Data.Options,
|
||||||
|
OfflinePushInfo: params.Data.OffLineInfo,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
return &pbData
|
||||||
|
}
|
||||||
|
|
||||||
|
func SendMsg(c *gin.Context) {
|
||||||
|
params := paramsUserSendMsg{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
log.ErrorByKv("json unmarshal err", "", "err", err.Error(), "data", c.PostForm("data"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
token := c.Request.Header.Get("token")
|
||||||
|
|
||||||
|
log.InfoByKv("api call success to sendMsgReq", params.OperationID, "Parameters", params)
|
||||||
|
|
||||||
|
pbData := newUserSendMsgReq(token, ¶ms)
|
||||||
|
log.Info("", "", "api SendMsg call start..., [data: %s]", pbData.String())
|
||||||
|
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName)
|
||||||
|
client := pbChat.NewChatClient(etcdConn)
|
||||||
|
|
||||||
|
log.Info("", "", "api SendMsg call, api call rpc...")
|
||||||
|
|
||||||
|
reply, err := client.SendMsg(context.Background(), pbData)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(params.OperationID, "SendMsg rpc failed, ", params, err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 401, "errMsg": "SendMsg rpc failed, " + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.Info("", "", "api SendMsg call end..., [data: %s] [reply: %s]", pbData.String(), reply.String())
|
||||||
|
|
||||||
|
c.JSON(http.StatusOK, gin.H{
|
||||||
|
"errCode": reply.ErrCode,
|
||||||
|
"errMsg": reply.ErrMsg,
|
||||||
|
"data": gin.H{
|
||||||
|
"clientMsgID": reply.ClientMsgID,
|
||||||
|
"serverMsgID": reply.ServerMsgID,
|
||||||
|
"sendTime": reply.SendTime,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,218 @@
|
|||||||
|
package conversation
|
||||||
|
|
||||||
|
import (
|
||||||
|
api "Open_IM/pkg/base_info"
|
||||||
|
"Open_IM/pkg/common/config"
|
||||||
|
"Open_IM/pkg/common/log"
|
||||||
|
"Open_IM/pkg/grpc-etcdv3/getcdv3"
|
||||||
|
pbUser "Open_IM/pkg/proto/user"
|
||||||
|
"Open_IM/pkg/utils"
|
||||||
|
"context"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"net/http"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func SetConversation(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req api.SetConversationReq
|
||||||
|
resp api.SetConversationResp
|
||||||
|
reqPb pbUser.SetConversationReq
|
||||||
|
)
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "bind json failed", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "bind json failed " + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
reqPb.Conversation = &pbUser.Conversation{}
|
||||||
|
err := utils.CopyStructFields(&reqPb, req)
|
||||||
|
err = utils.CopyStructFields(reqPb.Conversation, req.Conversation)
|
||||||
|
if err != nil {
|
||||||
|
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", reqPb.String())
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName)
|
||||||
|
client := pbUser.NewUserClient(etcdConn)
|
||||||
|
respPb, err := client.SetConversation(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetConversation rpc failed, ", reqPb.String(), err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": "GetAllConversationMsgOpt rpc failed, " + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp.ErrMsg = respPb.CommonResp.ErrMsg
|
||||||
|
resp.ErrCode = respPb.CommonResp.ErrCode
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func BatchSetConversations(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req api.BatchSetConversationsReq
|
||||||
|
resp api.BatchSetConversationsResp
|
||||||
|
reqPb pbUser.BatchSetConversationsReq
|
||||||
|
)
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "bind json failed", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "bind json failed " + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := utils.CopyStructFields(&reqPb, req); err != nil {
|
||||||
|
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", reqPb.String())
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName)
|
||||||
|
client := pbUser.NewUserClient(etcdConn)
|
||||||
|
respPb, err := client.BatchSetConversations(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetConversation rpc failed, ", reqPb.String(), err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": "GetAllConversationMsgOpt rpc failed, " + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := utils.CopyStructFields(&resp.Data, respPb); err != nil {
|
||||||
|
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
|
||||||
|
}
|
||||||
|
resp.ErrMsg = respPb.CommonResp.ErrMsg
|
||||||
|
resp.ErrCode = respPb.CommonResp.ErrCode
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetAllConversations(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req api.GetAllConversationsReq
|
||||||
|
resp api.GetAllConversationsResp
|
||||||
|
reqPb pbUser.GetAllConversationsReq
|
||||||
|
)
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "bind json failed", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "bind json failed " + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := utils.CopyStructFields(&reqPb, req); err != nil {
|
||||||
|
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", reqPb.String())
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName)
|
||||||
|
client := pbUser.NewUserClient(etcdConn)
|
||||||
|
respPb, err := client.GetAllConversations(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetConversation rpc failed, ", reqPb.String(), err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": "GetAllConversationMsgOpt rpc failed, " + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp.ErrMsg = respPb.CommonResp.ErrMsg
|
||||||
|
resp.ErrCode = respPb.CommonResp.ErrCode
|
||||||
|
if err := utils.CopyStructFields(&resp.Conversations, respPb.Conversations); err != nil {
|
||||||
|
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed, ", err.Error())
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetConversation(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req api.GetConversationReq
|
||||||
|
resp api.GetConversationResp
|
||||||
|
reqPb pbUser.GetConversationReq
|
||||||
|
)
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "bind json failed", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "bind json failed " + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := utils.CopyStructFields(&reqPb, req); err != nil {
|
||||||
|
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", reqPb.String())
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName)
|
||||||
|
client := pbUser.NewUserClient(etcdConn)
|
||||||
|
respPb, err := client.GetConversation(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetConversation rpc failed, ", reqPb.String(), err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": "GetAllConversationMsgOpt rpc failed, " + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp.ErrMsg = respPb.CommonResp.ErrMsg
|
||||||
|
resp.ErrCode = respPb.CommonResp.ErrCode
|
||||||
|
if err := utils.CopyStructFields(&resp.Conversation, respPb.Conversation); err != nil {
|
||||||
|
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetConversations(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req api.GetConversationsReq
|
||||||
|
resp api.GetConversationsResp
|
||||||
|
reqPb pbUser.GetConversationsReq
|
||||||
|
)
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "bind json failed", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "bind json failed " + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := utils.CopyStructFields(&reqPb, req); err != nil {
|
||||||
|
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", reqPb.String())
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName)
|
||||||
|
client := pbUser.NewUserClient(etcdConn)
|
||||||
|
respPb, err := client.GetConversations(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetConversation rpc failed, ", reqPb.String(), err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": "GetAllConversationMsgOpt rpc failed, " + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp.ErrMsg = respPb.CommonResp.ErrMsg
|
||||||
|
resp.ErrCode = respPb.CommonResp.ErrCode
|
||||||
|
if err := utils.CopyStructFields(&resp.Conversations, respPb.Conversations); err != nil {
|
||||||
|
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func SetRecvMsgOpt(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req api.SetRecvMsgOptReq
|
||||||
|
resp api.SetRecvMsgOptResp
|
||||||
|
reqPb pbUser.SetRecvMsgOptReq
|
||||||
|
)
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "bind json failed", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "bind json failed " + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := utils.CopyStructFields(&reqPb, req); err != nil {
|
||||||
|
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", reqPb.String())
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName)
|
||||||
|
client := pbUser.NewUserClient(etcdConn)
|
||||||
|
respPb, err := client.SetRecvMsgOpt(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetRecvMsgOpt rpc failed, ", reqPb.String(), err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": "GetAllConversationMsgOpt rpc failed, " + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp.ErrMsg = respPb.CommonResp.ErrMsg
|
||||||
|
resp.ErrCode = respPb.CommonResp.ErrCode
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
//Deprecated
|
||||||
|
func SetReceiveMessageOpt(c *gin.Context) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//Deprecated
|
||||||
|
func GetReceiveMessageOpt(c *gin.Context) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//Deprecated
|
||||||
|
func GetAllConversationMessageOpt(c *gin.Context) {
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,456 @@
|
|||||||
|
package friend
|
||||||
|
|
||||||
|
import (
|
||||||
|
jsonData "Open_IM/internal/utils"
|
||||||
|
api "Open_IM/pkg/base_info"
|
||||||
|
"Open_IM/pkg/common/config"
|
||||||
|
"Open_IM/pkg/common/log"
|
||||||
|
"Open_IM/pkg/common/token_verify"
|
||||||
|
"Open_IM/pkg/grpc-etcdv3/getcdv3"
|
||||||
|
rpc "Open_IM/pkg/proto/friend"
|
||||||
|
open_im_sdk "Open_IM/pkg/proto/sdk_ws"
|
||||||
|
"Open_IM/pkg/utils"
|
||||||
|
"context"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"net/http"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func AddBlack(c *gin.Context) {
|
||||||
|
params := api.AddBlacklistReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.AddBlacklistReq{CommID: &rpc.CommID{}}
|
||||||
|
utils.CopyStructFields(req.CommID, ¶ms)
|
||||||
|
var ok bool
|
||||||
|
ok, req.CommID.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.CommID.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.CommID.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(params.OperationID, "AddBlacklist args ", req.String())
|
||||||
|
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName)
|
||||||
|
client := rpc.NewFriendClient(etcdConn)
|
||||||
|
RpcResp, err := client.AddBlacklist(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.CommID.OperationID, "AddBlacklist failed ", err.Error())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call add blacklist rpc server failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp := api.AddBlacklistResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}}
|
||||||
|
log.NewInfo(req.CommID.OperationID, "AddBlacklist api return ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func ImportFriend(c *gin.Context) {
|
||||||
|
params := api.ImportFriendReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.ImportFriendReq{}
|
||||||
|
utils.CopyStructFields(req, ¶ms)
|
||||||
|
var ok bool
|
||||||
|
ok, req.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, "ImportFriend args ", req.String())
|
||||||
|
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName)
|
||||||
|
client := rpc.NewFriendClient(etcdConn)
|
||||||
|
RpcResp, err := client.ImportFriend(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, "ImportFriend failed ", err.Error(), req.String())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "ImportFriend failed "})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp := api.ImportFriendResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}}
|
||||||
|
if resp.ErrCode == 0 {
|
||||||
|
for _, v := range RpcResp.UserIDResultList {
|
||||||
|
resp.UserIDResultList = append(resp.UserIDResultList, api.UserIDResult{UserID: v.UserID, Result: v.Result})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(resp.UserIDResultList) == 0 {
|
||||||
|
resp.UserIDResultList = []api.UserIDResult{}
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, "ImportFriend api return ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func AddFriend(c *gin.Context) {
|
||||||
|
params := api.AddFriendReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.AddFriendReq{CommID: &rpc.CommID{}}
|
||||||
|
utils.CopyStructFields(req.CommID, ¶ms.ParamsCommFriend)
|
||||||
|
req.ReqMsg = params.ReqMsg
|
||||||
|
var ok bool
|
||||||
|
ok, req.CommID.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.CommID.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.CommID.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.CommID.OperationID, "AddFriend args ", req.String())
|
||||||
|
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName)
|
||||||
|
client := rpc.NewFriendClient(etcdConn)
|
||||||
|
RpcResp, err := client.AddFriend(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.CommID.OperationID, "AddFriend failed ", err.Error(), req.String())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call AddFriend rpc server failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp := api.AddFriendResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}}
|
||||||
|
log.NewInfo(req.CommID.OperationID, "AddFriend api return ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func AddFriendResponse(c *gin.Context) {
|
||||||
|
params := api.AddFriendResponseReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.AddFriendResponseReq{CommID: &rpc.CommID{}}
|
||||||
|
utils.CopyStructFields(req.CommID, ¶ms.ParamsCommFriend)
|
||||||
|
req.HandleMsg = params.HandleMsg
|
||||||
|
req.HandleResult = params.Flag
|
||||||
|
var ok bool
|
||||||
|
ok, req.CommID.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.CommID.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.CommID.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
utils.CopyStructFields(req, ¶ms)
|
||||||
|
log.NewInfo(req.CommID.OperationID, "AddFriendResponse args ", req.String())
|
||||||
|
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName)
|
||||||
|
client := rpc.NewFriendClient(etcdConn)
|
||||||
|
RpcResp, err := client.AddFriendResponse(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.CommID.OperationID, "AddFriendResponse failed ", err.Error(), req.String())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call add_friend_response rpc server failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp := api.AddFriendResponseResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}}
|
||||||
|
log.NewInfo(req.CommID.OperationID, "AddFriendResponse api return ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func DeleteFriend(c *gin.Context) {
|
||||||
|
params := api.DeleteFriendReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.DeleteFriendReq{CommID: &rpc.CommID{}}
|
||||||
|
utils.CopyStructFields(req.CommID, ¶ms.ParamsCommFriend)
|
||||||
|
var ok bool
|
||||||
|
ok, req.CommID.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.CommID.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.CommID.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.CommID.OperationID, "DeleteFriend args ", req.String())
|
||||||
|
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName)
|
||||||
|
client := rpc.NewFriendClient(etcdConn)
|
||||||
|
RpcResp, err := client.DeleteFriend(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.CommID.OperationID, "DeleteFriend failed ", err, req.String())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call delete_friend rpc server failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp := api.DeleteFriendResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}}
|
||||||
|
log.NewInfo(req.CommID.OperationID, "DeleteFriend api return ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetBlacklist(c *gin.Context) {
|
||||||
|
params := api.GetBlackListReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.GetBlacklistReq{CommID: &rpc.CommID{}}
|
||||||
|
utils.CopyStructFields(req.CommID, ¶ms)
|
||||||
|
var ok bool
|
||||||
|
ok, req.CommID.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.CommID.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.CommID.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.CommID.OperationID, "GetBlacklist args ", req.String())
|
||||||
|
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName)
|
||||||
|
client := rpc.NewFriendClient(etcdConn)
|
||||||
|
RpcResp, err := client.GetBlacklist(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.CommID.OperationID, "GetBlacklist failed ", err.Error(), req.String())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call get blacklist rpc server failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp := api.GetBlackListResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}}
|
||||||
|
for _, v := range RpcResp.BlackUserInfoList {
|
||||||
|
black := open_im_sdk.PublicUserInfo{}
|
||||||
|
utils.CopyStructFields(&black, v)
|
||||||
|
resp.BlackUserInfoList = append(resp.BlackUserInfoList, &black)
|
||||||
|
}
|
||||||
|
resp.Data = jsonData.JsonDataList(resp.BlackUserInfoList)
|
||||||
|
log.NewInfo(req.CommID.OperationID, "GetBlacklist api return ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func SetFriendRemark(c *gin.Context) {
|
||||||
|
params := api.SetFriendRemarkReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.SetFriendRemarkReq{CommID: &rpc.CommID{}}
|
||||||
|
utils.CopyStructFields(req.CommID, ¶ms.ParamsCommFriend)
|
||||||
|
req.Remark = params.Remark
|
||||||
|
var ok bool
|
||||||
|
ok, req.CommID.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.CommID.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.CommID.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.CommID.OperationID, "SetFriendComment args ", req.String())
|
||||||
|
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName)
|
||||||
|
client := rpc.NewFriendClient(etcdConn)
|
||||||
|
RpcResp, err := client.SetFriendRemark(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.CommID.OperationID, "SetFriendComment failed ", err.Error(), req.String())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call set friend comment rpc server failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp := api.SetFriendRemarkResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}}
|
||||||
|
|
||||||
|
log.NewInfo(req.CommID.OperationID, "SetFriendComment api return ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func RemoveBlack(c *gin.Context) {
|
||||||
|
params := api.RemoveBlackListReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.RemoveBlacklistReq{CommID: &rpc.CommID{}}
|
||||||
|
utils.CopyStructFields(req.CommID, ¶ms.ParamsCommFriend)
|
||||||
|
var ok bool
|
||||||
|
ok, req.CommID.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.CommID.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.CommID.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
log.NewInfo(req.CommID.OperationID, "RemoveBlacklist args ", req.String())
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName)
|
||||||
|
client := rpc.NewFriendClient(etcdConn)
|
||||||
|
RpcResp, err := client.RemoveBlacklist(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.CommID.OperationID, "RemoveBlacklist failed ", err.Error(), req.String())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call remove blacklist rpc server failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp := api.RemoveBlackListResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}}
|
||||||
|
log.NewInfo(req.CommID.OperationID, "RemoveBlacklist api return ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func IsFriend(c *gin.Context) {
|
||||||
|
params := api.IsFriendReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.IsFriendReq{CommID: &rpc.CommID{}}
|
||||||
|
utils.CopyStructFields(req.CommID, ¶ms.ParamsCommFriend)
|
||||||
|
var ok bool
|
||||||
|
ok, req.CommID.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.CommID.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.CommID.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.CommID.OperationID, "IsFriend args ", req.String())
|
||||||
|
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName)
|
||||||
|
client := rpc.NewFriendClient(etcdConn)
|
||||||
|
RpcResp, err := client.IsFriend(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.CommID.OperationID, "IsFriend failed ", err.Error(), req.String())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call add friend rpc server failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp := api.IsFriendResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}}
|
||||||
|
resp.Response.Friend = RpcResp.Response
|
||||||
|
|
||||||
|
log.NewInfo(req.CommID.OperationID, "IsFriend api return ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
//func GetFriendsInfo(c *gin.Context) {
|
||||||
|
// params := api.GetFriendsInfoReq{}
|
||||||
|
// if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
// log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
// c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
// req := &rpc.GetFriendsInfoReq{}
|
||||||
|
// utils.CopyStructFields(req.CommID, params)
|
||||||
|
// var ok bool
|
||||||
|
// ok, req.CommID.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"))
|
||||||
|
// if !ok {
|
||||||
|
// log.NewError(req.CommID.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
// log.NewInfo(req.CommID.OperationID, "GetFriendsInfo args ", req.String())
|
||||||
|
//
|
||||||
|
// etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName)
|
||||||
|
// client := rpc.NewFriendClient(etcdConn)
|
||||||
|
// RpcResp, err := client.GetFriendsInfo(context.Background(), req)
|
||||||
|
// if err != nil {
|
||||||
|
// log.NewError(req.CommID.OperationID, "GetFriendsInfo failed ", err.Error(), req.String())
|
||||||
|
// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call search friend rpc server failed"})
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// resp := api.GetFriendsInfoResp{CommResp:api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}}
|
||||||
|
// utils.CopyStructFields(&resp, RpcResp)
|
||||||
|
// c.JSON(http.StatusOK, resp)
|
||||||
|
// log.NewInfo(req.CommID.OperationID, "GetFriendsInfo api return ", resp)
|
||||||
|
//}
|
||||||
|
|
||||||
|
func GetFriendList(c *gin.Context) {
|
||||||
|
params := api.GetFriendListReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.GetFriendListReq{CommID: &rpc.CommID{}}
|
||||||
|
utils.CopyStructFields(req.CommID, ¶ms)
|
||||||
|
var ok bool
|
||||||
|
ok, req.CommID.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.CommID.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.CommID.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.CommID.OperationID, "GetFriendList args ", req.String())
|
||||||
|
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName)
|
||||||
|
client := rpc.NewFriendClient(etcdConn)
|
||||||
|
RpcResp, err := client.GetFriendList(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.CommID.OperationID, "GetFriendList failed ", err.Error(), req.String())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call get friend list rpc server failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp := api.GetFriendListResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}, FriendInfoList: RpcResp.FriendInfoList}
|
||||||
|
resp.Data = jsonData.JsonDataList(resp.FriendInfoList)
|
||||||
|
log.NewInfo(req.CommID.OperationID, "GetFriendList api return ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
//c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetFriendApplyList(c *gin.Context) {
|
||||||
|
params := api.GetFriendApplyListReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.GetFriendApplyListReq{CommID: &rpc.CommID{}}
|
||||||
|
utils.CopyStructFields(req.CommID, ¶ms)
|
||||||
|
var ok bool
|
||||||
|
ok, req.CommID.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.CommID.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.CommID.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.CommID.OperationID, "GetFriendApplyList args ", req.String())
|
||||||
|
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName)
|
||||||
|
client := rpc.NewFriendClient(etcdConn)
|
||||||
|
|
||||||
|
RpcResp, err := client.GetFriendApplyList(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.CommID.OperationID, "GetFriendApplyList failed ", err.Error(), req.String())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call get friend apply list rpc server failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp := api.GetFriendApplyListResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}, FriendRequestList: RpcResp.FriendRequestList}
|
||||||
|
resp.Data = jsonData.JsonDataList(resp.FriendRequestList)
|
||||||
|
log.NewInfo(req.CommID.OperationID, "GetFriendApplyList api return ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetSelfFriendApplyList(c *gin.Context) {
|
||||||
|
params := api.GetSelfApplyListReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.GetSelfApplyListReq{CommID: &rpc.CommID{}}
|
||||||
|
utils.CopyStructFields(req.CommID, ¶ms)
|
||||||
|
var ok bool
|
||||||
|
ok, req.CommID.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.CommID.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.CommID.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.CommID.OperationID, "GetSelfApplyList args ", req.String())
|
||||||
|
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName)
|
||||||
|
client := rpc.NewFriendClient(etcdConn)
|
||||||
|
RpcResp, err := client.GetSelfApplyList(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.CommID.OperationID, "GetSelfApplyList failed ", err.Error(), req.String())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call get self apply list rpc server failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp := api.GetSelfApplyListResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}, FriendRequestList: RpcResp.FriendRequestList}
|
||||||
|
resp.Data = jsonData.JsonDataList(resp.FriendRequestList)
|
||||||
|
log.NewInfo(req.CommID.OperationID, "GetSelfApplyList api return ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
@ -0,0 +1,698 @@
|
|||||||
|
package group
|
||||||
|
|
||||||
|
import (
|
||||||
|
api "Open_IM/pkg/base_info"
|
||||||
|
"Open_IM/pkg/common/config"
|
||||||
|
"Open_IM/pkg/common/log"
|
||||||
|
"Open_IM/pkg/common/token_verify"
|
||||||
|
"Open_IM/pkg/grpc-etcdv3/getcdv3"
|
||||||
|
rpc "Open_IM/pkg/proto/group"
|
||||||
|
open_im_sdk "Open_IM/pkg/proto/sdk_ws"
|
||||||
|
"Open_IM/pkg/utils"
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
|
||||||
|
"net/http"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
jsonData "Open_IM/internal/utils"
|
||||||
|
)
|
||||||
|
|
||||||
|
func KickGroupMember(c *gin.Context) {
|
||||||
|
params := api.KickGroupMemberReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
req := &rpc.KickGroupMemberReq{}
|
||||||
|
utils.CopyStructFields(req, ¶ms)
|
||||||
|
var ok bool
|
||||||
|
ok, req.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
log.NewInfo(req.OperationID, "KickGroupMember args ", req.String())
|
||||||
|
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName)
|
||||||
|
client := rpc.NewGroupClient(etcdConn)
|
||||||
|
RpcResp, err := client.KickGroupMember(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, "GetGroupMemberList failed ", err.Error(), req.String())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var memberListResp api.KickGroupMemberResp
|
||||||
|
memberListResp.ErrMsg = RpcResp.ErrMsg
|
||||||
|
memberListResp.ErrCode = RpcResp.ErrCode
|
||||||
|
for _, v := range RpcResp.Id2ResultList {
|
||||||
|
memberListResp.UserIDResultList = append(memberListResp.UserIDResultList, &api.UserIDResult{UserID: v.UserID, Result: v.Result})
|
||||||
|
}
|
||||||
|
if len(memberListResp.UserIDResultList) == 0 {
|
||||||
|
memberListResp.UserIDResultList = []*api.UserIDResult{}
|
||||||
|
}
|
||||||
|
|
||||||
|
log.NewInfo(req.OperationID, "KickGroupMember api return ", memberListResp)
|
||||||
|
c.JSON(http.StatusOK, memberListResp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetGroupMembersInfo(c *gin.Context) {
|
||||||
|
params := api.GetGroupMembersInfoReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.GetGroupMembersInfoReq{}
|
||||||
|
utils.CopyStructFields(req, params)
|
||||||
|
var ok bool
|
||||||
|
ok, req.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
//c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
api.SetErrCodeMsg(c, http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, "GetGroupMembersInfo args ", req.String())
|
||||||
|
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName)
|
||||||
|
client := rpc.NewGroupClient(etcdConn)
|
||||||
|
|
||||||
|
RpcResp, err := client.GetGroupMembersInfo(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, "GetGroupMemberList failed ", err.Error(), req.String())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
memberListResp := api.GetGroupMembersInfoResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}, MemberList: RpcResp.MemberList}
|
||||||
|
memberListResp.Data = jsonData.JsonDataList(RpcResp.MemberList)
|
||||||
|
log.NewInfo(req.OperationID, "GetGroupMembersInfo api return ", memberListResp)
|
||||||
|
c.JSON(http.StatusOK, memberListResp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetGroupMemberList(c *gin.Context) {
|
||||||
|
params := api.GetGroupMemberListReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.GetGroupMemberListReq{}
|
||||||
|
utils.CopyStructFields(req, params)
|
||||||
|
var ok bool
|
||||||
|
ok, req.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, "GetGroupMemberList args ", req.String())
|
||||||
|
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName)
|
||||||
|
client := rpc.NewGroupClient(etcdConn)
|
||||||
|
|
||||||
|
RpcResp, err := client.GetGroupMemberList(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, "GetGroupMemberList failed, ", err.Error(), req.String())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
memberListResp := api.GetGroupMemberListResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}, MemberList: RpcResp.MemberList, NextSeq: RpcResp.NextSeq}
|
||||||
|
memberListResp.Data = jsonData.JsonDataList(memberListResp.MemberList)
|
||||||
|
|
||||||
|
log.NewInfo(req.OperationID, "GetGroupMemberList api return ", memberListResp)
|
||||||
|
c.JSON(http.StatusOK, memberListResp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetGroupAllMemberList(c *gin.Context) {
|
||||||
|
params := api.GetGroupAllMemberReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.GetGroupAllMemberReq{}
|
||||||
|
utils.CopyStructFields(req, ¶ms)
|
||||||
|
var ok bool
|
||||||
|
ok, req.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, "GetGroupAllMember args ", req.String())
|
||||||
|
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName)
|
||||||
|
client := rpc.NewGroupClient(etcdConn)
|
||||||
|
RpcResp, err := client.GetGroupAllMember(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, "GetGroupAllMember failed ", err.Error(), req.String())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
memberListResp := api.GetGroupAllMemberResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}, MemberList: RpcResp.MemberList}
|
||||||
|
memberListResp.Data = jsonData.JsonDataList(memberListResp.MemberList)
|
||||||
|
log.NewInfo(req.OperationID, "GetGroupAllMember api return ", memberListResp)
|
||||||
|
c.JSON(http.StatusOK, memberListResp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetJoinedGroupList(c *gin.Context) {
|
||||||
|
params := api.GetJoinedGroupListReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.GetJoinedGroupListReq{}
|
||||||
|
utils.CopyStructFields(req, params)
|
||||||
|
var ok bool
|
||||||
|
ok, req.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, "GetJoinedGroupList args ", req.String())
|
||||||
|
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName)
|
||||||
|
client := rpc.NewGroupClient(etcdConn)
|
||||||
|
RpcResp, err := client.GetJoinedGroupList(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, "GetJoinedGroupList failed ", err.Error(), req.String())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
GroupListResp := api.GetJoinedGroupListResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}, GroupInfoList: RpcResp.GroupList}
|
||||||
|
GroupListResp.Data = jsonData.JsonDataList(GroupListResp.GroupInfoList)
|
||||||
|
log.NewInfo(req.OperationID, "GetJoinedGroupList api return ", GroupListResp)
|
||||||
|
c.JSON(http.StatusOK, GroupListResp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func InviteUserToGroup(c *gin.Context) {
|
||||||
|
params := api.InviteUserToGroupReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.InviteUserToGroupReq{}
|
||||||
|
utils.CopyStructFields(req, ¶ms)
|
||||||
|
var ok bool
|
||||||
|
ok, req.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, "InviteUserToGroup args ", req.String())
|
||||||
|
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName)
|
||||||
|
client := rpc.NewGroupClient(etcdConn)
|
||||||
|
RpcResp, err := client.InviteUserToGroup(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, "InviteUserToGroup failed ", err.Error(), req.String())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp := api.InviteUserToGroupResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}}
|
||||||
|
for _, v := range RpcResp.Id2ResultList {
|
||||||
|
resp.UserIDResultList = append(resp.UserIDResultList, &api.UserIDResult{UserID: v.UserID, Result: v.Result})
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(resp.UserIDResultList) == 0 {
|
||||||
|
resp.UserIDResultList = *new([]*api.UserIDResult)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.NewInfo(req.OperationID, "InviteUserToGroup api return ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func CreateGroup(c *gin.Context) {
|
||||||
|
params := api.CreateGroupReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
//
|
||||||
|
req := &rpc.CreateGroupReq{GroupInfo: &open_im_sdk.GroupInfo{}}
|
||||||
|
utils.CopyStructFields(req.GroupInfo, ¶ms)
|
||||||
|
|
||||||
|
for _, v := range params.MemberList {
|
||||||
|
req.InitMemberList = append(req.InitMemberList, &rpc.GroupAddMemberInfo{UserID: v.UserID, RoleLevel: v.RoleLevel})
|
||||||
|
}
|
||||||
|
var ok bool
|
||||||
|
ok, req.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req.OwnerUserID = params.OwnerUserID
|
||||||
|
req.OperationID = params.OperationID
|
||||||
|
log.NewInfo(req.OperationID, "CreateGroup args ", req.String())
|
||||||
|
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName)
|
||||||
|
client := rpc.NewGroupClient(etcdConn)
|
||||||
|
RpcResp, err := client.CreateGroup(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, "CreateGroup failed ", err.Error(), req.String())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call rpc server failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp := api.CreateGroupResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}}
|
||||||
|
if RpcResp.ErrCode == 0 {
|
||||||
|
utils.CopyStructFields(&resp.GroupInfo, RpcResp.GroupInfo)
|
||||||
|
resp.Data = jsonData.JsonDataOne(&resp.GroupInfo)
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, "CreateGroup api return ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 群主或管理员收到的
|
||||||
|
func GetRecvGroupApplicationList(c *gin.Context) {
|
||||||
|
params := api.GetGroupApplicationListReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.GetGroupApplicationListReq{}
|
||||||
|
utils.CopyStructFields(req, params)
|
||||||
|
//var ok bool
|
||||||
|
//ok, req.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"))
|
||||||
|
//if !ok {
|
||||||
|
// log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
// return
|
||||||
|
//}
|
||||||
|
log.NewInfo(req.OperationID, "GetGroupApplicationList args ", req.String())
|
||||||
|
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName)
|
||||||
|
client := rpc.NewGroupClient(etcdConn)
|
||||||
|
reply, err := client.GetGroupApplicationList(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, "GetGroupApplicationList failed ", err.Error(), req.String())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp := api.GetGroupApplicationListResp{CommResp: api.CommResp{ErrCode: reply.ErrCode, ErrMsg: reply.ErrMsg}, GroupRequestList: reply.GroupRequestList}
|
||||||
|
resp.Data = jsonData.JsonDataList(resp.GroupRequestList)
|
||||||
|
log.NewInfo(req.OperationID, "GetGroupApplicationList api return ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetUserReqGroupApplicationList(c *gin.Context) {
|
||||||
|
var params api.GetUserReqGroupApplicationListReq
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", utils.GetSelfFuncName(), err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.GetUserReqApplicationListReq{}
|
||||||
|
utils.CopyStructFields(req, params)
|
||||||
|
//ok, req.OpUserID := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"))
|
||||||
|
//if !ok {
|
||||||
|
// log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
// return
|
||||||
|
//}
|
||||||
|
log.NewInfo(req.OperationID, "GetGroupsInfo args ", req.String())
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName)
|
||||||
|
client := rpc.NewGroupClient(etcdConn)
|
||||||
|
RpcResp, err := client.GetUserReqApplicationList(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, "GetGroupsInfo failed ", err.Error(), req.String())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call rpc server failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, RpcResp)
|
||||||
|
resp := api.GetGroupApplicationListResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}, GroupRequestList: RpcResp.GroupRequestList}
|
||||||
|
log.NewInfo(req.OperationID, "GetGroupApplicationList api return ", resp)
|
||||||
|
resp.Data = jsonData.JsonDataList(resp.GroupRequestList)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetGroupsInfo(c *gin.Context) {
|
||||||
|
params := api.GetGroupInfoReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.GetGroupsInfoReq{}
|
||||||
|
utils.CopyStructFields(req, ¶ms)
|
||||||
|
var ok bool
|
||||||
|
ok, req.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, "GetGroupsInfo args ", req.String())
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName)
|
||||||
|
client := rpc.NewGroupClient(etcdConn)
|
||||||
|
RpcResp, err := client.GetGroupsInfo(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, "GetGroupsInfo failed ", err.Error(), req.String())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call rpc server failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp := api.GetGroupInfoResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}, GroupInfoList: RpcResp.GroupInfoList}
|
||||||
|
resp.Data = jsonData.JsonDataList(resp.GroupInfoList)
|
||||||
|
log.NewInfo(req.OperationID, "GetGroupsInfo api return ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
//process application
|
||||||
|
func ApplicationGroupResponse(c *gin.Context) {
|
||||||
|
params := api.ApplicationGroupResponseReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.GroupApplicationResponseReq{}
|
||||||
|
utils.CopyStructFields(req, ¶ms)
|
||||||
|
var ok bool
|
||||||
|
ok, req.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, "ApplicationGroupResponse args ", req.String())
|
||||||
|
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName)
|
||||||
|
client := rpc.NewGroupClient(etcdConn)
|
||||||
|
reply, err := client.GroupApplicationResponse(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, "GroupApplicationResponse failed ", req.String())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp := api.ApplicationGroupResponseResp{CommResp: api.CommResp{ErrCode: reply.CommonResp.ErrCode, ErrMsg: reply.CommonResp.ErrMsg}}
|
||||||
|
log.NewInfo(req.OperationID, "ApplicationGroupResponse api return ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func JoinGroup(c *gin.Context) {
|
||||||
|
params := api.JoinGroupReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.JoinGroupReq{}
|
||||||
|
utils.CopyStructFields(req, params)
|
||||||
|
var ok bool
|
||||||
|
ok, req.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, "JoinGroup args ", req.String())
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName)
|
||||||
|
client := rpc.NewGroupClient(etcdConn)
|
||||||
|
|
||||||
|
RpcResp, err := client.JoinGroup(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, "JoinGroup failed ", err.Error(), req.String())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call rpc server failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp := api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}
|
||||||
|
log.NewInfo(req.OperationID, "JoinGroup api return", RpcResp.String())
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func QuitGroup(c *gin.Context) {
|
||||||
|
params := api.QuitGroupReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.QuitGroupReq{}
|
||||||
|
utils.CopyStructFields(req, ¶ms)
|
||||||
|
var ok bool
|
||||||
|
ok, req.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, "QuitGroup args ", req.String())
|
||||||
|
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName)
|
||||||
|
client := rpc.NewGroupClient(etcdConn)
|
||||||
|
RpcResp, err := client.QuitGroup(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, "call quit group rpc server failed,err=%s", err.Error())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call rpc server failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp := api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}
|
||||||
|
log.NewInfo(req.OperationID, "QuitGroup api return", RpcResp.String())
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func SetGroupInfo(c *gin.Context) {
|
||||||
|
params := api.SetGroupInfoReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.SetGroupInfoReq{GroupInfo: &open_im_sdk.GroupInfo{}}
|
||||||
|
utils.CopyStructFields(req.GroupInfo, ¶ms)
|
||||||
|
req.OperationID = params.OperationID
|
||||||
|
var ok bool
|
||||||
|
ok, req.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, "SetGroupInfo args ", req.String())
|
||||||
|
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName)
|
||||||
|
client := rpc.NewGroupClient(etcdConn)
|
||||||
|
RpcResp, err := client.SetGroupInfo(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, "SetGroupInfo failed ", err.Error(), req.String())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call rpc server failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp := api.SetGroupInfoResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}}
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
log.NewInfo(req.OperationID, "SetGroupInfo api return ", resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TransferGroupOwner(c *gin.Context) {
|
||||||
|
params := api.TransferGroupOwnerReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.TransferGroupOwnerReq{}
|
||||||
|
utils.CopyStructFields(req, ¶ms)
|
||||||
|
var ok bool
|
||||||
|
ok, req.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, "TransferGroupOwner args ", req.String())
|
||||||
|
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName)
|
||||||
|
client := rpc.NewGroupClient(etcdConn)
|
||||||
|
reply, err := client.TransferGroupOwner(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, "TransferGroupOwner failed ", req.String())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp := api.TransferGroupOwnerResp{CommResp: api.CommResp{ErrCode: reply.CommonResp.ErrCode, ErrMsg: reply.CommonResp.ErrMsg}}
|
||||||
|
log.NewInfo(req.OperationID, "TransferGroupOwner api return ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func DismissGroup(c *gin.Context) {
|
||||||
|
params := api.DismissGroupReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.DismissGroupReq{}
|
||||||
|
utils.CopyStructFields(req, ¶ms)
|
||||||
|
var ok bool
|
||||||
|
ok, req.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " args ", req.String())
|
||||||
|
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName)
|
||||||
|
client := rpc.NewGroupClient(etcdConn)
|
||||||
|
reply, err := client.DismissGroup(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), " failed ", req.String())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp := api.DismissGroupResp{CommResp: api.CommResp{ErrCode: reply.CommonResp.ErrCode, ErrMsg: reply.CommonResp.ErrMsg}}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api return ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func MuteGroupMember(c *gin.Context) {
|
||||||
|
params := api.MuteGroupMemberReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.MuteGroupMemberReq{}
|
||||||
|
utils.CopyStructFields(req, ¶ms)
|
||||||
|
var ok bool
|
||||||
|
ok, req.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api args ", req.String())
|
||||||
|
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName)
|
||||||
|
client := rpc.NewGroupClient(etcdConn)
|
||||||
|
reply, err := client.MuteGroupMember(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), " failed ", req.String())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp := api.MuteGroupMemberResp{CommResp: api.CommResp{ErrCode: reply.CommonResp.ErrCode, ErrMsg: reply.CommonResp.ErrMsg}}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api return ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func CancelMuteGroupMember(c *gin.Context) {
|
||||||
|
params := api.CancelMuteGroupMemberReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.CancelMuteGroupMemberReq{}
|
||||||
|
utils.CopyStructFields(req, ¶ms)
|
||||||
|
var ok bool
|
||||||
|
ok, req.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api args ", req.String())
|
||||||
|
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName)
|
||||||
|
client := rpc.NewGroupClient(etcdConn)
|
||||||
|
reply, err := client.CancelMuteGroupMember(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), " failed ", req.String())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp := api.CancelMuteGroupMemberResp{CommResp: api.CommResp{ErrCode: reply.CommonResp.ErrCode, ErrMsg: reply.CommonResp.ErrMsg}}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api return ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func MuteGroup(c *gin.Context) {
|
||||||
|
params := api.MuteGroupReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.MuteGroupReq{}
|
||||||
|
utils.CopyStructFields(req, ¶ms)
|
||||||
|
var ok bool
|
||||||
|
ok, req.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api args ", req.String())
|
||||||
|
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName)
|
||||||
|
client := rpc.NewGroupClient(etcdConn)
|
||||||
|
reply, err := client.MuteGroup(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), " failed ", req.String())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp := api.MuteGroupResp{CommResp: api.CommResp{ErrCode: reply.CommonResp.ErrCode, ErrMsg: reply.CommonResp.ErrMsg}}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api return ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func CancelMuteGroup(c *gin.Context) {
|
||||||
|
params := api.CancelMuteGroupReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.CancelMuteGroupReq{}
|
||||||
|
utils.CopyStructFields(req, ¶ms)
|
||||||
|
var ok bool
|
||||||
|
ok, req.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api args ", req.String())
|
||||||
|
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName)
|
||||||
|
client := rpc.NewGroupClient(etcdConn)
|
||||||
|
reply, err := client.CancelMuteGroup(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), " failed ", req.String())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp := api.CancelMuteGroupResp{CommResp: api.CommResp{ErrCode: reply.CommonResp.ErrCode, ErrMsg: reply.CommonResp.ErrMsg}}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api return ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
@ -0,0 +1,296 @@
|
|||||||
|
/*
|
||||||
|
** description("").
|
||||||
|
** copyright('open-im,www.open-im.io').
|
||||||
|
** author("fg,Gordon@tuoyun.net").
|
||||||
|
** time(2021/9/15 15:23).
|
||||||
|
*/
|
||||||
|
package manage
|
||||||
|
|
||||||
|
import (
|
||||||
|
api "Open_IM/pkg/base_info"
|
||||||
|
"Open_IM/pkg/common/config"
|
||||||
|
"Open_IM/pkg/common/constant"
|
||||||
|
"Open_IM/pkg/common/log"
|
||||||
|
"Open_IM/pkg/common/token_verify"
|
||||||
|
"Open_IM/pkg/grpc-etcdv3/getcdv3"
|
||||||
|
pbChat "Open_IM/pkg/proto/chat"
|
||||||
|
"Open_IM/pkg/proto/sdk_ws"
|
||||||
|
open_im_sdk "Open_IM/pkg/proto/sdk_ws"
|
||||||
|
"Open_IM/pkg/utils"
|
||||||
|
"context"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/go-playground/validator/v10"
|
||||||
|
"github.com/golang/protobuf/proto"
|
||||||
|
"github.com/mitchellh/mapstructure"
|
||||||
|
"net/http"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
var validate *validator.Validate
|
||||||
|
|
||||||
|
func newUserSendMsgReq(params *ManagementSendMsgReq) *pbChat.SendMsgReq {
|
||||||
|
var newContent string
|
||||||
|
var err error
|
||||||
|
switch params.ContentType {
|
||||||
|
case constant.Text:
|
||||||
|
newContent = params.Content["text"].(string)
|
||||||
|
case constant.Picture:
|
||||||
|
fallthrough
|
||||||
|
case constant.Custom:
|
||||||
|
fallthrough
|
||||||
|
case constant.Voice:
|
||||||
|
fallthrough
|
||||||
|
case constant.File:
|
||||||
|
newContent = utils.StructToJsonString(params.Content)
|
||||||
|
case constant.Revoke:
|
||||||
|
newContent = params.Content["revokeMsgClientID"].(string)
|
||||||
|
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
var options map[string]bool
|
||||||
|
if params.IsOnlineOnly {
|
||||||
|
options = make(map[string]bool, 5)
|
||||||
|
utils.SetSwitchFromOptions(options, constant.IsOfflinePush, false)
|
||||||
|
utils.SetSwitchFromOptions(options, constant.IsHistory, false)
|
||||||
|
utils.SetSwitchFromOptions(options, constant.IsPersistent, false)
|
||||||
|
utils.SetSwitchFromOptions(options, constant.IsSenderSync, false)
|
||||||
|
}
|
||||||
|
pbData := pbChat.SendMsgReq{
|
||||||
|
OperationID: params.OperationID,
|
||||||
|
MsgData: &open_im_sdk.MsgData{
|
||||||
|
SendID: params.SendID,
|
||||||
|
RecvID: params.RecvID,
|
||||||
|
GroupID: params.GroupID,
|
||||||
|
ClientMsgID: utils.GetMsgID(params.SendID),
|
||||||
|
SenderPlatformID: params.SenderPlatformID,
|
||||||
|
SenderNickname: params.SenderNickname,
|
||||||
|
SenderFaceURL: params.SenderFaceURL,
|
||||||
|
SessionType: params.SessionType,
|
||||||
|
MsgFrom: constant.SysMsgType,
|
||||||
|
ContentType: params.ContentType,
|
||||||
|
Content: []byte(newContent),
|
||||||
|
// ForceList: params.ForceList,
|
||||||
|
CreateTime: utils.GetCurrentTimestampByMill(),
|
||||||
|
Options: options,
|
||||||
|
OfflinePushInfo: params.OfflinePushInfo,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
if params.ContentType == constant.OANotification {
|
||||||
|
var tips open_im_sdk.TipsComm
|
||||||
|
tips.JsonDetail = utils.StructToJsonString(params.Content)
|
||||||
|
pbData.MsgData.Content, err = proto.Marshal(&tips)
|
||||||
|
if err != nil {
|
||||||
|
log.Error(params.OperationID, "Marshal failed ", err.Error(), tips.String())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return &pbData
|
||||||
|
}
|
||||||
|
func init() {
|
||||||
|
validate = validator.New()
|
||||||
|
}
|
||||||
|
|
||||||
|
func ManagementSendMsg(c *gin.Context) {
|
||||||
|
var data interface{}
|
||||||
|
params := ManagementSendMsgReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
log.ErrorByKv("json unmarshal err", c.PostForm("operationID"), "err", err.Error(), "content", c.PostForm("content"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
switch params.ContentType {
|
||||||
|
case constant.Text:
|
||||||
|
data = TextElem{}
|
||||||
|
case constant.Picture:
|
||||||
|
data = PictureElem{}
|
||||||
|
case constant.Voice:
|
||||||
|
data = SoundElem{}
|
||||||
|
case constant.Video:
|
||||||
|
data = VideoElem{}
|
||||||
|
case constant.File:
|
||||||
|
data = FileElem{}
|
||||||
|
//case constant.AtText:
|
||||||
|
// data = AtElem{}
|
||||||
|
//case constant.Merger:
|
||||||
|
// data =
|
||||||
|
//case constant.Card:
|
||||||
|
//case constant.Location:
|
||||||
|
case constant.Custom:
|
||||||
|
data = CustomElem{}
|
||||||
|
case constant.Revoke:
|
||||||
|
data = RevokeElem{}
|
||||||
|
case constant.OANotification:
|
||||||
|
data = OANotificationElem{}
|
||||||
|
params.SessionType = constant.NotificationChatType
|
||||||
|
//case constant.HasReadReceipt:
|
||||||
|
//case constant.Typing:
|
||||||
|
//case constant.Quote:
|
||||||
|
default:
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 404, "errMsg": "contentType err"})
|
||||||
|
log.ErrorByKv("contentType err", c.PostForm("operationID"), "content", c.PostForm("content"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := mapstructure.WeakDecode(params.Content, &data); err != nil {
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 401, "errMsg": err.Error()})
|
||||||
|
log.ErrorByKv("content to Data struct err", "", "err", err.Error())
|
||||||
|
return
|
||||||
|
} else if err := validate.Struct(data); err != nil {
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 403, "errMsg": err.Error()})
|
||||||
|
log.ErrorByKv("data args validate err", "", "err", err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo("", data, params)
|
||||||
|
token := c.Request.Header.Get("token")
|
||||||
|
claims, err := token_verify.ParseToken(token, params.OperationID)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(params.OperationID, "parse token failed", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "parse token failed", "sendTime": 0, "MsgID": ""})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if !utils.IsContain(claims.UID, config.Config.Manager.AppManagerUid) {
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "not authorized", "sendTime": 0, "MsgID": ""})
|
||||||
|
return
|
||||||
|
|
||||||
|
}
|
||||||
|
switch params.SessionType {
|
||||||
|
case constant.SingleChatType:
|
||||||
|
if len(params.RecvID) == 0 {
|
||||||
|
log.NewError(params.OperationID, "recvID is a null string")
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 405, "errMsg": "recvID is a null string", "sendTime": 0, "MsgID": ""})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
case constant.GroupChatType:
|
||||||
|
if len(params.GroupID) == 0 {
|
||||||
|
log.NewError(params.OperationID, "groupID is a null string")
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 405, "errMsg": "groupID is a null string", "sendTime": 0, "MsgID": ""})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
log.InfoByKv("Ws call success to ManagementSendMsgReq", params.OperationID, "Parameters", params)
|
||||||
|
|
||||||
|
pbData := newUserSendMsgReq(¶ms)
|
||||||
|
log.Info("", "", "api ManagementSendMsg call start..., [data: %s]", pbData.String())
|
||||||
|
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName)
|
||||||
|
client := pbChat.NewChatClient(etcdConn)
|
||||||
|
|
||||||
|
log.Info("", "", "api ManagementSendMsg call, api call rpc...")
|
||||||
|
|
||||||
|
RpcResp, err := client.SendMsg(context.Background(), pbData)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(params.OperationID, "call delete UserSendMsg rpc server failed", err.Error())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call UserSendMsg rpc server failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.Info("", "", "api ManagementSendMsg call end..., [data: %s] [reply: %s]", pbData.String(), RpcResp.String())
|
||||||
|
resp := api.ManagementSendMsgResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}, ResultList: server_api_params.UserSendMsgResp{ServerMsgID: RpcResp.ServerMsgID, ClientMsgID: RpcResp.ClientMsgID, SendTime: RpcResp.SendTime}}
|
||||||
|
log.Info(params.OperationID, "ManagementSendMsg return", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
//type MergeElem struct {
|
||||||
|
// Title string `json:"title"`
|
||||||
|
// AbstractList []string `json:"abstractList"`
|
||||||
|
// MultiMessage []*MsgStruct `json:"multiMessage"`
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//type QuoteElem struct {
|
||||||
|
// Text string `json:"text"`
|
||||||
|
// QuoteMessage *MsgStruct `json:"quoteMessage"`
|
||||||
|
//}
|
||||||
|
type ManagementSendMsgReq struct {
|
||||||
|
OperationID string `json:"operationID" binding:"required"`
|
||||||
|
SendID string `json:"sendID" binding:"required"`
|
||||||
|
RecvID string `json:"recvID" `
|
||||||
|
GroupID string `json:"groupID" `
|
||||||
|
SenderNickname string `json:"senderNickname" `
|
||||||
|
SenderFaceURL string `json:"senderFaceURL" `
|
||||||
|
SenderPlatformID int32 `json:"senderPlatformID"`
|
||||||
|
ForceList []string `json:"forceList" `
|
||||||
|
Content map[string]interface{} `json:"content" binding:"required"`
|
||||||
|
ContentType int32 `json:"contentType" binding:"required"`
|
||||||
|
SessionType int32 `json:"sessionType" binding:"required"`
|
||||||
|
IsOnlineOnly bool `json:"isOnlineOnly"`
|
||||||
|
OfflinePushInfo *open_im_sdk.OfflinePushInfo `json:"offlinePushInfo"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type PictureBaseInfo struct {
|
||||||
|
UUID string `mapstructure:"uuid"`
|
||||||
|
Type string `mapstructure:"type" `
|
||||||
|
Size int64 `mapstructure:"size" `
|
||||||
|
Width int32 `mapstructure:"width" `
|
||||||
|
Height int32 `mapstructure:"height"`
|
||||||
|
Url string `mapstructure:"url" `
|
||||||
|
}
|
||||||
|
|
||||||
|
type PictureElem struct {
|
||||||
|
SourcePath string `mapstructure:"sourcePath"`
|
||||||
|
SourcePicture PictureBaseInfo `mapstructure:"sourcePicture"`
|
||||||
|
BigPicture PictureBaseInfo `mapstructure:"bigPicture" `
|
||||||
|
SnapshotPicture PictureBaseInfo `mapstructure:"snapshotPicture"`
|
||||||
|
}
|
||||||
|
type SoundElem struct {
|
||||||
|
UUID string `mapstructure:"uuid"`
|
||||||
|
SoundPath string `mapstructure:"soundPath"`
|
||||||
|
SourceURL string `mapstructure:"sourceUrl"`
|
||||||
|
DataSize int64 `mapstructure:"dataSize"`
|
||||||
|
Duration int64 `mapstructure:"duration"`
|
||||||
|
}
|
||||||
|
type VideoElem struct {
|
||||||
|
VideoPath string `mapstructure:"videoPath"`
|
||||||
|
VideoUUID string `mapstructure:"videoUUID"`
|
||||||
|
VideoURL string `mapstructure:"videoUrl"`
|
||||||
|
VideoType string `mapstructure:"videoType"`
|
||||||
|
VideoSize int64 `mapstructure:"videoSize"`
|
||||||
|
Duration int64 `mapstructure:"duration"`
|
||||||
|
SnapshotPath string `mapstructure:"snapshotPath"`
|
||||||
|
SnapshotUUID string `mapstructure:"snapshotUUID"`
|
||||||
|
SnapshotSize int64 `mapstructure:"snapshotSize"`
|
||||||
|
SnapshotURL string `mapstructure:"snapshotUrl"`
|
||||||
|
SnapshotWidth int32 `mapstructure:"snapshotWidth"`
|
||||||
|
SnapshotHeight int32 `mapstructure:"snapshotHeight"`
|
||||||
|
}
|
||||||
|
type FileElem struct {
|
||||||
|
FilePath string `mapstructure:"filePath"`
|
||||||
|
UUID string `mapstructure:"uuid"`
|
||||||
|
SourceURL string `mapstructure:"sourceUrl"`
|
||||||
|
FileName string `mapstructure:"fileName"`
|
||||||
|
FileSize int64 `mapstructure:"fileSize"`
|
||||||
|
}
|
||||||
|
type AtElem struct {
|
||||||
|
Text string `mapstructure:"text"`
|
||||||
|
AtUserList []string `mapstructure:"atUserList"`
|
||||||
|
IsAtSelf bool `mapstructure:"isAtSelf"`
|
||||||
|
}
|
||||||
|
type LocationElem struct {
|
||||||
|
Description string `mapstructure:"description"`
|
||||||
|
Longitude float64 `mapstructure:"longitude"`
|
||||||
|
Latitude float64 `mapstructure:"latitude"`
|
||||||
|
}
|
||||||
|
type CustomElem struct {
|
||||||
|
Data string `mapstructure:"data" validate:"required"`
|
||||||
|
Description string `mapstructure:"description"`
|
||||||
|
Extension string `mapstructure:"extension"`
|
||||||
|
}
|
||||||
|
type TextElem struct {
|
||||||
|
Text string `mapstructure:"text" validate:"required"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type RevokeElem struct {
|
||||||
|
RevokeMsgClientID string `mapstructure:"revokeMsgClientID" validate:"required"`
|
||||||
|
}
|
||||||
|
type OANotificationElem struct {
|
||||||
|
NotificationName string `mapstructure:"notificationName" validate:"required"`
|
||||||
|
NotificationFaceURL string `mapstructure:"notificationFaceURL" validate:"required"`
|
||||||
|
NotificationType int32 `mapstructure:"notificationType" validate:"required"`
|
||||||
|
Text string `mapstructure:"text" validate:"required"`
|
||||||
|
Url string `mapstructure:"url"`
|
||||||
|
MixType int32 `mapstructure:"mixType"`
|
||||||
|
PictureElem PictureElem `mapstructure:"pictureElem"`
|
||||||
|
SoundElem SoundElem `mapstructure:"soundElem"`
|
||||||
|
VideoElem VideoElem `mapstructure:"videoElem"`
|
||||||
|
FileElem FileElem `mapstructure:"fileElem"`
|
||||||
|
Ex string `mapstructure:"ex"`
|
||||||
|
}
|
@ -0,0 +1,180 @@
|
|||||||
|
/*
|
||||||
|
** description("").
|
||||||
|
** copyright('open-im,www.open-im.io').
|
||||||
|
** author("fg,Gordon@tuoyun.net").
|
||||||
|
** time(2021/9/15 10:28).
|
||||||
|
*/
|
||||||
|
package manage
|
||||||
|
|
||||||
|
import (
|
||||||
|
api "Open_IM/pkg/base_info"
|
||||||
|
"Open_IM/pkg/common/config"
|
||||||
|
"Open_IM/pkg/common/constant"
|
||||||
|
"Open_IM/pkg/common/log"
|
||||||
|
"Open_IM/pkg/common/token_verify"
|
||||||
|
"Open_IM/pkg/grpc-etcdv3/getcdv3"
|
||||||
|
pbRelay "Open_IM/pkg/proto/relay"
|
||||||
|
rpc "Open_IM/pkg/proto/user"
|
||||||
|
"Open_IM/pkg/utils"
|
||||||
|
"context"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"net/http"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func DeleteUser(c *gin.Context) {
|
||||||
|
params := api.DeleteUsersReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.DeleteUsersReq{}
|
||||||
|
utils.CopyStructFields(req, ¶ms)
|
||||||
|
var ok bool
|
||||||
|
ok, req.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(params.OperationID, "DeleteUser args ", req.String())
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName)
|
||||||
|
client := rpc.NewUserClient(etcdConn)
|
||||||
|
|
||||||
|
RpcResp, err := client.DeleteUsers(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, "call delete users rpc server failed", err.Error())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call delete users rpc server failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp := api.DeleteUsersResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}, FailedUserIDList: RpcResp.FailedUserIDList}
|
||||||
|
if len(RpcResp.FailedUserIDList) == 0 {
|
||||||
|
resp.FailedUserIDList = []string{}
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, "DeleteUser api return", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
func GetAllUsersUid(c *gin.Context) {
|
||||||
|
params := api.GetAllUsersUidReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.GetAllUserIDReq{}
|
||||||
|
utils.CopyStructFields(req, ¶ms)
|
||||||
|
var ok bool
|
||||||
|
ok, req.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(params.OperationID, "GetAllUsersUid args ", req.String())
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName)
|
||||||
|
client := rpc.NewUserClient(etcdConn)
|
||||||
|
RpcResp, err := client.GetAllUserID(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, "call GetAllUsersUid users rpc server failed", err.Error())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call GetAllUsersUid users rpc server failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp := api.GetAllUsersUidResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}, UserIDList: RpcResp.UserIDList}
|
||||||
|
if len(RpcResp.UserIDList) == 0 {
|
||||||
|
resp.UserIDList = []string{}
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, "GetAllUsersUid api return", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
|
||||||
|
}
|
||||||
|
func AccountCheck(c *gin.Context) {
|
||||||
|
params := api.AccountCheckReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.AccountCheckReq{}
|
||||||
|
utils.CopyStructFields(req, ¶ms)
|
||||||
|
var ok bool
|
||||||
|
ok, req.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(params.OperationID, "AccountCheck args ", req.String())
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName)
|
||||||
|
client := rpc.NewUserClient(etcdConn)
|
||||||
|
|
||||||
|
RpcResp, err := client.AccountCheck(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, "call AccountCheck users rpc server failed", err.Error())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call AccountCheck users rpc server failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp := api.AccountCheckResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}, ResultList: RpcResp.ResultList}
|
||||||
|
if len(RpcResp.ResultList) == 0 {
|
||||||
|
resp.ResultList = []*rpc.AccountCheckResp_SingleUserStatus{}
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, "AccountCheck api return", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
func GetUsersOnlineStatus(c *gin.Context) {
|
||||||
|
params := api.GetUsersOnlineStatusReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &pbRelay.GetUsersOnlineStatusReq{}
|
||||||
|
utils.CopyStructFields(req, ¶ms)
|
||||||
|
var ok bool
|
||||||
|
ok, req.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(params.OperationID, "GetUsersOnlineStatus args ", req.String())
|
||||||
|
var wsResult []*pbRelay.GetUsersOnlineStatusResp_SuccessResult
|
||||||
|
var respResult []*pbRelay.GetUsersOnlineStatusResp_SuccessResult
|
||||||
|
flag := false
|
||||||
|
grpcCons := getcdv3.GetConn4Unique(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOnlineMessageRelayName)
|
||||||
|
for _, v := range grpcCons {
|
||||||
|
client := pbRelay.NewOnlineMessageRelayServiceClient(v)
|
||||||
|
reply, err := client.GetUsersOnlineStatus(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(params.OperationID, "GetUsersOnlineStatus rpc err", req.String(), err.Error())
|
||||||
|
continue
|
||||||
|
} else {
|
||||||
|
if reply.ErrCode == 0 {
|
||||||
|
wsResult = append(wsResult, reply.SuccessResult...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
log.NewInfo(params.OperationID, "call GetUsersOnlineStatus rpc server is success", wsResult)
|
||||||
|
//Online data merge of each node
|
||||||
|
for _, v1 := range params.UserIDList {
|
||||||
|
flag = false
|
||||||
|
temp := new(pbRelay.GetUsersOnlineStatusResp_SuccessResult)
|
||||||
|
for _, v2 := range wsResult {
|
||||||
|
if v2.UserID == v1 {
|
||||||
|
flag = true
|
||||||
|
temp.UserID = v1
|
||||||
|
temp.Status = constant.OnlineStatus
|
||||||
|
temp.DetailPlatformStatus = append(temp.DetailPlatformStatus, v2.DetailPlatformStatus...)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
if !flag {
|
||||||
|
temp.UserID = v1
|
||||||
|
temp.Status = constant.OfflineStatus
|
||||||
|
}
|
||||||
|
respResult = append(respResult, temp)
|
||||||
|
}
|
||||||
|
resp := api.GetUsersOnlineStatusResp{CommResp: api.CommResp{ErrCode: 0, ErrMsg: ""}, SuccessResult: respResult}
|
||||||
|
if len(respResult) == 0 {
|
||||||
|
resp.SuccessResult = []*pbRelay.GetUsersOnlineStatusResp_SuccessResult{}
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, "GetUsersOnlineStatus api return", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,280 @@
|
|||||||
|
package office
|
||||||
|
|
||||||
|
import (
|
||||||
|
apistruct "Open_IM/pkg/base_info"
|
||||||
|
"Open_IM/pkg/common/config"
|
||||||
|
"Open_IM/pkg/common/log"
|
||||||
|
"Open_IM/pkg/common/token_verify"
|
||||||
|
"Open_IM/pkg/grpc-etcdv3/getcdv3"
|
||||||
|
pbOffice "Open_IM/pkg/proto/office"
|
||||||
|
pbCommon "Open_IM/pkg/proto/sdk_ws"
|
||||||
|
"Open_IM/pkg/utils"
|
||||||
|
"context"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"net/http"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetUserTags(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req apistruct.GetUserTagsReq
|
||||||
|
resp apistruct.GetUserTagsResp
|
||||||
|
reqPb pbOffice.GetUserTagsReq
|
||||||
|
respPb *pbOffice.GetUserTagsResp
|
||||||
|
)
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "bind json failed", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "bind json failed " + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
ok, userID := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
reqPb.UserID = userID
|
||||||
|
reqPb.OperationID = req.OperationID
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName)
|
||||||
|
client := pbOffice.NewOfficeServiceClient(etcdConn)
|
||||||
|
respPb, err := client.GetUserTags(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetUserTags failed", err.Error())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserTags rpc server failed" + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := utils.CopyStructFields(&resp.CommResp, respPb.CommonResp); err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
|
||||||
|
}
|
||||||
|
if respPb.Tags != nil {
|
||||||
|
resp.Data.Tags = respPb.Tags
|
||||||
|
} else {
|
||||||
|
resp.Data.Tags = []*pbOffice.Tag{}
|
||||||
|
}
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func CreateTag(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req apistruct.CreateTagReq
|
||||||
|
resp apistruct.CreateTagResp
|
||||||
|
reqPb pbOffice.CreateTagReq
|
||||||
|
respPb *pbOffice.CreateTagResp
|
||||||
|
)
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "bind json failed", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "bind json failed " + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := utils.CopyStructFields(&reqPb, req); err != nil {
|
||||||
|
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
|
||||||
|
}
|
||||||
|
ok, userID := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
reqPb.UserID = userID
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName)
|
||||||
|
client := pbOffice.NewOfficeServiceClient(etcdConn)
|
||||||
|
respPb, err := client.CreateTag(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetUserTags failed", err.Error())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "CreateTag rpc server failed" + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := utils.CopyStructFields(&resp.CommResp, respPb.CommonResp); err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
|
||||||
|
}
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func DeleteTag(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req apistruct.DeleteTagReq
|
||||||
|
resp apistruct.DeleteTagResp
|
||||||
|
reqPb pbOffice.DeleteTagReq
|
||||||
|
respPb *pbOffice.DeleteTagResp
|
||||||
|
)
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "bind json failed", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "bind json failed " + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := utils.CopyStructFields(&reqPb, req); err != nil {
|
||||||
|
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
|
||||||
|
}
|
||||||
|
ok, userID := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
reqPb.UserID = userID
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName)
|
||||||
|
client := pbOffice.NewOfficeServiceClient(etcdConn)
|
||||||
|
respPb, err := client.DeleteTag(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetUserTags failed", err.Error())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "CreateTag rpc server failed" + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := utils.CopyStructFields(&resp.CommResp, respPb.CommonResp); err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
|
||||||
|
}
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func SetTag(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req apistruct.SetTagReq
|
||||||
|
resp apistruct.SetTagResp
|
||||||
|
reqPb pbOffice.SetTagReq
|
||||||
|
respPb *pbOffice.SetTagResp
|
||||||
|
)
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "bind json failed", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "bind json failed " + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := utils.CopyStructFields(&reqPb, req); err != nil {
|
||||||
|
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
|
||||||
|
}
|
||||||
|
ok, userID := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
reqPb.UserID = userID
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName)
|
||||||
|
client := pbOffice.NewOfficeServiceClient(etcdConn)
|
||||||
|
respPb, err := client.SetTag(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetUserTags failed", err.Error())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "CreateTag rpc server failed" + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := utils.CopyStructFields(&resp.CommResp, respPb.CommonResp); err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
|
||||||
|
}
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func SendMsg2Tag(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req apistruct.SendMsg2TagReq
|
||||||
|
resp apistruct.SendMsg2TagResp
|
||||||
|
reqPb pbOffice.SendMsg2TagReq
|
||||||
|
respPb *pbOffice.SendMsg2TagResp
|
||||||
|
)
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "bind json failed", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "bind json failed " + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := utils.CopyStructFields(&reqPb, req); err != nil {
|
||||||
|
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
|
||||||
|
}
|
||||||
|
ok, userID := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
reqPb.SendID = userID
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName)
|
||||||
|
client := pbOffice.NewOfficeServiceClient(etcdConn)
|
||||||
|
respPb, err := client.SendMsg2Tag(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetUserTags failed", err.Error())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "CreateTag rpc server failed" + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := utils.CopyStructFields(&resp.CommResp, respPb.CommonResp); err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
|
||||||
|
}
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetTagSendLogs(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req apistruct.GetTagSendLogsReq
|
||||||
|
resp apistruct.GetTagSendLogsResp
|
||||||
|
reqPb pbOffice.GetTagSendLogsReq
|
||||||
|
respPb *pbOffice.GetTagSendLogsResp
|
||||||
|
)
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "bind json failed", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "bind json failed " + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
ok, userID := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
reqPb.UserID = userID
|
||||||
|
reqPb.OperationID = req.OperationID
|
||||||
|
reqPb.Pagination = &pbCommon.RequestPagination{
|
||||||
|
PageNumber: req.PageNumber,
|
||||||
|
ShowNumber: req.ShowNumber,
|
||||||
|
}
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName)
|
||||||
|
client := pbOffice.NewOfficeServiceClient(etcdConn)
|
||||||
|
respPb, err := client.GetTagSendLogs(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetUserTags failed", err.Error())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "CreateTag rpc server failed" + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := utils.CopyStructFields(&resp.CommResp, respPb.CommonResp); err != nil {
|
||||||
|
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
|
||||||
|
}
|
||||||
|
if respPb.TagSendLogs != nil {
|
||||||
|
resp.Data.Logs = respPb.TagSendLogs
|
||||||
|
} else {
|
||||||
|
resp.Data.Logs = []*pbOffice.TagSendLog{}
|
||||||
|
}
|
||||||
|
resp.Data.ShowNumber = respPb.Pagination.ShowNumber
|
||||||
|
resp.Data.CurrentPage = respPb.Pagination.CurrentPage
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetUserTagByID(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req apistruct.GetUserTagByIDReq
|
||||||
|
resp apistruct.GetUserTagByIDResp
|
||||||
|
reqPb pbOffice.GetUserTagByIDReq
|
||||||
|
respPb *pbOffice.GetUserTagByIDResp
|
||||||
|
)
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "bind json failed", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "bind json failed " + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
ok, userID := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
reqPb.UserID = userID
|
||||||
|
reqPb.OperationID = req.OperationID
|
||||||
|
reqPb.TagID = req.TagID
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName)
|
||||||
|
client := pbOffice.NewOfficeServiceClient(etcdConn)
|
||||||
|
respPb, err := client.GetUserTagByID(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetUserTagByID failed", err.Error())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "CreateTag rpc server failed" + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := utils.CopyStructFields(&resp.CommResp, respPb.CommonResp); err != nil {
|
||||||
|
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
|
||||||
|
}
|
||||||
|
resp.Data.Tag = respPb.Tag
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
@ -0,0 +1,371 @@
|
|||||||
|
package office
|
||||||
|
|
||||||
|
import (
|
||||||
|
apiStruct "Open_IM/pkg/base_info"
|
||||||
|
"Open_IM/pkg/common/config"
|
||||||
|
"Open_IM/pkg/common/log"
|
||||||
|
"Open_IM/pkg/common/token_verify"
|
||||||
|
"Open_IM/pkg/grpc-etcdv3/getcdv3"
|
||||||
|
pbOffice "Open_IM/pkg/proto/office"
|
||||||
|
pbCommon "Open_IM/pkg/proto/sdk_ws"
|
||||||
|
"Open_IM/pkg/utils"
|
||||||
|
"context"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"net/http"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func CreateOneWorkMoment(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req apiStruct.CreateOneWorkMomentReq
|
||||||
|
resp apiStruct.CreateOneWorkMomentResp
|
||||||
|
reqPb pbOffice.CreateOneWorkMomentReq
|
||||||
|
respPb *pbOffice.CreateOneWorkMomentResp
|
||||||
|
)
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "bind json failed", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "bind json failed " + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req)
|
||||||
|
ok, userID := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := utils.CopyStructFields(&reqPb, req); err != nil {
|
||||||
|
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
|
||||||
|
}
|
||||||
|
reqPb.UserID = userID
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName)
|
||||||
|
client := pbOffice.NewOfficeServiceClient(etcdConn)
|
||||||
|
respPb, err := client.CreateOneWorkMoment(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "CreateOneWorkMoment rpc failed", err.Error())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "CreateOneWorkMoment rpc server failed" + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := utils.CopyStructFields(&resp, respPb.CommonResp); err != nil {
|
||||||
|
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func DeleteOneWorkMoment(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req apiStruct.DeleteOneWorkMomentReq
|
||||||
|
resp apiStruct.DeleteOneWorkMomentResp
|
||||||
|
reqPb pbOffice.DeleteOneWorkMomentReq
|
||||||
|
respPb *pbOffice.DeleteOneWorkMomentResp
|
||||||
|
)
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "bind json failed", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "bind json failed " + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req)
|
||||||
|
ok, userID := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := utils.CopyStructFields(&reqPb, req); err != nil {
|
||||||
|
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
|
||||||
|
}
|
||||||
|
reqPb.UserID = userID
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName)
|
||||||
|
client := pbOffice.NewOfficeServiceClient(etcdConn)
|
||||||
|
respPb, err := client.DeleteOneWorkMoment(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "DeleteOneWorkMoment rpc failed", err.Error())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "DeleteOneWorkMoment rpc server failed" + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := utils.CopyStructFields(&resp, respPb.CommonResp); err != nil {
|
||||||
|
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func LikeOneWorkMoment(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req apiStruct.LikeOneWorkMomentReq
|
||||||
|
resp apiStruct.LikeOneWorkMomentResp
|
||||||
|
reqPb pbOffice.LikeOneWorkMomentReq
|
||||||
|
respPb *pbOffice.LikeOneWorkMomentResp
|
||||||
|
)
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "bind json failed", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "bind json failed " + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req)
|
||||||
|
ok, userID := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := utils.CopyStructFields(&reqPb, req); err != nil {
|
||||||
|
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
|
||||||
|
}
|
||||||
|
reqPb.UserID = userID
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName)
|
||||||
|
client := pbOffice.NewOfficeServiceClient(etcdConn)
|
||||||
|
respPb, err := client.LikeOneWorkMoment(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "LikeOneWorkMoment rpc failed", err.Error())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "LikeOneWorkMoment rpc server failed" + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := utils.CopyStructFields(&resp, respPb.CommonResp); err != nil {
|
||||||
|
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func CommentOneWorkMoment(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req apiStruct.CommentOneWorkMomentReq
|
||||||
|
resp apiStruct.CommentOneWorkMomentResp
|
||||||
|
reqPb pbOffice.CommentOneWorkMomentReq
|
||||||
|
respPb *pbOffice.CommentOneWorkMomentResp
|
||||||
|
)
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "bind json failed", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "bind json failed " + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req)
|
||||||
|
ok, userID := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := utils.CopyStructFields(&reqPb, req); err != nil {
|
||||||
|
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
|
||||||
|
}
|
||||||
|
reqPb.UserID = userID
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName)
|
||||||
|
client := pbOffice.NewOfficeServiceClient(etcdConn)
|
||||||
|
respPb, err := client.CommentOneWorkMoment(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "CommentOneWorkMoment rpc failed", err.Error())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "CommentOneWorkMoment rpc server failed" + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := utils.CopyStructFields(&resp, respPb.CommonResp); err != nil {
|
||||||
|
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetUserWorkMoments(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req apiStruct.GetUserWorkMomentsReq
|
||||||
|
resp apiStruct.GetUserWorkMomentsResp
|
||||||
|
reqPb pbOffice.GetUserWorkMomentsReq
|
||||||
|
respPb *pbOffice.GetUserWorkMomentsResp
|
||||||
|
)
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "bind json failed", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "bind json failed " + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req)
|
||||||
|
ok, userID := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
reqPb.OperationID = req.OperationID
|
||||||
|
reqPb.Pagination = &pbCommon.RequestPagination{
|
||||||
|
PageNumber: req.PageNumber,
|
||||||
|
ShowNumber: req.ShowNumber,
|
||||||
|
}
|
||||||
|
reqPb.UserID = userID
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName)
|
||||||
|
client := pbOffice.NewOfficeServiceClient(etcdConn)
|
||||||
|
respPb, err := client.GetUserWorkMoments(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetUserWorkMoments rpc failed", err.Error())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserWorkMoments rpc server failed" + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := utils.CopyStructFields(&resp, respPb.CommonResp); err != nil {
|
||||||
|
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
|
||||||
|
}
|
||||||
|
resp.Data.WorkMoments = respPb.WorkMoments
|
||||||
|
resp.Data.ShowNumber = respPb.Pagination.ShowNumber
|
||||||
|
resp.Data.CurrentPage = respPb.Pagination.CurrentPage
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetUserFriendWorkMoments(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req apiStruct.GetUserFriendWorkMomentsReq
|
||||||
|
resp apiStruct.GetUserFriendWorkMomentsResp
|
||||||
|
reqPb pbOffice.GetUserFriendWorkMomentsReq
|
||||||
|
respPb *pbOffice.GetUserFriendWorkMomentsResp
|
||||||
|
)
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "bind json failed", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "bind json failed " + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req)
|
||||||
|
ok, userID := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
reqPb.OperationID = req.OperationID
|
||||||
|
reqPb.Pagination = &pbCommon.RequestPagination{
|
||||||
|
PageNumber: req.PageNumber,
|
||||||
|
ShowNumber: req.ShowNumber,
|
||||||
|
}
|
||||||
|
reqPb.UserID = userID
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName)
|
||||||
|
client := pbOffice.NewOfficeServiceClient(etcdConn)
|
||||||
|
respPb, err := client.GetUserFriendWorkMoments(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetUserFriendWorkMoments rpc failed", err.Error())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserFriendWorkMoments rpc server failed" + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := utils.CopyStructFields(&resp, respPb.CommonResp); err != nil {
|
||||||
|
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
|
||||||
|
}
|
||||||
|
resp.Data.WorkMoments = respPb.WorkMoments
|
||||||
|
resp.Data.ShowNumber = respPb.Pagination.ShowNumber
|
||||||
|
resp.Data.CurrentPage = respPb.Pagination.CurrentPage
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetUserWorkMomentsCommentsMsg(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req apiStruct.GetUserWorkMomentsCommentsMsgReq
|
||||||
|
resp apiStruct.GetUserWorkMomentsCommentsMsgResp
|
||||||
|
reqPb pbOffice.GetUserWorkMomentsCommentsMsgReq
|
||||||
|
respPb *pbOffice.GetUserWorkMomentsCommentsMsgResp
|
||||||
|
)
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "bind json failed", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "bind json failed " + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req)
|
||||||
|
ok, userID := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
reqPb.OperationID = req.OperationID
|
||||||
|
reqPb.Pagination = &pbCommon.RequestPagination{
|
||||||
|
PageNumber: req.PageNumber,
|
||||||
|
ShowNumber: req.ShowNumber,
|
||||||
|
}
|
||||||
|
reqPb.UserID = userID
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName)
|
||||||
|
client := pbOffice.NewOfficeServiceClient(etcdConn)
|
||||||
|
respPb, err := client.GetUserWorkMomentsCommentsMsg(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetUserWorkMomentsCommentsMsg rpc failed", err.Error())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserWorkMomentsCommentsMsg rpc server failed" + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := utils.CopyStructFields(&resp, respPb.CommonResp); err != nil {
|
||||||
|
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
|
||||||
|
}
|
||||||
|
resp.Data.CurrentPage = respPb.Pagination.CurrentPage
|
||||||
|
resp.Data.ShowNumber = respPb.Pagination.ShowNumber
|
||||||
|
resp.Data.CommentMsgs = respPb.CommentsMsgs
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func SetUserWorkMomentsLevel(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req apiStruct.SetUserWorkMomentsLevelReq
|
||||||
|
resp apiStruct.SetUserWorkMomentsLevelResp
|
||||||
|
reqPb pbOffice.SetUserWorkMomentsLevelReq
|
||||||
|
respPb *pbOffice.SetUserWorkMomentsLevelResp
|
||||||
|
)
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "bind json failed", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "bind json failed " + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req)
|
||||||
|
ok, userID := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := utils.CopyStructFields(&reqPb, req); err != nil {
|
||||||
|
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
|
||||||
|
}
|
||||||
|
reqPb.UserID = userID
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName)
|
||||||
|
client := pbOffice.NewOfficeServiceClient(etcdConn)
|
||||||
|
respPb, err := client.SetUserWorkMomentsLevel(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetUserWorkMomentsLevel rpc failed", err.Error())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "SetUserWorkMomentsLevel rpc server failed" + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := utils.CopyStructFields(&resp, respPb.CommonResp); err != nil {
|
||||||
|
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func ClearUserWorkMomentsCommentsMsg(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req apiStruct.ClearUserWorkMomentsCommentsMsgReq
|
||||||
|
resp apiStruct.ClearUserWorkMomentsCommentsMsgResp
|
||||||
|
reqPb pbOffice.ClearUserWorkMomentsCommentsMsgReq
|
||||||
|
respPb *pbOffice.ClearUserWorkMomentsCommentsMsgResp
|
||||||
|
)
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "bind json failed", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "bind json failed " + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req)
|
||||||
|
ok, userID := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
reqPb.UserID = userID
|
||||||
|
reqPb.OperationID = req.OperationID
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName)
|
||||||
|
client := pbOffice.NewOfficeServiceClient(etcdConn)
|
||||||
|
respPb, err := client.ClearUserWorkMomentsCommentsMsg(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "ClearUserWorkMomentsCommentsMsg rpc failed", err.Error())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "ClearUserWorkMomentsCommentsMsg rpc server failed" + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := utils.CopyStructFields(&resp, respPb.CommonResp); err != nil {
|
||||||
|
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
@ -0,0 +1,439 @@
|
|||||||
|
package organization
|
||||||
|
|
||||||
|
import (
|
||||||
|
jsonData "Open_IM/internal/utils"
|
||||||
|
api "Open_IM/pkg/base_info"
|
||||||
|
"Open_IM/pkg/common/config"
|
||||||
|
"Open_IM/pkg/common/log"
|
||||||
|
"Open_IM/pkg/common/token_verify"
|
||||||
|
"Open_IM/pkg/grpc-etcdv3/getcdv3"
|
||||||
|
rpc "Open_IM/pkg/proto/organization"
|
||||||
|
open_im_sdk "Open_IM/pkg/proto/sdk_ws"
|
||||||
|
"Open_IM/pkg/utils"
|
||||||
|
"context"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"net/http"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func CreateDepartment(c *gin.Context) {
|
||||||
|
params := api.CreateDepartmentReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.CreateDepartmentReq{DepartmentInfo: &open_im_sdk.Department{}}
|
||||||
|
utils.CopyStructFields(req, ¶ms)
|
||||||
|
utils.CopyStructFields(req.DepartmentInfo, ¶ms)
|
||||||
|
err, opUserID := token_verify.ParseTokenGetUserID(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
req.OpUserID = opUserID
|
||||||
|
if err != nil {
|
||||||
|
errMsg := "ParseTokenGetUserID failed " + err.Error() + " " + c.Request.Header.Get("token")
|
||||||
|
log.NewError(req.OperationID, errMsg, errMsg)
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api args ", req.String(), "params", params)
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName)
|
||||||
|
client := rpc.NewOrganizationClient(etcdConn)
|
||||||
|
RpcResp, err := client.CreateDepartment(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
errMsg := "rpc CreateDepartment failed " + err.Error() + req.String()
|
||||||
|
log.NewError(req.OperationID, errMsg)
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
apiResp := api.CreateDepartmentResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}, Department: RpcResp.DepartmentInfo}
|
||||||
|
apiResp.Data = jsonData.JsonDataOne(RpcResp.DepartmentInfo)
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api return ", apiResp)
|
||||||
|
c.JSON(http.StatusOK, apiResp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func UpdateDepartment(c *gin.Context) {
|
||||||
|
params := api.UpdateDepartmentReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.UpdateDepartmentReq{DepartmentInfo: &open_im_sdk.Department{}}
|
||||||
|
utils.CopyStructFields(req, ¶ms)
|
||||||
|
utils.CopyStructFields(req.DepartmentInfo, ¶ms)
|
||||||
|
err, opUserID := token_verify.ParseTokenGetUserID(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
req.OpUserID = opUserID
|
||||||
|
if err != nil {
|
||||||
|
errMsg := "ParseTokenGetUserID failed " + err.Error() + c.Request.Header.Get("token")
|
||||||
|
log.NewError(req.OperationID, errMsg, errMsg)
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api args ", req.String(), "params", params)
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName)
|
||||||
|
client := rpc.NewOrganizationClient(etcdConn)
|
||||||
|
RpcResp, err := client.UpdateDepartment(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
errMsg := "rpc UpdateDepartment failed " + err.Error() + req.String()
|
||||||
|
log.NewError(req.OperationID, errMsg)
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
apiResp := api.UpdateDepartmentResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api return ", apiResp)
|
||||||
|
c.JSON(http.StatusOK, apiResp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetSubDepartment(c *gin.Context) {
|
||||||
|
params := api.GetSubDepartmentReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.GetSubDepartmentReq{}
|
||||||
|
utils.CopyStructFields(req, ¶ms)
|
||||||
|
err, opUserID := token_verify.ParseTokenGetUserID(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
req.OpUserID = opUserID
|
||||||
|
if err != nil {
|
||||||
|
errMsg := "ParseTokenGetUserID failed " + err.Error() + c.Request.Header.Get("token")
|
||||||
|
log.NewError(req.OperationID, errMsg, errMsg)
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api args ", req.String(), "params", params)
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName)
|
||||||
|
client := rpc.NewOrganizationClient(etcdConn)
|
||||||
|
RpcResp, err := client.GetSubDepartment(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
errMsg := "rpc GetDepartment failed " + err.Error() + req.String()
|
||||||
|
log.NewError(req.OperationID, errMsg)
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
apiResp := api.GetSubDepartmentResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}, DepartmentList: RpcResp.DepartmentList}
|
||||||
|
apiResp.Data = jsonData.JsonDataList(RpcResp.DepartmentList)
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api return ", apiResp)
|
||||||
|
c.JSON(http.StatusOK, apiResp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func DeleteDepartment(c *gin.Context) {
|
||||||
|
params := api.DeleteDepartmentReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.DeleteDepartmentReq{}
|
||||||
|
utils.CopyStructFields(req, ¶ms)
|
||||||
|
err, opUserID := token_verify.ParseTokenGetUserID(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
req.OpUserID = opUserID
|
||||||
|
if err != nil {
|
||||||
|
errMsg := "ParseTokenGetUserID failed " + err.Error() + c.Request.Header.Get("token")
|
||||||
|
log.NewError(req.OperationID, errMsg, errMsg)
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api args ", req.String(), "params", params)
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName)
|
||||||
|
client := rpc.NewOrganizationClient(etcdConn)
|
||||||
|
RpcResp, err := client.DeleteDepartment(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
errMsg := "rpc DeleteDepartment failed " + err.Error() + req.String()
|
||||||
|
log.NewError(req.OperationID, errMsg)
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
apiResp := api.DeleteDepartmentResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api return ", apiResp)
|
||||||
|
c.JSON(http.StatusOK, apiResp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func CreateOrganizationUser(c *gin.Context) {
|
||||||
|
params := api.CreateOrganizationUserReq{OrganizationUser: &open_im_sdk.OrganizationUser{}}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
req := &rpc.CreateOrganizationUserReq{OrganizationUser: &open_im_sdk.OrganizationUser{}}
|
||||||
|
utils.CopyStructFields(req, ¶ms)
|
||||||
|
utils.CopyStructFields(req.OrganizationUser, ¶ms)
|
||||||
|
|
||||||
|
err, opUserID := token_verify.ParseTokenGetUserID(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
req.OpUserID = opUserID
|
||||||
|
if err != nil {
|
||||||
|
errMsg := "ParseTokenGetUserID failed " + err.Error() + c.Request.Header.Get("token")
|
||||||
|
log.NewError(req.OperationID, errMsg, errMsg)
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api args ", req.String(), "params", params)
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName)
|
||||||
|
client := rpc.NewOrganizationClient(etcdConn)
|
||||||
|
RpcResp, err := client.CreateOrganizationUser(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
errMsg := "rpc CreateOrganizationUser failed " + err.Error() + req.String()
|
||||||
|
log.NewError(req.OperationID, errMsg)
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
apiResp := api.CreateOrganizationUserResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api return ", apiResp)
|
||||||
|
c.JSON(http.StatusOK, apiResp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func UpdateOrganizationUser(c *gin.Context) {
|
||||||
|
params := api.UpdateOrganizationUserReq{OrganizationUser: &open_im_sdk.OrganizationUser{}}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
req := &rpc.UpdateOrganizationUserReq{OrganizationUser: &open_im_sdk.OrganizationUser{}}
|
||||||
|
utils.CopyStructFields(req, ¶ms)
|
||||||
|
utils.CopyStructFields(req.OrganizationUser, ¶ms)
|
||||||
|
err, opUserID := token_verify.ParseTokenGetUserID(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
req.OpUserID = opUserID
|
||||||
|
if err != nil {
|
||||||
|
errMsg := "ParseTokenGetUserID failed " + err.Error() + c.Request.Header.Get("token")
|
||||||
|
log.NewError(req.OperationID, errMsg, errMsg)
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api args ", req.String(), "params", params)
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName)
|
||||||
|
client := rpc.NewOrganizationClient(etcdConn)
|
||||||
|
RpcResp, err := client.UpdateOrganizationUser(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
errMsg := "rpc UpdateOrganizationUser failed " + err.Error() + req.String()
|
||||||
|
log.NewError(req.OperationID, errMsg)
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
apiResp := api.UpdateOrganizationUserResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api return ", apiResp)
|
||||||
|
c.JSON(http.StatusOK, apiResp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func CreateDepartmentMember(c *gin.Context) {
|
||||||
|
params := api.CreateDepartmentMemberReq{UserInDepartment: &open_im_sdk.UserInDepartment{}}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
req := &rpc.CreateDepartmentMemberReq{UserInDepartment: &open_im_sdk.UserInDepartment{}}
|
||||||
|
utils.CopyStructFields(req, ¶ms)
|
||||||
|
utils.CopyStructFields(req.UserInDepartment, ¶ms)
|
||||||
|
|
||||||
|
err, opUserID := token_verify.ParseTokenGetUserID(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
req.OpUserID = opUserID
|
||||||
|
if err != nil {
|
||||||
|
errMsg := "ParseTokenGetUserID failed " + err.Error() + c.Request.Header.Get("token")
|
||||||
|
log.NewError(req.OperationID, errMsg, errMsg)
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api args ", req.String(), "params", params)
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName)
|
||||||
|
client := rpc.NewOrganizationClient(etcdConn)
|
||||||
|
RpcResp, err := client.CreateDepartmentMember(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
errMsg := "rpc CreateDepartmentMember failed " + err.Error() + req.String()
|
||||||
|
log.NewError(req.OperationID, errMsg)
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
apiResp := api.CreateDepartmentMemberResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api return ", apiResp)
|
||||||
|
c.JSON(http.StatusOK, apiResp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetUserInDepartment(c *gin.Context) {
|
||||||
|
params := api.GetUserInDepartmentReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
req := &rpc.GetUserInDepartmentReq{}
|
||||||
|
utils.CopyStructFields(req, ¶ms)
|
||||||
|
|
||||||
|
err, opUserID := token_verify.ParseTokenGetUserID(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
req.OpUserID = opUserID
|
||||||
|
if err != nil {
|
||||||
|
errMsg := "ParseTokenGetUserID failed " + err.Error() + c.Request.Header.Get("token")
|
||||||
|
log.NewError(req.OperationID, errMsg, errMsg)
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api args ", req.String(), "params", params)
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName)
|
||||||
|
client := rpc.NewOrganizationClient(etcdConn)
|
||||||
|
RpcResp, err := client.GetUserInDepartment(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
errMsg := "rpc GetUserInDepartment failed " + err.Error() + req.String()
|
||||||
|
log.NewError(req.OperationID, errMsg)
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
apiResp := api.GetUserInDepartmentResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}, UserInDepartment: RpcResp.UserInDepartment}
|
||||||
|
apiResp.Data = jsonData.JsonDataOne(RpcResp.UserInDepartment)
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api return ", apiResp)
|
||||||
|
c.JSON(http.StatusOK, apiResp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func UpdateUserInDepartment(c *gin.Context) {
|
||||||
|
params := api.UpdateUserInDepartmentReq{DepartmentMember: &open_im_sdk.DepartmentMember{}}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
req := &rpc.UpdateUserInDepartmentReq{DepartmentMember: &open_im_sdk.DepartmentMember{}}
|
||||||
|
utils.CopyStructFields(req, ¶ms)
|
||||||
|
|
||||||
|
err, opUserID := token_verify.ParseTokenGetUserID(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
req.OpUserID = opUserID
|
||||||
|
if err != nil {
|
||||||
|
errMsg := "ParseTokenGetUserID failed " + err.Error() + c.Request.Header.Get("token")
|
||||||
|
log.NewError(req.OperationID, errMsg, errMsg)
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api args ", req.String(), "params", params)
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName)
|
||||||
|
client := rpc.NewOrganizationClient(etcdConn)
|
||||||
|
RpcResp, err := client.UpdateUserInDepartment(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
errMsg := "rpc UpdateUserInDepartment failed " + err.Error() + req.String()
|
||||||
|
log.NewError(req.OperationID, errMsg)
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
apiResp := api.UpdateUserInDepartmentResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api return ", apiResp)
|
||||||
|
c.JSON(http.StatusOK, apiResp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func DeleteOrganizationUser(c *gin.Context) {
|
||||||
|
params := api.DeleteOrganizationUserReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
req := &rpc.DeleteOrganizationUserReq{}
|
||||||
|
utils.CopyStructFields(req, ¶ms)
|
||||||
|
|
||||||
|
err, opUserID := token_verify.ParseTokenGetUserID(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
req.OpUserID = opUserID
|
||||||
|
if err != nil {
|
||||||
|
errMsg := "ParseTokenGetUserID failed " + err.Error() + c.Request.Header.Get("token")
|
||||||
|
log.NewError(req.OperationID, errMsg, errMsg)
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api args ", req.String(), "params", params)
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName)
|
||||||
|
client := rpc.NewOrganizationClient(etcdConn)
|
||||||
|
RpcResp, err := client.DeleteOrganizationUser(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
errMsg := "rpc DeleteOrganizationUser failed " + err.Error() + req.String()
|
||||||
|
log.NewError(req.OperationID, errMsg)
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
apiResp := api.DeleteOrganizationUserResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api return ", apiResp)
|
||||||
|
c.JSON(http.StatusOK, apiResp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetDepartmentMember(c *gin.Context) {
|
||||||
|
params := api.GetDepartmentMemberReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
req := &rpc.GetDepartmentMemberReq{}
|
||||||
|
utils.CopyStructFields(req, ¶ms)
|
||||||
|
|
||||||
|
err, opUserID := token_verify.ParseTokenGetUserID(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
req.OpUserID = opUserID
|
||||||
|
if err != nil {
|
||||||
|
errMsg := "ParseTokenGetUserID failed " + err.Error() + c.Request.Header.Get("token")
|
||||||
|
log.NewError(req.OperationID, errMsg, errMsg)
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api args ", req.String(), "params", params)
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName)
|
||||||
|
client := rpc.NewOrganizationClient(etcdConn)
|
||||||
|
RpcResp, err := client.GetDepartmentMember(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
errMsg := "rpc GetDepartmentMember failed " + err.Error() + req.String()
|
||||||
|
log.NewError(req.OperationID, errMsg)
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
apiResp := api.GetDepartmentMemberResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}, UserInDepartmentList: RpcResp.UserInDepartmentList}
|
||||||
|
apiResp.Data = jsonData.JsonDataList(RpcResp.UserInDepartmentList)
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api return ", apiResp)
|
||||||
|
c.JSON(http.StatusOK, apiResp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func DeleteUserInDepartment(c *gin.Context) {
|
||||||
|
params := api.DeleteUserInDepartmentReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.DeleteUserInDepartmentReq{}
|
||||||
|
utils.CopyStructFields(req, ¶ms)
|
||||||
|
|
||||||
|
err, opUserID := token_verify.ParseTokenGetUserID(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
req.OpUserID = opUserID
|
||||||
|
if err != nil {
|
||||||
|
errMsg := "ParseTokenGetUserID failed " + err.Error() + c.Request.Header.Get("token")
|
||||||
|
log.NewError(req.OperationID, errMsg, errMsg)
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api args ", req.String(), "params", params)
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName)
|
||||||
|
client := rpc.NewOrganizationClient(etcdConn)
|
||||||
|
RpcResp, err := client.DeleteUserInDepartment(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
errMsg := "rpc DeleteUserInDepartment failed " + err.Error() + req.String()
|
||||||
|
log.NewError(req.OperationID, errMsg)
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
apiResp := api.GetDepartmentMemberResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "api return ", apiResp)
|
||||||
|
c.JSON(http.StatusOK, apiResp)
|
||||||
|
}
|
@ -0,0 +1,95 @@
|
|||||||
|
package apiThird
|
||||||
|
|
||||||
|
import (
|
||||||
|
api "Open_IM/pkg/base_info"
|
||||||
|
"Open_IM/pkg/common/config"
|
||||||
|
"Open_IM/pkg/common/constant"
|
||||||
|
"Open_IM/pkg/common/log"
|
||||||
|
"Open_IM/pkg/common/token_verify"
|
||||||
|
"fmt"
|
||||||
|
openapi "github.com/alibabacloud-go/darabonba-openapi/client"
|
||||||
|
sts20150401 "github.com/alibabacloud-go/sts-20150401/client"
|
||||||
|
"github.com/alibabacloud-go/tea/tea"
|
||||||
|
"github.com/fatih/structs"
|
||||||
|
|
||||||
|
//"github.com/fatih/structs"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"net/http"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
var stsClient *sts20150401.Client
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 使用AK&SK初始化账号Client
|
||||||
|
* @param accessKeyId
|
||||||
|
* @param accessKeySecret
|
||||||
|
* @return Client
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
func getStsClient() *sts20150401.Client {
|
||||||
|
if stsClient != nil {
|
||||||
|
return stsClient
|
||||||
|
}
|
||||||
|
conf := &openapi.Config{
|
||||||
|
// 您的AccessKey ID
|
||||||
|
AccessKeyId: tea.String(config.Config.Credential.Ali.AccessKeyID),
|
||||||
|
// 您的AccessKey Secret
|
||||||
|
AccessKeySecret: tea.String(config.Config.Credential.Ali.AccessKeySecret),
|
||||||
|
// Endpoint
|
||||||
|
Endpoint: tea.String(config.Config.Credential.Ali.StsEndpoint),
|
||||||
|
}
|
||||||
|
result, err := sts20150401.NewClient(conf)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError("", "alists client初始化失败 ", err)
|
||||||
|
}
|
||||||
|
stsClient = result
|
||||||
|
return stsClient
|
||||||
|
}
|
||||||
|
|
||||||
|
func AliOSSCredential(c *gin.Context) {
|
||||||
|
req := api.OSSCredentialReq{}
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
ok, userID := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, "AliOSSCredential args ", userID)
|
||||||
|
|
||||||
|
stsResp, err := getStsClient().AssumeRole(&sts20150401.AssumeRoleRequest{
|
||||||
|
DurationSeconds: tea.Int64(config.Config.Credential.Ali.StsDurationSeconds),
|
||||||
|
Policy: nil,
|
||||||
|
RoleArn: tea.String(config.Config.Credential.Ali.OssRoleArn),
|
||||||
|
RoleSessionName: tea.String(fmt.Sprintf("%s-%d", userID, time.Now().Unix())),
|
||||||
|
})
|
||||||
|
|
||||||
|
resp := api.OSSCredentialResp{}
|
||||||
|
if err != nil {
|
||||||
|
resp.ErrCode = constant.ErrTencentCredential.ErrCode
|
||||||
|
resp.ErrMsg = err.Error()
|
||||||
|
} else {
|
||||||
|
resp = api.OSSCredentialResp{
|
||||||
|
CommResp: api.CommResp{},
|
||||||
|
OssData: api.OSSCredentialRespData{
|
||||||
|
Endpoint: config.Config.Credential.Ali.OssEndpoint,
|
||||||
|
AccessKeyId: *stsResp.Body.Credentials.AccessKeyId,
|
||||||
|
AccessKeySecret: *stsResp.Body.Credentials.AccessKeySecret,
|
||||||
|
Token: *stsResp.Body.Credentials.SecurityToken,
|
||||||
|
Bucket: config.Config.Credential.Ali.Bucket,
|
||||||
|
FinalHost: config.Config.Credential.Ali.FinalHost,
|
||||||
|
},
|
||||||
|
Data: nil,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resp.Data = structs.Map(&resp.OssData)
|
||||||
|
log.NewInfo(req.OperationID, "AliOSSCredential return ", resp)
|
||||||
|
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
@ -0,0 +1,67 @@
|
|||||||
|
package apiThird
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Open_IM/pkg/common/config"
|
||||||
|
"Open_IM/pkg/common/log"
|
||||||
|
"Open_IM/pkg/utils"
|
||||||
|
"context"
|
||||||
|
"github.com/minio/minio-go/v7"
|
||||||
|
"github.com/minio/minio-go/v7/pkg/credentials"
|
||||||
|
url2 "net/url"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
minioClient *minio.Client
|
||||||
|
)
|
||||||
|
|
||||||
|
func MinioInit() {
|
||||||
|
operationID := utils.OperationIDGenerator()
|
||||||
|
log.NewInfo(operationID, utils.GetSelfFuncName(), "minio config: ", config.Config.Credential.Minio)
|
||||||
|
var initUrl string
|
||||||
|
if config.Config.Credential.Minio.EndpointInnerEnable {
|
||||||
|
initUrl = config.Config.Credential.Minio.EndpointInner
|
||||||
|
} else {
|
||||||
|
initUrl = config.Config.Credential.Minio.Endpoint
|
||||||
|
}
|
||||||
|
log.NewInfo(operationID, utils.GetSelfFuncName(), "use initUrl: ", initUrl)
|
||||||
|
minioUrl, err := url2.Parse(initUrl)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(operationID, utils.GetSelfFuncName(), "parse failed, please check config/config.yaml", err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(operationID, utils.GetSelfFuncName(), "Parse ok ", config.Config.Credential.Minio)
|
||||||
|
minioClient, err = minio.New(minioUrl.Host, &minio.Options{
|
||||||
|
Creds: credentials.NewStaticV4(config.Config.Credential.Minio.AccessKeyID, config.Config.Credential.Minio.SecretAccessKey, ""),
|
||||||
|
Secure: false,
|
||||||
|
})
|
||||||
|
log.NewInfo(operationID, utils.GetSelfFuncName(), "new ok ", config.Config.Credential.Minio)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(operationID, utils.GetSelfFuncName(), "init minio client failed", err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
opt := minio.MakeBucketOptions{
|
||||||
|
Region: config.Config.Credential.Minio.Location,
|
||||||
|
ObjectLocking: false,
|
||||||
|
}
|
||||||
|
err = minioClient.MakeBucket(context.Background(), config.Config.Credential.Minio.Bucket, opt)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(operationID, utils.GetSelfFuncName(), "MakeBucket failed ", err.Error())
|
||||||
|
exists, err := minioClient.BucketExists(context.Background(), config.Config.Credential.Minio.Bucket)
|
||||||
|
if err == nil && exists {
|
||||||
|
log.NewWarn(operationID, utils.GetSelfFuncName(), "We already own ", config.Config.Credential.Minio.Bucket)
|
||||||
|
} else {
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(operationID, utils.GetSelfFuncName(), err.Error())
|
||||||
|
}
|
||||||
|
log.NewError(operationID, utils.GetSelfFuncName(), "create bucket failed and bucket not exists")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 自动化桶public的代码
|
||||||
|
//err = minioClient.SetBucketPolicy(context.Background(), config.Config.Credential.Minio.Bucket, policy.BucketPolicyReadWrite)
|
||||||
|
//if err != nil {
|
||||||
|
// log.NewError("", utils.GetSelfFuncName(), "SetBucketPolicy failed please set in web", err.Error())
|
||||||
|
// return
|
||||||
|
//}
|
||||||
|
log.NewInfo(operationID, utils.GetSelfFuncName(), "minio create and set policy success")
|
||||||
|
}
|
@ -0,0 +1,138 @@
|
|||||||
|
package apiThird
|
||||||
|
|
||||||
|
import (
|
||||||
|
apiStruct "Open_IM/pkg/base_info"
|
||||||
|
"Open_IM/pkg/common/config"
|
||||||
|
"Open_IM/pkg/common/constant"
|
||||||
|
"Open_IM/pkg/common/log"
|
||||||
|
"Open_IM/pkg/common/token_verify"
|
||||||
|
_ "Open_IM/pkg/common/token_verify"
|
||||||
|
"Open_IM/pkg/utils"
|
||||||
|
"context"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/minio/minio-go/v7"
|
||||||
|
_ "github.com/minio/minio-go/v7"
|
||||||
|
cr "github.com/minio/minio-go/v7/pkg/credentials"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
func MinioUploadFile(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req apiStruct.MinioUploadFileReq
|
||||||
|
resp apiStruct.MinioUploadFileResp
|
||||||
|
)
|
||||||
|
defer func() {
|
||||||
|
if r := recover(); r != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), r)
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "missing file or snapShot args"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
if err := c.Bind(&req); err != nil {
|
||||||
|
log.NewError("0", utils.GetSelfFuncName(), "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
ok, _ := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError("", utils.GetSelfFuncName(), "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), req)
|
||||||
|
switch req.FileType {
|
||||||
|
// videoType upload snapShot
|
||||||
|
case constant.VideoType:
|
||||||
|
snapShotFile, err := c.FormFile("snapShot")
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "missing snapshot arg: " + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
snapShotFileObj, err := snapShotFile.Open()
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "Open file error", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
snapShotNewName, snapShotNewType := utils.GetNewFileNameAndContentType(snapShotFile.Filename, constant.ImageType)
|
||||||
|
log.Debug(req.OperationID, utils.GetSelfFuncName(), snapShotNewName, snapShotNewType)
|
||||||
|
_, err = minioClient.PutObject(context.Background(), config.Config.Credential.Minio.Bucket, snapShotNewName, snapShotFileObj, snapShotFile.Size, minio.PutObjectOptions{ContentType: snapShotNewType})
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "PutObject snapShotFile error", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp.SnapshotURL = config.Config.Credential.Minio.Endpoint + "/" + config.Config.Credential.Minio.Bucket + "/" + snapShotNewName
|
||||||
|
resp.SnapshotNewName = snapShotNewName
|
||||||
|
}
|
||||||
|
file, err := c.FormFile("file")
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "missing file arg: " + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
fileObj, err := file.Open()
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "Open file error", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "invalid file path" + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
newName, newType := utils.GetNewFileNameAndContentType(file.Filename, req.FileType)
|
||||||
|
log.Debug(req.OperationID, utils.GetSelfFuncName(), newName, newType)
|
||||||
|
_, err = minioClient.PutObject(context.Background(), config.Config.Credential.Minio.Bucket, newName, fileObj, file.Size, minio.PutObjectOptions{ContentType: newType})
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), "open file error")
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "invalid file path" + err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp.NewName = newName
|
||||||
|
resp.URL = config.Config.Credential.Minio.Endpoint + "/" + config.Config.Credential.Minio.Bucket + "/" + newName
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp)
|
||||||
|
c.JSON(http.StatusOK, gin.H{"errCode": 0, "errMsg": "", "data": resp})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func MinioStorageCredential(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req apiStruct.MinioStorageCredentialReq
|
||||||
|
resp apiStruct.MiniostorageCredentialResp
|
||||||
|
)
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
log.NewError("0", utils.GetSelfFuncName(), "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
ok, _ := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError("", utils.GetSelfFuncName(), "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var stsOpts cr.STSAssumeRoleOptions
|
||||||
|
stsOpts.AccessKey = config.Config.Credential.Minio.AccessKeyID
|
||||||
|
stsOpts.SecretKey = config.Config.Credential.Minio.SecretAccessKey
|
||||||
|
stsOpts.DurationSeconds = constant.MinioDurationTimes
|
||||||
|
var endpoint string
|
||||||
|
if config.Config.Credential.Minio.EndpointInnerEnable {
|
||||||
|
endpoint = config.Config.Credential.Minio.EndpointInner
|
||||||
|
} else {
|
||||||
|
endpoint = config.Config.Credential.Minio.Endpoint
|
||||||
|
}
|
||||||
|
li, err := cr.NewSTSAssumeRole(endpoint, stsOpts)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError("", utils.GetSelfFuncName(), "NewSTSAssumeRole failed", err.Error(), stsOpts, config.Config.Credential.Minio.Endpoint)
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
v, err := li.Get()
|
||||||
|
if err != nil {
|
||||||
|
log.NewError("0", utils.GetSelfFuncName(), "li.Get error", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp.SessionToken = v.SessionToken
|
||||||
|
resp.SecretAccessKey = v.SecretAccessKey
|
||||||
|
resp.AccessKeyID = v.AccessKeyID
|
||||||
|
resp.BucketName = config.Config.Credential.Minio.Bucket
|
||||||
|
resp.StsEndpointURL = config.Config.Credential.Minio.Endpoint
|
||||||
|
c.JSON(http.StatusOK, gin.H{"errCode": 0, "errMsg": "", "data": resp})
|
||||||
|
}
|
@ -0,0 +1,72 @@
|
|||||||
|
package apiThird
|
||||||
|
|
||||||
|
import (
|
||||||
|
api "Open_IM/pkg/base_info"
|
||||||
|
"Open_IM/pkg/common/config"
|
||||||
|
"Open_IM/pkg/common/constant"
|
||||||
|
"Open_IM/pkg/common/log"
|
||||||
|
"Open_IM/pkg/common/token_verify"
|
||||||
|
"github.com/fatih/structs"
|
||||||
|
|
||||||
|
//"github.com/fatih/structs"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
sts "github.com/tencentyun/qcloud-cos-sts-sdk/go"
|
||||||
|
"net/http"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TencentCloudStorageCredential(c *gin.Context) {
|
||||||
|
req := api.TencentCloudStorageCredentialReq{}
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
ok, userID := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, "TencentCloudStorageCredential args ", userID)
|
||||||
|
|
||||||
|
cli := sts.NewClient(
|
||||||
|
config.Config.Credential.Tencent.SecretID,
|
||||||
|
config.Config.Credential.Tencent.SecretKey,
|
||||||
|
nil,
|
||||||
|
)
|
||||||
|
|
||||||
|
opt := &sts.CredentialOptions{
|
||||||
|
DurationSeconds: int64(time.Hour.Seconds()),
|
||||||
|
Region: config.Config.Credential.Tencent.Region,
|
||||||
|
Policy: &sts.CredentialPolicy{
|
||||||
|
Statement: []sts.CredentialPolicyStatement{
|
||||||
|
{
|
||||||
|
Action: []string{
|
||||||
|
"name/cos:PostObject",
|
||||||
|
"name/cos:PutObject",
|
||||||
|
},
|
||||||
|
Effect: "allow",
|
||||||
|
Resource: []string{
|
||||||
|
"qcs::cos:" + config.Config.Credential.Tencent.Region + ":uid/" + config.Config.Credential.Tencent.AppID + ":" + config.Config.Credential.Tencent.Bucket + "/*",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
res, err := cli.GetCredential(opt)
|
||||||
|
resp := api.TencentCloudStorageCredentialResp{}
|
||||||
|
if err != nil {
|
||||||
|
resp.ErrCode = constant.ErrTencentCredential.ErrCode
|
||||||
|
resp.ErrMsg = err.Error()
|
||||||
|
} else {
|
||||||
|
resp.CosData.Bucket = config.Config.Credential.Tencent.Bucket
|
||||||
|
resp.CosData.Region = config.Config.Credential.Tencent.Region
|
||||||
|
resp.CosData.CredentialResult = res
|
||||||
|
}
|
||||||
|
|
||||||
|
resp.Data = structs.Map(&resp.CosData)
|
||||||
|
log.NewInfo(req.OperationID, "TencentCloudStorageCredential return ", resp)
|
||||||
|
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
@ -0,0 +1,129 @@
|
|||||||
|
package user
|
||||||
|
|
||||||
|
import (
|
||||||
|
jsonData "Open_IM/internal/utils"
|
||||||
|
api "Open_IM/pkg/base_info"
|
||||||
|
"Open_IM/pkg/common/config"
|
||||||
|
"Open_IM/pkg/common/log"
|
||||||
|
"Open_IM/pkg/common/token_verify"
|
||||||
|
"Open_IM/pkg/grpc-etcdv3/getcdv3"
|
||||||
|
open_im_sdk "Open_IM/pkg/proto/sdk_ws"
|
||||||
|
rpc "Open_IM/pkg/proto/user"
|
||||||
|
"Open_IM/pkg/utils"
|
||||||
|
"context"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"net/http"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetUsersInfo(c *gin.Context) {
|
||||||
|
params := api.GetUsersInfoReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": http.StatusBadRequest, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.GetUserInfoReq{}
|
||||||
|
utils.CopyStructFields(req, ¶ms)
|
||||||
|
var ok bool
|
||||||
|
ok, req.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(params.OperationID, "GetUserInfo args ", req.String())
|
||||||
|
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName)
|
||||||
|
client := rpc.NewUserClient(etcdConn)
|
||||||
|
RpcResp, err := client.GetUserInfo(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, "GetUserInfo failed ", err.Error(), req.String())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call rpc server failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var publicUserInfoList []*open_im_sdk.PublicUserInfo
|
||||||
|
for _, v := range RpcResp.UserInfoList {
|
||||||
|
publicUserInfoList = append(publicUserInfoList,
|
||||||
|
&open_im_sdk.PublicUserInfo{UserID: v.UserID, Nickname: v.Nickname, FaceURL: v.FaceURL, Gender: v.Gender, Ex: v.Ex})
|
||||||
|
}
|
||||||
|
|
||||||
|
resp := api.GetUsersInfoResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}, UserInfoList: publicUserInfoList}
|
||||||
|
resp.Data = jsonData.JsonDataList(resp.UserInfoList)
|
||||||
|
log.NewInfo(req.OperationID, "GetUserInfo api return ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func UpdateUserInfo(c *gin.Context) {
|
||||||
|
params := api.UpdateSelfUserInfoReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.UpdateUserInfoReq{UserInfo: &open_im_sdk.UserInfo{}}
|
||||||
|
utils.CopyStructFields(req.UserInfo, ¶ms)
|
||||||
|
|
||||||
|
req.OperationID = params.OperationID
|
||||||
|
var ok bool
|
||||||
|
ok, req.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(params.OperationID, "UpdateUserInfo args ", req.String())
|
||||||
|
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName)
|
||||||
|
client := rpc.NewUserClient(etcdConn)
|
||||||
|
RpcResp, err := client.UpdateUserInfo(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, "UpdateUserInfo failed ", err.Error(), req.String())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call rpc server failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp := api.UpdateUserInfoResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}}
|
||||||
|
log.NewInfo(req.OperationID, "UpdateUserInfo api return ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetSelfUserInfo(c *gin.Context) {
|
||||||
|
params := api.GetSelfUserInfoReq{}
|
||||||
|
if err := c.BindJSON(¶ms); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": http.StatusBadRequest, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req := &rpc.GetUserInfoReq{}
|
||||||
|
|
||||||
|
utils.CopyStructFields(req, ¶ms)
|
||||||
|
var ok bool
|
||||||
|
ok, req.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req.UserIDList = append(req.UserIDList, req.OpUserID)
|
||||||
|
log.NewInfo(params.OperationID, "GetUserInfo args ", req.String())
|
||||||
|
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName)
|
||||||
|
client := rpc.NewUserClient(etcdConn)
|
||||||
|
RpcResp, err := client.GetUserInfo(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, "GetUserInfo failed ", err.Error(), req.String())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call rpc server failed"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if len(RpcResp.UserInfoList) == 1 {
|
||||||
|
resp := api.GetSelfUserInfoResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}, UserInfo: RpcResp.UserInfoList[0]}
|
||||||
|
resp.Data = jsonData.JsonDataOne(resp.UserInfo)
|
||||||
|
log.NewInfo(req.OperationID, "GetUserInfo api return ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
} else {
|
||||||
|
resp := api.GetSelfUserInfoResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}}
|
||||||
|
log.NewInfo(req.OperationID, "GetUserInfo api return ", resp)
|
||||||
|
c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,42 @@
|
|||||||
|
package admin
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Open_IM/pkg/cms_api_struct"
|
||||||
|
"Open_IM/pkg/common/config"
|
||||||
|
"Open_IM/pkg/common/constant"
|
||||||
|
openIMHttp "Open_IM/pkg/common/http"
|
||||||
|
"Open_IM/pkg/common/log"
|
||||||
|
"Open_IM/pkg/grpc-etcdv3/getcdv3"
|
||||||
|
pbAdmin "Open_IM/pkg/proto/admin_cms"
|
||||||
|
"Open_IM/pkg/utils"
|
||||||
|
"context"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
// register
|
||||||
|
func AdminLogin(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req cms_api_struct.AdminLoginRequest
|
||||||
|
resp cms_api_struct.AdminLoginResponse
|
||||||
|
reqPb pbAdmin.AdminLoginReq
|
||||||
|
)
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
log.NewInfo("0", utils.GetSelfFuncName(), err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
reqPb.Secret = req.Secret
|
||||||
|
reqPb.AdminID = req.AdminName
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImAdminCMSName)
|
||||||
|
client := pbAdmin.NewAdminCMSClient(etcdConn)
|
||||||
|
respPb, err := client.AdminLogin(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "rpc failed", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, err, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp.Token = respPb.Token
|
||||||
|
openIMHttp.RespHttp200(c, constant.OK, resp)
|
||||||
|
}
|
@ -0,0 +1,450 @@
|
|||||||
|
package group
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Open_IM/pkg/cms_api_struct"
|
||||||
|
"Open_IM/pkg/common/config"
|
||||||
|
"Open_IM/pkg/common/constant"
|
||||||
|
openIMHttp "Open_IM/pkg/common/http"
|
||||||
|
"Open_IM/pkg/common/log"
|
||||||
|
"Open_IM/pkg/grpc-etcdv3/getcdv3"
|
||||||
|
commonPb "Open_IM/pkg/proto/sdk_ws"
|
||||||
|
"Open_IM/pkg/utils"
|
||||||
|
"context"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
pbGroup "Open_IM/pkg/proto/group"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetGroupById(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req cms_api_struct.GetGroupByIdRequest
|
||||||
|
resp cms_api_struct.GetGroupByIdResponse
|
||||||
|
reqPb pbGroup.GetGroupByIdReq
|
||||||
|
)
|
||||||
|
if err := c.ShouldBindQuery(&req); err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "ShouldBindQuery failed ", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
reqPb.GroupId = req.GroupId
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName)
|
||||||
|
client := pbGroup.NewGroupClient(etcdConn)
|
||||||
|
respPb, err := client.GetGroupById(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "GetGroupById failed ", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, err, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp.GroupName = respPb.CMSGroup.GroupInfo.GroupName
|
||||||
|
resp.GroupID = respPb.CMSGroup.GroupInfo.GroupID
|
||||||
|
resp.CreateTime = (utils.UnixSecondToTime(int64(respPb.CMSGroup.GroupInfo.CreateTime))).String()
|
||||||
|
resp.ProfilePhoto = respPb.CMSGroup.GroupInfo.FaceURL
|
||||||
|
resp.GroupMasterName = respPb.CMSGroup.GroupMasterName
|
||||||
|
resp.GroupMasterId = respPb.CMSGroup.GroupMasterId
|
||||||
|
resp.IsBanChat = constant.GroupIsBanChat(respPb.CMSGroup.GroupInfo.Status)
|
||||||
|
openIMHttp.RespHttp200(c, constant.OK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetGroups(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req cms_api_struct.GetGroupsRequest
|
||||||
|
resp cms_api_struct.GetGroupsResponse
|
||||||
|
reqPb pbGroup.GetGroupsReq
|
||||||
|
)
|
||||||
|
if err := c.ShouldBindQuery(&req); err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "ShouldBindQuery failed ", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
reqPb.Pagination = &commonPb.RequestPagination{}
|
||||||
|
utils.CopyStructFields(&reqPb.Pagination, req)
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName)
|
||||||
|
client := pbGroup.NewGroupClient(etcdConn)
|
||||||
|
respPb, err := client.GetGroups(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "GetUserInfo failed ", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, err, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for _, v := range respPb.CMSGroups {
|
||||||
|
resp.Groups = append(resp.Groups, cms_api_struct.GroupResponse{
|
||||||
|
GroupName: v.GroupInfo.GroupName,
|
||||||
|
GroupID: v.GroupInfo.GroupID,
|
||||||
|
GroupMasterName: v.GroupMasterName,
|
||||||
|
GroupMasterId: v.GroupMasterId,
|
||||||
|
CreateTime: (utils.UnixSecondToTime(int64(v.GroupInfo.CreateTime))).String(),
|
||||||
|
IsBanChat: constant.GroupIsBanChat(v.GroupInfo.Status),
|
||||||
|
IsBanPrivateChat: false,
|
||||||
|
ProfilePhoto: v.GroupInfo.FaceURL,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
resp.GroupNums = int(respPb.GroupNum)
|
||||||
|
resp.CurrentPage = int(respPb.Pagination.PageNumber)
|
||||||
|
resp.ShowNumber = int(respPb.Pagination.ShowNumber)
|
||||||
|
openIMHttp.RespHttp200(c, constant.OK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetGroupByName(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req cms_api_struct.GetGroupRequest
|
||||||
|
resp cms_api_struct.GetGroupResponse
|
||||||
|
reqPb pbGroup.GetGroupReq
|
||||||
|
)
|
||||||
|
if err := c.ShouldBindQuery(&req); err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "ShouldBindQuery failed ", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
reqPb.GroupName = req.GroupName
|
||||||
|
reqPb.Pagination = &commonPb.RequestPagination{}
|
||||||
|
utils.CopyStructFields(&reqPb.Pagination, req)
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName)
|
||||||
|
client := pbGroup.NewGroupClient(etcdConn)
|
||||||
|
respPb, err := client.GetGroup(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "GetGroup failed", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, constant.ErrServer, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for _, v := range respPb.CMSGroups {
|
||||||
|
resp.Groups = append(resp.Groups, cms_api_struct.GroupResponse{
|
||||||
|
GroupName: v.GroupInfo.GroupName,
|
||||||
|
GroupID: v.GroupInfo.GroupID,
|
||||||
|
GroupMasterName: v.GroupMasterName,
|
||||||
|
GroupMasterId: v.GroupMasterId,
|
||||||
|
CreateTime: (utils.UnixSecondToTime(int64(v.GroupInfo.CreateTime))).String(),
|
||||||
|
IsBanChat: constant.GroupIsBanChat(v.GroupInfo.Status),
|
||||||
|
IsBanPrivateChat: false,
|
||||||
|
ProfilePhoto: v.GroupInfo.FaceURL,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
resp.CurrentPage = int(respPb.Pagination.PageNumber)
|
||||||
|
resp.ShowNumber = int(respPb.Pagination.ShowNumber)
|
||||||
|
resp.GroupNums = int(respPb.GroupNums)
|
||||||
|
openIMHttp.RespHttp200(c, constant.OK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func CreateGroup(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req cms_api_struct.CreateGroupRequest
|
||||||
|
_ cms_api_struct.CreateGroupResponse
|
||||||
|
reqPb pbGroup.CreateGroupReq
|
||||||
|
)
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "BindJSON failed ", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
reqPb.GroupInfo = &commonPb.GroupInfo{}
|
||||||
|
reqPb.GroupInfo.GroupName = req.GroupName
|
||||||
|
reqPb.GroupInfo.CreatorUserID = req.GroupMasterId
|
||||||
|
reqPb.OwnerUserID = req.GroupMasterId
|
||||||
|
reqPb.OpUserID = req.GroupMasterId
|
||||||
|
for _, v := range req.GroupMembers {
|
||||||
|
reqPb.InitMemberList = append(reqPb.InitMemberList, &pbGroup.GroupAddMemberInfo{
|
||||||
|
UserID: v,
|
||||||
|
RoleLevel: 1,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName)
|
||||||
|
client := pbGroup.NewGroupClient(etcdConn)
|
||||||
|
_, err := client.CreateGroup(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "CreateGroup failed", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, constant.ErrServer, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
openIMHttp.RespHttp200(c, constant.OK, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
func BanGroupChat(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req cms_api_struct.BanGroupChatRequest
|
||||||
|
reqPb pbGroup.OperateGroupStatusReq
|
||||||
|
)
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "BindJSON failed", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
reqPb.GroupId = req.GroupId
|
||||||
|
reqPb.Status = constant.GroupBanChat
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName)
|
||||||
|
client := pbGroup.NewGroupClient(etcdConn)
|
||||||
|
_, err := client.OperateGroupStatus(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "BanGroupChat failed ", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, err, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
openIMHttp.RespHttp200(c, constant.OK, nil)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func BanPrivateChat(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req cms_api_struct.BanPrivateChatRequest
|
||||||
|
reqPb pbGroup.OperateGroupStatusReq
|
||||||
|
)
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "BindJSON failed ", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
reqPb.GroupId = req.GroupId
|
||||||
|
reqPb.Status = constant.GroupBanPrivateChat
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName)
|
||||||
|
client := pbGroup.NewGroupClient(etcdConn)
|
||||||
|
_, err := client.OperateGroupStatus(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "OperateGroupStatus failed", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, err, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
openIMHttp.RespHttp200(c, constant.OK, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
func OpenGroupChat(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req cms_api_struct.BanPrivateChatRequest
|
||||||
|
reqPb pbGroup.OperateGroupStatusReq
|
||||||
|
)
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "BindJSON failed ", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
reqPb.GroupId = req.GroupId
|
||||||
|
reqPb.Status = constant.GroupOk
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName)
|
||||||
|
client := pbGroup.NewGroupClient(etcdConn)
|
||||||
|
_, err := client.OperateGroupStatus(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "OperateGroupStatus failed ", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, err, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
openIMHttp.RespHttp200(c, constant.OK, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
func OpenPrivateChat(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req cms_api_struct.BanPrivateChatRequest
|
||||||
|
reqPb pbGroup.OperateGroupStatusReq
|
||||||
|
)
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "OpenPrivateChat failed ", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
reqPb.GroupId = req.GroupId
|
||||||
|
reqPb.Status = constant.GroupOk
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName)
|
||||||
|
client := pbGroup.NewGroupClient(etcdConn)
|
||||||
|
_, err := client.OperateGroupStatus(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "OperateGroupStatus failed ", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, err, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
openIMHttp.RespHttp200(c, constant.OK, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetGroupMembers(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req cms_api_struct.GetGroupMembersRequest
|
||||||
|
reqPb pbGroup.GetGroupMembersCMSReq
|
||||||
|
resp cms_api_struct.GetGroupMembersResponse
|
||||||
|
)
|
||||||
|
if err := c.ShouldBindQuery(&req); err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "ShouldBindQuery failed ", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
reqPb.Pagination = &commonPb.RequestPagination{
|
||||||
|
PageNumber: int32(req.PageNumber),
|
||||||
|
ShowNumber: int32(req.ShowNumber),
|
||||||
|
}
|
||||||
|
reqPb.GroupId = req.GroupId
|
||||||
|
reqPb.UserName = req.UserName
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName)
|
||||||
|
client := pbGroup.NewGroupClient(etcdConn)
|
||||||
|
respPb, err := client.GetGroupMembersCMS(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "GetGroupMembersCMS failed:", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, err, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp.ResponsePagination = cms_api_struct.ResponsePagination{
|
||||||
|
CurrentPage: int(respPb.Pagination.CurrentPage),
|
||||||
|
ShowNumber: int(respPb.Pagination.ShowNumber),
|
||||||
|
}
|
||||||
|
resp.MemberNums = int(respPb.MemberNums)
|
||||||
|
for _, groupMembers := range respPb.Members {
|
||||||
|
resp.GroupMembers = append(resp.GroupMembers, cms_api_struct.GroupMemberResponse{
|
||||||
|
MemberPosition: int(groupMembers.RoleLevel),
|
||||||
|
MemberNickName: groupMembers.Nickname,
|
||||||
|
MemberId: groupMembers.UserID,
|
||||||
|
JoinTime: utils.UnixSecondToTime(int64(groupMembers.JoinTime)).String(),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
openIMHttp.RespHttp200(c, constant.OK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func AddGroupMembers(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req cms_api_struct.RemoveGroupMembersRequest
|
||||||
|
resp cms_api_struct.RemoveGroupMembersResponse
|
||||||
|
reqPb pbGroup.AddGroupMembersCMSReq
|
||||||
|
)
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
log.NewError(reqPb.OperationId, utils.GetSelfFuncName(), "BindJSON failed ", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
reqPb.UserIds = req.Members
|
||||||
|
reqPb.GroupId = req.GroupId
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName)
|
||||||
|
client := pbGroup.NewGroupClient(etcdConn)
|
||||||
|
respPb, err := client.AddGroupMembersCMS(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(reqPb.OperationId, utils.GetSelfFuncName(), "AddGroupMembersCMS failed", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, err, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp.Success = respPb.Success
|
||||||
|
resp.Failed = respPb.Failed
|
||||||
|
openIMHttp.RespHttp200(c, constant.OK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func RemoveGroupMembers(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req cms_api_struct.RemoveGroupMembersRequest
|
||||||
|
resp cms_api_struct.RemoveGroupMembersResponse
|
||||||
|
reqPb pbGroup.RemoveGroupMembersCMSReq
|
||||||
|
)
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "BindJSON failed ", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
reqPb.UserIds = req.Members
|
||||||
|
reqPb.GroupId = req.GroupId
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName)
|
||||||
|
client := pbGroup.NewGroupClient(etcdConn)
|
||||||
|
respPb, err := client.RemoveGroupMembersCMS(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "RemoveGroupMembersCMS failed", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, err, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp.Success = respPb.Success
|
||||||
|
resp.Failed = respPb.Failed
|
||||||
|
openIMHttp.RespHttp200(c, constant.OK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func DeleteGroup(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req cms_api_struct.DeleteGroupRequest
|
||||||
|
_ cms_api_struct.DeleteGroupResponse
|
||||||
|
reqPb pbGroup.DeleteGroupReq
|
||||||
|
)
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "BindJSON failed ", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
reqPb.GroupId = req.GroupId
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName)
|
||||||
|
client := pbGroup.NewGroupClient(etcdConn)
|
||||||
|
_, err := client.DeleteGroup(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "DeleteGroup failed", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, err, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
openIMHttp.RespHttp200(c, constant.OK, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
func SetGroupMaster(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req cms_api_struct.SetGroupMasterRequest
|
||||||
|
_ cms_api_struct.SetGroupMasterResponse
|
||||||
|
reqPb pbGroup.OperateUserRoleReq
|
||||||
|
)
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "BindJSON failed ", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
reqPb.GroupId = req.GroupId
|
||||||
|
reqPb.UserId = req.UserId
|
||||||
|
reqPb.RoleLevel = constant.GroupOwner
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName)
|
||||||
|
client := pbGroup.NewGroupClient(etcdConn)
|
||||||
|
_, err := client.OperateUserRole(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "DeleteGroup failed", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, constant.ErrServer, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
openIMHttp.RespHttp200(c, constant.OK, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
func SetGroupOrdinaryUsers(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req cms_api_struct.SetGroupMemberRequest
|
||||||
|
_ cms_api_struct.AdminLoginResponse
|
||||||
|
reqPb pbGroup.OperateUserRoleReq
|
||||||
|
)
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "BindJSON failed ", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
reqPb.GroupId = req.GroupId
|
||||||
|
reqPb.UserId = req.UserId
|
||||||
|
reqPb.RoleLevel = constant.GroupOrdinaryUsers
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName)
|
||||||
|
client := pbGroup.NewGroupClient(etcdConn)
|
||||||
|
_, err := client.OperateUserRole(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "DeleteGroup failed", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, err, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
openIMHttp.RespHttp200(c, constant.OK, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
func AlterGroupInfo(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req cms_api_struct.AlterGroupInfoRequest
|
||||||
|
_ cms_api_struct.SetGroupMasterResponse
|
||||||
|
reqPb pbGroup.SetGroupInfoReq
|
||||||
|
)
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "BindJSON failed ", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
reqPb.OpUserID = c.MustGet("userID").(string)
|
||||||
|
reqPb.GroupInfo = &commonPb.GroupInfo{
|
||||||
|
GroupID: req.GroupID,
|
||||||
|
GroupName: req.GroupName,
|
||||||
|
Introduction: req.Introduction,
|
||||||
|
Notification: req.Notification,
|
||||||
|
FaceURL: req.ProfilePhoto,
|
||||||
|
GroupType: int32(req.GroupType),
|
||||||
|
}
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName)
|
||||||
|
client := pbGroup.NewGroupClient(etcdConn)
|
||||||
|
_, err := client.SetGroupInfo(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "DeleteGroup failed", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, err, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
openIMHttp.RespHttp200(c, constant.OK, nil)
|
||||||
|
}
|
@ -0,0 +1,109 @@
|
|||||||
|
package messageCMS
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Open_IM/pkg/cms_api_struct"
|
||||||
|
"Open_IM/pkg/common/config"
|
||||||
|
openIMHttp "Open_IM/pkg/common/http"
|
||||||
|
"Open_IM/pkg/common/log"
|
||||||
|
"Open_IM/pkg/grpc-etcdv3/getcdv3"
|
||||||
|
pbMessage "Open_IM/pkg/proto/message_cms"
|
||||||
|
pbCommon "Open_IM/pkg/proto/sdk_ws"
|
||||||
|
"Open_IM/pkg/utils"
|
||||||
|
"context"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"Open_IM/pkg/common/constant"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
func BroadcastMessage(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
reqPb pbMessage.BoradcastMessageReq
|
||||||
|
)
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImMessageCMSName)
|
||||||
|
client := pbMessage.NewMessageCMSClient(etcdConn)
|
||||||
|
_, err := client.BoradcastMessage(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "GetChatLogs rpc failed", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, err, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
openIMHttp.RespHttp200(c, constant.OK, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
func MassSendMassage(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
reqPb pbMessage.MassSendMessageReq
|
||||||
|
)
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImMessageCMSName)
|
||||||
|
client := pbMessage.NewMessageCMSClient(etcdConn)
|
||||||
|
_, err := client.MassSendMessage(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "GetChatLogs rpc failed", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, err, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
openIMHttp.RespHttp200(c, constant.OK, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
func WithdrawMessage(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
reqPb pbMessage.WithdrawMessageReq
|
||||||
|
)
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImMessageCMSName)
|
||||||
|
client := pbMessage.NewMessageCMSClient(etcdConn)
|
||||||
|
_, err := client.WithdrawMessage(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "GetChatLogs rpc failed", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, err, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
openIMHttp.RespHttp200(c, constant.OK, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetChatLogs(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req cms_api_struct.GetChatLogsRequest
|
||||||
|
resp cms_api_struct.GetChatLogsResponse
|
||||||
|
reqPb pbMessage.GetChatLogsReq
|
||||||
|
)
|
||||||
|
if err := c.ShouldBindQuery(&req); err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "ShouldBindQuery failed ", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, constant.ErrArgs, resp)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
reqPb.Pagination = &pbCommon.RequestPagination{
|
||||||
|
PageNumber: int32(req.PageNumber),
|
||||||
|
ShowNumber: int32(req.ShowNumber),
|
||||||
|
}
|
||||||
|
utils.CopyStructFields(&reqPb, &req)
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImMessageCMSName)
|
||||||
|
client := pbMessage.NewMessageCMSClient(etcdConn)
|
||||||
|
respPb, err := client.GetChatLogs(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "GetChatLogs rpc failed", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, err, resp)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
//utils.CopyStructFields(&resp, &respPb)
|
||||||
|
for _, chatLog := range respPb.ChatLogs {
|
||||||
|
resp.ChatLogs = append(resp.ChatLogs, cms_api_struct.ChatLog{
|
||||||
|
SessionType: int(chatLog.SessionType),
|
||||||
|
ContentType: int(chatLog.ContentType),
|
||||||
|
SenderNickName: chatLog.SenderNickName,
|
||||||
|
SenderId: chatLog.SenderId,
|
||||||
|
SearchContent: chatLog.SearchContent,
|
||||||
|
WholeContent: chatLog.WholeContent,
|
||||||
|
ReceiverNickName: chatLog.ReciverNickName,
|
||||||
|
ReceiverID: chatLog.ReciverId,
|
||||||
|
GroupName: chatLog.GroupName,
|
||||||
|
GroupId: chatLog.GroupId,
|
||||||
|
Date: chatLog.Date,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
resp.ShowNumber = int(respPb.Pagination.ShowNumber)
|
||||||
|
resp.CurrentPage = int(respPb.Pagination.CurrentPage)
|
||||||
|
resp.ChatLogsNum = int(respPb.ChatLogsNum)
|
||||||
|
openIMHttp.RespHttp200(c, constant.OK, resp)
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
package middleware
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
func CorsHandler() gin.HandlerFunc {
|
||||||
|
return func(context *gin.Context) {
|
||||||
|
context.Writer.Header().Set("Access-Control-Allow-Origin", "*")
|
||||||
|
context.Header("Access-Control-Allow-Methods", "*")
|
||||||
|
context.Header("Access-Control-Allow-Headers", "*")
|
||||||
|
context.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers,Cache-Control,Content-Language,Content-Type,Expires,Last-Modified,Pragma,FooBar") // 跨域关键设置 让浏览器可以解析
|
||||||
|
context.Header("Access-Control-Max-Age", "172800") // 缓存请求信息 单位为秒
|
||||||
|
context.Header("Access-Control-Allow-Credentials", "false") // 跨域请求是否需要带cookie信息 默认设置为true
|
||||||
|
context.Header("content-type", "application/json") // 设置返回格式是json
|
||||||
|
//Release all option pre-requests
|
||||||
|
if context.Request.Method == http.MethodOptions {
|
||||||
|
context.JSON(http.StatusOK, "Options Request!")
|
||||||
|
}
|
||||||
|
context.Next()
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,24 @@
|
|||||||
|
package middleware
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Open_IM/pkg/common/constant"
|
||||||
|
"Open_IM/pkg/common/http"
|
||||||
|
"Open_IM/pkg/common/log"
|
||||||
|
"Open_IM/pkg/common/token_verify"
|
||||||
|
"Open_IM/pkg/utils"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
func JWTAuth() gin.HandlerFunc {
|
||||||
|
return func(c *gin.Context) {
|
||||||
|
ok, userID := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), "")
|
||||||
|
log.NewInfo("0", utils.GetSelfFuncName(), "userID: ", userID)
|
||||||
|
c.Set("userID", userID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError("","GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.Abort()
|
||||||
|
http.RespHttp200(c, constant.ErrParseToken, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,49 @@
|
|||||||
|
package organization
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetStaffs(c *gin.Context) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetOrganizations(c *gin.Context) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetSquads(c *gin.Context) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func AlterStaff(c *gin.Context) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func AddOrganization(c *gin.Context) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func InquireOrganization(g *gin.Context) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func AlterOrganization(c *gin.Context) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func DeleteOrganization(g *gin.Context) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetOrganizationSquads(c *gin.Context) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func AlterStaffsInfo(c *gin.Context) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func AddChildOrganization(c *gin.Context) {
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,95 @@
|
|||||||
|
package cms_api
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Open_IM/internal/cms_api/admin"
|
||||||
|
"Open_IM/internal/cms_api/group"
|
||||||
|
messageCMS "Open_IM/internal/cms_api/message_cms"
|
||||||
|
"Open_IM/internal/cms_api/middleware"
|
||||||
|
"Open_IM/internal/cms_api/organization"
|
||||||
|
"Open_IM/internal/cms_api/statistics"
|
||||||
|
"Open_IM/internal/cms_api/user"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
func NewGinRouter() *gin.Engine {
|
||||||
|
gin.SetMode(gin.ReleaseMode)
|
||||||
|
baseRouter := gin.Default()
|
||||||
|
router := baseRouter.Group("/api")
|
||||||
|
router.Use(middleware.CorsHandler())
|
||||||
|
adminRouterGroup := router.Group("/admin")
|
||||||
|
{
|
||||||
|
adminRouterGroup.POST("/login", admin.AdminLogin)
|
||||||
|
}
|
||||||
|
r2 := router.Group("")
|
||||||
|
r2.Use(middleware.JWTAuth())
|
||||||
|
statisticsRouterGroup := r2.Group("/statistics")
|
||||||
|
{
|
||||||
|
statisticsRouterGroup.GET("/get_messages_statistics", statistics.GetMessagesStatistics)
|
||||||
|
statisticsRouterGroup.GET("/get_user_statistics", statistics.GetUserStatistics)
|
||||||
|
statisticsRouterGroup.GET("/get_group_statistics", statistics.GetGroupStatistics)
|
||||||
|
statisticsRouterGroup.GET("/get_active_user", statistics.GetActiveUser)
|
||||||
|
statisticsRouterGroup.GET("/get_active_group", statistics.GetActiveGroup)
|
||||||
|
}
|
||||||
|
organizationRouterGroup := r2.Group("/organization")
|
||||||
|
{
|
||||||
|
organizationRouterGroup.GET("/get_staffs", organization.GetStaffs)
|
||||||
|
organizationRouterGroup.GET("/get_organizations", organization.GetOrganizations)
|
||||||
|
organizationRouterGroup.GET("/get_squad", organization.GetSquads)
|
||||||
|
organizationRouterGroup.POST("/add_organization", organization.AddOrganization)
|
||||||
|
organizationRouterGroup.POST("/alter_staff", organization.AlterStaff)
|
||||||
|
organizationRouterGroup.GET("/inquire_organization", organization.InquireOrganization)
|
||||||
|
organizationRouterGroup.POST("/alter_organization", organization.AlterOrganization)
|
||||||
|
organizationRouterGroup.POST("/delete_organization", organization.DeleteOrganization)
|
||||||
|
organizationRouterGroup.POST("/get_organization_squad", organization.GetOrganizationSquads)
|
||||||
|
organizationRouterGroup.PATCH("/alter_corps_info", organization.AlterStaffsInfo)
|
||||||
|
organizationRouterGroup.POST("/add_child_org", organization.AddChildOrganization)
|
||||||
|
}
|
||||||
|
groupRouterGroup := r2.Group("/group")
|
||||||
|
{
|
||||||
|
groupRouterGroup.GET("/get_group_by_id", group.GetGroupById)
|
||||||
|
groupRouterGroup.GET("/get_groups", group.GetGroups)
|
||||||
|
groupRouterGroup.GET("/get_group_by_name", group.GetGroupByName)
|
||||||
|
groupRouterGroup.GET("/get_group_members", group.GetGroupMembers)
|
||||||
|
groupRouterGroup.POST("/create_group", group.CreateGroup)
|
||||||
|
groupRouterGroup.POST("/add_members", group.AddGroupMembers)
|
||||||
|
groupRouterGroup.POST("/remove_members", group.RemoveGroupMembers)
|
||||||
|
groupRouterGroup.POST("/ban_group_private_chat", group.BanPrivateChat)
|
||||||
|
groupRouterGroup.POST("/open_group_private_chat", group.OpenPrivateChat)
|
||||||
|
groupRouterGroup.POST("/ban_group_chat", group.BanGroupChat)
|
||||||
|
groupRouterGroup.POST("/open_group_chat", group.OpenGroupChat)
|
||||||
|
groupRouterGroup.POST("/delete_group", group.DeleteGroup)
|
||||||
|
groupRouterGroup.POST("/get_members_in_group", group.GetGroupMembers)
|
||||||
|
groupRouterGroup.POST("/set_group_master", group.SetGroupMaster)
|
||||||
|
groupRouterGroup.POST("/set_group_ordinary_user", group.SetGroupOrdinaryUsers)
|
||||||
|
groupRouterGroup.POST("/alter_group_info", group.AlterGroupInfo)
|
||||||
|
}
|
||||||
|
userRouterGroup := r2.Group("/user")
|
||||||
|
{
|
||||||
|
userRouterGroup.POST("/resign", user.ResignUser)
|
||||||
|
userRouterGroup.GET("/get_user", user.GetUserById)
|
||||||
|
userRouterGroup.POST("/alter_user", user.AlterUser)
|
||||||
|
userRouterGroup.GET("/get_users", user.GetUsers)
|
||||||
|
userRouterGroup.POST("/add_user", user.AddUser)
|
||||||
|
userRouterGroup.POST("/unblock_user", user.UnblockUser)
|
||||||
|
userRouterGroup.POST("/block_user", user.BlockUser)
|
||||||
|
userRouterGroup.GET("/get_block_users", user.GetBlockUsers)
|
||||||
|
userRouterGroup.GET("/get_block_user", user.GetBlockUserById)
|
||||||
|
userRouterGroup.POST("/delete_user", user.DeleteUser)
|
||||||
|
userRouterGroup.GET("/get_users_by_name", user.GetUsersByName)
|
||||||
|
}
|
||||||
|
friendRouterGroup := r2.Group("/friend")
|
||||||
|
{
|
||||||
|
friendRouterGroup.POST("/get_friends_by_id")
|
||||||
|
friendRouterGroup.POST("/set_friend")
|
||||||
|
friendRouterGroup.POST("/remove_friend")
|
||||||
|
}
|
||||||
|
messageCMSRouterGroup := r2.Group("/message")
|
||||||
|
{
|
||||||
|
messageCMSRouterGroup.GET("/get_chat_logs", messageCMS.GetChatLogs)
|
||||||
|
messageCMSRouterGroup.POST("/broadcast_message", messageCMS.BroadcastMessage)
|
||||||
|
messageCMSRouterGroup.POST("/mass_send_message", messageCMS.MassSendMassage)
|
||||||
|
messageCMSRouterGroup.POST("/withdraw_message", messageCMS.WithdrawMessage)
|
||||||
|
}
|
||||||
|
return baseRouter
|
||||||
|
}
|
@ -0,0 +1,224 @@
|
|||||||
|
package statistics
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Open_IM/pkg/cms_api_struct"
|
||||||
|
"Open_IM/pkg/common/config"
|
||||||
|
"Open_IM/pkg/common/constant"
|
||||||
|
openIMHttp "Open_IM/pkg/common/http"
|
||||||
|
"Open_IM/pkg/common/log"
|
||||||
|
"Open_IM/pkg/grpc-etcdv3/getcdv3"
|
||||||
|
pb "Open_IM/pkg/proto/statistics"
|
||||||
|
"Open_IM/pkg/utils"
|
||||||
|
"context"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetMessagesStatistics(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req cms_api_struct.GetMessageStatisticsRequest
|
||||||
|
resp cms_api_struct.GetMessageStatisticsResponse
|
||||||
|
reqPb pb.GetMessageStatisticsReq
|
||||||
|
)
|
||||||
|
reqPb.StatisticsReq = &pb.StatisticsReq{}
|
||||||
|
if err := c.ShouldBindQuery(&req); err != nil {
|
||||||
|
log.NewError("0", utils.GetSelfFuncName(), "BindJSON failed ", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
utils.CopyStructFields(&reqPb.StatisticsReq, &req)
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImStatisticsName)
|
||||||
|
client := pb.NewUserClient(etcdConn)
|
||||||
|
respPb, err := client.GetMessageStatistics(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "GetMessageStatistics failed", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, err, resp)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// utils.CopyStructFields(&resp, respPb)
|
||||||
|
resp.GroupMessageNum = int(respPb.GroupMessageNum)
|
||||||
|
resp.PrivateMessageNum = int(respPb.PrivateMessageNum)
|
||||||
|
for _, v := range respPb.PrivateMessageNumList {
|
||||||
|
resp.PrivateMessageNumList = append(resp.PrivateMessageNumList, struct {
|
||||||
|
Date string "json:\"date\""
|
||||||
|
MessageNum int "json:\"message_num\""
|
||||||
|
}{
|
||||||
|
Date: v.Date,
|
||||||
|
MessageNum: int(v.Num),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
for _, v := range respPb.GroupMessageNumList {
|
||||||
|
resp.GroupMessageNumList = append(resp.GroupMessageNumList, struct {
|
||||||
|
Date string "json:\"date\""
|
||||||
|
MessageNum int "json:\"message_num\""
|
||||||
|
}{
|
||||||
|
Date: v.Date,
|
||||||
|
MessageNum: int(v.Num),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
openIMHttp.RespHttp200(c, constant.OK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetUserStatistics(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req cms_api_struct.GetUserStatisticsRequest
|
||||||
|
resp cms_api_struct.GetUserStatisticsResponse
|
||||||
|
reqPb pb.GetUserStatisticsReq
|
||||||
|
)
|
||||||
|
reqPb.StatisticsReq = &pb.StatisticsReq{}
|
||||||
|
if err := c.ShouldBindQuery(&req); err != nil {
|
||||||
|
log.NewError("0", utils.GetSelfFuncName(), "BindJSON failed ", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
utils.CopyStructFields(&reqPb.StatisticsReq, &req)
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImStatisticsName)
|
||||||
|
client := pb.NewUserClient(etcdConn)
|
||||||
|
respPb, err := client.GetUserStatistics(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError("0", utils.GetSelfFuncName(), "GetUserStatistics failed", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, err, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// utils.CopyStructFields(&resp, respPb)
|
||||||
|
resp.ActiveUserNum = int(respPb.ActiveUserNum)
|
||||||
|
resp.IncreaseUserNum = int(respPb.IncreaseUserNum)
|
||||||
|
resp.TotalUserNum = int(respPb.TotalUserNum)
|
||||||
|
for _, v := range respPb.ActiveUserNumList {
|
||||||
|
resp.ActiveUserNumList = append(resp.ActiveUserNumList, struct {
|
||||||
|
Date string "json:\"date\""
|
||||||
|
ActiveUserNum int "json:\"active_user_num\""
|
||||||
|
}{
|
||||||
|
Date: v.Date,
|
||||||
|
ActiveUserNum: int(v.Num),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
for _, v := range respPb.IncreaseUserNumList {
|
||||||
|
resp.IncreaseUserNumList = append(resp.IncreaseUserNumList, struct {
|
||||||
|
Date string "json:\"date\""
|
||||||
|
IncreaseUserNum int "json:\"increase_user_num\""
|
||||||
|
}{
|
||||||
|
Date: v.Date,
|
||||||
|
IncreaseUserNum: int(v.Num),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
for _, v := range respPb.TotalUserNumList {
|
||||||
|
resp.TotalUserNumList = append(resp.TotalUserNumList, struct {
|
||||||
|
Date string "json:\"date\""
|
||||||
|
TotalUserNum int "json:\"total_user_num\""
|
||||||
|
}{
|
||||||
|
Date: v.Date,
|
||||||
|
TotalUserNum: int(v.Num),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
openIMHttp.RespHttp200(c, constant.OK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetGroupStatistics(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req cms_api_struct.GetGroupStatisticsRequest
|
||||||
|
resp cms_api_struct.GetGroupStatisticsResponse
|
||||||
|
reqPb pb.GetGroupStatisticsReq
|
||||||
|
)
|
||||||
|
reqPb.StatisticsReq = &pb.StatisticsReq{}
|
||||||
|
if err := c.ShouldBindQuery(&req); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
utils.CopyStructFields(&reqPb.StatisticsReq, &req)
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImStatisticsName)
|
||||||
|
client := pb.NewUserClient(etcdConn)
|
||||||
|
respPb, err := client.GetGroupStatistics(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "GetGroupStatistics failed", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, err, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// utils.CopyStructFields(&resp, respPb)
|
||||||
|
resp.IncreaseGroupNum = int(respPb.GetIncreaseGroupNum())
|
||||||
|
resp.TotalGroupNum = int(respPb.GetTotalGroupNum())
|
||||||
|
for _, v := range respPb.IncreaseGroupNumList {
|
||||||
|
resp.IncreaseGroupNumList = append(resp.IncreaseGroupNumList,
|
||||||
|
struct {
|
||||||
|
Date string "json:\"date\""
|
||||||
|
IncreaseGroupNum int "json:\"increase_group_num\""
|
||||||
|
}{
|
||||||
|
Date: v.Date,
|
||||||
|
IncreaseGroupNum: int(v.Num),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
for _, v := range respPb.TotalGroupNumList {
|
||||||
|
resp.TotalGroupNumList = append(resp.TotalGroupNumList,
|
||||||
|
struct {
|
||||||
|
Date string "json:\"date\""
|
||||||
|
TotalGroupNum int "json:\"total_group_num\""
|
||||||
|
}{
|
||||||
|
Date: v.Date,
|
||||||
|
TotalGroupNum: int(v.Num),
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
openIMHttp.RespHttp200(c, constant.OK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetActiveUser(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req cms_api_struct.GetActiveUserRequest
|
||||||
|
resp cms_api_struct.GetActiveUserResponse
|
||||||
|
reqPb pb.GetActiveUserReq
|
||||||
|
)
|
||||||
|
reqPb.StatisticsReq = &pb.StatisticsReq{}
|
||||||
|
if err := c.ShouldBindQuery(&req); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
utils.CopyStructFields(&reqPb.StatisticsReq, req)
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImStatisticsName)
|
||||||
|
client := pb.NewUserClient(etcdConn)
|
||||||
|
respPb, err := client.GetActiveUser(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "GetActiveUser failed ", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, err, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
utils.CopyStructFields(&resp.ActiveUserList, respPb.Users)
|
||||||
|
openIMHttp.RespHttp200(c, constant.OK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetActiveGroup(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req cms_api_struct.GetActiveGroupRequest
|
||||||
|
resp cms_api_struct.GetActiveGroupResponse
|
||||||
|
reqPb pb.GetActiveGroupReq
|
||||||
|
)
|
||||||
|
reqPb.StatisticsReq = &pb.StatisticsReq{}
|
||||||
|
if err := c.ShouldBindQuery(&req); err != nil {
|
||||||
|
log.NewError("0", utils.GetSelfFuncName(), "BindJSON failed ", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
utils.CopyStructFields(&reqPb.StatisticsReq, req)
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImStatisticsName)
|
||||||
|
client := pb.NewUserClient(etcdConn)
|
||||||
|
respPb, err := client.GetActiveGroup(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError("0", utils.GetSelfFuncName(), "GetActiveGroup failed ", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, err, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for _, group := range respPb.Groups {
|
||||||
|
resp.ActiveGroupList = append(resp.ActiveGroupList, struct {
|
||||||
|
GroupName string "json:\"group_name\""
|
||||||
|
GroupId string "json:\"group_id\""
|
||||||
|
MessageNum int "json:\"message_num\""
|
||||||
|
}{
|
||||||
|
GroupName: group.GroupName,
|
||||||
|
GroupId: group.GroupId,
|
||||||
|
MessageNum: int(group.MessageNum),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
openIMHttp.RespHttp200(c, constant.OK, resp)
|
||||||
|
}
|
@ -0,0 +1,307 @@
|
|||||||
|
package user
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Open_IM/pkg/cms_api_struct"
|
||||||
|
"Open_IM/pkg/common/config"
|
||||||
|
"Open_IM/pkg/common/constant"
|
||||||
|
openIMHttp "Open_IM/pkg/common/http"
|
||||||
|
"Open_IM/pkg/common/log"
|
||||||
|
"Open_IM/pkg/grpc-etcdv3/getcdv3"
|
||||||
|
commonPb "Open_IM/pkg/proto/sdk_ws"
|
||||||
|
pb "Open_IM/pkg/proto/user"
|
||||||
|
"Open_IM/pkg/utils"
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetUserById(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req cms_api_struct.GetUserRequest
|
||||||
|
resp cms_api_struct.GetUserResponse
|
||||||
|
reqPb pb.GetUserByIdReq
|
||||||
|
)
|
||||||
|
if err := c.ShouldBindQuery(&req); err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "ShouldBindQuery failed ", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
utils.CopyStructFields(&reqPb, &req)
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName)
|
||||||
|
client := pb.NewUserClient(etcdConn)
|
||||||
|
respPb, err := client.GetUserById(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, err, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if respPb.User.UserId == "" {
|
||||||
|
openIMHttp.RespHttp200(c, constant.OK, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
utils.CopyStructFields(&resp, respPb.User)
|
||||||
|
openIMHttp.RespHttp200(c, constant.OK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetUsersByName(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req cms_api_struct.GetUsersByNameRequest
|
||||||
|
resp cms_api_struct.GetUsersByNameResponse
|
||||||
|
reqPb pb.GetUsersByNameReq
|
||||||
|
)
|
||||||
|
if err := c.ShouldBindQuery(&req); err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "ShouldBindQuery failed", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
reqPb.UserName = req.UserName
|
||||||
|
reqPb.Pagination = &commonPb.RequestPagination{
|
||||||
|
PageNumber: int32(req.PageNumber),
|
||||||
|
ShowNumber: int32(req.ShowNumber),
|
||||||
|
}
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName)
|
||||||
|
client := pb.NewUserClient(etcdConn)
|
||||||
|
respPb, err := client.GetUsersByName(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "rpc", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, err, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
utils.CopyStructFields(&resp.Users, respPb.Users)
|
||||||
|
resp.ShowNumber = int(respPb.Pagination.ShowNumber)
|
||||||
|
resp.CurrentPage = int(respPb.Pagination.CurrentPage)
|
||||||
|
resp.UserNums = respPb.UserNums
|
||||||
|
openIMHttp.RespHttp200(c, constant.OK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetUsers(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req cms_api_struct.GetUsersRequest
|
||||||
|
resp cms_api_struct.GetUsersResponse
|
||||||
|
reqPb pb.GetUsersReq
|
||||||
|
)
|
||||||
|
reqPb.Pagination = &commonPb.RequestPagination{}
|
||||||
|
if err := c.ShouldBindQuery(&req); err != nil {
|
||||||
|
log.NewError("0", "ShouldBindQuery failed ", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
utils.CopyStructFields(&reqPb.Pagination, &req)
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName)
|
||||||
|
client := pb.NewUserClient(etcdConn)
|
||||||
|
respPb, err := client.GetUsers(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
openIMHttp.RespHttp200(c, err, resp)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
utils.CopyStructFields(&resp.Users, respPb.User)
|
||||||
|
resp.ShowNumber = int(respPb.Pagination.ShowNumber)
|
||||||
|
resp.CurrentPage = int(respPb.Pagination.CurrentPage)
|
||||||
|
resp.UserNums = respPb.UserNums
|
||||||
|
openIMHttp.RespHttp200(c, constant.OK, resp)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func ResignUser(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req cms_api_struct.ResignUserRequest
|
||||||
|
resp cms_api_struct.ResignUserResponse
|
||||||
|
reqPb pb.ResignUserReq
|
||||||
|
)
|
||||||
|
if err := c.ShouldBind(&req); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": http.StatusBadRequest, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
utils.CopyStructFields(&reqPb, &req)
|
||||||
|
fmt.Println(reqPb.UserId)
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName)
|
||||||
|
client := pb.NewUserClient(etcdConn)
|
||||||
|
_, err := client.ResignUser(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
openIMHttp.RespHttp200(c, err, resp)
|
||||||
|
}
|
||||||
|
openIMHttp.RespHttp200(c, constant.OK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func AlterUser(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req cms_api_struct.AlterUserRequest
|
||||||
|
resp cms_api_struct.AlterUserResponse
|
||||||
|
reqPb pb.AlterUserReq
|
||||||
|
)
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, constant.ErrArgs, resp)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
utils.CopyStructFields(&reqPb, &req)
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName)
|
||||||
|
client := pb.NewUserClient(etcdConn)
|
||||||
|
_, err := client.AlterUser(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError("0", "microserver failed ", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, err, nil)
|
||||||
|
}
|
||||||
|
openIMHttp.RespHttp200(c, constant.OK, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
func AddUser(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req cms_api_struct.AddUserRequest
|
||||||
|
reqPb pb.AddUserReq
|
||||||
|
)
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "BindJSON failed ", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
utils.CopyStructFields(&reqPb, &req)
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName)
|
||||||
|
client := pb.NewUserClient(etcdConn)
|
||||||
|
_, err := client.AddUser(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
openIMHttp.RespHttp200(c, err, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
openIMHttp.RespHttp200(c, constant.OK, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
func BlockUser(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req cms_api_struct.BlockUserRequest
|
||||||
|
resp cms_api_struct.BlockUserResponse
|
||||||
|
reqPb pb.BlockUserReq
|
||||||
|
)
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, constant.ErrArgs, resp)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
utils.CopyStructFields(&reqPb, &req)
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName)
|
||||||
|
client := pb.NewUserClient(etcdConn)
|
||||||
|
fmt.Println(reqPb)
|
||||||
|
_, err := client.BlockUser(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
openIMHttp.RespHttp200(c, err, resp)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
openIMHttp.RespHttp200(c, constant.OK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func UnblockUser(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req cms_api_struct.UnblockUserRequest
|
||||||
|
resp cms_api_struct.UnBlockUserResponse
|
||||||
|
reqPb pb.UnBlockUserReq
|
||||||
|
)
|
||||||
|
if err := c.ShouldBind(&req); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, constant.ErrArgs, resp)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
utils.CopyStructFields(&reqPb, &req)
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName)
|
||||||
|
client := pb.NewUserClient(etcdConn)
|
||||||
|
_, err := client.UnBlockUser(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
openIMHttp.RespHttp200(c, err, resp)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
openIMHttp.RespHttp200(c, constant.OK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetBlockUsers(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req cms_api_struct.GetBlockUsersRequest
|
||||||
|
resp cms_api_struct.GetBlockUsersResponse
|
||||||
|
reqPb pb.GetBlockUsersReq
|
||||||
|
respPb *pb.GetBlockUsersResp
|
||||||
|
)
|
||||||
|
reqPb.Pagination = &commonPb.RequestPagination{}
|
||||||
|
if err := c.ShouldBindQuery(&req); err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "ShouldBindQuery failed ", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, constant.ErrArgs, resp)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
utils.CopyStructFields(&reqPb.Pagination, &req)
|
||||||
|
log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "blockUsers", reqPb.Pagination, req)
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName)
|
||||||
|
client := pb.NewUserClient(etcdConn)
|
||||||
|
respPb, err := client.GetBlockUsers(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "GetBlockUsers rpc", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, err, resp)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for _, v := range respPb.BlockUsers {
|
||||||
|
resp.BlockUsers = append(resp.BlockUsers, cms_api_struct.BlockUser{
|
||||||
|
UserResponse: cms_api_struct.UserResponse{
|
||||||
|
UserId: v.User.UserId,
|
||||||
|
ProfilePhoto: v.User.ProfilePhoto,
|
||||||
|
Nickname: v.User.Nickname,
|
||||||
|
IsBlock: v.User.IsBlock,
|
||||||
|
CreateTime: v.User.CreateTime,
|
||||||
|
},
|
||||||
|
BeginDisableTime: v.BeginDisableTime,
|
||||||
|
EndDisableTime: v.EndDisableTime,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
resp.ShowNumber = int(respPb.Pagination.ShowNumber)
|
||||||
|
resp.CurrentPage = int(respPb.Pagination.CurrentPage)
|
||||||
|
resp.UserNums = respPb.UserNums
|
||||||
|
openIMHttp.RespHttp200(c, constant.OK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetBlockUserById(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req cms_api_struct.GetBlockUserRequest
|
||||||
|
resp cms_api_struct.GetBlockUserResponse
|
||||||
|
reqPb pb.GetBlockUserByIdReq
|
||||||
|
)
|
||||||
|
if err := c.ShouldBindQuery(&req); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
reqPb.UserId = req.UserId
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName)
|
||||||
|
client := pb.NewUserClient(etcdConn)
|
||||||
|
respPb, err := client.GetBlockUserById(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError("0", "GetBlockUserById rpc failed ", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, err, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp.EndDisableTime = respPb.BlockUser.EndDisableTime
|
||||||
|
resp.BeginDisableTime = respPb.BlockUser.BeginDisableTime
|
||||||
|
utils.CopyStructFields(&resp, respPb.BlockUser.User)
|
||||||
|
openIMHttp.RespHttp200(c, constant.OK, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func DeleteUser(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
req cms_api_struct.DeleteUserRequest
|
||||||
|
reqPb pb.DeleteUserReq
|
||||||
|
)
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
log.NewError("0", "BindJSON failed ", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
reqPb.UserId = req.UserId
|
||||||
|
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName)
|
||||||
|
client := pb.NewUserClient(etcdConn)
|
||||||
|
_, err := client.DeleteUser(context.Background(), &reqPb)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError("0", "DeleteUser rpc failed ", err.Error())
|
||||||
|
openIMHttp.RespHttp200(c, err, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
openIMHttp.RespHttp200(c, constant.OK, nil)
|
||||||
|
}
|