Skip to content

Commit d7dd39c

Browse files
authored
[gpctl] Add users block command (#16715)
1 parent 99dbc27 commit d7dd39c

File tree

5 files changed

+130
-2
lines changed

5 files changed

+130
-2
lines changed

dev/gpctl/BUILD.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ packages:
1010
deps:
1111
- components/common-go:lib
1212
- components/content-service-api/go:lib
13+
- components/gitpod-protocol/go:lib
1314
- components/image-builder-api/go:lib
1415
- components/registry-facade-api/go:lib
1516
- components/ws-daemon-api/go:lib
@@ -25,6 +26,7 @@ packages:
2526
deps:
2627
- components/common-go:lib
2728
- components/content-service-api/go:lib
29+
- components/gitpod-protocol/go:lib
2830
- components/image-builder-api/go:lib
2931
- components/registry-facade-api/go:lib
3032
- components/ws-daemon-api/go:lib

dev/gpctl/cmd/users-block.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
// Copyright (c) 2020 Gitpod GmbH. All rights reserved.
2+
// Licensed under the GNU Affero General Public License (AGPL).
3+
// See License.AGPL.txt in the project root for license information.
4+
5+
package cmd
6+
7+
import (
8+
"context"
9+
10+
"github.com/spf13/cobra"
11+
12+
"github.com/gitpod-io/gitpod/common-go/log"
13+
protocol "github.com/gitpod-io/gitpod/gitpod-protocol"
14+
)
15+
16+
// usersBlockCmd represents the describe command
17+
var usersBlockCmd = &cobra.Command{
18+
Use: "block <userID> ... <userID>",
19+
Short: "blocks a user",
20+
Args: cobra.MinimumNArgs(1),
21+
Run: func(cmd *cobra.Command, args []string) {
22+
ctx, cancel := context.WithCancel(context.Background())
23+
defer cancel()
24+
25+
client, err := newLegacyAPIConn()
26+
if err != nil {
27+
log.WithError(err).Fatal("cannot connect")
28+
}
29+
defer client.Close()
30+
31+
for _, uid := range args {
32+
err = client.AdminBlockUser(ctx, &protocol.AdminBlockUserRequest{
33+
UserID: uid,
34+
IsBlocked: true,
35+
})
36+
if err != nil {
37+
log.WithError(err).Error("cannot block user")
38+
} else {
39+
log.WithField("uid", uid).Info("user blocked")
40+
}
41+
}
42+
43+
},
44+
}
45+
46+
func init() {
47+
usersCmd.AddCommand(usersBlockCmd)
48+
}

dev/gpctl/cmd/users.go

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
// Copyright (c) 2022 Gitpod GmbH. All rights reserved.
2+
// Licensed under the GNU Affero General Public License (AGPL).
3+
// See License.AGPL.txt in the project root for license information.
4+
5+
package cmd
6+
7+
import (
8+
"fmt"
9+
"os"
10+
11+
"github.com/gitpod-io/gitpod/common-go/log"
12+
api "github.com/gitpod-io/gitpod/gitpod-protocol"
13+
"github.com/sirupsen/logrus"
14+
"github.com/spf13/cobra"
15+
)
16+
17+
var usersCmd = &cobra.Command{
18+
Use: "users",
19+
Short: "Interact with Public API services",
20+
}
21+
22+
var usersCmdOpts struct {
23+
address string
24+
insecure bool
25+
token string
26+
}
27+
28+
func init() {
29+
rootCmd.AddCommand(usersCmd)
30+
31+
usersCmd.PersistentFlags().StringVar(&usersCmdOpts.address, "address", "wss://gitpod.io/api/v1", "Address of the API endpoint. Must be in the form <host>:<port>.")
32+
usersCmd.PersistentFlags().BoolVar(&usersCmdOpts.insecure, "insecure", false, "Disable TLS when making requests against the API. For testing purposes only.")
33+
usersCmd.PersistentFlags().StringVar(&usersCmdOpts.token, "token", os.Getenv("GPCTL_API_TOKEN"), "Authentication token to interact with the API")
34+
}
35+
36+
func newLegacyAPIConn() (*api.APIoverJSONRPC, error) {
37+
if usersCmdOpts.address == "" {
38+
return nil, fmt.Errorf("empty connection address")
39+
}
40+
41+
if usersCmdOpts.token == "" {
42+
return nil, fmt.Errorf("empty connection token. Use --token or GPCTL_API_TOKEN to provide one.")
43+
}
44+
45+
conn, err := api.ConnectToServer(usersCmdOpts.address, api.ConnectToServerOpts{
46+
Token: usersCmdOpts.token,
47+
Log: logrus.NewEntry(log.Log.Logger),
48+
ExtraHeaders: map[string]string{
49+
"User-Agent": "gitpod/gpctl",
50+
"X-Client-Version": "0",
51+
},
52+
})
53+
if err != nil {
54+
return nil, fmt.Errorf("cannot connect to server at %s: %w", usersCmdOpts.address, err)
55+
}
56+
57+
return conn, nil
58+
}

dev/gpctl/go.mod

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,15 @@ require (
2525
k8s.io/client-go v0.24.4
2626
)
2727

28+
require github.com/gitpod-io/gitpod/gitpod-protocol v0.0.0-00010101000000-000000000000
29+
2830
require (
2931
cloud.google.com/go/compute v1.12.1 // indirect
3032
cloud.google.com/go/compute/metadata v0.2.1 // indirect
3133
github.com/PuerkitoBio/purell v1.1.1 // indirect
3234
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect
3335
github.com/beorn7/perks v1.0.1 // indirect
36+
github.com/cenkalti/backoff/v4 v4.1.3 // indirect
3437
github.com/cespare/xxhash/v2 v2.1.2 // indirect
3538
github.com/davecgh/go-spew v1.1.1 // indirect
3639
github.com/emicklei/go-restful v2.9.5+incompatible // indirect
@@ -42,10 +45,12 @@ require (
4245
github.com/go-openapi/jsonreference v0.19.5 // indirect
4346
github.com/go-openapi/swag v0.19.14 // indirect
4447
github.com/gogo/protobuf v1.3.2 // indirect
48+
github.com/golang/mock v1.6.0 // indirect
4549
github.com/golang/protobuf v1.5.2 // indirect
4650
github.com/google/gnostic v0.5.7-v3refs // indirect
4751
github.com/google/gofuzz v1.1.0 // indirect
4852
github.com/google/uuid v1.3.0 // indirect
53+
github.com/gorilla/websocket v1.5.0 // indirect
4954
github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect
5055
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 // indirect
5156
github.com/hashicorp/golang-lru v0.5.1 // indirect
@@ -68,6 +73,7 @@ require (
6873
github.com/prometheus/common v0.37.0 // indirect
6974
github.com/prometheus/procfs v0.8.0 // indirect
7075
github.com/sirupsen/logrus v1.8.1 // indirect
76+
github.com/sourcegraph/jsonrpc2 v0.0.0-20200429184054-15c2290dcb37 // indirect
7177
github.com/spf13/pflag v1.0.5 // indirect
7278
golang.org/x/crypto v0.0.0-20220214200702-86341886e292 // indirect
7379
golang.org/x/net v0.5.0 // indirect
@@ -93,11 +99,13 @@ require (
9399

94100
replace github.com/gitpod-io/gitpod/common-go => ../../components/common-go // leeway
95101

102+
replace github.com/gitpod-io/gitpod/components/public-api/go => ../../components/public-api/go // leeway
103+
96104
replace github.com/gitpod-io/gitpod/content-service/api => ../../components/content-service-api/go // leeway
97105

98-
replace github.com/gitpod-io/gitpod/image-builder/api => ../../components/image-builder-api/go // leeway
106+
replace github.com/gitpod-io/gitpod/gitpod-protocol => ../../components/gitpod-protocol/go // leeway
99107

100-
replace github.com/gitpod-io/gitpod/components/public-api/go => ../../components/public-api/go // leeway
108+
replace github.com/gitpod-io/gitpod/image-builder/api => ../../components/image-builder-api/go // leeway
101109

102110
replace github.com/gitpod-io/gitpod/registry-facade/api => ../../components/registry-facade-api/go // leeway
103111

@@ -107,6 +115,8 @@ replace github.com/gitpod-io/gitpod/ws-manager-bridge/api => ../../components/ws
107115

108116
replace github.com/gitpod-io/gitpod/ws-manager/api => ../../components/ws-manager-api/go // leeway
109117

118+
replace github.com/google/addlicense => ../addlicense // leeway
119+
110120
replace k8s.io/api => k8s.io/api v0.24.4 // leeway indirect from components/common-go:lib
111121

112122
replace k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.24.4 // leeway indirect from components/common-go:lib

dev/gpctl/go.sum

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)