复制项目
This commit is contained in:
119
internal/rpc/chat/start.go
Normal file
119
internal/rpc/chat/start.go
Normal file
@@ -0,0 +1,119 @@
|
||||
package chat
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"git.imall.cloud/openim/chat/pkg/common/constant"
|
||||
"git.imall.cloud/openim/chat/pkg/common/mctx"
|
||||
"git.imall.cloud/openim/chat/pkg/common/rtc"
|
||||
"git.imall.cloud/openim/chat/pkg/protocol/admin"
|
||||
"git.imall.cloud/openim/chat/pkg/protocol/chat"
|
||||
"github.com/openimsdk/tools/db/mongoutil"
|
||||
"github.com/openimsdk/tools/discovery"
|
||||
"github.com/openimsdk/tools/errs"
|
||||
"github.com/openimsdk/tools/mw"
|
||||
"google.golang.org/grpc"
|
||||
"google.golang.org/grpc/credentials/insecure"
|
||||
|
||||
"git.imall.cloud/openim/chat/pkg/common/config"
|
||||
"git.imall.cloud/openim/chat/pkg/common/db/database"
|
||||
"git.imall.cloud/openim/chat/pkg/email"
|
||||
chatClient "git.imall.cloud/openim/chat/pkg/rpclient/chat"
|
||||
"git.imall.cloud/openim/chat/pkg/sms"
|
||||
"github.com/openimsdk/tools/db/redisutil"
|
||||
"github.com/redis/go-redis/v9"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
RpcConfig config.Chat
|
||||
RedisConfig config.Redis
|
||||
MongodbConfig config.Mongo
|
||||
Discovery config.Discovery
|
||||
Share config.Share
|
||||
}
|
||||
|
||||
func Start(ctx context.Context, config *Config, client discovery.SvcDiscoveryRegistry, server *grpc.Server) error {
|
||||
if len(config.Share.ChatAdmin) == 0 {
|
||||
return errs.New("share chat admin not configured")
|
||||
}
|
||||
mgocli, err := mongoutil.NewMongoDB(ctx, config.MongodbConfig.Build())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
rdb, err := redisutil.NewRedisClient(ctx, config.RedisConfig.Build())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
var srv chatSvr
|
||||
srv.rdb = rdb
|
||||
config.RpcConfig.VerifyCode.Phone.Use = strings.ToLower(config.RpcConfig.VerifyCode.Phone.Use)
|
||||
config.RpcConfig.VerifyCode.Mail.Use = strings.ToLower(config.RpcConfig.VerifyCode.Mail.Use)
|
||||
srv.conf = config.RpcConfig.VerifyCode
|
||||
switch config.RpcConfig.VerifyCode.Phone.Use {
|
||||
case "ali":
|
||||
ali := config.RpcConfig.VerifyCode.Phone.Ali
|
||||
srv.SMS, err = sms.NewAli(ali.Endpoint, ali.AccessKeyID, ali.AccessKeySecret, ali.SignName, ali.VerificationCodeTemplateCode)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
case "bao":
|
||||
bao := config.RpcConfig.VerifyCode.Phone.Bao
|
||||
srv.SMS, err = sms.NewBao(bao.Endpoint, bao.AccessKeyID, bao.AccessKeySecret, bao.SignName, bao.VerificationCodeTemplateCode)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
if mail := config.RpcConfig.VerifyCode.Mail; mail.Use == constant.VerifyMail {
|
||||
srv.Mail = email.NewMail(mail.SMTPAddr, mail.SMTPPort, mail.SenderMail, mail.SenderAuthorizationCode, mail.Title)
|
||||
}
|
||||
srv.Database, err = database.NewChatDatabase(mgocli, rdb)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
conn, err := client.GetConn(ctx, config.Discovery.RpcService.Admin, grpc.WithTransportCredentials(insecure.NewCredentials()), mw.GrpcClient())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
srv.Admin = chatClient.NewAdminClient(admin.NewAdminClient(conn))
|
||||
srv.Code = verifyCode{
|
||||
UintTime: time.Duration(config.RpcConfig.VerifyCode.UintTime) * time.Second,
|
||||
MaxCount: config.RpcConfig.VerifyCode.MaxCount,
|
||||
ValidCount: config.RpcConfig.VerifyCode.ValidCount,
|
||||
SuperCode: config.RpcConfig.VerifyCode.SuperCode,
|
||||
ValidTime: time.Duration(config.RpcConfig.VerifyCode.ValidTime) * time.Second,
|
||||
Len: config.RpcConfig.VerifyCode.Len,
|
||||
}
|
||||
srv.Livekit = rtc.NewLiveKit(config.RpcConfig.LiveKit.Key, config.RpcConfig.LiveKit.Secret, config.RpcConfig.LiveKit.URL)
|
||||
srv.AllowRegister = config.RpcConfig.AllowRegister
|
||||
chat.RegisterChatServer(server, &srv)
|
||||
return nil
|
||||
}
|
||||
|
||||
type chatSvr struct {
|
||||
chat.UnimplementedChatServer
|
||||
conf config.VerifyCode
|
||||
Database database.ChatDatabaseInterface
|
||||
Admin *chatClient.AdminClient
|
||||
SMS sms.SMS
|
||||
Mail email.Mail
|
||||
Code verifyCode
|
||||
Livekit *rtc.LiveKit
|
||||
ChatAdminUserID string
|
||||
AllowRegister bool
|
||||
rdb redis.UniversalClient
|
||||
}
|
||||
|
||||
func (o *chatSvr) WithAdminUser(ctx context.Context) context.Context {
|
||||
return mctx.WithAdminUser(ctx, o.ChatAdminUserID)
|
||||
}
|
||||
|
||||
type verifyCode struct {
|
||||
UintTime time.Duration // sec
|
||||
MaxCount int
|
||||
ValidCount int
|
||||
SuperCode string
|
||||
ValidTime time.Duration
|
||||
Len int
|
||||
}
|
||||
Reference in New Issue
Block a user