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  }