github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/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  	"github.com/juju/names"
    11  
    12  	"github.com/juju/juju/apiserver/params"
    13  	"github.com/juju/juju/state"
    14  )
    15  
    16  // ModelUser defines the subset of the state.ModelUser type
    17  // that we require to convert to a params.ModelUserInfo.
    18  type ModelUser interface {
    19  	Access() state.ModelAccess
    20  	DisplayName() string
    21  	LastConnection() (time.Time, error)
    22  	UserName() string
    23  	UserTag() names.UserTag
    24  }
    25  
    26  // ModelUserInfo converts *state.ModelUser to params.ModelUserInfo.
    27  func ModelUserInfo(user ModelUser) (params.ModelUserInfo, error) {
    28  	access, err := StateToParamsModelAccess(user.Access())
    29  	if err != nil {
    30  		return params.ModelUserInfo{}, errors.Trace(err)
    31  	}
    32  
    33  	var lastConn *time.Time
    34  	userLastConn, err := user.LastConnection()
    35  	if err == nil {
    36  		lastConn = &userLastConn
    37  	} else if !state.IsNeverConnectedError(err) {
    38  		return params.ModelUserInfo{}, errors.Trace(err)
    39  	}
    40  
    41  	userInfo := params.ModelUserInfo{
    42  		UserName:       user.UserName(),
    43  		DisplayName:    user.DisplayName(),
    44  		LastConnection: lastConn,
    45  		Access:         access,
    46  	}
    47  	return userInfo, nil
    48  }
    49  
    50  // StateToParamsModelAccess converts state.ModelAccess to params.ModelAccessPermission.
    51  func StateToParamsModelAccess(stateAccess state.ModelAccess) (params.ModelAccessPermission, error) {
    52  	switch stateAccess {
    53  	case state.ModelReadAccess:
    54  		return params.ModelReadAccess, nil
    55  	case state.ModelAdminAccess:
    56  		return params.ModelWriteAccess, nil
    57  	}
    58  	return "", errors.Errorf("invalid model access permission %q", stateAccess)
    59  }