Skip to content

Commit

Permalink
enh: move core structs to app
Browse files Browse the repository at this point in the history
  • Loading branch information
notdodo committed Dec 9, 2023
1 parent d1bf0bb commit c5f2d1b
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 64 deletions.
44 changes: 32 additions & 12 deletions pkg/app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"github.com/sourcegraph/conc/iter"

"github.com/notdodo/goflat"
oktaSdk "github.com/okta/okta-sdk-golang/v2/okta"
)

type IAMme interface {
Expand All @@ -30,7 +31,7 @@ type iamme struct {

func (a *iamme) Dump() {
a.createNodes([]string{"User"}, flat(a.getUsers()))
groups := a.getGroups()
groups := a.getGroupsWithMembers()
a.createNodes([]string{"Group"}, flat(groups))
rules := a.getRules()
a.createNodes([]string{"Rule"}, flat(rules))
Expand Down Expand Up @@ -62,40 +63,59 @@ func (a *iamme) Dump() {
a.createRelations("GroupMember", []string{"User"}, []string{"Group"}, groupMembers)
}

func (a *iamme) getUsers() []*okta.User {
users, err := a.oktaClient.GetUsers()
func (a *iamme) getUsers() []*User {
oktaUsers, err := a.oktaClient.GetUsers()
users := make([]*User, 0, len(oktaUsers))
if err != nil {
a.logger.Error("Error fetching users from Okta:", "err", err)
}

for _, user := range oktaUsers {
users = append(users, &User{
User: user,
})
}
return users
}

func (a *iamme) getGroups() []*okta.Group {
groups, err := a.oktaClient.GetGroups()
func (a *iamme) getGroupsWithMembers() []*Group {
oktaGroups, err := a.oktaClient.GetGroups()
if err != nil {
a.logger.Error("Error fetching groups from Okta:", "err", err)
return nil
}
groupsWithMembers := iter.Map(groups, func(group **okta.Group) *okta.Group {
groupsWithMembers := iter.Map(oktaGroups, func(group **oktaSdk.Group) *Group {
members, err := a.oktaClient.GetGroupMembers((*group).Id)
if err != nil {
a.logger.Error("Error fetching group members from Okta:", "err", err)
}
elem := &okta.Group{
Group: (*group).Group,
Members: members,
users := make([]*User, 0, len(members))
for _, member := range members {
users = append(users, &User{
User: member,
})
}
return &Group{
Group: *group,
Members: users,
}
return elem
})

return groupsWithMembers
}

func (a *iamme) getRules() []*okta.GroupRule {
rules, err := a.oktaClient.GetGroupsRules()
func (a *iamme) getRules() []*GroupRule {
oktaRules, err := a.oktaClient.GetGroupsRules()
rules := make([]*GroupRule, 0, len(oktaRules))
if err != nil {
a.logger.Error("Error fetching rules from Okta:", "err", err)
}

for _, rule := range oktaRules {
rules = append(rules, &GroupRule{
GroupRule: rule,
})
}
return rules
}

Expand Down
16 changes: 16 additions & 0 deletions pkg/app/structs.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package app

import "github.com/okta/okta-sdk-golang/v2/okta"

type Group struct {
*okta.Group
Members []*User
}

type User struct {
*okta.User
}

type GroupRule struct {
*okta.GroupRule
}
72 changes: 20 additions & 52 deletions pkg/infra/okta/okta_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,30 +11,17 @@ import (

// OktaClient is an interface for interacting with Okta resources.
type OktaClient interface {
GetUsers() ([]*User, error)
GetGroups() ([]*Group, error)
GetGroupsRules() ([]*GroupRule, error)
GetGroupMembers(string) ([]*User, error)
GetUsers() ([]*okta.User, error)
GetGroups() ([]*okta.Group, error)
GetGroupsRules() ([]*okta.GroupRule, error)
GetGroupMembers(string) ([]*okta.User, error)
}

type oktaClient struct {
oktaClient *okta.Client
log logging.LogManager
}

type Group struct {
*okta.Group
Members []*User
}

type User struct {
*okta.User
}

type GroupRule struct {
*okta.GroupRule
}

func NewOktaClient(orgUrl, apiKey string) OktaClient {
logger := logging.GetLogManager()
_, client, err := okta.NewClient(context.TODO(), okta.WithOrgUrl(fmt.Sprintf("https://%s", orgUrl)), okta.WithToken(apiKey))
Expand All @@ -48,14 +35,12 @@ func NewOktaClient(orgUrl, apiKey string) OktaClient {
}
}

func (c *oktaClient) GetUsers() ([]*User, error) {
func (c *oktaClient) GetUsers() ([]*okta.User, error) {
c.log.Info("Getting Okta users")
var users []*User
var users []*okta.User
appendUsers := func(oktaUsers []*okta.User) {
for _, oktaUser := range oktaUsers {

Check failure on line 42 in pkg/infra/okta/okta_client.go

View workflow job for this annotation

GitHub Actions / lint

S1011: should replace loop with `users = append(users, oktaUsers...)` (gosimple)
users = append(users, &User{
User: oktaUser,
})
users = append(users, oktaUser)
}
}

Expand All @@ -77,56 +62,39 @@ func (c *oktaClient) GetUsers() ([]*User, error) {
return users, nil
}

func (c *oktaClient) GetGroups() ([]*Group, error) {
func (c *oktaClient) GetGroups() ([]*okta.Group, error) {
c.log.Info("Getting Okta groups")
oktaGroups, response, err := c.oktaClient.Group.ListGroups(context.TODO(), &query.Params{
Expand: "stats,app",
})
if err != nil {
return nil, err
}
groups := make([]*Group, 0, len(oktaGroups))
for _, oktaGroup := range oktaGroups {
groups = append(groups, &Group{
Group: oktaGroup,
})
}

c.log.Info(fmt.Sprintf("Found %d groups", len(groups)))
c.log.Debug(fmt.Sprintf("Found %d groups", len(groups)), "groups", response.Body)
return groups, nil
c.log.Info(fmt.Sprintf("Found %d groups", len(oktaGroups)))
c.log.Debug(fmt.Sprintf("Found %d groups", len(oktaGroups)), "groups", response.Body)
return oktaGroups, nil
}

func (c *oktaClient) GetGroupsRules() ([]*GroupRule, error) {
func (c *oktaClient) GetGroupsRules() ([]*okta.GroupRule, error) {
c.log.Info("Getting Okta groups rules")
oktaRules, response, err := c.oktaClient.Group.ListGroupRules(context.TODO(), nil)
if err != nil {
return nil, err
}
rules := make([]*GroupRule, 0, len(oktaRules))
for _, oktaRule := range oktaRules {
rules = append(rules, &GroupRule{
GroupRule: oktaRule,
})
}
c.log.Info(fmt.Sprintf("Found %d rules", len(rules)))
c.log.Debug(fmt.Sprintf("Found %d rules", len(rules)), "rules", response.Body)
return rules, nil

c.log.Info(fmt.Sprintf("Found %d rules", len(oktaRules)))
c.log.Debug(fmt.Sprintf("Found %d rules", len(oktaRules)), "rules", response.Body)
return oktaRules, nil
}

func (c *oktaClient) GetGroupMembers(groupId string) ([]*User, error) {
func (c *oktaClient) GetGroupMembers(groupId string) ([]*okta.User, error) {
c.log.Info("Getting Okta group members", "group", groupId)
oktaMembers, response, err := c.oktaClient.Group.ListGroupUsers(context.TODO(), groupId, nil)
if err != nil {
return nil, err
}
members := make([]*User, 0, len(oktaMembers))
for _, member := range oktaMembers {
members = append(members, &User{
User: member,
})
}
c.log.Info(fmt.Sprintf("Found %d members for group %s", len(members), groupId))
c.log.Debug(fmt.Sprintf("Found %d members for group %s", len(members), groupId), "members", response.Body)
return members, err
c.log.Info(fmt.Sprintf("Found %d members for group %s", len(oktaMembers), groupId))
c.log.Debug(fmt.Sprintf("Found %d members for group %s", len(oktaMembers), groupId), "members", response.Body)
return oktaMembers, err
}

0 comments on commit c5f2d1b

Please sign in to comment.