mirror of
https://github.com/warmbly/warmbly.git
synced 2026-10-15 00:02:42 +00:00
70 lines
1.8 KiB
Go
70 lines
1.8 KiB
Go
package tasks
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
"github.com/warmbly/warmbly/internal/models"
|
|
)
|
|
|
|
func (s *tasksService) ValidateOutboundExecution(ctx context.Context, taskID uuid.UUID) error {
|
|
task, err := s.taskRepo.GetTask(ctx, taskID)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if task == nil {
|
|
return errors.New("send task unavailable")
|
|
}
|
|
a, xerr := s.emailRepo.GetByID(ctx, task.EmailAccountID)
|
|
if xerr != nil {
|
|
return xerr
|
|
}
|
|
if a == nil || a.Status != "active" || a.OrganizationID == nil {
|
|
return errors.New("mailbox unavailable")
|
|
}
|
|
if s.orgRiskRepo != nil {
|
|
states, err := s.orgRiskRepo.GetOrgRiskStates(ctx, []uuid.UUID{*a.OrganizationID})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if states[*a.OrganizationID] == models.OrgRiskSuspended {
|
|
return errors.New("organization sending suspended")
|
|
}
|
|
}
|
|
if s.domainAuthBlocked(ctx, a) {
|
|
return errors.New("sending domain authentication unavailable")
|
|
}
|
|
if task.TaskType == "warmup" {
|
|
return s.ValidateWarmupExecution(ctx, taskID)
|
|
}
|
|
if task.TaskType == "placement" && !a.TestSendingAllowed() {
|
|
return errors.New("diagnostic sending stopped")
|
|
}
|
|
if task.TaskType == "campaign" {
|
|
ct, err := s.taskRepo.GetCampaignTask(ctx, taskID)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if ct == nil || ct.CampaignID == nil {
|
|
return errors.New("campaign unavailable")
|
|
}
|
|
gate, ok := s.scheduler.(interface {
|
|
OutboundExecutionNotBefore(context.Context, uuid.UUID, uuid.UUID, uuid.UUID, time.Time) (time.Time, error)
|
|
})
|
|
if !ok {
|
|
return errors.New("campaign execution policy unavailable")
|
|
}
|
|
now := time.Now()
|
|
at, err := gate.OutboundExecutionNotBefore(ctx, a.ID, *ct.CampaignID, taskID, now)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if at.After(now) {
|
|
return errors.New("send outside current calendar or pacing")
|
|
}
|
|
}
|
|
return nil
|
|
}
|