Skip to content

Commit

Permalink
enh: add groups dump (#11)
Browse files Browse the repository at this point in the history
* enh: add groups dump

* fix: return err
  • Loading branch information
notdodo authored Nov 18, 2023
1 parent 3336e57 commit ec9a263
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 7 deletions.
45 changes: 39 additions & 6 deletions pkg/app/okta_neo4j.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,23 +28,56 @@ type oktaNeo4jApp struct {
}

func (a *oktaNeo4jApp) Dump() {
a.fetchAndCreateNodes([]string{"User"}, a.getUsers)
a.fetchAndCreateNodes([]string{"Groups"}, a.getGroups)
}

func (a *oktaNeo4jApp) getUsers() ([]interface{}, error) {
users, err := a.oktaClient.GetUsers()
if err != nil {
a.logger.Error("Error fetching users from Okta:", "err", err)
return nil, err
}
usersInterface := make([]interface{}, len(users))
for i, user := range users {
usersInterface[i] = user
}

return usersInterface, err
}

func (a *oktaNeo4jApp) getGroups() ([]interface{}, error) {
groups, err := a.oktaClient.GetGroups()
if err != nil {
a.logger.Error("Error fetching groups from Okta:", "err", err)
return nil, err
}
groupsInterface := make([]interface{}, len(groups))
for i, group := range groups {
groupsInterface[i] = group
}

return groupsInterface, err
}

func (a *oktaNeo4jApp) fetchAndCreateNodes(nodeLabels []string, oktaClientFunc func() ([]interface{}, error)) {
data, err := oktaClientFunc()
if err != nil {
a.logger.Error("Error fetching data from Okta:", "err", err)
return
}

flatUsers := make([]map[string]interface{}, 0, len(users))
for _, user := range users {
flatUser := goflat.FlatStruct(*user, goflat.FlattenerConfig{
flatData := make([]map[string]interface{}, 0, len(data))
for _, item := range data {
flatItem := goflat.FlatStruct(item, goflat.FlattenerConfig{
Separator: "_",
OmitEmpty: true,
OmitNil: true,
})
flatUsers = append(flatUsers, flatUser)
flatData = append(flatData, flatItem)
}

if _, err = a.neo4jClient.CreateNodes([]string{"User"}, &flatUsers); err != nil {
a.logger.Error("Error creating user nodes on Neo4J", "err", err)
if _, err := a.neo4jClient.CreateNodes(nodeLabels, &flatData); err != nil {
a.logger.Error("Error creating nodes on Neo4J", "err", err)
}
}
2 changes: 1 addition & 1 deletion pkg/infra/neo4j/neo4j_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ func (c *neo4jClient) Close() error {
func (c *neo4jClient) CreateNodes(labels []string, properties *[]map[string]interface{}) ([]map[string]interface{}, error) {
c.log.Debug("Creating new nodes", "count", len(labels), "params", *properties)
c.log.Info("Creating new nodes", "count", len(*properties))
nodeIDs, err := orm.CreateNodes(c.Connect(), []string{"User"}, properties)
nodeIDs, err := orm.CreateNodes(c.Connect(), labels, properties)
if err != nil {
c.log.Error("Failed creating nodes on Neo4J", "err", err)
}
Expand Down

0 comments on commit ec9a263

Please sign in to comment.