github.com/liamawhite/cli-with-i18n@v6.32.1-0.20171122084555-dede0a5c3448+incompatible/cf/actors/userprint/plugin.go (about) 1 package userprint 2 3 import ( 4 "github.com/liamawhite/cli-with-i18n/cf/models" 5 "github.com/liamawhite/cli-with-i18n/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 }