diff --git a/internal/api/aesKey.go b/internal/api/aesKey.go new file mode 100644 index 000000000..46a5e6c95 --- /dev/null +++ b/internal/api/aesKey.go @@ -0,0 +1,22 @@ +package api + +import ( + aesKey "github.com/OpenIMSDK/protocol/aeskey" + "github.com/OpenIMSDK/tools/a2r" + "github.com/gin-gonic/gin" + "github.com/openimsdk/open-im-server/v3/pkg/rpcclient" +) + +type AesKeyApi rpcclient.AesKey + +func NewAesKeyApi(client rpcclient.AesKey) AesKeyApi { + return AesKeyApi(client) +} + +func (a *AesKeyApi) GetKey(c *gin.Context) { + a2r.Call(aesKey.AesKeyClient.AcquireAesKey, a.Client, c) +} + +func (a *AesKeyApi) GetKeys(c *gin.Context) { + a2r.Call(aesKey.AesKeyClient.AcquireAesKeys, a.Client, c) +} diff --git a/internal/api/route.go b/internal/api/route.go index 7a331d643..64ec4f37a 100644 --- a/internal/api/route.go +++ b/internal/api/route.go @@ -59,9 +59,11 @@ func NewGinRouter(discov discoveryregistry.SvcDiscoveryRegistry, rdb redis.Unive conversationRpc := rpcclient.NewConversation(discov) authRpc := rpcclient.NewAuth(discov) thirdRpc := rpcclient.NewThird(discov) + aesKeyRpc := rpcclient.NewAesKey(discov) u := NewUserApi(*userRpc) m := NewMessageApi(messageRpc, userRpc) + k := NewAesKeyApi(*aesKeyRpc) ParseToken := GinParseToken(rdb) userRouterGroup := r.Group("/user") { @@ -205,6 +207,11 @@ func NewGinRouter(discov discoveryregistry.SvcDiscoveryRegistry, rdb redis.Unive statisticsGroup.POST("/group/create", g.GroupCreateCount) statisticsGroup.POST("/group/active", m.GetActiveGroup) } + aesKeyGroup := r.Group("/aes_key", ParseToken) + { + aesKeyGroup.POST("/get_key", k.GetKey) + aesKeyGroup.POST("/get_keys", k.GetKeys) + } return r } diff --git a/pkg/rpcclient/aes_key.go b/pkg/rpcclient/aes_key.go new file mode 100644 index 000000000..204c2711b --- /dev/null +++ b/pkg/rpcclient/aes_key.go @@ -0,0 +1,38 @@ +package rpcclient + +import ( + "context" + aesKey "github.com/OpenIMSDK/protocol/aeskey" + "github.com/OpenIMSDK/tools/discoveryregistry" + "github.com/openimsdk/open-im-server/v3/pkg/common/config" + "google.golang.org/grpc" +) + +type AesKey struct { + conn grpc.ClientConnInterface + Client aesKey.AesKeyClient + Discov discoveryregistry.SvcDiscoveryRegistry +} + +func NewAesKey(discov discoveryregistry.SvcDiscoveryRegistry) *AesKey { + conn, err := discov.GetConn(context.Background(), config.Config.RpcRegisterName.OpenImAesKeyName) + if err != nil { + panic(err) + } + client := aesKey.NewAesKeyClient(conn) + return &AesKey{Discov: discov, Client: client, conn: conn} +} + +type AesKeyRpcClient AesKey + +func NewAesKeyRpcClient(discov discoveryregistry.SvcDiscoveryRegistry) AesKeyRpcClient { + return AesKeyRpcClient(*NewAesKey(discov)) +} + +func (a *AesKeyRpcClient) AcquireAesKey(ctx context.Context, conversationType int32, userID, friendUserID, groupID string) (*aesKey.AcquireAesKeyResp, error) { + return a.Client.AcquireAesKey(ctx, &aesKey.AcquireAesKeyReq{ConversationType: conversationType, OwnerUserID: userID, FriendUserID: friendUserID, GroupID: groupID}) +} + +func (a *AesKeyRpcClient) AcquireAesKeys(ctx context.Context, userID string) (*aesKey.AcquireAesKeysResp, error) { + return a.Client.AcquireAesKeys(ctx, &aesKey.AcquireAesKeysReq{UserID: userID}) +}