github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/apiserver/facades/controller/lifeflag/facade.go (about) 1 // Copyright 2016 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package lifeflag 5 6 import ( 7 "github.com/juju/names/v5" 8 9 "github.com/juju/juju/apiserver/common" 10 apiservererrors "github.com/juju/juju/apiserver/errors" 11 "github.com/juju/juju/apiserver/facade" 12 "github.com/juju/juju/state" 13 ) 14 15 type Backend interface { 16 ModelUUID() string 17 state.EntityFinder 18 } 19 20 func NewFacade(backend Backend, resources facade.Resources, authorizer facade.Authorizer) (*Facade, error) { 21 if !authorizer.AuthController() { 22 return nil, apiservererrors.ErrPerm 23 } 24 expect := names.NewModelTag(backend.ModelUUID()) 25 getCanAccess := func() (common.AuthFunc, error) { 26 return func(tag names.Tag) bool { 27 return tag == expect 28 }, nil 29 } 30 life := common.NewLifeGetter(backend, getCanAccess) 31 watch := common.NewAgentEntityWatcher(backend, resources, getCanAccess) 32 return &Facade{ 33 LifeGetter: life, 34 AgentEntityWatcher: watch, 35 }, nil 36 } 37 38 type Facade struct { 39 *common.LifeGetter 40 *common.AgentEntityWatcher 41 }