本文整理汇总了Golang中github.com/juju/names.ParseUserTag函数的典型用法代码示例。如果您正苦于以下问题:Golang ParseUserTag函数的具体用法?Golang ParseUserTag怎么用?Golang ParseUserTag使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了ParseUserTag函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: AddUser
// AddUser creates a new local user in the juju server.
func (c *Client) AddUser(username, displayName, password string) (names.UserTag, error) {
if !names.IsValidUser(username) {
return names.UserTag{}, fmt.Errorf("invalid user name %q", username)
}
userArgs := params.AddUsers{
Users: []params.AddUser{{Username: username, DisplayName: displayName, Password: password}},
}
var results params.AddUserResults
err := c.facade.FacadeCall("AddUser", userArgs, &results)
if err != nil {
return names.UserTag{}, errors.Trace(err)
}
if count := len(results.Results); count != 1 {
logger.Errorf("expected 1 result, got %#v", results)
return names.UserTag{}, errors.Errorf("expected 1 result, got %d", count)
}
result := results.Results[0]
if result.Error != nil {
return names.UserTag{}, errors.Trace(result.Error)
}
tag, err := names.ParseUserTag(result.Tag)
if err != nil {
return names.UserTag{}, errors.Trace(err)
}
logger.Infof("created user %s", result.Tag)
return tag, nil
}
示例2: ListModels
// ListModels returns the models that the specified user
// has access to in the current server. Only that controller owner
// can list models for any user (at this stage). Other users
// can only ask about their own models.
func (c *Client) ListModels(user string) ([]base.UserModel, error) {
var models params.UserModelList
if !names.IsValidUser(user) {
return nil, errors.Errorf("invalid user name %q", user)
}
entity := params.Entity{names.NewUserTag(user).String()}
err := c.facade.FacadeCall("ListModels", entity, &models)
if err != nil {
return nil, errors.Trace(err)
}
result := make([]base.UserModel, len(models.UserModels))
for i, model := range models.UserModels {
owner, err := names.ParseUserTag(model.OwnerTag)
if err != nil {
return nil, errors.Annotatef(err, "OwnerTag %q at position %d", model.OwnerTag, i)
}
result[i] = base.UserModel{
Name: model.Name,
UUID: model.UUID,
Owner: owner.Canonical(),
LastConnection: model.LastConnection,
}
}
return result, nil
}
示例3: UserInfo
// UserInfo returns information on a user.
func (api *UserManagerAPI) UserInfo(args params.Entities) (UserInfoResults, error) {
results := UserInfoResults{
Results: make([]UserInfoResult, len(args.Entities)),
}
for i, userArg := range args.Entities {
tag, err := names.ParseUserTag(userArg.Tag)
if err != nil {
results.Results[0].Error = common.ServerError(err)
continue
}
user, err := api.state.User(tag)
var result UserInfoResult
if err != nil {
if errors.IsNotFound(err) {
result.Error = common.ServerError(common.ErrPerm)
} else {
result.Error = common.ServerError(err)
}
} else {
info := UserInfo{
Username: tag.Name(),
DisplayName: user.DisplayName(),
CreatedBy: user.CreatedBy(),
DateCreated: user.DateCreated(),
LastConnection: user.LastLogin(),
}
result.Result = &info
}
results.Results[i] = result
}
return results, nil
}
示例4: ListEnvironments
// ListEnvironments returns the environments that the specified user
// has access to in the current server. Only that state server owner
// can list environments for any user (at this stage). Other users
// can only ask about their own environments.
func (c *Client) ListEnvironments(user string) ([]base.UserEnvironment, error) {
var environments params.UserEnvironmentList
if !names.IsValidUser(user) {
return nil, errors.Errorf("invalid user name %q", user)
}
entity := params.Entity{names.NewUserTag(user).String()}
err := c.facade.FacadeCall("ListEnvironments", entity, &environments)
if err != nil {
return nil, errors.Trace(err)
}
result := make([]base.UserEnvironment, len(environments.UserEnvironments))
for i, env := range environments.UserEnvironments {
owner, err := names.ParseUserTag(env.OwnerTag)
if err != nil {
return nil, errors.Annotatef(err, "OwnerTag %q at position %d", env.OwnerTag, i)
}
result[i] = base.UserEnvironment{
Name: env.Name,
UUID: env.UUID,
Owner: owner.Username(),
LastConnection: env.LastConnection,
}
}
return result, nil
}
示例5: ListEnvironments
// ListEnvironments returns the environments that the specified user
// has access to in the current server. Only that state server owner
// can list environments for any user (at this stage). Other users
// can only ask about their own environments.
func (em *EnvironmentManagerAPI) ListEnvironments(user params.Entity) (params.EnvironmentList, error) {
result := params.EnvironmentList{}
stateServerEnv, err := em.state.StateServerEnvironment()
if err != nil {
return result, errors.Trace(err)
}
adminUser := stateServerEnv.Owner()
userTag, err := names.ParseUserTag(user.Tag)
if err != nil {
return result, errors.Trace(err)
}
err = em.authCheck(userTag, adminUser)
if err != nil {
return result, errors.Trace(err)
}
environments, err := em.state.EnvironmentsForUser(userTag)
if err != nil {
return result, errors.Trace(err)
}
for _, env := range environments {
result.Environments = append(result.Environments, params.Environment{
Name: env.Name(),
UUID: env.UUID(),
OwnerTag: env.Owner().String(),
})
logger.Debugf("list env: %s, %s, %s", env.Name(), env.UUID(), env.Owner())
}
return result, nil
}
示例6: EnvironmentStatus
// EnvironmentStatus returns a status summary for each environment tag passed in.
func (c *Client) EnvironmentStatus(tags ...names.EnvironTag) ([]base.EnvironmentStatus, error) {
result := params.EnvironmentStatusResults{}
envs := make([]params.Entity, len(tags))
for i, tag := range tags {
envs[i] = params.Entity{Tag: tag.String()}
}
req := params.Entities{
Entities: envs,
}
if err := c.facade.FacadeCall("EnvironmentStatus", req, &result); err != nil {
return nil, err
}
results := make([]base.EnvironmentStatus, len(result.Results))
for i, r := range result.Results {
env, err := names.ParseEnvironTag(r.EnvironTag)
if err != nil {
return nil, errors.Annotatef(err, "EnvironTag %q at position %d", r.EnvironTag, i)
}
owner, err := names.ParseUserTag(r.OwnerTag)
if err != nil {
return nil, errors.Annotatef(err, "OwnerTag %q at position %d", r.OwnerTag, i)
}
results[i] = base.EnvironmentStatus{
UUID: env.Id(),
Life: r.Life,
Owner: owner.Canonical(),
HostedMachineCount: r.HostedMachineCount,
ServiceCount: r.ServiceCount,
}
}
return results, nil
}
示例7: authenticate
// authenticate parses HTTP basic authentication and authorizes the
// request by looking up the provided tag and password against state.
func (h *httpHandler) authenticate(r *http.Request) error {
parts := strings.Fields(r.Header.Get("Authorization"))
if len(parts) != 2 || parts[0] != "Basic" {
// Invalid header format or no header provided.
return fmt.Errorf("invalid request format")
}
// Challenge is a base64-encoded "tag:pass" string.
// See RFC 2617, Section 2.
challenge, err := base64.StdEncoding.DecodeString(parts[1])
if err != nil {
return fmt.Errorf("invalid request format")
}
tagPass := strings.SplitN(string(challenge), ":", 2)
if len(tagPass) != 2 {
return fmt.Errorf("invalid request format")
}
// Only allow users, not agents.
if _, err := names.ParseUserTag(tagPass[0]); err != nil {
return common.ErrBadCreds
}
// Ensure the credentials are correct.
_, err = checkCreds(h.state, params.Creds{
AuthTag: tagPass[0],
Password: tagPass[1],
})
return err
}
示例8: ModifyModelAccess
// ModifyModelAccess changes the model access granted to users.
func (m *ModelManagerAPI) ModifyModelAccess(args params.ModifyModelAccessRequest) (result params.ErrorResults, err error) {
result = params.ErrorResults{
Results: make([]params.ErrorResult, len(args.Changes)),
}
if len(args.Changes) == 0 {
return result, nil
}
for i, arg := range args.Changes {
modelAccess, err := FromModelAccessParam(arg.Access)
if err != nil {
err = errors.Annotate(err, "could not modify model access")
result.Results[i].Error = common.ServerError(err)
continue
}
targetUserTag, err := names.ParseUserTag(arg.UserTag)
if err != nil {
result.Results[i].Error = common.ServerError(errors.Annotate(err, "could not modify model access"))
continue
}
modelTag, err := names.ParseModelTag(arg.ModelTag)
if err != nil {
result.Results[i].Error = common.ServerError(errors.Annotate(err, "could not modify model access"))
continue
}
result.Results[i].Error = common.ServerError(
ChangeModelAccess(m.state, modelTag, m.apiUser, targetUserTag, arg.Action, modelAccess, m.isAdmin))
}
return result, nil
}
示例9: getUser
func (api *UserManagerAPI) getUser(tag string) (*state.User, error) {
userTag, err := names.ParseUserTag(tag)
if err != nil {
return nil, errors.Trace(err)
}
user, err := api.state.User(userTag)
if err != nil {
return nil, errors.Wrap(err, common.ErrPerm)
}
return user, nil
}
示例10: TestParseUserTag
func (s *userSuite) TestParseUserTag(c *gc.C) {
for i, t := range parseUserTagTests {
c.Logf("test %d: %s", i, t.tag)
got, err := names.ParseUserTag(t.tag)
if err != nil || t.err != nil {
c.Check(err, gc.DeepEquals, t.err)
continue
}
c.Check(got, gc.FitsTypeOf, t.expected)
c.Check(got, gc.Equals, t.expected)
}
}
示例11: TargetInfo
// TargetInfo implements ModelMigration.
func (mig *modelMigration) TargetInfo() (*migration.TargetInfo, error) {
authTag, err := names.ParseUserTag(mig.doc.TargetAuthTag)
if err != nil {
return nil, errors.Trace(err)
}
return &migration.TargetInfo{
ControllerTag: names.NewModelTag(mig.doc.TargetController),
Addrs: mig.doc.TargetAddrs,
CACert: mig.doc.TargetCACert,
AuthTag: authTag,
Password: mig.doc.TargetPassword,
}, nil
}
示例12: ownerTag
func (s *Service) ownerTag() (names.UserTag, error) {
var invalidTag names.UserTag
var result params.StringResult
args := params.Entities{
Entities: []params.Entity{{Tag: s.tag.String()}},
}
err := s.st.facade.FacadeCall("GetOwnerTag", args, &result)
if err != nil {
return invalidTag, err
}
if result.Error != nil {
return invalidTag, result.Error
}
return names.ParseUserTag(result.Result)
}
示例13: AddUser
// AddUser creates a new local user in the controller, sharing with that user any specified models.
func (c *Client) AddUser(
username, displayName, password, access string, modelUUIDs ...string,
) (_ names.UserTag, secretKey []byte, _ error) {
if !names.IsValidUser(username) {
return names.UserTag{}, nil, fmt.Errorf("invalid user name %q", username)
}
modelTags := make([]string, len(modelUUIDs))
for i, uuid := range modelUUIDs {
modelTags[i] = names.NewModelTag(uuid).String()
}
var accessPermission params.ModelAccessPermission
var err error
if len(modelTags) > 0 {
accessPermission, err = modelmanager.ParseModelAccess(access)
if err != nil {
return names.UserTag{}, nil, errors.Trace(err)
}
}
userArgs := params.AddUsers{
Users: []params.AddUser{{
Username: username,
DisplayName: displayName,
Password: password,
SharedModelTags: modelTags,
ModelAccess: accessPermission}},
}
var results params.AddUserResults
err = c.facade.FacadeCall("AddUser", userArgs, &results)
if err != nil {
return names.UserTag{}, nil, errors.Trace(err)
}
if count := len(results.Results); count != 1 {
logger.Errorf("expected 1 result, got %#v", results)
return names.UserTag{}, nil, errors.Errorf("expected 1 result, got %d", count)
}
result := results.Results[0]
if result.Error != nil {
return names.UserTag{}, nil, errors.Trace(result.Error)
}
tag, err := names.ParseUserTag(result.Tag)
if err != nil {
return names.UserTag{}, nil, errors.Trace(err)
}
return tag, result.SecretKey, nil
}
示例14: initiateOneModelMigration
func (c *ControllerAPI) initiateOneModelMigration(spec params.ModelMigrationSpec) (string, error) {
modelTag, err := names.ParseModelTag(spec.ModelTag)
if err != nil {
return "", errors.Annotate(err, "model tag")
}
// Ensure the model exists.
if _, err := c.state.GetModel(modelTag); err != nil {
return "", errors.Annotate(err, "unable to read model")
}
// Get State for model.
hostedState, err := c.state.ForModel(modelTag)
if err != nil {
return "", errors.Trace(err)
}
defer hostedState.Close()
// Start the migration.
targetInfo := spec.TargetInfo
controllerTag, err := names.ParseModelTag(targetInfo.ControllerTag)
if err != nil {
return "", errors.Annotate(err, "controller tag")
}
authTag, err := names.ParseUserTag(targetInfo.AuthTag)
if err != nil {
return "", errors.Annotate(err, "auth tag")
}
args := state.ModelMigrationSpec{
InitiatedBy: c.apiUser,
TargetInfo: migration.TargetInfo{
ControllerTag: controllerTag,
Addrs: targetInfo.Addrs,
CACert: targetInfo.CACert,
AuthTag: authTag,
Password: targetInfo.Password,
},
}
mig, err := hostedState.CreateModelMigration(args)
if err != nil {
return "", errors.Trace(err)
}
return mig.Id(), nil
}
示例15: apiModelInfoToModelInfoMap
func (c *showModelCommand) apiModelInfoToModelInfoMap(modelInfo []params.ModelInfo) (map[string]ModelInfo, error) {
output := make(map[string]ModelInfo)
for _, info := range modelInfo {
tag, err := names.ParseUserTag(info.OwnerTag)
if err != nil {
return nil, errors.Trace(err)
}
output[info.Name] = ModelInfo{
UUID: info.UUID,
ControllerUUID: info.ControllerUUID,
Owner: tag.Id(),
ProviderType: info.ProviderType,
Users: apiUsersToUserInfoMap(info.Users),
}
}
return output, nil
}