summaryrefslogtreecommitdiffhomepage
path: root/internal/permission
diff options
context:
space:
mode:
authorKujtim Hoxha <[email protected]>2025-04-21 19:48:36 +0200
committerKujtim Hoxha <[email protected]>2025-04-21 19:53:55 +0200
commit3a6a26981a8074b6ab0eaadb520db986e04799ff (patch)
tree4fe2c022305f13775f2cab3cdd80cd808259765b /internal/permission
parentd7569d79c6da1437fe46343ed13810df6c8cae1f (diff)
downloadopencode-3a6a26981a8074b6ab0eaadb520db986e04799ff.tar.gz
opencode-3a6a26981a8074b6ab0eaadb520db986e04799ff.zip
init command
Diffstat (limited to 'internal/permission')
-rw-r--r--internal/permission/permission.go16
1 files changed, 14 insertions, 2 deletions
diff --git a/internal/permission/permission.go b/internal/permission/permission.go
index 06f69a33d..f36efea65 100644
--- a/internal/permission/permission.go
+++ b/internal/permission/permission.go
@@ -3,6 +3,7 @@ package permission
import (
"errors"
"path/filepath"
+ "slices"
"sync"
"time"
@@ -14,6 +15,7 @@ import (
var ErrorPermissionDenied = errors.New("permission denied")
type CreatePermissionRequest struct {
+ SessionID string `json:"session_id"`
ToolName string `json:"tool_name"`
Description string `json:"description"`
Action string `json:"action"`
@@ -37,13 +39,15 @@ type Service interface {
Grant(permission PermissionRequest)
Deny(permission PermissionRequest)
Request(opts CreatePermissionRequest) bool
+ AutoApproveSession(sessionID string)
}
type permissionService struct {
*pubsub.Broker[PermissionRequest]
- sessionPermissions []PermissionRequest
- pendingRequests sync.Map
+ sessionPermissions []PermissionRequest
+ pendingRequests sync.Map
+ autoApproveSessions []string
}
func (s *permissionService) GrantPersistant(permission PermissionRequest) {
@@ -69,6 +73,9 @@ func (s *permissionService) Deny(permission PermissionRequest) {
}
func (s *permissionService) Request(opts CreatePermissionRequest) bool {
+ if slices.Contains(s.autoApproveSessions, opts.SessionID) {
+ return true
+ }
dir := filepath.Dir(opts.Path)
if dir == "." {
dir = config.WorkingDirectory()
@@ -76,6 +83,7 @@ func (s *permissionService) Request(opts CreatePermissionRequest) bool {
permission := PermissionRequest{
ID: uuid.New().String(),
Path: dir,
+ SessionID: opts.SessionID,
ToolName: opts.ToolName,
Description: opts.Description,
Action: opts.Action,
@@ -104,6 +112,10 @@ func (s *permissionService) Request(opts CreatePermissionRequest) bool {
}
}
+func (s *permissionService) AutoApproveSession(sessionID string) {
+ s.autoApproveSessions = append(s.autoApproveSessions, sessionID)
+}
+
func NewPermissionService() Service {
return &permissionService{
Broker: pubsub.NewBroker[PermissionRequest](),