permission.go

 1package backend
 2
 3import (
 4	"github.com/charmbracelet/crush/internal/permission"
 5	"github.com/charmbracelet/crush/internal/proto"
 6)
 7
 8// GrantPermission grants, denies, or persistently grants a permission
 9// request.
10func (b *Backend) GrantPermission(workspaceID string, req proto.PermissionGrant) error {
11	ws, err := b.GetWorkspace(workspaceID)
12	if err != nil {
13		return err
14	}
15
16	perm := permission.PermissionRequest{
17		ID:          req.Permission.ID,
18		SessionID:   req.Permission.SessionID,
19		ToolCallID:  req.Permission.ToolCallID,
20		ToolName:    req.Permission.ToolName,
21		Description: req.Permission.Description,
22		Action:      req.Permission.Action,
23		Params:      req.Permission.Params,
24		Path:        req.Permission.Path,
25	}
26
27	switch req.Action {
28	case proto.PermissionAllow:
29		ws.Permissions.Grant(perm)
30	case proto.PermissionAllowForSession:
31		ws.Permissions.GrantPersistent(perm)
32	case proto.PermissionDeny:
33		ws.Permissions.Deny(perm)
34	default:
35		return ErrInvalidPermissionAction
36	}
37	return nil
38}
39
40// SetPermissionsSkip sets whether permission prompts are skipped.
41func (b *Backend) SetPermissionsSkip(workspaceID string, skip bool) error {
42	ws, err := b.GetWorkspace(workspaceID)
43	if err != nil {
44		return err
45	}
46
47	ws.Permissions.SetSkipRequests(skip)
48	return nil
49}
50
51// GetPermissionsSkip returns whether permission prompts are skipped.
52func (b *Backend) GetPermissionsSkip(workspaceID string) (bool, error) {
53	ws, err := b.GetWorkspace(workspaceID)
54	if err != nil {
55		return false, err
56	}
57
58	return ws.Permissions.SkipRequests(), nil
59}