73 lines
2.0 KiB
Go
73 lines
2.0 KiB
Go
package analysisdevicelogic
|
|
|
|
import (
|
|
"context"
|
|
|
|
"lone-services/pkg/utils"
|
|
"lone-services/pkg/validate"
|
|
analysis "lone-services/rpc/analysis/pb"
|
|
"lone-services/services/analysis/internal/logic/common"
|
|
analysisoss "lone-services/services/analysis/internal/oss"
|
|
"lone-services/services/analysis/internal/svc"
|
|
"lone-services/services/analysis/validator"
|
|
|
|
"github.com/google/uuid"
|
|
"github.com/zeromicro/go-zero/core/logx"
|
|
)
|
|
|
|
type PolicyLogic struct {
|
|
ctx context.Context
|
|
svcCtx *svc.ServiceContext
|
|
logx.Logger
|
|
}
|
|
|
|
func NewPolicyLogic(ctx context.Context, svcCtx *svc.ServiceContext) *PolicyLogic {
|
|
return &PolicyLogic{
|
|
ctx: ctx,
|
|
svcCtx: svcCtx,
|
|
Logger: logx.WithContext(ctx),
|
|
}
|
|
}
|
|
|
|
func (l *PolicyLogic) Policy(in *analysis.DevicePolicyReq) (*analysis.Response, error) {
|
|
var req validator.DevicePolicyValidator
|
|
if msg := validate.ValidateFromProto(in, &req); msg != utils.StringEmpty {
|
|
return common.OutResponse(utils.ErrorParams, msg), nil
|
|
}
|
|
|
|
loginUser := utils.GetUserFromCtx(l.ctx)
|
|
if !loginUser.Valid || loginUser.ID < utils.NumberOne {
|
|
return common.FailResponse(utils.ErrorNoLogin), nil
|
|
}
|
|
|
|
cfg := analysisoss.NewConfig("device-" + req.SerialNo)
|
|
if err := cfg.Validate(); err != nil {
|
|
l.Errorf("device policy config: %v", err)
|
|
return common.FailResponse(utils.Fail), nil
|
|
}
|
|
|
|
taskId := uuid.New().String()
|
|
cred, err := analysisoss.AssumeRole(cfg)
|
|
if err != nil {
|
|
l.Errorf("device policy assume role: %v", err)
|
|
return common.FailResponse(utils.Fail), nil
|
|
}
|
|
|
|
policy, err := analysisoss.BuildUploadPolicy(cfg, taskId, cred)
|
|
if err != nil {
|
|
l.Errorf("device policy build: %v", err)
|
|
return common.FailResponse(utils.Fail), nil
|
|
}
|
|
|
|
if err = analysisoss.SaveUploadSession(l.ctx, taskId, analysisoss.UploadSession{
|
|
UserId: loginUser.ID,
|
|
BizId: loginUser.BizId,
|
|
DateDir: policy.DateDir,
|
|
}, int(cfg.ExpireSeconds)); err != nil {
|
|
l.Errorf("device policy cache session: %v", err)
|
|
return common.FailResponse(utils.Fail), nil
|
|
}
|
|
|
|
return common.OkResponse(policy), nil
|
|
}
|