github.com/swisscom/cloudfoundry-cli@v7.1.0+incompatible/cf/actors/userprint/plugin.go (about)

     1  package userprint
     2  
     3  import (
     4  	"code.cloudfoundry.org/cli/cf/models"
     5  	"code.cloudfoundry.org/cli/plugin/models"
     6  )
     7  
     8  type pluginPrinter struct {
     9  	roles      []models.Role
    10  	userLister func(spaceGUID string, role models.Role) ([]models.UserFields, error)
    11  	users      userCollection
    12  	printer    func([]userWithRoles)
    13  }
    14  
    15  type userCollection map[string]userWithRoles
    16  
    17  type userWithRoles struct {
    18  	models.UserFields
    19  	Roles []models.Role
    20  }
    21  
    22  func NewOrgUsersPluginPrinter(
    23  	pluginModel *[]plugin_models.GetOrgUsers_Model,
    24  	userLister func(guid string, role models.Role) ([]models.UserFields, error),
    25  	roles []models.Role,
    26  ) *pluginPrinter {
    27  	return &pluginPrinter{
    28  		users:      make(userCollection),
    29  		userLister: userLister,
    30  		roles:      roles,
    31  		printer: func(users []userWithRoles) {
    32  			var orgUsers []plugin_models.GetOrgUsers_Model
    33  			for _, user := range users {
    34  				orgUsers = append(orgUsers, plugin_models.GetOrgUsers_Model{
    35  					Guid:     user.GUID,
    36  					Username: user.Username,
    37  					IsAdmin:  user.IsAdmin,
    38  					Roles:    rolesToString(user.Roles),
    39  				})
    40  			}
    41  			*pluginModel = orgUsers
    42  		},
    43  	}
    44  }
    45  
    46  func NewSpaceUsersPluginPrinter(
    47  	pluginModel *[]plugin_models.GetSpaceUsers_Model,
    48  	userLister func(guid string, role models.Role) ([]models.UserFields, error),
    49  	roles []models.Role,
    50  ) *pluginPrinter {
    51  	return &pluginPrinter{
    52  		users:      make(userCollection),
    53  		userLister: userLister,
    54  		roles:      roles,
    55  		printer: func(users []userWithRoles) {
    56  			var spaceUsers []plugin_models.GetSpaceUsers_Model
    57  			for _, user := range users {
    58  				spaceUsers = append(spaceUsers, plugin_models.GetSpaceUsers_Model{
    59  					Guid:     user.GUID,
    60  					Username: user.Username,
    61  					IsAdmin:  user.IsAdmin,
    62  					Roles:    rolesToString(user.Roles),
    63  				})
    64  			}
    65  			*pluginModel = spaceUsers
    66  		},
    67  	}
    68  }
    69  
    70  func (p *pluginPrinter) PrintUsers(guid string, username string) {
    71  	for _, role := range p.roles {
    72  		users, _ := p.userLister(guid, role)
    73  		for _, user := range users {
    74  			p.users.storeAppendingRole(role, user.Username, user.GUID, user.IsAdmin)
    75  		}
    76  	}
    77  	p.printer(p.users.all())
    78  }
    79  
    80  func (coll userCollection) storeAppendingRole(role models.Role, username string, guid string, isAdmin bool) {
    81  	u := coll[username]
    82  	u.Roles = append(u.Roles, role)
    83  	u.Username = username
    84  	u.GUID = guid
    85  	u.IsAdmin = isAdmin
    86  	coll[username] = u
    87  }
    88  
    89  func (coll userCollection) all() (output []userWithRoles) {
    90  	for _, u := range coll {
    91  		output = append(output, u)
    92  	}
    93  	return output
    94  }
    95  
    96  func rolesToString(roles []models.Role) []string {
    97  	var rolesStr []string
    98  	for _, role := range roles {
    99  		rolesStr = append(rolesStr, role.ToString())
   100  	}
   101  	return rolesStr
   102  }