feat: service-lark update
continuous-integration/drone/push Build is passing

This commit is contained in:
2022-01-12 00:40:37 +08:00
parent 6dab1ffda3
commit c048909a9d
13 changed files with 420 additions and 88 deletions
+7 -6
View File
@@ -12,14 +12,15 @@ type Lark struct {
conf *config.Config
}
func NewLark() Lark {
appSettings := core.NewInternalAppSettings(
core.SetAppCredentials(cfg.Config.LarkAppID, cfg.Config.LarkAppSecret))
conf := core.NewConfig(core.DomainFeiShu, appSettings, core.SetLoggerLevel(core.LoggerLevelError))
var lark Lark
return Lark{
conf: conf,
func Client() Lark {
if lark.conf == nil {
appSettings := core.NewInternalAppSettings(
core.SetAppCredentials(cfg.Config.LarkAppID, cfg.Config.LarkAppSecret))
lark.conf = core.NewConfig(core.DomainFeiShu, appSettings, core.SetLoggerLevel(core.LoggerLevelError))
}
return lark
}
func (l Lark) Auth(code string) (*authen.UserAccessTokenInfo, error) {
@@ -1,6 +1,9 @@
package model
import "gorm.io/gorm"
import (
"git.icechen.cn/monorepo/backend/pkg/orm"
"gorm.io/gorm"
)
type UserInfo struct {
gorm.Model
@@ -13,11 +16,11 @@ type UserInfo struct {
AvatarThumb string `json:"avatar_thumb,omitempty" gorm:"avatar_thumb"`
AvatarMiddle string `json:"avatar_middle,omitempty" gorm:"avatar_middle"`
AvatarBig string `json:"avatar_big,omitempty" gorm:"avatar_big"`
OpenId string `json:"open_id,omitempty" gorm:"open_id"`
UnionId string `json:"union_id,omitempty" gorm:"union_id"`
Email string `json:"email,omitempty" gorm:"email"`
OpenId string `json:"open_id,omitempty" gorm:"open_id;uniqueIndex"`
UnionId string `json:"union_id,omitempty" gorm:"union_id;uniqueIndex"`
Email string `json:"email,omitempty" gorm:"email;uniqueIndex"`
UserId string `json:"user_id,omitempty" gorm:"user_id"`
Mobile string `json:"mobile,omitempty" gorm:"mobile"`
Mobile string `json:"mobile,omitempty" gorm:"mobile;uniqueIndex"`
TenantKey string `json:"tenant_key,omitempty" gorm:"tenant_key"`
RefreshExpiresIn int `json:"refresh_expires_in,omitempty" gorm:"refresh_expires_in"`
RefreshToken string `json:"refresh_token,omitempty" gorm:"refresh_token"`
@@ -26,3 +29,14 @@ type UserInfo struct {
func (UserInfo) TableName() string {
return "user_info"
}
// CreateUser 创建用户
func CreateUser(user *UserInfo) error {
return orm.DB.Where("open_id = ?", user.OpenId).Assign(user).FirstOrCreate(user).Error
}
// GetUserByID 根据ID获取用户信息
func GetUserByID(userID uint) (info UserInfo, err error) {
err = orm.DB.First(&info, userID).Error
return
}
@@ -0,0 +1,47 @@
package model
import (
"git.icechen.cn/monorepo/backend/pkg/orm"
"github.com/gofiber/fiber/v2/utils"
"gorm.io/gorm"
"time"
)
// TokenEffectiveTime token有效时长
const TokenEffectiveTime = time.Hour * 2
type UserToken struct {
gorm.Model
Token string `json:"token" gorm:"token;uniqueIndex"`
ExpiresTime time.Time `json:"expires_time" gorm:"expires_time"`
UserInfoID uint `json:"user_info_id" gorm:"user_info_id"`
}
func (UserToken) TableName() string {
return "user_token"
}
// CreateToken 创建Token
func CreateToken(userInfoID uint) (string, error) {
userToken := UserToken{
Token: genToken(),
ExpiresTime: time.Now().Add(TokenEffectiveTime),
UserInfoID: userInfoID,
}
err := orm.DB.Where("user_info_id = ?", userInfoID).
Assign(UserToken{UserInfoID: userInfoID}).
FirstOrCreate(&userToken).Error
return userToken.Token, err
}
func genToken() string {
return utils.UUIDv4()
}
// GetToken 根据token获取token对象
func GetToken(token string) (UserToken, error) {
userToken := UserToken{}
err := orm.DB.Where("token = ? AND expires_time < ?", token, time.Now()).
First(&userToken).Error
return userToken, err
}
@@ -1,7 +1,6 @@
package lark
package server
import (
"context"
"fmt"
"google.golang.org/grpc/keepalive"
"log"
@@ -9,7 +8,6 @@ import (
"time"
"git.icechen.cn/monorepo/backend/pkg/proto/zeus/lark"
"github.com/jinzhu/copier"
"google.golang.org/grpc"
"google.golang.org/grpc/reflection"
)
@@ -23,7 +21,7 @@ func RpcServer() {
s := grpc.NewServer(grpc.KeepaliveParams(keepalive.ServerParameters{
MaxConnectionIdle: 5 * time.Minute,
}))
lark.RegisterUserServer(s, &Server{})
lark.RegisterUserServer(s, &UserServer{})
reflection.Register(s)
@@ -32,19 +30,3 @@ func RpcServer() {
log.Fatalf("failed to serve: %v", err)
}
}
type Server struct{}
func (s Server) Login(ctx context.Context, in *lark.LoginRequest) (*lark.LoginResponse, error) {
userInfo, err := NewLark().Auth(in.Code)
if err != nil {
return nil, err
}
resp := new(lark.LoginResponse)
err = copier.Copy(resp, userInfo)
if err != nil {
return nil, err
}
return resp, nil
}
@@ -0,0 +1,63 @@
package server
import (
"context"
lark2 "git.icechen.cn/monorepo/backend/app/zeus/service/lark/internal/lark"
"git.icechen.cn/monorepo/backend/app/zeus/service/lark/internal/model"
"git.icechen.cn/monorepo/backend/pkg/proto/zeus/lark"
"github.com/jinzhu/copier"
)
type UserServer struct{}
func (s UserServer) Login(ctx context.Context, in *lark.LoginRequest) (*lark.LoginResponse, error) {
userInfo, err := lark2.Client().Auth(in.Code)
if err != nil {
return nil, err
}
// userInfo to db
user := model.UserInfo{}
err = copier.Copy(&user, userInfo)
if err != nil {
return nil, err
}
err = model.CreateUser(&user)
if err != nil {
return nil, err
}
// gen token
token, err := model.CreateToken(user.ID)
if err != nil {
return nil, err
}
// return token
resp := &lark.LoginResponse{
Token: token,
}
return resp, nil
}
func (s UserServer) Info(ctx context.Context, in *lark.InfoRequest) (*lark.InfoResponse, error) {
// token to user info
_ = in.Token
info, err := getUserByToken(in.Token)
if err != nil {
return nil, err
}
resp := new(lark.InfoResponse)
err = copier.Copy(resp, info)
return resp, err
}
func getUserByToken(token string) (model.UserInfo, error) {
userToken, err := model.GetToken(token)
if err != nil {
return model.UserInfo{}, err
}
return model.GetUserByID(userToken.UserInfoID)
}
+2 -2
View File
@@ -1,9 +1,9 @@
package main
import (
"git.icechen.cn/monorepo/backend/app/zeus/service/lark/internal/lark"
"git.icechen.cn/monorepo/backend/app/zeus/service/lark/internal/server"
)
func main() {
lark.RpcServer()
server.RpcServer()
}