Add nosniff, frame denial, referrer policy, and a self-origin CSP. Clamp human and squad lease TTLs and require author edit rights before a human lease. Include DryRun in replay digests so a dry-run approval cannot authorize apply. Stop Server.Start from swallowing a second Runtime.Start. Co-authored-by: Cursor <cursoragent@cursor.com>
48 lines
1.4 KiB
Go
48 lines
1.4 KiB
Go
package events
|
|
|
|
import "testing"
|
|
|
|
func TestAuthorizeReplayDryRunRequiresScope(t *testing.T) {
|
|
if err := AuthorizeReplayPlan(ReplayPlan{DryRun: true, Operator: "ops", Reason: "fix", Consumer: ConsumerNotify}); err != ErrReplayScope {
|
|
t.Fatalf("%v", err)
|
|
}
|
|
}
|
|
|
|
func TestApplyReplayRequiresMatchingDigestAndTwoPerson(t *testing.T) {
|
|
p := ReplayPlan{
|
|
PlanID: "p1", Operator: "ops", Approver: "sec", Environment: "dev",
|
|
ProjectID: 9, Consumer: ConsumerNotify, EventIDs: []string{"e1"},
|
|
Reason: "repair", ApprovalRef: "ticket-1", DryRun: true,
|
|
}
|
|
dryDigest := p.Digest()
|
|
p.DryRun = false
|
|
if err := ApplyReplay(p, dryDigest); err == nil {
|
|
t.Fatal("dry-run digest must not authorize apply")
|
|
}
|
|
digest := p.Digest()
|
|
if dryDigest == digest {
|
|
t.Fatal("digest must change when DryRun changes")
|
|
}
|
|
if err := ApplyReplay(p, digest); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
p.Approver = p.Operator
|
|
if err := ApplyReplay(p, digest); err == nil {
|
|
t.Fatal("same operator/approver must fail")
|
|
}
|
|
p.Approver = "sec"
|
|
if err := ApplyReplay(p, "deadbeef"); err == nil {
|
|
t.Fatal("digest mismatch must fail")
|
|
}
|
|
p.ApprovalRef = ""
|
|
if err := ApplyReplay(p, digest); err == nil {
|
|
t.Fatal("apply without approval ref must fail")
|
|
}
|
|
}
|
|
|
|
func TestLegacyAuthorizeReplayStillDryRunOnly(t *testing.T) {
|
|
if err := AuthorizeReplay(ReplayRequest{DryRun: false, Consumer: "x", Operator: "o", Reason: "r"}); err != ErrReplayScope {
|
|
t.Fatalf("%v", err)
|
|
}
|
|
}
|