fix(tasks): adds check for inactive task in ForceRun and Retry

pull/14029/head
Alirie Gray 2019-05-30 14:39:51 -07:00
parent 5f8796aca6
commit 479dc3ffd3
2 changed files with 23 additions and 2 deletions

View File

@ -2,14 +2,15 @@ package authorizer
import (
"context"
"errors"
"fmt"
"github.com/influxdata/flux"
"github.com/influxdata/influxdb"
platform "github.com/influxdata/influxdb"
platcontext "github.com/influxdata/influxdb/context"
"github.com/influxdata/influxdb/kit/tracing"
"github.com/influxdata/influxdb/query"
"github.com/influxdata/influxdb/task/backend"
"go.uber.org/zap"
)
@ -23,7 +24,17 @@ func (ae *authError) AuthzError() error {
return fmt.Errorf("permission failed for auth (%s): %s", ae.auth.Identifier().String(), ae.perm.String())
}
var ErrFailedPermission = errors.New("unauthorized")
var (
ErrInactiveTask = &influxdb.Error{
Code: influxdb.EInvalid,
Msg: "inactive task",
}
ErrFailedPermission = &influxdb.Error{
Code: influxdb.EInvalid,
Msg: "unauthorized",
}
)
type taskServiceValidator struct {
platform.TaskService
@ -271,6 +282,10 @@ func (ts *taskServiceValidator) RetryRun(ctx context.Context, taskID, runID plat
return nil, err
}
if task.Status != string(backend.TaskActive) {
return nil, ErrInactiveTask
}
p, err := platform.NewPermissionAtID(taskID, platform.WriteAction, platform.TasksResourceType, task.OrganizationID)
if err != nil {
return nil, err
@ -295,6 +310,10 @@ func (ts *taskServiceValidator) ForceRun(ctx context.Context, taskID platform.ID
return nil, err
}
if task.Status != string(backend.TaskActive) {
return nil, ErrInactiveTask
}
p, err := platform.NewPermissionAtID(taskID, platform.WriteAction, platform.TasksResourceType, task.OrganizationID)
if err != nil {
return nil, err

View File

@ -12,6 +12,7 @@ import (
"github.com/influxdata/influxdb/inmem"
"github.com/influxdata/influxdb/mock"
_ "github.com/influxdata/influxdb/query/builtin"
"github.com/influxdata/influxdb/task/backend"
"go.uber.org/zap/zaptest"
)
@ -51,6 +52,7 @@ func mockTaskService(orgID, taskID, runID influxdb.ID) influxdb.TaskService {
ID: taskID,
OrganizationID: orgID,
Name: "cows",
Status: string(backend.TaskActive),
Flux: `option task = {
name: "my_task",
every: 1s,