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 }