fix(09): WR-10 keep cabana's own backend guard when it is activated twice on one application
This commit is contained in:
@@ -39,4 +39,8 @@ func TestActivateRefusesAForeignBackendGuard(t *testing.T) {
|
||||
if _, err := cabana.Activate(clean, []party.Plugin{demoPlugin{fsys: demoFS()}}); err != nil {
|
||||
t.Fatalf("Activate without a conflicting guard: %v", err)
|
||||
}
|
||||
// A second assembly on the same application finds cabana's own guard.
|
||||
if _, err := cabana.Activate(clean, []party.Plugin{demoPlugin{fsys: demoFS()}}); err != nil {
|
||||
t.Fatalf("second Activate on one application: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -117,8 +117,14 @@ func Activate(app *backpack.App, plugins []party.Plugin) (*Routes, error) {
|
||||
// provider), so cabana always registers its own and never mounts the API
|
||||
// behind a guard another plugin already put under the name "backend": a
|
||||
// taken name fails boot instead of silently replacing admin authentication.
|
||||
if err := guards.Register("summercms.cabana", "backend", guard); err != nil {
|
||||
return nil, fmt.Errorf("cabana: backend guard: %w", err)
|
||||
// Activating twice on one application (a test assembling two handlers)
|
||||
// finds cabana's own guard and keeps it.
|
||||
if owner, taken := guards.Owner("backend"); !taken {
|
||||
if err := guards.Register("summercms.cabana", "backend", guard); err != nil {
|
||||
return nil, fmt.Errorf("cabana: backend guard: %w", err)
|
||||
}
|
||||
} else if owner != "summercms.cabana" {
|
||||
return nil, fmt.Errorf("cabana: backend guard: guard %q is already registered by %s; the admin API needs its own audience-checking guard under that name", "backend", owner)
|
||||
}
|
||||
mw, err := guards.Middleware("backend")
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user