github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/apiserver/facades/agent/logger/register.go (about)

     1  // Copyright 2022 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package logger
     5  
     6  import (
     7  	"reflect"
     8  
     9  	apiservererrors "github.com/juju/juju/apiserver/errors"
    10  	"github.com/juju/juju/apiserver/facade"
    11  )
    12  
    13  // Register is called to expose a package of facades onto a given registry.
    14  func Register(registry facade.FacadeRegistry) {
    15  	registry.MustRegister("Logger", 1, func(ctx facade.Context) (facade.Facade, error) {
    16  		return newLoggerAPI(ctx)
    17  	}, reflect.TypeOf((*LoggerAPI)(nil)))
    18  }
    19  
    20  // newLoggerAPI creates a new server-side logger API end point.
    21  func newLoggerAPI(ctx facade.Context) (*LoggerAPI, error) {
    22  	st := ctx.State()
    23  	resources := ctx.Resources()
    24  	authorizer := ctx.Auth()
    25  
    26  	if !authorizer.AuthMachineAgent() &&
    27  		!authorizer.AuthUnitAgent() &&
    28  		!authorizer.AuthApplicationAgent() &&
    29  		!authorizer.AuthModelAgent() {
    30  		return nil, apiservererrors.ErrPerm
    31  	}
    32  	m, err := ctx.Controller().Model(st.ModelUUID())
    33  	if err != nil {
    34  		return nil, err
    35  	}
    36  
    37  	return &LoggerAPI{
    38  		controller: ctx.Controller(),
    39  		model:      m,
    40  		resources:  resources,
    41  		authorizer: authorizer,
    42  	}, nil
    43  }