Files
open-im-server/internal/rpc/auth/auth.go
T

122 lines
4.3 KiB
Go
Raw Normal View History

2021-12-27 16:48:05 +08:00
package auth
import (
"Open_IM/pkg/common/constant"
2021-12-31 10:57:45 +08:00
"Open_IM/pkg/common/db"
2021-12-27 16:48:05 +08:00
imdb "Open_IM/pkg/common/db/mysql_model/im_mysql_model"
"Open_IM/pkg/common/log"
"Open_IM/pkg/common/token_verify"
"Open_IM/pkg/grpc-etcdv3/getcdv3"
pbAuth "Open_IM/pkg/proto/auth"
"Open_IM/pkg/utils"
"context"
"net"
"strconv"
"strings"
"Open_IM/pkg/common/config"
"google.golang.org/grpc"
)
func (rpc *rpcAuth) UserRegister(_ context.Context, req *pbAuth.UserRegisterReq) (*pbAuth.UserRegisterResp, error) {
2022-04-20 20:58:51 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " rpc args ", req.String())
2021-12-31 10:57:45 +08:00
var user db.User
2021-12-27 16:48:05 +08:00
utils.CopyStructFields(&user, req.UserInfo)
2021-12-28 20:28:01 +08:00
if req.UserInfo.Birth != 0 {
2022-01-06 20:17:22 +08:00
user.Birth = utils.UnixSecondToTime(int64(req.UserInfo.Birth))
2021-12-28 20:28:01 +08:00
}
2022-04-20 20:58:51 +08:00
log.Debug(req.OperationID, "copy ", user, req.UserInfo)
2021-12-27 16:48:05 +08:00
err := imdb.UserRegister(user)
if err != nil {
2022-04-20 20:58:51 +08:00
errMsg := req.OperationID + " imdb.UserRegister failed " + err.Error() + user.UserID
log.NewError(req.OperationID, errMsg, user)
return &pbAuth.UserRegisterResp{CommonResp: &pbAuth.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}}, nil
2021-12-27 16:48:05 +08:00
}
2022-04-20 20:58:51 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " rpc return ", pbAuth.UserRegisterResp{CommonResp: &pbAuth.CommonResp{}})
2021-12-27 16:48:05 +08:00
return &pbAuth.UserRegisterResp{CommonResp: &pbAuth.CommonResp{}}, nil
}
func (rpc *rpcAuth) UserToken(_ context.Context, req *pbAuth.UserTokenReq) (*pbAuth.UserTokenResp, error) {
2022-04-20 20:58:51 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " rpc args ", req.String())
2021-12-27 16:48:05 +08:00
_, err := imdb.GetUserByUserID(req.FromUserID)
if err != nil {
2022-04-20 20:58:51 +08:00
errMsg := req.OperationID + " imdb.GetUserByUserID failed " + err.Error() + req.FromUserID
log.NewError(req.OperationID, errMsg)
return &pbAuth.UserTokenResp{CommonResp: &pbAuth.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}}, nil
2021-12-27 16:48:05 +08:00
}
tokens, expTime, err := token_verify.CreateToken(req.FromUserID, req.Platform)
if err != nil {
2022-04-20 20:58:51 +08:00
errMsg := req.OperationID + " token_verify.CreateToken failed " + err.Error() + req.FromUserID + utils.Int32ToString(req.Platform)
log.NewError(req.OperationID, errMsg)
return &pbAuth.UserTokenResp{CommonResp: &pbAuth.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}}, nil
2021-12-27 16:48:05 +08:00
}
2022-04-20 20:58:51 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " rpc return ", pbAuth.UserTokenResp{CommonResp: &pbAuth.CommonResp{}, Token: tokens, ExpiredTime: expTime})
2021-12-28 18:37:16 +08:00
return &pbAuth.UserTokenResp{CommonResp: &pbAuth.CommonResp{}, Token: tokens, ExpiredTime: expTime}, nil
2021-12-27 16:48:05 +08:00
}
type rpcAuth struct {
rpcPort int
rpcRegisterName string
etcdSchema string
etcdAddr []string
}
func NewRpcAuthServer(port int) *rpcAuth {
2022-03-31 11:15:06 +08:00
log.NewPrivateLog(constant.LogFileName)
2021-12-27 16:48:05 +08:00
return &rpcAuth{
rpcPort: port,
rpcRegisterName: config.Config.RpcRegisterName.OpenImAuthName,
etcdSchema: config.Config.Etcd.EtcdSchema,
etcdAddr: config.Config.Etcd.EtcdAddr,
}
}
func (rpc *rpcAuth) Run() {
2022-04-20 20:58:51 +08:00
operationID := utils.OperationIDGenerator()
log.NewInfo(operationID, "rpc auth start...")
2021-12-27 16:48:05 +08:00
2022-05-07 17:05:05 +08:00
listenIP := ""
if config.Config.ListenIP == "" {
listenIP = "0.0.0.0"
} else {
listenIP = config.Config.ListenIP
}
address := listenIP + ":" + strconv.Itoa(rpc.rpcPort)
2021-12-27 16:48:05 +08:00
listener, err := net.Listen("tcp", address)
if err != nil {
2022-05-10 09:09:37 +08:00
panic("listening err:" + err.Error() + rpc.rpcRegisterName)
2021-12-27 16:48:05 +08:00
}
2022-04-20 20:58:51 +08:00
log.NewInfo(operationID, "listen network success, ", address, listener)
2021-12-27 16:48:05 +08:00
//grpc server
srv := grpc.NewServer()
defer srv.GracefulStop()
//service registers with etcd
pbAuth.RegisterAuthServer(srv, rpc)
2022-05-07 17:05:05 +08:00
rpcRegisterIP := ""
if config.Config.RpcRegisterIP == "" {
rpcRegisterIP, err = utils.GetLocalIP()
if err != nil {
log.Error("", "GetLocalIP failed ", err.Error())
}
}
err = getcdv3.RegisterEtcd(rpc.etcdSchema, strings.Join(rpc.etcdAddr, ","), rpcRegisterIP, rpc.rpcPort, rpc.rpcRegisterName, 10)
2021-12-27 16:48:05 +08:00
if err != nil {
2022-04-20 20:58:51 +08:00
log.NewError(operationID, "RegisterEtcd failed ", err.Error(),
2022-05-07 17:05:05 +08:00
rpc.etcdSchema, strings.Join(rpc.etcdAddr, ","), rpcRegisterIP, rpc.rpcPort, rpc.rpcRegisterName)
2021-12-27 16:48:05 +08:00
return
}
2022-05-07 17:05:05 +08:00
log.NewInfo(operationID, "RegisterAuthServer ok ", rpc.etcdSchema, strings.Join(rpc.etcdAddr, ","), rpcRegisterIP, rpc.rpcPort, rpc.rpcRegisterName)
2021-12-27 16:48:05 +08:00
err = srv.Serve(listener)
if err != nil {
2022-04-20 20:58:51 +08:00
log.NewError(operationID, "Serve failed ", err.Error())
2021-12-27 16:48:05 +08:00
return
}
2022-04-20 20:58:51 +08:00
log.NewInfo(operationID, "rpc auth ok")
2021-12-27 16:48:05 +08:00
}