本文整理汇总了Golang中github.com/juju/juju/apiserver/params.LoginResultV1.Facades方法的典型用法代码示例。如果您正苦于以下问题:Golang LoginResultV1.Facades方法的具体用法?Golang LoginResultV1.Facades怎么用?Golang LoginResultV1.Facades使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/juju/juju/apiserver/params.LoginResultV1
的用法示例。
在下文中一共展示了LoginResultV1.Facades方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: doLogin
//.........这里部分代码省略.........
// models in the controller model need to be able to
// open API connections to other models. In those cases, we
// need to look in the controller database to check the creds
// against the machine if and only if the entity tag is a machine tag,
// and the machine exists in the controller model, and the
// machine has the manage state job. If all those parts are valid, we
// can then check the credentials against the controller model
// machine.
if kind != names.MachineTagKind {
return fail, errors.Trace(err)
}
entity, err = a.checkCredsOfControllerMachine(req)
if err != nil {
return fail, errors.Trace(err)
}
// If we are here, then the entity will refer to a controller
// machine in the controller model, and we don't need a pinger
// for it as we already have one running in the machine agent api
// worker for the controller model.
agentPingerNeeded = false
}
a.root.entity = entity
if a.reqNotifier != nil {
a.reqNotifier.login(entity.Tag().String())
}
// We have authenticated the user; enable the appropriate API
// to serve to them.
a.loggedIn = true
if agentPingerNeeded {
if err := startPingerIfAgent(a.root, entity); err != nil {
return fail, errors.Trace(err)
}
}
var maybeUserInfo *params.AuthUserInfo
var envUser *state.ModelUser
// Send back user info if user
if isUser && !serverOnlyLogin {
maybeUserInfo = ¶ms.AuthUserInfo{
Identity: entity.Tag().String(),
LastConnection: lastConnection,
}
envUser, err = a.root.state.ModelUser(entity.Tag().(names.UserTag))
if err != nil {
return fail, errors.Annotatef(err, "missing ModelUser for logged in user %s", entity.Tag())
}
if envUser.ReadOnly() {
logger.Debugf("model user %s is READ ONLY", entity.Tag())
}
}
// Fetch the API server addresses from state.
hostPorts, err := a.root.state.APIHostPorts()
if err != nil {
return fail, errors.Trace(err)
}
logger.Debugf("hostPorts: %v", hostPorts)
environ, err := a.root.state.Model()
if err != nil {
return fail, errors.Trace(err)
}
loginResult := params.LoginResultV1{
Servers: params.FromNetworkHostsPorts(hostPorts),
ModelTag: environ.Tag().String(),
ControllerTag: environ.ControllerTag().String(),
Facades: DescribeFacades(),
UserInfo: maybeUserInfo,
ServerVersion: jujuversion.Current.String(),
}
// For sufficiently modern login versions, stop serving the
// controller model at the root of the API.
if serverOnlyLogin {
authedApi = newRestrictedRoot(authedApi)
// Remove the ModelTag from the response as there is no
// model here.
loginResult.ModelTag = ""
// Strip out the facades that are not supported from the result.
var facades []params.FacadeVersions
for _, facade := range loginResult.Facades {
if restrictedRootNames.Contains(facade.Name) {
facades = append(facades, facade)
}
}
loginResult.Facades = facades
}
if envUser != nil {
authedApi = newClientAuthRoot(authedApi, envUser)
}
a.root.rpcConn.ServeFinder(authedApi, serverError)
return loginResult, nil
}