feat: preview task canvases with workspace data (#3887)

This commit is contained in:
Carlos Florêncio
2026-09-23 20:51:55 +01:00
committed by GitHub
parent 9874ac4cf5
commit 4bebf7c511
79 changed files with 3369 additions and 282 deletions
@@ -166,6 +166,7 @@ type webAppContext struct {
WebAppKey string `json:"web_app_key"`
Placement string `json:"placement"`
ScopeKind string `json:"scope_kind"`
DataScopeKind string `json:"data_scope_kind"`
WorkspaceID string `json:"workspace_id,omitempty"`
TaskID string `json:"task_id,omitempty"`
SessionID string `json:"session_id,omitempty"`
@@ -190,6 +191,7 @@ func (s *Service) handleWebAppContext(w http.ResponseWriter, r *http.Request, bi
WebAppKey: binding.WebAppKey,
Placement: binding.Placement,
ScopeKind: binding.ScopeKind,
DataScopeKind: instances.EffectiveDataScopeKind(binding.ScopeKind, binding.DataScopeKind),
WorkspaceID: binding.WorkspaceID,
TaskID: binding.TaskID,
SessionID: binding.SessionID,
@@ -364,6 +366,9 @@ func (s *Service) validateWebAppBinding(ctx context.Context, binding webapp.Capa
}
instance, err := store.Get(ctx, binding.InstanceID)
if err != nil || instance.Status != instances.StatusActive || instance.PluginID != binding.PluginID ||
instance.ScopeKind != binding.ScopeKind ||
instance.EffectiveDataScopeKind() != instances.EffectiveDataScopeKind(binding.ScopeKind, binding.DataScopeKind) ||
instance.WorkspaceID != binding.WorkspaceID || instance.TaskID != binding.TaskID ||
instance.ActiveReleaseID != binding.ReleaseID || instance.GrantGeneration != binding.GrantGeneration {
return webapp.ErrRuntimeTokenStale
}
@@ -395,13 +400,14 @@ func (s *Service) validateWebAppPermissions(ctx context.Context, binding webapp.
if err != nil {
return err
}
dataScope := instances.EffectiveDataScopeKind(binding.ScopeKind, binding.DataScopeKind)
for _, permission := range webAppDeclaredPermissions(m, binding.WebAppKey) {
if !webAppGrantCovers(permission, binding.ScopeKind, grants) {
if !webAppGrantCovers(permission, dataScope, grants) {
return errors.New("web app permission grant is stale")
}
}
for _, origin := range binding.NetworkOrigins {
if !webAppOriginGranted(origin, binding.ScopeKind, grants) {
if !webAppOriginGranted(origin, dataScope, grants) {
return errors.New("web app network grant is stale")
}
}