github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/apiserver/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  	"gopkg.in/juju/names.v2"
     8  
     9  	"github.com/juju/juju/apiserver/common"
    10  	"github.com/juju/juju/apiserver/facade"
    11  	"github.com/juju/juju/state"
    12  )
    13  
    14  type Backend interface {
    15  	ModelUUID() string
    16  	state.EntityFinder
    17  }
    18  
    19  func NewFacade(backend Backend, resources facade.Resources, authorizer facade.Authorizer) (*Facade, error) {
    20  	if !authorizer.AuthModelManager() {
    21  		return nil, common.ErrPerm
    22  	}
    23  	expect := names.NewModelTag(backend.ModelUUID())
    24  	getCanAccess := func() (common.AuthFunc, error) {
    25  		return func(tag names.Tag) bool {
    26  			return tag == expect
    27  		}, nil
    28  	}
    29  	life := common.NewLifeGetter(backend, getCanAccess)
    30  	watch := common.NewAgentEntityWatcher(backend, resources, getCanAccess)
    31  	return &Facade{
    32  		LifeGetter:         life,
    33  		AgentEntityWatcher: watch,
    34  	}, nil
    35  }
    36  
    37  type Facade struct {
    38  	*common.LifeGetter
    39  	*common.AgentEntityWatcher
    40  }