mirror of
https://github.com/TeaOSLab/EdgeAPI.git
synced 2025-11-13 23:40:25 +08:00
87 lines
2.2 KiB
Go
87 lines
2.2 KiB
Go
|
|
// Copyright 2023 Liuxiangchao iwind.liu@gmail.com. All rights reserved. Official site: https://goedge.cn .
|
||
|
|
|
||
|
|
package services
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"errors"
|
||
|
|
"github.com/TeaOSLab/EdgeAPI/internal/db/models"
|
||
|
|
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
||
|
|
)
|
||
|
|
|
||
|
|
// LoginSessionService 登录SESSION服务
|
||
|
|
type LoginSessionService struct {
|
||
|
|
BaseService
|
||
|
|
}
|
||
|
|
|
||
|
|
// WriteLoginSessionValue 写入SESSION数据
|
||
|
|
func (this *LoginSessionService) WriteLoginSessionValue(ctx context.Context, req *pb.WriteLoginSessionValueRequest) (*pb.RPCSuccess, error) {
|
||
|
|
_, _, err := this.ValidateAdminAndUser(ctx, false)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
|
||
|
|
var tx = this.NullTx()
|
||
|
|
err = models.SharedLoginSessionDAO.WriteSessionValue(tx, req.Sid, req.Key, req.Value)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
return this.Success()
|
||
|
|
}
|
||
|
|
|
||
|
|
// DeleteLoginSession 删除SESSION
|
||
|
|
func (this *LoginSessionService) DeleteLoginSession(ctx context.Context, req *pb.DeleteLoginSessionRequest) (*pb.RPCSuccess, error) {
|
||
|
|
_, _, err := this.ValidateAdminAndUser(ctx, false)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
|
||
|
|
if len(req.Sid) == 0 {
|
||
|
|
return nil, errors.New("'sid' should not be empty")
|
||
|
|
}
|
||
|
|
|
||
|
|
var tx = this.NullTx()
|
||
|
|
err = models.SharedLoginSessionDAO.DeleteSession(tx, req.Sid)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
|
||
|
|
return this.Success()
|
||
|
|
}
|
||
|
|
|
||
|
|
// FindLoginSession 查找SESSION
|
||
|
|
func (this *LoginSessionService) FindLoginSession(ctx context.Context, req *pb.FindLoginSessionRequest) (*pb.FindLoginSessionResponse, error) {
|
||
|
|
_, _, err := this.ValidateAdminAndUser(ctx, false)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
|
||
|
|
if len(req.Sid) == 0 {
|
||
|
|
return nil, errors.New("'token' should not be empty")
|
||
|
|
}
|
||
|
|
|
||
|
|
var tx = this.NullTx()
|
||
|
|
session, err := models.SharedLoginSessionDAO.FindSession(tx, req.Sid)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
if session == nil || !session.IsAvailable() {
|
||
|
|
return &pb.FindLoginSessionResponse{
|
||
|
|
LoginSession: nil,
|
||
|
|
}, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
return &pb.FindLoginSessionResponse{
|
||
|
|
LoginSession: &pb.LoginSession{
|
||
|
|
Id: int64(session.Id),
|
||
|
|
Sid: session.Sid,
|
||
|
|
AdminId: int64(session.AdminId),
|
||
|
|
UserId: int64(session.UserId),
|
||
|
|
Ip: session.Ip,
|
||
|
|
CreatedAt: int64(session.CreatedAt),
|
||
|
|
ExpiresAt: int64(session.ExpiresAt),
|
||
|
|
ValuesJSON: session.Values,
|
||
|
|
},
|
||
|
|
}, nil
|
||
|
|
}
|