2026-06-23 22:21:57 +05:30
|
|
|
package proxye2e
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"sync"
|
|
|
|
|
|
|
|
|
|
"github.com/safedep/pmg/analyzer"
|
2026-07-22 15:19:19 +05:30
|
|
|
"github.com/safedep/pmg/packagemanager"
|
2026-06-23 22:21:57 +05:30
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// ConfirmController drives the suspicious-package confirmation prompt. The
|
|
|
|
|
// default policy denies, matching PMG's safe default for an unhandled prompt.
|
|
|
|
|
type ConfirmController struct {
|
|
|
|
|
mu sync.Mutex
|
|
|
|
|
policy func([]*analyzer.PackageVersionAnalysisResult) (bool, error)
|
|
|
|
|
prompts [][]string
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func newConfirmController() *ConfirmController {
|
|
|
|
|
return &ConfirmController{policy: func([]*analyzer.PackageVersionAnalysisResult) (bool, error) { return false, nil }}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (c *ConfirmController) AutoApprove() {
|
|
|
|
|
c.setPolicy(func([]*analyzer.PackageVersionAnalysisResult) (bool, error) { return true, nil })
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (c *ConfirmController) AutoDeny() {
|
|
|
|
|
c.setPolicy(func([]*analyzer.PackageVersionAnalysisResult) (bool, error) { return false, nil })
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (c *ConfirmController) Func(fn func([]*analyzer.PackageVersionAnalysisResult) (bool, error)) {
|
|
|
|
|
c.setPolicy(fn)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (c *ConfirmController) setPolicy(fn func([]*analyzer.PackageVersionAnalysisResult) (bool, error)) {
|
|
|
|
|
c.mu.Lock()
|
|
|
|
|
defer c.mu.Unlock()
|
|
|
|
|
c.policy = fn
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Prompts returns the package names presented for confirmation, one entry per prompt.
|
|
|
|
|
func (c *ConfirmController) Prompts() [][]string {
|
|
|
|
|
c.mu.Lock()
|
|
|
|
|
defer c.mu.Unlock()
|
|
|
|
|
out := make([][]string, len(c.prompts))
|
|
|
|
|
copy(out, c.prompts)
|
|
|
|
|
return out
|
|
|
|
|
}
|
|
|
|
|
|
2026-07-22 15:19:19 +05:30
|
|
|
func (c *ConfirmController) interaction() *packagemanager.PackageManagerInteraction {
|
|
|
|
|
return &packagemanager.PackageManagerInteraction{
|
2026-06-23 22:21:57 +05:30
|
|
|
GetConfirmationOnMalware: func(pkgs []*analyzer.PackageVersionAnalysisResult) (bool, error) {
|
|
|
|
|
names := make([]string, 0, len(pkgs))
|
|
|
|
|
for _, p := range pkgs {
|
|
|
|
|
names = append(names, p.PackageVersion.GetPackage().GetName())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
c.mu.Lock()
|
|
|
|
|
c.prompts = append(c.prompts, names)
|
|
|
|
|
policy := c.policy
|
|
|
|
|
c.mu.Unlock()
|
|
|
|
|
|
|
|
|
|
return policy(pkgs)
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
}
|