internal/task/task_auth_service.go
Rama main · réplica de lectura del repositorio original.
package task
import (
"errors"
"time"
"github.com/yeomyeonggeori/blueclaw/internal/auth"
)
type TaskAuthService struct {
magicLinkService *auth.MagicLinkService
sessionService *auth.SessionService
taskRunService *TaskRunService
}
func NewTaskAuthService(magicLinkService *auth.MagicLinkService, sessionService *auth.SessionService, taskRunService *TaskRunService) *TaskAuthService {
return &TaskAuthService{
magicLinkService: magicLinkService,
sessionService: sessionService,
taskRunService: taskRunService,
}
}
func (taskAuthService *TaskAuthService) IssueMagicLink(personID string, taskRunID string) (string, error) {
return taskAuthService.magicLinkService.IssueMagicLink(personID, taskRunID, 15*time.Minute)
}
func (taskAuthService *TaskAuthService) ConsumeMagicLink(token string) (TaskSession, error) {
magicLink, isFound := taskAuthService.magicLinkService.ConsumeMagicLink(token)
if !isFound {
return TaskSession{}, errors.New("magic link is invalid")
}
session, errorValue := taskAuthService.sessionService.CreateSession(magicLink.PersonID, 8*time.Hour)
if errorValue != nil {
return TaskSession{}, errorValue
}
return TaskSession{
TaskSessionID: session.SessionID,
PersonID: session.PersonID,
ExpiresAt: session.ExpiresAt,
}, nil
}
func (taskAuthService *TaskAuthService) CreateTaskSession(personID string) (TaskSession, error) {
session, errorValue := taskAuthService.sessionService.CreateSession(personID, 8*time.Hour)
if errorValue != nil {
return TaskSession{}, errorValue
}
return TaskSession{
TaskSessionID: session.SessionID,
PersonID: session.PersonID,
ExpiresAt: session.ExpiresAt,
}, nil
}
func (taskAuthService *TaskAuthService) AuthorizeTaskAccess(taskSessionID string, taskRunID string) (TaskRun, error) {
session, isFound := taskAuthService.sessionService.ResolveSession(taskSessionID)
if !isFound {
return TaskRun{}, errors.New("task session is invalid")
}
taskRun, isFound := taskAuthService.taskRunService.FindTaskRun(taskRunID)
if !isFound {
return TaskRun{}, errors.New("task run not found")
}
if taskRun.RequesterPersonID != session.PersonID {
return TaskRun{}, errors.New("task run access denied")
}
return taskRun, nil
}
func (taskAuthService *TaskAuthService) ResolveTaskSession(taskSessionID string) (TaskSession, error) {
session, isFound := taskAuthService.sessionService.ResolveSession(taskSessionID)
if !isFound {
return TaskSession{}, errors.New("task session is invalid")
}
return TaskSession{
TaskSessionID: session.SessionID,
PersonID: session.PersonID,
ExpiresAt: session.ExpiresAt,
}, nil
}