From 539e0fdfb61f37d11e8701aac45f92989169a7c4 Mon Sep 17 00:00:00 2001 From: kubbot & kubecub <3293172751ysy@gmail.com> Date: Fri, 30 Jun 2023 09:45:02 +0800 Subject: [PATCH] feat: use robot to migrate code Signed-off-by: kubbot & kubecub <3293172751ysy@gmail.com> --- .docker-compose_cfg/config.yaml | 65 + .docker-compose_cfg/datasource-compose.yaml | 13 + .docker-compose_cfg/grafana.db | Bin 0 -> 888832 bytes .docker-compose_cfg/grafana.ini | 1285 +++ .../node-exporter-full_rev1.json | 7253 +++++++++++++++++ .docker-compose_cfg/prometheus-compose.yml | 71 + cmd/api/Makefile | 34 + cmd/api/deploy.Dockerfile | 18 + cmd/api/main.go | 83 + cmd/cmdutils/Makefile | 34 + cmd/cmdutils/main.go | 45 + cmd/crontask/Makefile | 34 + cmd/crontask/deploy.Dockerfile | 18 + cmd/crontask/main.go | 13 + cmd/msggateway/Makefile | 35 + cmd/msggateway/deploy.Dockerfile | 18 + cmd/msggateway/main.go | 15 + cmd/msgtransfer/Makefile | 34 + cmd/msgtransfer/deploy.Dockerfile | 18 + cmd/msgtransfer/main.go | 13 + cmd/open_im_api/Makefile | 25 - cmd/open_im_api/main.go | 188 - cmd/open_im_cms_api/Makefile | 25 - cmd/open_im_cms_api/main.go | 22 - cmd/open_im_demo/Makefile | 25 - cmd/open_im_demo/main.go | 42 - cmd/open_im_msg_gateway/Makefile | 24 - cmd/open_im_msg_gateway/main.go | 23 - cmd/open_im_msg_transfer/Makefile | 25 - cmd/open_im_msg_transfer/main.go | 19 - cmd/open_im_push/Makefile | 25 - cmd/open_im_push/main.go | 22 - cmd/open_im_timer_task/Makefile | 25 - cmd/open_im_timer_task/main.go | 63 - cmd/openim-sdk-core | 1 - cmd/push/Makefile | 34 + cmd/push/deploy.Dockerfile | 18 + cmd/push/main.go | 19 + cmd/rpc/{open_im_group => auth}/Makefile | 21 +- cmd/rpc/auth/deploy.Dockerfile | 18 + cmd/rpc/auth/main.go | 19 + cmd/rpc/conversation/Makefile | 34 + cmd/rpc/conversation/deploy.Dockerfile | 18 + cmd/rpc/conversation/main.go | 19 + cmd/rpc/friend/Makefile | 36 + cmd/rpc/friend/deploy.Dockerfile | 18 + cmd/rpc/friend/main.go | 19 + cmd/rpc/group/Makefile | 39 + cmd/rpc/group/deploy.Dockerfile | 18 + cmd/rpc/group/main.go | 19 + .../{open_im_organization => msg}/Makefile | 19 +- cmd/rpc/msg/deploy.Dockerfile | 18 + cmd/rpc/msg/main.go | 19 + cmd/rpc/open_im_admin_cms/Makefile | 23 - cmd/rpc/open_im_admin_cms/main.go | 15 - cmd/rpc/open_im_auth/Makefile | 24 - cmd/rpc/open_im_auth/main.go | 16 - cmd/rpc/open_im_conversation/Makefile | 24 - cmd/rpc/open_im_conversation/main.go | 16 - cmd/rpc/open_im_friend/Makefile | 25 - cmd/rpc/open_im_friend/main.go | 16 - cmd/rpc/open_im_group/main.go | 15 - cmd/rpc/open_im_message_cms/Makefile | 23 - cmd/rpc/open_im_message_cms/main.go | 15 - cmd/rpc/open_im_msg/Makefile | 23 - cmd/rpc/open_im_msg/main.go | 15 - cmd/rpc/open_im_office/Makefile | 23 - cmd/rpc/open_im_office/main.go | 15 - cmd/rpc/open_im_organization/main.go | 15 - cmd/rpc/open_im_statistics/Makefile | 23 - cmd/rpc/open_im_statistics/main.go | 15 - cmd/rpc/open_im_user/Makefile | 25 - cmd/rpc/open_im_user/main.go | 15 - cmd/rpc/third/Makefile | 39 + cmd/rpc/third/deploy.Dockerfile | 18 + cmd/rpc/third/main.go | 19 + cmd/rpc/user/Makefile | 39 + cmd/rpc/user/deploy.Dockerfile | 18 + cmd/rpc/user/main.go | 19 + cmd/test/main.go | 69 - config/config.yaml | 854 +- config/notification.yaml | 313 + config/open-im-ng-example.conf | 11 - config/usualConfig.yaml | 158 - install_guide.sh | 177 + install_im_compose.sh | 21 + internal/api/auth.go | 27 + internal/api/auth/auth.go | 98 - internal/api/chat/del_msg.go | 43 - internal/api/chat/get_max_min_seq.go | 61 - internal/api/chat/pull_msg.go | 74 - internal/api/chat/send_msg.go | 99 - internal/api/conversation.go | 49 + internal/api/conversation/conversation.go | 250 - internal/api/custom_validator.go | 23 + internal/api/friend.go | 64 + internal/api/friend/friend.go | 456 -- internal/api/group.go | 116 + internal/api/group/group.go | 745 -- internal/api/manage/management_chat.go | 300 - internal/api/manage/management_user.go | 181 - internal/api/msg.go | 240 + internal/api/office/tag.go | 282 - internal/api/office/work_moments.go | 372 - internal/api/organization/organization.go | 480 -- internal/api/route.go | 182 + internal/api/statistics.go | 19 + internal/api/third.go | 82 + internal/api/third/ali_oss_credential.go | 101 - internal/api/third/minio_init.go | 70 - .../api/third/minio_storage_credential.go | 264 - .../third/tencent_cloud_storage_credential.go | 72 - internal/api/user.go | 59 + internal/api/user/user.go | 240 - internal/cms_api/admin/admin.go | 42 - internal/cms_api/group/group.go | 450 - internal/cms_api/message_cms/message.go | 109 - internal/cms_api/middleware/cors.go | 23 - internal/cms_api/middleware/jwt_auth.go | 26 - internal/cms_api/organization/organization.go | 49 - internal/cms_api/router.go | 95 - internal/cms_api/statistics/statistics.go | 224 - internal/cms_api/user/user.go | 311 - internal/demo/register/login.go | 76 - internal/demo/register/onboarding_process.go | 258 - internal/demo/register/reset_password.go | 58 - internal/demo/register/send_code.go | 130 - internal/demo/register/set_password.go | 100 - internal/demo/register/verify.go | 80 - internal/msg_gateway/gate/init.go | 35 - internal/msg_gateway/gate/logic.go | 300 - .../msg_gateway/gate/open_im_media/room.go | 22 - internal/msg_gateway/gate/rpc_server.go | 149 - internal/msg_gateway/gate/validate.go | 253 - internal/msg_gateway/gate/ws_server.go | 316 - internal/msg_transfer/logic/db.go | 29 - .../msg_transfer/logic/history_msg_handler.go | 145 - internal/msg_transfer/logic/init.go | 29 - .../logic/persistent_msg_handler.go | 81 - internal/msgtransfer/init.go | 3 - internal/push/callback.go | 116 + internal/push/consumer_init.go | 26 + internal/push/content_struct/content.go | 85 - internal/push/getui/push.go | 222 - internal/push/jpush/common/JGPlatform.go | 13 - internal/push/jpush/push.go | 74 - internal/push/logic/init.go | 39 - internal/push/logic/push_handler.go | 71 - internal/push/logic/push_rpc_server.go | 63 - internal/push/logic/push_to_client.go | 235 - internal/push/logic/tpns.go | 34 - internal/push/offlinepush/fcm/push.go | 122 + internal/push/offlinepush/fcm/push_test.go | 16 + internal/push/offlinepush/getui/body.go | 171 + internal/push/offlinepush/getui/push.go | 182 + .../jpush/body}/audience.go | 21 +- .../jpush/body}/message.go | 2 +- .../jpush/body}/notification.go | 26 +- .../jpush/body}/options.go | 2 +- .../jpush/body}/platform.go | 4 +- .../jpush/body/pushobj.go} | 2 +- internal/push/offlinepush/jpush/push.go | 63 + .../push/offlinepush/offlinepush_interface.go | 20 + internal/push/push_handler.go | 71 + internal/push/push_interface.go | 5 - internal/push/push_rpc_server.go | 70 + internal/push/push_to_client.go | 344 + .../sdk/tpns-server-sdk-go/go/auth/auth.go | 62 - .../tpns-server-sdk-go/go/client/client.go | 18 - .../go/common/http_helper.go | 62 - .../go/common/json_helper.go | 8 - .../push/sdk/tpns-server-sdk-go/go/def.go | 256 - .../push/sdk/tpns-server-sdk-go/go/req/req.go | 403 - internal/rpc/admin_cms/admin_cms.go | 87 - internal/rpc/auth/auth.go | 168 +- internal/rpc/auth/callback.go | 1 - internal/rpc/conversation/conversaion.go | 395 +- internal/rpc/friend/black.go | 72 + internal/rpc/friend/callback.go | 33 + internal/rpc/friend/firend.go | 519 -- internal/rpc/friend/friend.go | 275 + internal/rpc/group/cache.go | 26 + internal/rpc/group/callback.go | 136 +- internal/rpc/group/convert.go | 45 + internal/rpc/group/db_map.go | 63 + internal/rpc/group/fill.go | 111 + internal/rpc/group/group.go | 2252 ++--- internal/rpc/group/super_group.go | 87 + internal/rpc/message_cms/message_cms.go | 167 - internal/rpc/msg/as_read.go | 148 + internal/rpc/msg/callback.go | 199 +- internal/rpc/msg/conversation_notification.go | 76 - internal/rpc/msg/del_msg.go | 31 - internal/rpc/msg/delete.go | 143 + internal/rpc/msg/extend_msg.go | 355 +- internal/rpc/msg/extend_msg_callback.go | 88 + internal/rpc/msg/friend_notification.go | 165 - internal/rpc/msg/group_notification.go | 528 -- internal/rpc/msg/lock.go | 56 + internal/rpc/msg/message_interceptor.go | 31 + internal/rpc/msg/msg_notification.go | 47 - internal/rpc/msg/msg_status.go | 29 + internal/rpc/msg/organization_notification.go | 78 - internal/rpc/msg/pull_message.go | 75 - internal/rpc/msg/revoke.go | 109 + internal/rpc/msg/rpcChat.go | 67 - internal/rpc/msg/send.go | 160 + internal/rpc/msg/send_msg.go | 733 -- internal/rpc/msg/seq.go | 15 + internal/rpc/msg/server.go | 119 + internal/rpc/msg/sync_msg.go | 79 + internal/rpc/msg/tag_send_msg.go | 52 - internal/rpc/msg/utils.go | 37 + internal/rpc/msg/verify.go | 203 + internal/rpc/office/office.go | 445 - internal/rpc/organization/organization.go | 511 -- internal/rpc/statistics/statistics.go | 377 - internal/rpc/third/s3.go | 37 + internal/rpc/third/third.go | 67 + internal/rpc/user/callback.go | 1 - internal/rpc/user/statistics.go | 23 + internal/rpc/user/user.go | 690 +- internal/timed_task/init.go | 26 - internal/timed_task/timed_task.go | 26 - internal/utils/callback.go | 1 - internal/utils/cors_middleware_test.go | 68 - internal/utils/get_server_ip_test.go | 13 - internal/utils/jwt_token_test.go | 89 - internal/utils/utils.go | 49 - pkg/apiresp/gin.go | 14 + pkg/apiresp/http.go | 25 + pkg/apiresp/resp.go | 58 + pkg/apistruct/auth.go | 55 + pkg/apistruct/aws.go | 19 + .../conversation.go} | 15 +- .../cos_api_struct.go => apistruct/cos.go} | 3 +- pkg/apistruct/friend.go | 273 + .../group.go} | 145 +- pkg/apistruct/manage.go | 93 + pkg/apistruct/msg.go | 200 + .../oss_api_struct.go => apistruct/oss.go} | 3 +- pkg/apistruct/pagination.go | 6 + pkg/apistruct/public.go | 18 + pkg/apistruct/super_group.go | 17 + pkg/apistruct/third.go | 117 + pkg/base_info/auth_api_struct.go | 39 - pkg/base_info/friend_api_struct.go | 136 - pkg/base_info/manage_api_struct.go | 44 - pkg/base_info/minio_api_struct.go | 56 - pkg/base_info/msg.go | 12 - pkg/base_info/office_struct.go | 88 - pkg/base_info/organization_api_struct.go | 121 - pkg/base_info/public_struct.go | 140 - pkg/base_info/user_api_struct.go | 34 - pkg/base_info/work_moments_struct.go | 98 - pkg/call_back_struct/common.go | 24 - pkg/call_back_struct/group.go | 9 - pkg/call_back_struct/message.go | 49 - pkg/callbackstruct/common.go | 72 + pkg/callbackstruct/friend.go | 13 + pkg/callbackstruct/group.go | 73 + pkg/callbackstruct/message.go | 136 + pkg/callbackstruct/msg_gateway.go | 32 + pkg/callbackstruct/push.go | 39 + pkg/cms_api_struct/admin.go | 10 - pkg/cms_api_struct/common.go | 11 - pkg/cms_api_struct/group.go | 144 - pkg/cms_api_struct/message_cms.go | 50 - pkg/cms_api_struct/organization.go | 25 - pkg/cms_api_struct/statistics.go | 89 - pkg/cms_api_struct/user.go | 110 - pkg/common/cmd/api.go | 17 + pkg/common/cmd/cron_task.go | 22 + pkg/common/cmd/msg_gateway.go | 36 + pkg/common/cmd/msg_transfer.go | 25 + pkg/common/cmd/msg_utils.go | 170 + pkg/common/cmd/root.go | 81 + pkg/common/cmd/rpc.go | 34 + pkg/common/config/config.go | 653 +- pkg/common/config/parse.go | 107 + pkg/common/config/version | 1 + pkg/common/constant/constant.go | 271 +- pkg/common/constant/error.go | 102 - pkg/common/constant/limit.go | 7 + pkg/common/constant/platform_id_to_name.go | 90 + .../constant/platform_number_id_to_name.go | 66 - pkg/common/convert/black.go | 37 + pkg/common/convert/conversation.go | 45 + pkg/common/convert/friend.go | 87 + pkg/common/convert/group.go | 120 + pkg/common/convert/msg.go | 81 + pkg/common/convert/user.go | 35 + pkg/common/db/batch_insert_chat.go | 100 - pkg/common/db/cache/black.go | 67 + pkg/common/db/cache/conversation.go | 293 + pkg/common/db/cache/extend_msg_set.go | 64 + pkg/common/db/cache/friend.go | 116 + pkg/common/db/cache/group.go | 365 + pkg/common/db/cache/init_redis.go | 44 + pkg/common/db/cache/meta_cache.go | 191 + pkg/common/db/cache/msg.go | 577 ++ pkg/common/db/cache/user.go | 109 + pkg/common/db/controller/auth.go | 62 + pkg/common/db/controller/black.go | 78 + pkg/common/db/controller/chatlog.go | 27 + pkg/common/db/controller/conversation.go | 271 + pkg/common/db/controller/extend_msg.go | 58 + pkg/common/db/controller/friend.go | 252 + pkg/common/db/controller/group.go | 421 + pkg/common/db/controller/msg.go | 927 +++ pkg/common/db/controller/msg_test.go | 251 + pkg/common/db/controller/push.go | 23 + pkg/common/db/controller/storage.go | 539 ++ pkg/common/db/controller/third.go | 28 + pkg/common/db/controller/user.go | 143 + pkg/common/db/extend_msg_mongo_model.go | 49 - pkg/common/db/localcache/conversation.go | 67 + pkg/common/db/localcache/group.go | 59 + pkg/common/db/localcache/meta_local_cache.go | 1 + pkg/common/db/model.go | 135 - pkg/common/db/model_struct.go | 278 - pkg/common/db/mongoModel.go | 833 -- pkg/common/db/mysql.go | 174 - .../im_mysql_model/conversation_model.go | 145 - .../mysql_model/im_mysql_model/demo_model.go | 42 - .../im_mysql_model/friend_model.go | 91 - .../im_mysql_model/friend_request_model.go | 112 - .../im_mysql_model/group_member_model.go | 316 - .../mysql_model/im_mysql_model/group_model.go | 225 - .../im_mysql_model/group_request_model.go | 209 - .../mysql_model/im_mysql_model/message_cms.go | 68 - .../im_mysql_model/organization_model.go | 298 - .../im_mysql_model/statistics_model.go | 153 - .../im_mysql_model/user_black_list_model.go | 58 - .../mysql_model/im_mysql_model/user_model.go | 329 - .../im_mysql_msg_model/chat_log_model.go | 51 - .../im_mysql_msg_model/hash_code.go | 36 - pkg/common/db/newRedisModel.go | 83 - pkg/common/db/obj/minio.go | 225 + pkg/common/db/obj/obj.go | 90 + pkg/common/db/ormutil/utils.go | 57 + pkg/common/db/redisModel.go | 164 - pkg/common/db/redisModel_test.go | 73 - pkg/common/db/relation/black_model.go | 62 + pkg/common/db/relation/chat_log_model.go | 86 + pkg/common/db/relation/conversation_model.go | 96 + pkg/common/db/relation/friend_model.go | 97 + .../db/relation/friend_request_model.go | 74 + pkg/common/db/relation/group_member_model.go | 135 + pkg/common/db/relation/group_model.go | 52 + pkg/common/db/relation/group_request_model.go | 52 + pkg/common/db/relation/meta_db.go | 23 + pkg/common/db/relation/mysql_init.go | 76 + pkg/common/db/relation/object_hash_model.go | 42 + pkg/common/db/relation/object_info_model.go | 48 + pkg/common/db/relation/object_put_model.go | 47 + pkg/common/db/relation/user_model.go | 89 + pkg/common/db/table/relation/black.go | 34 + pkg/common/db/table/relation/chatlog.go | 38 + pkg/common/db/table/relation/conversation.go | 48 + pkg/common/db/table/relation/friend.go | 52 + .../db/table/relation/friend_request.go | 44 + pkg/common/db/table/relation/group.go | 43 + pkg/common/db/table/relation/group_member.go | 48 + pkg/common/db/table/relation/group_request.go | 38 + pkg/common/db/table/relation/object_hash.go | 30 + pkg/common/db/table/relation/object_info.go | 29 + pkg/common/db/table/relation/object_put.go | 37 + pkg/common/db/table/relation/user.go | 58 + pkg/common/db/table/relation/utils.go | 21 + pkg/common/db/table/unrelation/common.go | 6 + .../db/table/unrelation/extend_msg_set.go | 82 + pkg/common/db/table/unrelation/msg.go | 134 + pkg/common/db/table/unrelation/super_group.go | 39 + pkg/common/db/tx/gorm.go | 19 + pkg/common/db/tx/mongo.go | 31 + pkg/common/db/tx/tx.go | 11 + pkg/common/db/unrelation/extend_msg.go | 153 + pkg/common/db/unrelation/mongo.go | 114 + pkg/common/db/unrelation/msg.go | 310 + pkg/common/db/unrelation/super_group.go | 111 + pkg/common/http/http_client.go | 65 +- pkg/common/http/http_resp.go | 43 - pkg/common/kafka/consumer.go | 16 +- pkg/common/kafka/consumer_group.go | 11 +- pkg/common/kafka/producer.go | 75 +- pkg/common/log/color.go | 50 + pkg/common/log/es_hk.go | 107 - pkg/common/log/file_line_hk.go | 73 - pkg/common/log/logger.go | 13 + pkg/common/log/logrus.go | 200 - pkg/common/log/sql_logger.go | 75 + pkg/common/log/time_format.go | 57 - pkg/common/log/zap.go | 274 + pkg/common/log/zk_logger.go | 16 + pkg/common/mcontext/ctx.go | 135 + .../multi_terminal_login.go | 73 - pkg/common/mw/check.go | 66 + pkg/common/mw/check_test.go | 28 + pkg/common/mw/gin.go | 167 + pkg/common/mw/intercept_chain.go | 27 + pkg/common/mw/rpc_client_interceptor.go | 94 + pkg/common/mw/rpc_server_interceptor.go | 150 + pkg/common/mw/specialerror/error.go | 33 + pkg/common/network/ip.go | 26 + pkg/common/prome/gather.go | 450 + pkg/common/prome/prometheus.go | 82 + pkg/common/token_verify/jwt_token.go | 231 - pkg/common/tokenverify/jwt_token.go | 103 + pkg/common/tokenverify/jwt_token_test.go | 24 + pkg/common/utils/utils.go | 161 - pkg/discoveryregistry/discovery_register.go | 25 + pkg/discoveryregistry/zookeeper/conf.go | 27 + pkg/discoveryregistry/zookeeper/debug.go | 47 + pkg/discoveryregistry/zookeeper/discover.go | 116 + pkg/discoveryregistry/zookeeper/register.go | 40 + pkg/discoveryregistry/zookeeper/resolver.go | 50 + pkg/discoveryregistry/zookeeper/zk.go | 204 + pkg/grpc-etcdv3/getcdv3/pool.go | 254 - pkg/grpc-etcdv3/getcdv3/register.go | 125 - pkg/grpc-etcdv3/getcdv3/resolver.go | 306 - pkg/proto/admin_cms/admin_cms.pb.go | 317 - pkg/proto/admin_cms/admin_cms.proto | 18 - pkg/proto/auth/auth.pb.go | 771 +- pkg/proto/auth/auth.proto | 52 +- pkg/proto/auto_proto.sh | 30 - pkg/proto/base/base.proto | 5 - pkg/proto/cache/cache.pb.go | 501 -- pkg/proto/chat/chat.pb.go | 650 -- pkg/proto/chat/chat.proto | 82 - pkg/proto/conversation/conversation.pb.go | 3452 +++++++- pkg/proto/conversation/conversation.proto | 180 +- pkg/proto/errinfo/errinfo.pb.go | 183 + pkg/proto/errinfo/errinfo.proto | 13 + pkg/proto/friend/friend.pb.go | 3466 +++++--- pkg/proto/friend/friend.proto | 231 +- pkg/proto/friend/validate.go | 10 + pkg/proto/gen.cmd | 13 + pkg/proto/gen.sh | 13 + pkg/proto/group/group.pb.go | 7173 +++++++++------- pkg/proto/group/group.proto | 445 +- pkg/proto/message_cms/message_cms.pb.go | 1083 --- pkg/proto/message_cms/message_cms.proto | 71 - pkg/proto/msg/msg.pb.go | 5021 ++++++++++++ pkg/proto/msg/msg.proto | 305 + pkg/proto/msggateway/msggateway.pb.go | 1532 ++++ pkg/proto/msggateway/msggateway.proto | 96 + pkg/proto/office/office.pb.go | 2851 ------- pkg/proto/office/office.proto | 263 - pkg/proto/organization/organization.pb.go | 2207 ----- pkg/proto/organization/organization.proto | 209 - pkg/proto/proto_dir.cfg | 16 - pkg/proto/push/push.pb.go | 479 +- pkg/proto/push/push.proto | 42 +- pkg/proto/relay/relay.pb.go | 782 -- pkg/proto/relay/relay.proto | 61 - pkg/proto/rtc/rtc.pb.go | 2990 ------- pkg/proto/rtc/rtc.proto | 234 - pkg/proto/sdk_ws/ws.pb.go | 5451 ------------- pkg/proto/sdkws/sdkws.pb.go | 6999 ++++++++++++++++ .../{sdk_ws/ws.proto => sdkws/sdkws.proto} | 460 +- pkg/proto/statistics/statistics.pb.go | 1466 +--- pkg/proto/statistics/statistics.proto | 93 +- pkg/proto/third/third.pb.go | 1639 ++++ pkg/proto/third/third.proto | 113 + pkg/proto/user/user.pb.go | 4895 +++++------ pkg/proto/user/user.proto | 353 +- pkg/proto/wrapperspb/wrapperspb.go | 288 + pkg/proto/wrapperspb/wrapperspb.pb.go | 680 ++ pkg/proto/wrapperspb/wrapperspb.proto | 77 + pkg/rpcclient/auth.go | 25 + pkg/rpcclient/conversation.go | 104 + pkg/rpcclient/friend.go | 68 + pkg/rpcclient/group.go | 165 + pkg/rpcclient/msg.go | 220 + pkg/rpcclient/notification/common.go | 15 + pkg/rpcclient/notification/conevrsation.go | 47 + pkg/rpcclient/notification/extend_msg.go | 103 + pkg/rpcclient/notification/friend.go | 178 + pkg/rpcclient/notification/group.go | 570 ++ pkg/rpcclient/push.go | 38 + pkg/rpcclient/third.go | 25 + pkg/rpcclient/user.go | 120 + pkg/startrpc/start.go | 72 + pkg/statistics/statistics.go | 23 +- pkg/tools/batcher/batcher.go | 176 - pkg/utils/callback.go | 18 + pkg/utils/cors_middleware.go | 24 - pkg/utils/{encryption .go => encryption.go} | 0 pkg/utils/file.go | 46 +- pkg/utils/get_server_ip.go | 25 +- {internal => pkg}/utils/id.go | 0 {internal => pkg}/utils/id_test.go | 0 pkg/utils/image.go | 7 +- {internal => pkg}/utils/image_test.go | 7 +- pkg/utils/map.go | 1 + {internal => pkg}/utils/md5_test.go | 5 +- pkg/utils/options.go | 167 + pkg/utils/page.go | 10 + .../utils/platform_number_id_to_name_test.go | 2 +- pkg/{tools => utils}/retry/retry.go | 0 pkg/{tools => utils}/retry/stratey.go | 0 pkg/{tools => utils/splitter}/tools.go | 2 +- pkg/utils/strings.go | 65 +- pkg/utils/time_format.go | 4 + pkg/utils/utils.go | 283 +- pkg/utils/utils_v2.go | 531 ++ pkg/utils/utils_v2_test.go | 84 + script/.env | 3 - script/batch_start_all.sh | 1 - script/build_push_k8s_images.sh | 32 + script/check_all.sh | 34 +- script/demo_svr_start.sh | 47 - script/docker_check_service.sh | 6 +- script/docker_start_all.sh | 1 - script/enterprise/check_all.sh | 2 +- script/enterprise/path_info.cfg | 2 +- script/init_pwd.sh | 11 + script/mongo-init.sh | 12 + script/msg_gateway_start.sh | 8 +- script/msg_transfer_start.sh | 12 +- script/mysql_database_init.sh | 38 - script/path_info.cfg | 80 +- script/push_start.sh | 6 +- script/sdk_svr_start.sh | 14 +- script/start_all.sh | 4 +- script/start_cron.sh | 3 +- script/start_rpc_service.sh | 49 +- script/timer_start.sh | 35 - 529 files changed, 63525 insertions(+), 53350 deletions(-) create mode 100644 .docker-compose_cfg/config.yaml create mode 100644 .docker-compose_cfg/datasource-compose.yaml create mode 100644 .docker-compose_cfg/grafana.db create mode 100644 .docker-compose_cfg/grafana.ini create mode 100644 .docker-compose_cfg/node-exporter-full_rev1.json create mode 100644 .docker-compose_cfg/prometheus-compose.yml create mode 100644 cmd/api/Makefile create mode 100644 cmd/api/deploy.Dockerfile create mode 100644 cmd/api/main.go create mode 100644 cmd/cmdutils/Makefile create mode 100644 cmd/cmdutils/main.go create mode 100644 cmd/crontask/Makefile create mode 100644 cmd/crontask/deploy.Dockerfile create mode 100644 cmd/crontask/main.go create mode 100644 cmd/msggateway/Makefile create mode 100644 cmd/msggateway/deploy.Dockerfile create mode 100644 cmd/msggateway/main.go create mode 100644 cmd/msgtransfer/Makefile create mode 100644 cmd/msgtransfer/deploy.Dockerfile create mode 100644 cmd/msgtransfer/main.go delete mode 100644 cmd/open_im_api/Makefile delete mode 100644 cmd/open_im_api/main.go delete mode 100644 cmd/open_im_cms_api/Makefile delete mode 100644 cmd/open_im_cms_api/main.go delete mode 100644 cmd/open_im_demo/Makefile delete mode 100644 cmd/open_im_demo/main.go delete mode 100644 cmd/open_im_msg_gateway/Makefile delete mode 100644 cmd/open_im_msg_gateway/main.go delete mode 100644 cmd/open_im_msg_transfer/Makefile delete mode 100644 cmd/open_im_msg_transfer/main.go delete mode 100644 cmd/open_im_push/Makefile delete mode 100644 cmd/open_im_push/main.go delete mode 100644 cmd/open_im_timer_task/Makefile delete mode 100644 cmd/open_im_timer_task/main.go delete mode 160000 cmd/openim-sdk-core create mode 100644 cmd/push/Makefile create mode 100644 cmd/push/deploy.Dockerfile create mode 100644 cmd/push/main.go rename cmd/rpc/{open_im_group => auth}/Makefile (50%) create mode 100644 cmd/rpc/auth/deploy.Dockerfile create mode 100644 cmd/rpc/auth/main.go create mode 100644 cmd/rpc/conversation/Makefile create mode 100644 cmd/rpc/conversation/deploy.Dockerfile create mode 100644 cmd/rpc/conversation/main.go create mode 100644 cmd/rpc/friend/Makefile create mode 100644 cmd/rpc/friend/deploy.Dockerfile create mode 100644 cmd/rpc/friend/main.go create mode 100644 cmd/rpc/group/Makefile create mode 100644 cmd/rpc/group/deploy.Dockerfile create mode 100644 cmd/rpc/group/main.go rename cmd/rpc/{open_im_organization => msg}/Makefile (50%) create mode 100644 cmd/rpc/msg/deploy.Dockerfile create mode 100644 cmd/rpc/msg/main.go delete mode 100644 cmd/rpc/open_im_admin_cms/Makefile delete mode 100644 cmd/rpc/open_im_admin_cms/main.go delete mode 100644 cmd/rpc/open_im_auth/Makefile delete mode 100644 cmd/rpc/open_im_auth/main.go delete mode 100644 cmd/rpc/open_im_conversation/Makefile delete mode 100644 cmd/rpc/open_im_conversation/main.go delete mode 100644 cmd/rpc/open_im_friend/Makefile delete mode 100644 cmd/rpc/open_im_friend/main.go delete mode 100644 cmd/rpc/open_im_group/main.go delete mode 100644 cmd/rpc/open_im_message_cms/Makefile delete mode 100644 cmd/rpc/open_im_message_cms/main.go delete mode 100644 cmd/rpc/open_im_msg/Makefile delete mode 100644 cmd/rpc/open_im_msg/main.go delete mode 100644 cmd/rpc/open_im_office/Makefile delete mode 100644 cmd/rpc/open_im_office/main.go delete mode 100644 cmd/rpc/open_im_organization/main.go delete mode 100644 cmd/rpc/open_im_statistics/Makefile delete mode 100644 cmd/rpc/open_im_statistics/main.go delete mode 100644 cmd/rpc/open_im_user/Makefile delete mode 100644 cmd/rpc/open_im_user/main.go create mode 100644 cmd/rpc/third/Makefile create mode 100644 cmd/rpc/third/deploy.Dockerfile create mode 100644 cmd/rpc/third/main.go create mode 100644 cmd/rpc/user/Makefile create mode 100644 cmd/rpc/user/deploy.Dockerfile create mode 100644 cmd/rpc/user/main.go delete mode 100644 cmd/test/main.go create mode 100644 config/notification.yaml delete mode 100644 config/usualConfig.yaml create mode 100644 install_guide.sh create mode 100644 install_im_compose.sh create mode 100644 internal/api/auth.go delete mode 100644 internal/api/auth/auth.go delete mode 100644 internal/api/chat/del_msg.go delete mode 100644 internal/api/chat/get_max_min_seq.go delete mode 100644 internal/api/chat/pull_msg.go delete mode 100644 internal/api/chat/send_msg.go create mode 100644 internal/api/conversation.go delete mode 100644 internal/api/conversation/conversation.go create mode 100644 internal/api/custom_validator.go create mode 100644 internal/api/friend.go delete mode 100644 internal/api/friend/friend.go create mode 100644 internal/api/group.go delete mode 100644 internal/api/group/group.go delete mode 100644 internal/api/manage/management_chat.go delete mode 100644 internal/api/manage/management_user.go create mode 100644 internal/api/msg.go delete mode 100644 internal/api/office/tag.go delete mode 100644 internal/api/office/work_moments.go delete mode 100644 internal/api/organization/organization.go create mode 100644 internal/api/route.go create mode 100644 internal/api/statistics.go create mode 100644 internal/api/third.go delete mode 100644 internal/api/third/ali_oss_credential.go delete mode 100644 internal/api/third/minio_init.go delete mode 100644 internal/api/third/minio_storage_credential.go delete mode 100644 internal/api/third/tencent_cloud_storage_credential.go create mode 100644 internal/api/user.go delete mode 100644 internal/api/user/user.go delete mode 100644 internal/cms_api/admin/admin.go delete mode 100644 internal/cms_api/group/group.go delete mode 100644 internal/cms_api/message_cms/message.go delete mode 100644 internal/cms_api/middleware/cors.go delete mode 100644 internal/cms_api/middleware/jwt_auth.go delete mode 100644 internal/cms_api/organization/organization.go delete mode 100644 internal/cms_api/router.go delete mode 100644 internal/cms_api/statistics/statistics.go delete mode 100644 internal/cms_api/user/user.go delete mode 100644 internal/demo/register/login.go delete mode 100644 internal/demo/register/onboarding_process.go delete mode 100644 internal/demo/register/reset_password.go delete mode 100644 internal/demo/register/send_code.go delete mode 100644 internal/demo/register/set_password.go delete mode 100644 internal/demo/register/verify.go delete mode 100644 internal/msg_gateway/gate/init.go delete mode 100644 internal/msg_gateway/gate/logic.go delete mode 100644 internal/msg_gateway/gate/open_im_media/room.go delete mode 100644 internal/msg_gateway/gate/rpc_server.go delete mode 100644 internal/msg_gateway/gate/validate.go delete mode 100644 internal/msg_gateway/gate/ws_server.go delete mode 100644 internal/msg_transfer/logic/db.go delete mode 100644 internal/msg_transfer/logic/history_msg_handler.go delete mode 100644 internal/msg_transfer/logic/init.go delete mode 100644 internal/msg_transfer/logic/persistent_msg_handler.go create mode 100644 internal/push/callback.go create mode 100644 internal/push/consumer_init.go delete mode 100644 internal/push/content_struct/content.go delete mode 100644 internal/push/getui/push.go delete mode 100644 internal/push/jpush/common/JGPlatform.go delete mode 100644 internal/push/jpush/push.go delete mode 100644 internal/push/logic/init.go delete mode 100644 internal/push/logic/push_handler.go delete mode 100644 internal/push/logic/push_rpc_server.go delete mode 100644 internal/push/logic/push_to_client.go delete mode 100644 internal/push/logic/tpns.go create mode 100644 internal/push/offlinepush/fcm/push.go create mode 100644 internal/push/offlinepush/fcm/push_test.go create mode 100644 internal/push/offlinepush/getui/body.go create mode 100644 internal/push/offlinepush/getui/push.go rename internal/push/{jpush/requestBody => offlinepush/jpush/body}/audience.go (68%) rename internal/push/{jpush/requestBody => offlinepush/jpush/body}/message.go (96%) rename internal/push/{jpush/requestBody => offlinepush/jpush/body}/notification.go (51%) rename internal/push/{jpush/requestBody => offlinepush/jpush/body}/options.go (87%) rename internal/push/{jpush/requestBody => offlinepush/jpush/body}/platform.go (94%) rename internal/push/{jpush/requestBody/pushObj.go => offlinepush/jpush/body/pushobj.go} (96%) create mode 100644 internal/push/offlinepush/jpush/push.go create mode 100644 internal/push/offlinepush/offlinepush_interface.go create mode 100644 internal/push/push_handler.go delete mode 100644 internal/push/push_interface.go create mode 100644 internal/push/push_rpc_server.go create mode 100644 internal/push/push_to_client.go delete mode 100644 internal/push/sdk/tpns-server-sdk-go/go/auth/auth.go delete mode 100644 internal/push/sdk/tpns-server-sdk-go/go/client/client.go delete mode 100644 internal/push/sdk/tpns-server-sdk-go/go/common/http_helper.go delete mode 100644 internal/push/sdk/tpns-server-sdk-go/go/common/json_helper.go delete mode 100644 internal/push/sdk/tpns-server-sdk-go/go/def.go delete mode 100644 internal/push/sdk/tpns-server-sdk-go/go/req/req.go delete mode 100644 internal/rpc/admin_cms/admin_cms.go delete mode 100644 internal/rpc/auth/callback.go create mode 100644 internal/rpc/friend/black.go delete mode 100644 internal/rpc/friend/firend.go create mode 100644 internal/rpc/friend/friend.go create mode 100644 internal/rpc/group/cache.go create mode 100644 internal/rpc/group/convert.go create mode 100644 internal/rpc/group/db_map.go create mode 100644 internal/rpc/group/fill.go create mode 100644 internal/rpc/group/super_group.go delete mode 100644 internal/rpc/message_cms/message_cms.go create mode 100644 internal/rpc/msg/as_read.go delete mode 100644 internal/rpc/msg/conversation_notification.go delete mode 100644 internal/rpc/msg/del_msg.go create mode 100644 internal/rpc/msg/delete.go create mode 100644 internal/rpc/msg/extend_msg_callback.go delete mode 100644 internal/rpc/msg/friend_notification.go delete mode 100644 internal/rpc/msg/group_notification.go create mode 100644 internal/rpc/msg/lock.go create mode 100644 internal/rpc/msg/message_interceptor.go delete mode 100644 internal/rpc/msg/msg_notification.go create mode 100644 internal/rpc/msg/msg_status.go delete mode 100644 internal/rpc/msg/organization_notification.go delete mode 100644 internal/rpc/msg/pull_message.go create mode 100644 internal/rpc/msg/revoke.go delete mode 100644 internal/rpc/msg/rpcChat.go create mode 100644 internal/rpc/msg/send.go delete mode 100644 internal/rpc/msg/send_msg.go create mode 100644 internal/rpc/msg/seq.go create mode 100644 internal/rpc/msg/server.go create mode 100644 internal/rpc/msg/sync_msg.go delete mode 100644 internal/rpc/msg/tag_send_msg.go create mode 100644 internal/rpc/msg/utils.go create mode 100644 internal/rpc/msg/verify.go delete mode 100644 internal/rpc/office/office.go delete mode 100644 internal/rpc/organization/organization.go create mode 100644 internal/rpc/third/s3.go create mode 100644 internal/rpc/third/third.go delete mode 100644 internal/rpc/user/callback.go create mode 100644 internal/rpc/user/statistics.go delete mode 100644 internal/timed_task/init.go delete mode 100644 internal/timed_task/timed_task.go delete mode 100644 internal/utils/callback.go delete mode 100644 internal/utils/cors_middleware_test.go delete mode 100644 internal/utils/get_server_ip_test.go delete mode 100644 internal/utils/jwt_token_test.go delete mode 100644 internal/utils/utils.go create mode 100644 pkg/apiresp/gin.go create mode 100644 pkg/apiresp/http.go create mode 100644 pkg/apiresp/resp.go create mode 100644 pkg/apistruct/auth.go create mode 100644 pkg/apistruct/aws.go rename pkg/{base_info/conversation_api_struct.go => apistruct/conversation.go} (97%) rename pkg/{base_info/cos_api_struct.go => apistruct/cos.go} (94%) create mode 100644 pkg/apistruct/friend.go rename pkg/{base_info/group_api_struct.go => apistruct/group.go} (66%) create mode 100644 pkg/apistruct/manage.go create mode 100644 pkg/apistruct/msg.go rename pkg/{base_info/oss_api_struct.go => apistruct/oss.go} (95%) create mode 100644 pkg/apistruct/pagination.go create mode 100644 pkg/apistruct/public.go create mode 100644 pkg/apistruct/super_group.go create mode 100644 pkg/apistruct/third.go delete mode 100644 pkg/base_info/auth_api_struct.go delete mode 100644 pkg/base_info/friend_api_struct.go delete mode 100644 pkg/base_info/manage_api_struct.go delete mode 100644 pkg/base_info/minio_api_struct.go delete mode 100644 pkg/base_info/msg.go delete mode 100644 pkg/base_info/office_struct.go delete mode 100644 pkg/base_info/organization_api_struct.go delete mode 100644 pkg/base_info/public_struct.go delete mode 100644 pkg/base_info/user_api_struct.go delete mode 100644 pkg/base_info/work_moments_struct.go delete mode 100644 pkg/call_back_struct/common.go delete mode 100644 pkg/call_back_struct/group.go delete mode 100644 pkg/call_back_struct/message.go create mode 100644 pkg/callbackstruct/common.go create mode 100644 pkg/callbackstruct/friend.go create mode 100644 pkg/callbackstruct/group.go create mode 100644 pkg/callbackstruct/message.go create mode 100644 pkg/callbackstruct/msg_gateway.go create mode 100644 pkg/callbackstruct/push.go delete mode 100644 pkg/cms_api_struct/admin.go delete mode 100644 pkg/cms_api_struct/common.go delete mode 100644 pkg/cms_api_struct/group.go delete mode 100644 pkg/cms_api_struct/message_cms.go delete mode 100644 pkg/cms_api_struct/organization.go delete mode 100644 pkg/cms_api_struct/statistics.go delete mode 100644 pkg/cms_api_struct/user.go create mode 100644 pkg/common/cmd/api.go create mode 100644 pkg/common/cmd/cron_task.go create mode 100644 pkg/common/cmd/msg_gateway.go create mode 100644 pkg/common/cmd/msg_transfer.go create mode 100644 pkg/common/cmd/msg_utils.go create mode 100644 pkg/common/cmd/root.go create mode 100644 pkg/common/cmd/rpc.go create mode 100644 pkg/common/config/parse.go create mode 100644 pkg/common/config/version delete mode 100644 pkg/common/constant/error.go create mode 100644 pkg/common/constant/limit.go create mode 100644 pkg/common/constant/platform_id_to_name.go delete mode 100644 pkg/common/constant/platform_number_id_to_name.go create mode 100644 pkg/common/convert/black.go create mode 100644 pkg/common/convert/conversation.go create mode 100644 pkg/common/convert/friend.go create mode 100644 pkg/common/convert/group.go create mode 100644 pkg/common/convert/msg.go create mode 100644 pkg/common/convert/user.go delete mode 100644 pkg/common/db/batch_insert_chat.go create mode 100644 pkg/common/db/cache/black.go create mode 100644 pkg/common/db/cache/conversation.go create mode 100644 pkg/common/db/cache/extend_msg_set.go create mode 100644 pkg/common/db/cache/friend.go create mode 100644 pkg/common/db/cache/group.go create mode 100644 pkg/common/db/cache/init_redis.go create mode 100644 pkg/common/db/cache/meta_cache.go create mode 100644 pkg/common/db/cache/msg.go create mode 100644 pkg/common/db/cache/user.go create mode 100644 pkg/common/db/controller/auth.go create mode 100644 pkg/common/db/controller/black.go create mode 100644 pkg/common/db/controller/chatlog.go create mode 100644 pkg/common/db/controller/conversation.go create mode 100644 pkg/common/db/controller/extend_msg.go create mode 100644 pkg/common/db/controller/friend.go create mode 100644 pkg/common/db/controller/group.go create mode 100644 pkg/common/db/controller/msg.go create mode 100644 pkg/common/db/controller/msg_test.go create mode 100644 pkg/common/db/controller/push.go create mode 100644 pkg/common/db/controller/storage.go create mode 100644 pkg/common/db/controller/third.go create mode 100644 pkg/common/db/controller/user.go delete mode 100644 pkg/common/db/extend_msg_mongo_model.go create mode 100644 pkg/common/db/localcache/conversation.go create mode 100644 pkg/common/db/localcache/group.go create mode 100644 pkg/common/db/localcache/meta_local_cache.go delete mode 100644 pkg/common/db/model.go delete mode 100644 pkg/common/db/model_struct.go delete mode 100644 pkg/common/db/mongoModel.go delete mode 100644 pkg/common/db/mysql.go delete mode 100644 pkg/common/db/mysql_model/im_mysql_model/conversation_model.go delete mode 100644 pkg/common/db/mysql_model/im_mysql_model/demo_model.go delete mode 100644 pkg/common/db/mysql_model/im_mysql_model/friend_model.go delete mode 100644 pkg/common/db/mysql_model/im_mysql_model/friend_request_model.go delete mode 100644 pkg/common/db/mysql_model/im_mysql_model/group_member_model.go delete mode 100644 pkg/common/db/mysql_model/im_mysql_model/group_model.go delete mode 100644 pkg/common/db/mysql_model/im_mysql_model/group_request_model.go delete mode 100644 pkg/common/db/mysql_model/im_mysql_model/message_cms.go delete mode 100644 pkg/common/db/mysql_model/im_mysql_model/organization_model.go delete mode 100644 pkg/common/db/mysql_model/im_mysql_model/statistics_model.go delete mode 100644 pkg/common/db/mysql_model/im_mysql_model/user_black_list_model.go delete mode 100644 pkg/common/db/mysql_model/im_mysql_model/user_model.go delete mode 100644 pkg/common/db/mysql_model/im_mysql_msg_model/chat_log_model.go delete mode 100644 pkg/common/db/mysql_model/im_mysql_msg_model/hash_code.go delete mode 100644 pkg/common/db/newRedisModel.go create mode 100644 pkg/common/db/obj/minio.go create mode 100644 pkg/common/db/obj/obj.go create mode 100644 pkg/common/db/ormutil/utils.go delete mode 100644 pkg/common/db/redisModel.go delete mode 100644 pkg/common/db/redisModel_test.go create mode 100644 pkg/common/db/relation/black_model.go create mode 100644 pkg/common/db/relation/chat_log_model.go create mode 100644 pkg/common/db/relation/conversation_model.go create mode 100644 pkg/common/db/relation/friend_model.go create mode 100644 pkg/common/db/relation/friend_request_model.go create mode 100644 pkg/common/db/relation/group_member_model.go create mode 100644 pkg/common/db/relation/group_model.go create mode 100644 pkg/common/db/relation/group_request_model.go create mode 100644 pkg/common/db/relation/meta_db.go create mode 100644 pkg/common/db/relation/mysql_init.go create mode 100644 pkg/common/db/relation/object_hash_model.go create mode 100644 pkg/common/db/relation/object_info_model.go create mode 100644 pkg/common/db/relation/object_put_model.go create mode 100644 pkg/common/db/relation/user_model.go create mode 100644 pkg/common/db/table/relation/black.go create mode 100644 pkg/common/db/table/relation/chatlog.go create mode 100644 pkg/common/db/table/relation/conversation.go create mode 100644 pkg/common/db/table/relation/friend.go create mode 100644 pkg/common/db/table/relation/friend_request.go create mode 100644 pkg/common/db/table/relation/group.go create mode 100644 pkg/common/db/table/relation/group_member.go create mode 100644 pkg/common/db/table/relation/group_request.go create mode 100644 pkg/common/db/table/relation/object_hash.go create mode 100644 pkg/common/db/table/relation/object_info.go create mode 100644 pkg/common/db/table/relation/object_put.go create mode 100644 pkg/common/db/table/relation/user.go create mode 100644 pkg/common/db/table/relation/utils.go create mode 100644 pkg/common/db/table/unrelation/common.go create mode 100644 pkg/common/db/table/unrelation/extend_msg_set.go create mode 100644 pkg/common/db/table/unrelation/msg.go create mode 100644 pkg/common/db/table/unrelation/super_group.go create mode 100644 pkg/common/db/tx/gorm.go create mode 100644 pkg/common/db/tx/mongo.go create mode 100644 pkg/common/db/tx/tx.go create mode 100644 pkg/common/db/unrelation/extend_msg.go create mode 100644 pkg/common/db/unrelation/mongo.go create mode 100644 pkg/common/db/unrelation/msg.go create mode 100644 pkg/common/db/unrelation/super_group.go delete mode 100644 pkg/common/http/http_resp.go create mode 100644 pkg/common/log/color.go delete mode 100644 pkg/common/log/es_hk.go delete mode 100644 pkg/common/log/file_line_hk.go create mode 100644 pkg/common/log/logger.go delete mode 100644 pkg/common/log/logrus.go create mode 100644 pkg/common/log/sql_logger.go delete mode 100644 pkg/common/log/time_format.go create mode 100644 pkg/common/log/zap.go create mode 100644 pkg/common/log/zk_logger.go create mode 100644 pkg/common/mcontext/ctx.go delete mode 100644 pkg/common/multi_terminal_login/multi_terminal_login.go create mode 100644 pkg/common/mw/check.go create mode 100644 pkg/common/mw/check_test.go create mode 100644 pkg/common/mw/gin.go create mode 100644 pkg/common/mw/intercept_chain.go create mode 100644 pkg/common/mw/rpc_client_interceptor.go create mode 100644 pkg/common/mw/rpc_server_interceptor.go create mode 100644 pkg/common/mw/specialerror/error.go create mode 100644 pkg/common/network/ip.go create mode 100644 pkg/common/prome/gather.go create mode 100644 pkg/common/prome/prometheus.go delete mode 100644 pkg/common/token_verify/jwt_token.go create mode 100644 pkg/common/tokenverify/jwt_token.go create mode 100644 pkg/common/tokenverify/jwt_token_test.go delete mode 100644 pkg/common/utils/utils.go create mode 100644 pkg/discoveryregistry/discovery_register.go create mode 100644 pkg/discoveryregistry/zookeeper/conf.go create mode 100644 pkg/discoveryregistry/zookeeper/debug.go create mode 100644 pkg/discoveryregistry/zookeeper/discover.go create mode 100644 pkg/discoveryregistry/zookeeper/register.go create mode 100644 pkg/discoveryregistry/zookeeper/resolver.go create mode 100644 pkg/discoveryregistry/zookeeper/zk.go delete mode 100644 pkg/grpc-etcdv3/getcdv3/pool.go delete mode 100644 pkg/grpc-etcdv3/getcdv3/register.go delete mode 100644 pkg/grpc-etcdv3/getcdv3/resolver.go delete mode 100644 pkg/proto/admin_cms/admin_cms.pb.go delete mode 100644 pkg/proto/admin_cms/admin_cms.proto delete mode 100644 pkg/proto/auto_proto.sh delete mode 100644 pkg/proto/base/base.proto delete mode 100644 pkg/proto/cache/cache.pb.go delete mode 100644 pkg/proto/chat/chat.pb.go delete mode 100644 pkg/proto/chat/chat.proto create mode 100644 pkg/proto/errinfo/errinfo.pb.go create mode 100644 pkg/proto/errinfo/errinfo.proto create mode 100644 pkg/proto/friend/validate.go create mode 100644 pkg/proto/gen.cmd create mode 100644 pkg/proto/gen.sh delete mode 100644 pkg/proto/message_cms/message_cms.pb.go delete mode 100644 pkg/proto/message_cms/message_cms.proto create mode 100644 pkg/proto/msg/msg.pb.go create mode 100644 pkg/proto/msg/msg.proto create mode 100644 pkg/proto/msggateway/msggateway.pb.go create mode 100644 pkg/proto/msggateway/msggateway.proto delete mode 100644 pkg/proto/office/office.pb.go delete mode 100644 pkg/proto/office/office.proto delete mode 100644 pkg/proto/organization/organization.pb.go delete mode 100644 pkg/proto/organization/organization.proto delete mode 100644 pkg/proto/proto_dir.cfg delete mode 100644 pkg/proto/relay/relay.pb.go delete mode 100644 pkg/proto/relay/relay.proto delete mode 100644 pkg/proto/rtc/rtc.pb.go delete mode 100644 pkg/proto/rtc/rtc.proto delete mode 100644 pkg/proto/sdk_ws/ws.pb.go create mode 100644 pkg/proto/sdkws/sdkws.pb.go rename pkg/proto/{sdk_ws/ws.proto => sdkws/sdkws.proto} (50%) create mode 100644 pkg/proto/third/third.pb.go create mode 100644 pkg/proto/third/third.proto create mode 100644 pkg/proto/wrapperspb/wrapperspb.go create mode 100644 pkg/proto/wrapperspb/wrapperspb.pb.go create mode 100644 pkg/proto/wrapperspb/wrapperspb.proto create mode 100644 pkg/rpcclient/auth.go create mode 100644 pkg/rpcclient/conversation.go create mode 100644 pkg/rpcclient/friend.go create mode 100644 pkg/rpcclient/group.go create mode 100644 pkg/rpcclient/msg.go create mode 100644 pkg/rpcclient/notification/common.go create mode 100644 pkg/rpcclient/notification/conevrsation.go create mode 100644 pkg/rpcclient/notification/extend_msg.go create mode 100644 pkg/rpcclient/notification/friend.go create mode 100644 pkg/rpcclient/notification/group.go create mode 100644 pkg/rpcclient/push.go create mode 100644 pkg/rpcclient/third.go create mode 100644 pkg/rpcclient/user.go create mode 100644 pkg/startrpc/start.go delete mode 100644 pkg/tools/batcher/batcher.go create mode 100644 pkg/utils/callback.go delete mode 100644 pkg/utils/cors_middleware.go rename pkg/utils/{encryption .go => encryption.go} (100%) rename {internal => pkg}/utils/id.go (100%) rename {internal => pkg}/utils/id_test.go (100%) rename {internal => pkg}/utils/image_test.go (53%) rename {internal => pkg}/utils/md5_test.go (72%) create mode 100644 pkg/utils/options.go create mode 100644 pkg/utils/page.go rename {internal => pkg}/utils/platform_number_id_to_name_test.go (96%) rename pkg/{tools => utils}/retry/retry.go (100%) rename pkg/{tools => utils}/retry/stratey.go (100%) rename pkg/{tools => utils/splitter}/tools.go (97%) create mode 100644 pkg/utils/utils_v2.go create mode 100644 pkg/utils/utils_v2_test.go delete mode 100644 script/.env create mode 100644 script/build_push_k8s_images.sh delete mode 100644 script/demo_svr_start.sh create mode 100644 script/init_pwd.sh create mode 100644 script/mongo-init.sh delete mode 100644 script/mysql_database_init.sh delete mode 100644 script/timer_start.sh diff --git a/.docker-compose_cfg/config.yaml b/.docker-compose_cfg/config.yaml new file mode 100644 index 000000000..4ea03d854 --- /dev/null +++ b/.docker-compose_cfg/config.yaml @@ -0,0 +1,65 @@ +#---------------Infrastructure configuration---------------------# +etcd: + etcdSchema: openim #默认即可 + etcdAddr: [ 127.0.0.1:2379 ] #单机部署时,默认即可 + userName: + password: + secret: openIM123 + +mysql: + dbMysqlDatabaseName: admin_chat # 数据库名字 默认即可 + +# 默认管理员账号 +admin: + defaultAccount: + account: [ "admin1", "admin2" ] + defaultPassword: [ "password1", "password2" ] + openIMUserID: [ "openIM123456", "openIMAdmin" ] + faceURL: [ "", "" ] + nickname: [ "admin1", "admin2" ] + level: [ 1, 100 ] + + +adminapi: + openImAdminApiPort: [ 10009 ] #管理后台api服务端口,默认即可,需要开放此端口或做nginx转发 + listenIP: 0.0.0.0 + +chatapi: + openImChatApiPort: [ 10008 ] #登录注册,默认即可,需要开放此端口或做nginx转发 + listenIP: 0.0.0.0 + +rpcport: # rpc服务端口 默认即可 + openImAdminPort: [ 30200 ] + openImChatPort: [ 30300 ] + + +rpcregistername: #rpc注册服务名,默认即可 + openImChatName: Chat + openImAdminCMSName: Admin + +chat: + codeTTL: 300 #短信验证码有效时间(秒) + superVerificationCode: 666666 # 超级验证码 + alismsverify: #阿里云短信配置,在阿里云申请成功后修改以下四项 + accessKeyId: + accessKeySecret: + signName: + verificationCodeTemplateCode: + + +oss: + tempDir: enterprise-temp # 临时密钥上传的目录 + dataDir: enterprise-data # 最终存放目录 + aliyun: + endpoint: https://oss-cn-chengdu.aliyuncs.com + accessKeyID: "" + accessKeySecret: "" + bucket: "" + tencent: + BucketURL: "" + serviceURL: https://cos.COS_REGION.myqcloud.com + secretID: "" + secretKey: "" + sessionToken: "" + bucket: "" + use: "minio" \ No newline at end of file diff --git a/.docker-compose_cfg/datasource-compose.yaml b/.docker-compose_cfg/datasource-compose.yaml new file mode 100644 index 000000000..ef9824eb0 --- /dev/null +++ b/.docker-compose_cfg/datasource-compose.yaml @@ -0,0 +1,13 @@ +#more datasource-compose.yaml +apiVersion: 1 + +datasources: +- name: Prometheus + type: prometheus + access: proxy + orgId: 1 + url: http://127.0.0.1:9091 + basicAuth: false + isDefault: true + version: 1 + editable: true \ No newline at end of file diff --git a/.docker-compose_cfg/grafana.db b/.docker-compose_cfg/grafana.db new file mode 100644 index 0000000000000000000000000000000000000000..362adfe67e166b5754167190ff762fbab2f0b73c GIT binary patch literal 888832 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 IhU@?TKcFHhg8%>k literal 0 HcmV?d00001 diff --git a/.docker-compose_cfg/grafana.ini b/.docker-compose_cfg/grafana.ini new file mode 100644 index 000000000..180de10af --- /dev/null +++ b/.docker-compose_cfg/grafana.ini @@ -0,0 +1,1285 @@ +##################### Grafana Configuration Defaults ##################### +# +# Do not modify this file in grafana installs +# + +# possible values : production, development +app_mode = production + +# instance name, defaults to HOSTNAME environment variable value or hostname if HOSTNAME var is empty +instance_name = ${HOSTNAME} + +# force migration will run migrations that might cause dataloss +force_migration = false + +#################################### Paths ############################### +[paths] +# Path to where grafana can store temp files, sessions, and the sqlite3 db (if that is used) +data = data + +# Temporary files in `data` directory older than given duration will be removed +temp_data_lifetime = 24h + +# Directory where grafana can store logs +logs = data/log + +# Directory where grafana will automatically scan and look for plugins +plugins = data/plugins + +# folder that contains provisioning config files that grafana will apply on startup and while running. +provisioning = conf/provisioning + +#################################### Server ############################## +[server] +# Protocol (http, https, h2, socket) +protocol = http + +# The ip address to bind to, empty will bind to all interfaces +http_addr = + +# The http port to use +http_port = 10007 + +# The public facing domain name used to access grafana from a browser +domain = localhost + +# Redirect to correct domain if host header does not match domain +# Prevents DNS rebinding attacks +enforce_domain = false + +# The full public facing url +root_url = %(protocol)s://%(domain)s:%(http_port)s/ + +# Serve Grafana from subpath specified in `root_url` setting. By default it is set to `false` for compatibility reasons. +serve_from_sub_path = false + +# Log web requests +router_logging = false + +# the path relative working path +static_root_path = public + +# enable gzip +enable_gzip = false + +# https certs & key file +cert_file = +cert_key = + +# Unix socket path +socket = /tmp/grafana.sock + +# CDN Url +cdn_url = + +# Sets the maximum time in minutes before timing out read of an incoming request and closing idle connections. +# `0` means there is no timeout for reading the request. +read_timeout = 0 + +#################################### Database ############################ +[database] +# You can configure the database connection by specifying type, host, name, user and password +# as separate properties or as on string using the url property. + +# Either "mysql", "postgres" or "sqlite3", it's your choice +type = sqlite3 +host = 127.0.0.1:3306 +name = grafana +user = root +# If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;""" +password = +# Use either URL or the previous fields to configure the database +# Example: mysql://user:secret@host:port/database +url = + +# Max idle conn setting default is 2 +max_idle_conn = 2 + +# Max conn setting default is 0 (mean not set) +max_open_conn = + +# Connection Max Lifetime default is 14400 (means 14400 seconds or 4 hours) +conn_max_lifetime = 14400 + +# Set to true to log the sql calls and execution times. +log_queries = + +# For "postgres", use either "disable", "require" or "verify-full" +# For "mysql", use either "true", "false", or "skip-verify". +ssl_mode = disable + +# Database drivers may support different transaction isolation levels. +# Currently, only "mysql" driver supports isolation levels. +# If the value is empty - driver's default isolation level is applied. +# For "mysql" use "READ-UNCOMMITTED", "READ-COMMITTED", "REPEATABLE-READ" or "SERIALIZABLE". +isolation_level = + +ca_cert_path = +client_key_path = +client_cert_path = +server_cert_name = + +# For "sqlite3" only, path relative to data_path setting +path = grafana.db + +# For "sqlite3" only. cache mode setting used for connecting to the database +cache_mode = private + +# For "mysql" only if migrationLocking feature toggle is set. How many seconds to wait before failing to lock the database for the migrations, default is 0. +locking_attempt_timeout_sec = 0 + +#################################### Cache server ############################# +[remote_cache] +# Either "redis", "memcached" or "database" default is "database" +type = database + +# cache connectionstring options +# database: will use Grafana primary database. +# redis: config like redis server e.g. `addr=127.0.0.1:6379,pool_size=100,db=0,ssl=false`. Only addr is required. ssl may be 'true', 'false', or 'insecure'. +# memcache: 127.0.0.1:11211 +connstr = + +#################################### Data proxy ########################### +[dataproxy] + +# This enables data proxy logging, default is false +logging = false + +# How long the data proxy waits to read the headers of the response before timing out, default is 30 seconds. +# This setting also applies to core backend HTTP data sources where query requests use an HTTP client with timeout set. +timeout = 30 + +# How long the data proxy waits to establish a TCP connection before timing out, default is 10 seconds. +dialTimeout = 10 + +# How many seconds the data proxy waits before sending a keepalive request. +keep_alive_seconds = 30 + +# How many seconds the data proxy waits for a successful TLS Handshake before timing out. +tls_handshake_timeout_seconds = 10 + +# How many seconds the data proxy will wait for a server's first response headers after +# fully writing the request headers if the request has an "Expect: 100-continue" +# header. A value of 0 will result in the body being sent immediately, without +# waiting for the server to approve. +expect_continue_timeout_seconds = 1 + +# Optionally limits the total number of connections per host, including connections in the dialing, +# active, and idle states. On limit violation, dials will block. +# A value of zero (0) means no limit. +max_conns_per_host = 0 + +# The maximum number of idle connections that Grafana will keep alive. +max_idle_connections = 100 + +# How many seconds the data proxy keeps an idle connection open before timing out. +idle_conn_timeout_seconds = 90 + +# If enabled and user is not anonymous, data proxy will add X-Grafana-User header with username into the request. +send_user_header = false + +# Limit the amount of bytes that will be read/accepted from responses of outgoing HTTP requests. +response_limit = 0 + +# Limits the number of rows that Grafana will process from SQL data sources. +row_limit = 1000000 + +#################################### Analytics ########################### +[analytics] +# Server reporting, sends usage counters to stats.grafana.org every 24 hours. +# No ip addresses are being tracked, only simple counters to track +# running instances, dashboard and error counts. It is very helpful to us. +# Change this option to false to disable reporting. +reporting_enabled = true + +# The name of the distributor of the Grafana instance. Ex hosted-grafana, grafana-labs +reporting_distributor = grafana-labs + +# Set to false to disable all checks to https://grafana.com +# for new versions of grafana. The check is used +# in some UI views to notify that a grafana update exists. +# This option does not cause any auto updates, nor send any information +# only a GET request to https://raw.githubusercontent.com/grafana/grafana/main/latest.json to get the latest version. +check_for_updates = true + +# Set to false to disable all checks to https://grafana.com +# for new versions of plugins. The check is used +# in some UI views to notify that a plugin update exists. +# This option does not cause any auto updates, nor send any information +# only a GET request to https://grafana.com to get the latest versions. +check_for_plugin_updates = true + +# Google Analytics universal tracking code, only enabled if you specify an id here +google_analytics_ua_id = + +# Google Tag Manager ID, only enabled if you specify an id here +google_tag_manager_id = + +# Rudderstack write key, enabled only if rudderstack_data_plane_url is also set +rudderstack_write_key = + +# Rudderstack data plane url, enabled only if rudderstack_write_key is also set +rudderstack_data_plane_url = + +# Rudderstack SDK url, optional, only valid if rudderstack_write_key and rudderstack_data_plane_url is also set +rudderstack_sdk_url = + +# Rudderstack Config url, optional, used by Rudderstack SDK to fetch source config +rudderstack_config_url = + +# Application Insights connection string. Specify an URL string to enable this feature. +application_insights_connection_string = + +# Optional. Specifies an Application Insights endpoint URL where the endpoint string is wrapped in backticks ``. +application_insights_endpoint_url = + +# Controls if the UI contains any links to user feedback forms +feedback_links_enabled = true + +#################################### Security ############################ +[security] +# disable creation of admin user on first start of grafana +disable_initial_admin_creation = false + +# default admin user, created on startup +admin_user = admin + +# default admin password, can be changed before first start of grafana, or in profile settings +admin_password = admin + +# default admin email, created on startup +admin_email = admin@localhost + +# used for signing +secret_key = SW2YcwTIb9zpOOhoPsMm + +# current key provider used for envelope encryption, default to static value specified by secret_key +encryption_provider = secretKey.v1 + +# list of configured key providers, space separated (Enterprise only): e.g., awskms.v1 azurekv.v1 +available_encryption_providers = + +# disable gravatar profile images +disable_gravatar = false + +# data source proxy whitelist (ip_or_domain:port separated by spaces) +data_source_proxy_whitelist = + +# disable protection against brute force login attempts +disable_brute_force_login_protection = false + +# set to true if you host Grafana behind HTTPS. default is false. +cookie_secure = false + +# set cookie SameSite attribute. defaults to `lax`. can be set to "lax", "strict", "none" and "disabled" +cookie_samesite = lax + +# set to true if you want to allow browsers to render Grafana in a ,