github.com/cloudbase/juju-core@v0.0.0-20140504232958-a7271ac7912f/state/apiserver/rsyslog/rsyslog.go (about) 1 // Copyright 2014 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package rsyslog 5 6 import ( 7 "launchpad.net/juju-core/cert" 8 "launchpad.net/juju-core/state" 9 "launchpad.net/juju-core/state/api/params" 10 "launchpad.net/juju-core/state/apiserver/common" 11 ) 12 13 // RsyslogAPI implements the API used by the rsyslog worker. 14 type RsyslogAPI struct { 15 *common.EnvironWatcher 16 st *state.State 17 canModify bool 18 } 19 20 // NewRsyslogAPI creates a new instance of the Rsyslog API. 21 func NewRsyslogAPI(st *state.State, resources *common.Resources, authorizer common.Authorizer) (*RsyslogAPI, error) { 22 // Can always watch for environ changes. 23 getCanWatch := common.AuthAlways(true) 24 // Does not get the secrets. 25 getCanReadSecrets := common.AuthAlways(false) 26 return &RsyslogAPI{ 27 EnvironWatcher: common.NewEnvironWatcher(st, resources, getCanWatch, getCanReadSecrets), 28 st: st, 29 canModify: authorizer.AuthEnvironManager(), 30 }, nil 31 } 32 33 func (api *RsyslogAPI) SetRsyslogCert(args params.SetRsyslogCertParams) (params.ErrorResult, error) { 34 var result params.ErrorResult 35 if !api.canModify { 36 result.Error = common.ServerError(common.ErrBadCreds) 37 return result, nil 38 } 39 if _, err := cert.ParseCert(args.CACert); err != nil { 40 result.Error = common.ServerError(err) 41 return result, nil 42 } 43 old, err := api.st.EnvironConfig() 44 if err != nil { 45 return params.ErrorResult{}, err 46 } 47 cfg, err := old.Apply(map[string]interface{}{"rsyslog-ca-cert": string(args.CACert)}) 48 if err != nil { 49 result.Error = common.ServerError(err) 50 } else { 51 if err := api.st.SetEnvironConfig(cfg, old); err != nil { 52 result.Error = common.ServerError(err) 53 } 54 } 55 return result, nil 56 }