Files
WeKnora/internal/handler/task_progress_auth.go
T
wizardchen a17a2250ed fix(security): enforce KB access on wiki reads and related IDOR paths
Gate wiki GET routes and initialization config reads with KBAccessRead,
and bind async task progress endpoints to the caller tenant via task ID
parsing. Closes cross-tenant read paths reported in GHSA-ph8f-4qwx-89rr
and related initialization/progress leaks.
2026-07-02 12:06:22 +08:00

28 lines
857 B
Go

package handler
import (
"context"
apperrors "github.com/Tencent/WeKnora/internal/errors"
"github.com/Tencent/WeKnora/internal/types"
"github.com/Tencent/WeKnora/internal/utils"
)
// requireTaskProgressTenant ensures async task progress endpoints only
// return data for tasks created under the caller's tenant. Cross-tenant
// probes are hidden as not-found to avoid confirming task existence.
func requireTaskProgressTenant(ctx context.Context, taskID string) error {
taskTenantID, err := utils.TaskTenantID(taskID)
if err != nil {
return apperrors.NewBadRequestError("invalid task ID")
}
callerTenantID, ok := types.TenantIDFromContext(ctx)
if !ok || callerTenantID == 0 {
return apperrors.NewUnauthorizedError("Unauthorized")
}
if taskTenantID != callerTenantID {
return apperrors.NewNotFoundError("task not found")
}
return nil
}