Skip to content

Commit 31345bd

Browse files
committed
add orgs members add/remove commands
1 parent a3e822d commit 31345bd

File tree

4 files changed

+178
-0
lines changed

4 files changed

+178
-0
lines changed

cmd/src/orgs.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ The commands are:
2020
get gets an organization
2121
create creates an organization
2222
delete deletes an organization
23+
members manages organization members
2324
2425
Use "src orgs [command] -h" for more information about a command.
2526
`

cmd/src/orgs_members.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package main
2+
3+
import (
4+
"flag"
5+
"fmt"
6+
)
7+
8+
var orgsMembersCommands commander
9+
10+
func init() {
11+
usage := `'src orgs members' is a tool that manages organization members on a Sourcegraph instance.
12+
13+
Usage:
14+
15+
src orgs members command [command options]
16+
17+
The commands are:
18+
19+
add adds a user as a member to an organization
20+
remove removes a user as a member from an organization
21+
22+
Use "src orgs members [command] -h" for more information about a command.
23+
`
24+
25+
flagSet := flag.NewFlagSet("members", flag.ExitOnError)
26+
handler := func(args []string) error {
27+
orgsMembersCommands.run(flagSet, "src orgs members", usage, args)
28+
return nil
29+
}
30+
31+
// Register the command.
32+
orgsCommands = append(orgsCommands, &command{
33+
flagSet: flagSet,
34+
aliases: []string{"member"},
35+
handler: handler,
36+
usageFunc: func() {
37+
fmt.Println(usage)
38+
},
39+
})
40+
}

cmd/src/orgs_members_add.go

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package main
2+
3+
import (
4+
"flag"
5+
"fmt"
6+
)
7+
8+
func init() {
9+
usage := `
10+
Examples:
11+
12+
Add a member (alice) to an organization (abc-org):
13+
14+
$ src orgs members add -org-id=$(src org get -f '{{.ID}}' -name=abc-org) -username=alice
15+
16+
`
17+
18+
flagSet := flag.NewFlagSet("add", flag.ExitOnError)
19+
usageFunc := func() {
20+
fmt.Fprintf(flag.CommandLine.Output(), "Usage of 'src orgs members %s':\n", flagSet.Name())
21+
flagSet.PrintDefaults()
22+
fmt.Println(usage)
23+
}
24+
var (
25+
orgIDFlag = flagSet.String("org-id", "", "ID of organization to which to add member. (required)")
26+
usernameFlag = flagSet.String("username", "", "Username of user to add as member. (required)")
27+
apiFlags = newAPIFlags(flagSet)
28+
)
29+
30+
handler := func(args []string) error {
31+
flagSet.Parse(args)
32+
33+
query := `mutation AddUserToOrganization(
34+
$organization: ID!,
35+
$usernameOrEmail: String!,
36+
) {
37+
addUserToOrganization(
38+
organization: $organization,
39+
usernameOrEmail: $usernameOrEmail,
40+
) {
41+
alwaysNil
42+
}
43+
}`
44+
45+
var result struct {
46+
AddUserToOrganization struct{}
47+
}
48+
return (&apiRequest{
49+
query: query,
50+
vars: map[string]interface{}{
51+
"organization": *orgIDFlag,
52+
"usernameOrEmail": *usernameFlag,
53+
},
54+
result: &result,
55+
done: func() error {
56+
fmt.Printf("User %q added as member to organization with ID %q.\n", *usernameFlag, *orgIDFlag)
57+
return nil
58+
},
59+
flags: apiFlags,
60+
}).do()
61+
}
62+
63+
// Register the command.
64+
orgsMembersCommands = append(orgsMembersCommands, &command{
65+
flagSet: flagSet,
66+
handler: handler,
67+
usageFunc: usageFunc,
68+
})
69+
}

cmd/src/orgs_members_remove.go

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package main
2+
3+
import (
4+
"flag"
5+
"fmt"
6+
)
7+
8+
func init() {
9+
usage := `
10+
Examples:
11+
12+
Remove a member (alice) from an organization (abc-org):
13+
14+
$ src orgs members remove -org-id=$(src org get -f '{{.ID}}' -name=abc-org) -user-id=$(src users get -f '{{.ID}}' -username=alice)
15+
`
16+
17+
flagSet := flag.NewFlagSet("remove", flag.ExitOnError)
18+
usageFunc := func() {
19+
fmt.Fprintf(flag.CommandLine.Output(), "Usage of 'src orgs members %s':\n", flagSet.Name())
20+
flagSet.PrintDefaults()
21+
fmt.Println(usage)
22+
}
23+
var (
24+
orgIDFlag = flagSet.String("org-id", "", "ID of organization from which to remove member. (required)")
25+
userIDFlag = flagSet.String("user-id", "", "ID of user to remove as member. (required)")
26+
apiFlags = newAPIFlags(flagSet)
27+
)
28+
29+
handler := func(args []string) error {
30+
flagSet.Parse(args)
31+
32+
query := `mutation RemoveUserFromOrg(
33+
$orgID: ID!,
34+
$userID: ID!,
35+
) {
36+
removeUserFromOrg(
37+
orgID: $orgID,
38+
userID: $userID,
39+
) {
40+
alwaysNil
41+
}
42+
}`
43+
44+
var result struct {
45+
RemoveUserFromOrg struct{}
46+
}
47+
return (&apiRequest{
48+
query: query,
49+
vars: map[string]interface{}{
50+
"orgID": *orgIDFlag,
51+
"userID": *userIDFlag,
52+
},
53+
result: &result,
54+
done: func() error {
55+
fmt.Printf("User %q removed as member from organization with ID %q.\n", *userIDFlag, *orgIDFlag)
56+
return nil
57+
},
58+
flags: apiFlags,
59+
}).do()
60+
}
61+
62+
// Register the command.
63+
orgsMembersCommands = append(orgsMembersCommands, &command{
64+
flagSet: flagSet,
65+
handler: handler,
66+
usageFunc: usageFunc,
67+
})
68+
}

0 commit comments

Comments
 (0)