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 }