github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/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  	"github.com/juju/errors"
    10  	"gopkg.in/juju/names.v2"
    11  
    12  	"github.com/juju/juju/apiserver/params"
    13  	"github.com/juju/juju/permission"
    14  	"github.com/juju/juju/state"
    15  )
    16  
    17  type modelConnectionAbleBackend interface {
    18  	LastModelConnection(names.UserTag) (time.Time, error)
    19  }
    20  
    21  // ModelUserInfo converts permission.UserAccess to params.ModelUserInfo.
    22  func ModelUserInfo(user permission.UserAccess, st modelConnectionAbleBackend) (params.ModelUserInfo, error) {
    23  	access, err := StateToParamsUserAccessPermission(user.Access)
    24  	if err != nil {
    25  		return params.ModelUserInfo{}, errors.Trace(err)
    26  	}
    27  
    28  	userLastConn, err := st.LastModelConnection(user.UserTag)
    29  	if err != nil && !state.IsNeverConnectedError(err) {
    30  		return params.ModelUserInfo{}, errors.Trace(err)
    31  	}
    32  	var lastConn *time.Time
    33  	if err == nil {
    34  		lastConn = &userLastConn
    35  	}
    36  
    37  	userInfo := params.ModelUserInfo{
    38  		UserName:       user.UserName,
    39  		DisplayName:    user.DisplayName,
    40  		LastConnection: lastConn,
    41  		Access:         access,
    42  	}
    43  	return userInfo, nil
    44  }
    45  
    46  // StateToParamsUserAccessPermission converts permission.Access to params.AccessPermission.
    47  func StateToParamsUserAccessPermission(descriptionAccess permission.Access) (params.UserAccessPermission, error) {
    48  	switch descriptionAccess {
    49  	case permission.ReadAccess:
    50  		return params.ModelReadAccess, nil
    51  	case permission.WriteAccess:
    52  		return params.ModelWriteAccess, nil
    53  	case permission.AdminAccess:
    54  		return params.ModelAdminAccess, nil
    55  	}
    56  
    57  	return "", errors.NotValidf("model access permission %q", descriptionAccess)
    58  
    59  }