Skip to content

Commit

Permalink
add orgs members add/remove commands
Browse files Browse the repository at this point in the history
  • Loading branch information
kevinzliu committed May 30, 2018
1 parent a3e822d commit 31345bd
Show file tree
Hide file tree
Showing 4 changed files with 178 additions and 0 deletions.
1 change: 1 addition & 0 deletions cmd/src/orgs.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ The commands are:
get gets an organization
create creates an organization
delete deletes an organization
members manages organization members
Use "src orgs [command] -h" for more information about a command.
`
Expand Down
40 changes: 40 additions & 0 deletions cmd/src/orgs_members.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package main

import (
"flag"
"fmt"
)

var orgsMembersCommands commander

func init() {
usage := `'src orgs members' is a tool that manages organization members on a Sourcegraph instance.
Usage:
src orgs members command [command options]
The commands are:
add adds a user as a member to an organization
remove removes a user as a member from an organization
Use "src orgs members [command] -h" for more information about a command.
`

flagSet := flag.NewFlagSet("members", flag.ExitOnError)
handler := func(args []string) error {
orgsMembersCommands.run(flagSet, "src orgs members", usage, args)
return nil
}

// Register the command.
orgsCommands = append(orgsCommands, &command{
flagSet: flagSet,
aliases: []string{"member"},
handler: handler,
usageFunc: func() {
fmt.Println(usage)
},
})
}
69 changes: 69 additions & 0 deletions cmd/src/orgs_members_add.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package main

import (
"flag"
"fmt"
)

func init() {
usage := `
Examples:
Add a member (alice) to an organization (abc-org):
$ src orgs members add -org-id=$(src org get -f '{{.ID}}' -name=abc-org) -username=alice
`

flagSet := flag.NewFlagSet("add", flag.ExitOnError)
usageFunc := func() {
fmt.Fprintf(flag.CommandLine.Output(), "Usage of 'src orgs members %s':\n", flagSet.Name())
flagSet.PrintDefaults()
fmt.Println(usage)
}
var (
orgIDFlag = flagSet.String("org-id", "", "ID of organization to which to add member. (required)")
usernameFlag = flagSet.String("username", "", "Username of user to add as member. (required)")
apiFlags = newAPIFlags(flagSet)
)

handler := func(args []string) error {
flagSet.Parse(args)

query := `mutation AddUserToOrganization(
$organization: ID!,
$usernameOrEmail: String!,
) {
addUserToOrganization(
organization: $organization,
usernameOrEmail: $usernameOrEmail,
) {
alwaysNil
}
}`

var result struct {
AddUserToOrganization struct{}
}
return (&apiRequest{
query: query,
vars: map[string]interface{}{
"organization": *orgIDFlag,
"usernameOrEmail": *usernameFlag,
},
result: &result,
done: func() error {
fmt.Printf("User %q added as member to organization with ID %q.\n", *usernameFlag, *orgIDFlag)
return nil
},
flags: apiFlags,
}).do()
}

// Register the command.
orgsMembersCommands = append(orgsMembersCommands, &command{
flagSet: flagSet,
handler: handler,
usageFunc: usageFunc,
})
}
68 changes: 68 additions & 0 deletions cmd/src/orgs_members_remove.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package main

import (
"flag"
"fmt"
)

func init() {
usage := `
Examples:
Remove a member (alice) from an organization (abc-org):
$ src orgs members remove -org-id=$(src org get -f '{{.ID}}' -name=abc-org) -user-id=$(src users get -f '{{.ID}}' -username=alice)
`

flagSet := flag.NewFlagSet("remove", flag.ExitOnError)
usageFunc := func() {
fmt.Fprintf(flag.CommandLine.Output(), "Usage of 'src orgs members %s':\n", flagSet.Name())
flagSet.PrintDefaults()
fmt.Println(usage)
}
var (
orgIDFlag = flagSet.String("org-id", "", "ID of organization from which to remove member. (required)")
userIDFlag = flagSet.String("user-id", "", "ID of user to remove as member. (required)")
apiFlags = newAPIFlags(flagSet)
)

handler := func(args []string) error {
flagSet.Parse(args)

query := `mutation RemoveUserFromOrg(
$orgID: ID!,
$userID: ID!,
) {
removeUserFromOrg(
orgID: $orgID,
userID: $userID,
) {
alwaysNil
}
}`

var result struct {
RemoveUserFromOrg struct{}
}
return (&apiRequest{
query: query,
vars: map[string]interface{}{
"orgID": *orgIDFlag,
"userID": *userIDFlag,
},
result: &result,
done: func() error {
fmt.Printf("User %q removed as member from organization with ID %q.\n", *userIDFlag, *orgIDFlag)
return nil
},
flags: apiFlags,
}).do()
}

// Register the command.
orgsMembersCommands = append(orgsMembersCommands, &command{
flagSet: flagSet,
handler: handler,
usageFunc: usageFunc,
})
}

0 comments on commit 31345bd

Please sign in to comment.