Skip to content

Commit

Permalink
Added update-user-group subcommand to repos command (#36)
Browse files Browse the repository at this point in the history
* Added add-user subcommand to repos

* Fixed review comments
  • Loading branch information
Jesper Lindstrøm Nielsen authored Sep 1, 2020
1 parent 1c26c41 commit 50cd7f0
Show file tree
Hide file tree
Showing 3 changed files with 87 additions and 0 deletions.
48 changes: 48 additions & 0 deletions api/repositories.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package api

import (
"fmt"
"strings"

"github.com/shurcooL/graphql"
)
Expand Down Expand Up @@ -105,6 +106,53 @@ func (r *Repositories) Delete(name, reason string, allowDataDeletion bool) error
return nil
}

type DefaultGroupEnum string

const (
DefaultGroupEnumMember DefaultGroupEnum = "Member"
DefaultGroupEnumAdmin DefaultGroupEnum = "Admin"
DefaultGroupEnumEliminator DefaultGroupEnum = "Eliminator"
)

func (e DefaultGroupEnum) String() string {
return string(e)
}

func (e *DefaultGroupEnum) ParseString(s string) bool {
switch strings.ToLower(s) {
case "member":
*e = DefaultGroupEnumMember
return true
case "admin":
*e = DefaultGroupEnumAdmin
return true
case "eliminator":
*e = DefaultGroupEnumEliminator
return true
default:
return false
}
}

func (r *Repositories) UpdateUserGroup(name, username string, groups ...DefaultGroupEnum) error {
if len(groups) == 0 {
return fmt.Errorf("at least one group must be defined")
}

var mutation struct {
UpdateDefaultGroupMembershipsMutation struct {
ClientMutationId string
} `graphql:"updateDefaultGroupMemberships(input: {viewName: $name, userName: $username, groups: $groups})"`
}
variables := map[string]interface{}{
"name": graphql.String(name),
"username": graphql.String(username),
"groups": groups,
}

return r.client.Mutate(&mutation, variables)
}

func (r *Repositories) UpdateTimeBasedRetention(name string, retentionInDays float64, allowDataDeletion bool) error {
existingRepo, err := r.Get(name)
if err != nil {
Expand Down
1 change: 1 addition & 0 deletions cmd/humioctl/repos.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ func newReposCmd() *cobra.Command {
cmd.AddCommand(newReposCreateCmd())
cmd.AddCommand(newReposUpdateCmd())
cmd.AddCommand(newReposDeleteCmd())
cmd.AddCommand(newReposUpdateUserGroupCmd())

return cmd
}
Expand Down
38 changes: 38 additions & 0 deletions cmd/humioctl/repos_update_user_group.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package main

import (
"os"

"github.com/humio/cli/api"
"github.com/spf13/cobra"
)

func newReposUpdateUserGroupCmd() *cobra.Command {
var groups []string
cmd := cobra.Command{
Use: "update-user-group [flags] <repo> <username>",
Short: "Updates the users permissions to a repository based on default groups",
Args: cobra.ExactArgs(2),
Run: func(cmd *cobra.Command, args []string) {
repoName := args[0]
userName := args[1]

var defaultGroups []api.DefaultGroupEnum
for _, group := range groups {
var defaultGroup api.DefaultGroupEnum
if !defaultGroup.ParseString(group) {
cmd.Println("the group '%s' was not valid (must be either 'Member', 'Admin' or 'Eliminator')")
os.Exit(1)
}
defaultGroups = append(defaultGroups, defaultGroup)
}

client := NewApiClient(cmd)
apiErr := client.Repositories().UpdateUserGroup(repoName, userName, defaultGroups...)
exitOnError(cmd, apiErr, "error adding user")
},
}
cmd.Flags().StringSliceVarP(&groups, "groups", "g", []string{api.DefaultGroupEnumMember.String()}, "the groups that the user should be added in")

return &cmd
}

0 comments on commit 50cd7f0

Please sign in to comment.