github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/apiserver/common/modeluser.go (about)

     1  // Copyright 2016 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package common
     5  
     6  import (
     7  	"time"
     8  
     9  	"gopkg.in/juju/names.v2"
    10  
    11  	"github.com/juju/errors"
    12  
    13  	"github.com/juju/juju/apiserver/params"
    14  	"github.com/juju/juju/permission"
    15  	"github.com/juju/juju/state"
    16  )
    17  
    18  type modelConnectionAbleBackend interface {
    19  	LastModelConnection(names.UserTag) (time.Time, error)
    20  }
    21  
    22  // ModelUserInfo converts permission.UserAccess to params.ModelUserInfo.
    23  func ModelUserInfo(user permission.UserAccess, st modelConnectionAbleBackend) (params.ModelUserInfo, error) {
    24  	access, err := StateToParamsUserAccessPermission(user.Access)
    25  	if err != nil {
    26  		return params.ModelUserInfo{}, errors.Trace(err)
    27  	}
    28  
    29  	userLastConn, err := st.LastModelConnection(user.UserTag)
    30  	if err != nil && !state.IsNeverConnectedError(err) {
    31  		return params.ModelUserInfo{}, errors.Trace(err)
    32  	}
    33  	var lastConn *time.Time
    34  	if err == nil {
    35  		lastConn = &userLastConn
    36  	}
    37  
    38  	userInfo := params.ModelUserInfo{
    39  		UserName:       user.UserName,
    40  		DisplayName:    user.DisplayName,
    41  		LastConnection: lastConn,
    42  		Access:         access,
    43  	}
    44  	return userInfo, nil
    45  }
    46  
    47  // StateToParamsUserAccessPermission converts permission.Access to params.AccessPermission.
    48  func StateToParamsUserAccessPermission(descriptionAccess permission.Access) (params.UserAccessPermission, error) {
    49  	switch descriptionAccess {
    50  	case permission.ReadAccess:
    51  		return params.ModelReadAccess, nil
    52  	case permission.WriteAccess:
    53  		return params.ModelWriteAccess, nil
    54  	case permission.AdminAccess:
    55  		return params.ModelAdminAccess, nil
    56  	}
    57  
    58  	return "", errors.NotValidf("model access permission %q", descriptionAccess)
    59  
    60  }