Skip to content

Commit

Permalink
Merge pull request #239 from tigrisdata/main
Browse files Browse the repository at this point in the history
Beta release
  • Loading branch information
efirs committed May 10, 2023
2 parents f805aef + b464466 commit c33be05
Show file tree
Hide file tree
Showing 8 changed files with 190 additions and 118 deletions.
4 changes: 4 additions & 0 deletions .codecov.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
coverage:
status:
project: off
patch: off
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ ifeq ($(GOOS), windows)
BIN=tigris.exe
endif

BUILD_PARAM=-tags=release -ldflags "-s -w -extldflags '-static' -X 'github.com/tigrisdata/tigris-cli/util.Version=$(VERSION)'" -o ${BIN} $(shell printenv BUILD_PARAM)
TEST_PARAM=-cover -race -tags=test $(shell printenv TEST_PARAM)
BUILD_PARAM=-tags=release,tigris_http,tigris_grpc -ldflags "-s -w -extldflags '-static' -X 'github.com/tigrisdata/tigris-cli/util.Version=$(VERSION)'" -o ${BIN} $(shell printenv BUILD_PARAM)
TEST_PARAM=-cover -race -tags=test,tigris_http,tigris_grpc $(shell printenv TEST_PARAM)

all: ${BIN}

Expand Down
133 changes: 113 additions & 20 deletions cmd/management.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import (

var (
rotate bool
global bool

ErrWrongArgs = fmt.Errorf("please provide name and description to update or use --rotate to rotate the secret")
ErrAppNotFound = fmt.Errorf("app key not found")
Expand Down Expand Up @@ -72,16 +73,28 @@ Check the docs for more information: https://docs.tigrisdata.com/overview/authen
Run: func(cmd *cobra.Command, args []string) {
login.Ensure(cmd.Context(), func(ctx context.Context) error {
description := ""

if len(args) > 1 {
description = args[1]
}
app, err := client.Get().CreateAppKey(ctx, config.GetProjectName(), args[0], description)
if err != nil {
return util.Error(err, "create app_key failed")
}

err = util.PrettyJSON(app)
util.Fatal(err, "create app_key")
if global {
app, err := client.Get().CreateGlobalAppKey(ctx, args[0], description)
if err != nil {
return util.Error(err, "create app_key failed")
}

err = util.PrettyJSON(app)
util.Fatal(err, "create app_key")
} else {
app, err := client.Get().CreateAppKey(ctx, config.GetProjectName(), args[0], description)
if err != nil {
return util.Error(err, "create app_key failed")
}

err = util.PrettyJSON(app)
util.Fatal(err, "create app_key")
}

return nil
})
Expand All @@ -94,7 +107,15 @@ var dropAppKeyCmd = &cobra.Command{
Args: cobra.MinimumNArgs(1),
Run: func(cmd *cobra.Command, args []string) {
login.Ensure(cmd.Context(), func(ctx context.Context) error {
if err := client.Get().DeleteAppKey(ctx, config.GetProjectName(), args[0]); err != nil {
var err error

if global {
err = client.Get().DeleteGlobalAppKey(ctx, args[0])
} else {
err = client.Get().DeleteAppKey(ctx, config.GetProjectName(), args[0])
}

if err != nil {
return util.Error(err, "drop app_key failed")
}

Expand Down Expand Up @@ -134,29 +155,81 @@ Output:
if len(args) > 2 {
desc = args[2]
}
_, err := client.Get().UpdateAppKey(ctx, config.GetProjectName(), args[0], args[1], desc)

var err error

if global {
_, err = client.Get().UpdateGlobalAppKey(ctx, args[0], args[1], desc)
} else {
_, err = client.Get().UpdateAppKey(ctx, config.GetProjectName(), args[0], args[1], desc)
}

if err != nil {
return util.Error(err, "alter app_key failed")
}
}

// rotate only when explicitly requested
if rotate {
sec, err := client.Get().RotateAppKeySecret(ctx, config.GetProjectName(), args[0])
if err != nil {
return util.Error(err, "alter app_key failed")
if global {
sec, err := client.Get().RotateGlobalAppKeySecret(ctx, args[0])
if err != nil {
return util.Error(err, "alter global app_key failed")
}

err = util.PrettyJSON(sec)
util.Fatal(err, "alter global app_key failed")
} else {
sec, err := client.Get().RotateAppKeySecret(ctx, config.GetProjectName(), args[0])
if err != nil {
return util.Error(err, "alter app_key failed")
}

err = util.PrettyJSON(sec)
util.Fatal(err, "alter app_key failed")
}

err = util.PrettyJSON(sec)
util.Fatal(err, "alter app_key failed")
}

return nil
})
},
}

func getGlobalAppKey(ctx context.Context, filter string) (*driver.GlobalAppKey, error) {
resp, err := client.Get().ListGlobalAppKeys(ctx)
if err != nil {
return nil, util.Error(err, "list app_key failed")
}

for _, v := range resp {
if v.Name == filter {
return v, nil
}
}

return nil, ErrAppNotFound
}

func getAppKey(ctx context.Context, filter string) (*driver.AppKey, error) {
if global {
gk, err := getGlobalAppKey(ctx, filter)
if err != nil {
return nil, err
}

return &driver.AppKey{
Id: gk.Id,
Name: gk.Name,
Description: gk.Description,
Secret: gk.Secret,
CreatedAt: gk.CreatedAt,
CreatedBy: gk.CreatedBy,
UpdatedAt: gk.UpdatedAt,
UpdatedBy: gk.UpdatedBy,
Project: "",
}, nil
}

resp, err := client.Get().ListAppKeys(ctx, config.GetProjectName())
if err != nil {
return nil, util.Error(err, "list app_key failed")
Expand Down Expand Up @@ -186,13 +259,23 @@ var listAppKeysCmd = &cobra.Command{
err = util.PrettyJSON(app)
util.Fatal(err, "list app_keys")
} else {
resp, err := client.Get().ListAppKeys(ctx, config.GetProjectName())
if err != nil {
return util.Error(err, "list app_keys failed")
if global {
resp, err := client.Get().ListGlobalAppKeys(ctx)
if err != nil {
return util.Error(err, "list app_keys failed")
}

err = util.PrettyJSON(resp)
util.Fatal(err, "list app_keys")
} else {
resp, err := client.Get().ListAppKeys(ctx, config.GetProjectName())
if err != nil {
return util.Error(err, "list app_keys failed")
}

err = util.PrettyJSON(resp)
util.Fatal(err, "list app_keys")
}

err = util.PrettyJSON(resp)
util.Fatal(err, "list app_keys")
}

return nil
Expand Down Expand Up @@ -235,9 +318,19 @@ var createNamespaceCmd = &cobra.Command{
},
}

func addGlobalAppKeyFlag(cmd *cobra.Command) {
cmd.Flags().BoolVarP(&global, "global", "g", false,
"App key is global. Can be used across projects. Suitable for automation.")
}

func init() {
alterAppKeyCmd.Flags().BoolVarP(&rotate, "rotate", "r", false, "Rotate app key secret")

addGlobalAppKeyFlag(alterAppKeyCmd)
addGlobalAppKeyFlag(createAppKeyCmd)
addGlobalAppKeyFlag(listAppKeysCmd)
addGlobalAppKeyFlag(dropAppKeyCmd)

addProjectFlag(dropAppKeyCmd)
addProjectFlag(createAppKeyCmd)
addProjectFlag(listAppKeysCmd)
Expand Down
20 changes: 13 additions & 7 deletions cmd/search.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import (

"github.com/spf13/cobra"
"github.com/tigrisdata/tigris-cli/client"
login "github.com/tigrisdata/tigris-cli/login"
"github.com/tigrisdata/tigris-cli/login"
"github.com/tigrisdata/tigris-cli/util"
"github.com/tigrisdata/tigris-client-go/driver"
"github.com/tigrisdata/tigris-client-go/search"
Expand All @@ -32,7 +32,7 @@ var (
searchFields []string
filter string
facet string
sort string
sort []string
includeFields []string
excludeFields []string
page int32
Expand Down Expand Up @@ -61,26 +61,32 @@ var dbSearchCmd = &cobra.Command{
%[1]s %[2]s -q "Alice" -f "firstName,lastName" --filter '{"age": {"$gt": 23}}' --facet '{"currentCity": {"size": 10}}'
# Sort the results by age in increasing order
%[1]s %[2]s -q "Alice" -f "firstName,lastName" --filter '{"age": {"$gt": 23}}' --facet '{"currentCity": {"size": 10}}' --sort '[{"age": "$asc"}]'
%[1]s %[2]s -q "Alice" -f "firstName,lastName" --filter '{"age": {"$gt": 23}}' --facet '{"currentCity": {"size": 10}}' --sort '{"age": "$asc"}'
# Exclude sensitive information from results
%[1]s %[2]s -q "Alice" -f "firstName,lastName" --filter '{"age": {"$gt": 23}}' --facet '{"currentCity": {"size": 10}}' --sort '[{"age": "$asc"}]' -x "phoneNumber,address"
%[1]s %[2]s -q "Alice" -f "firstName,lastName" --filter '{"age": {"$gt": 23}}' --facet '{"currentCity": {"size": 10}}' --sort '{"age": "$asc"}' -x "phoneNumber,address"
# Paginate the results, with 15 per page
%[1]s %[2]s -q "Alice" -f "firstName,lastName" --filter '{"age": {"$gt": 23}}' --facet '{"currentCity": {"size": 10}}' --sort '[{"age": "$asc"}]' -x "phoneNumber,address" -p 1 -c 15
%[1]s %[2]s -q "Alice" -f "firstName,lastName" --filter '{"age": {"$gt": 23}}' --facet '{"currentCity": {"size": 10}}' --sort '{"age": "$asc"}' -x "phoneNumber,address" -p 1 -c 15
# Find users with last name exactly matching "Wong"
%[1]s %[2]s --filter '{"lastName": "Wong"}'
`, rootCmd.Root().Name(), "search --project=testdb users"),
Args: cobra.MinimumNArgs(1),
Run: func(cmd *cobra.Command, args []string) {
login.Ensure(cmd.Context(), func(ctx context.Context) error {
var sortArr driver.SortOrder
if len(sort) > 0 {
for _, v := range sort {
sortArr = append(sortArr, json.RawMessage(v))
}
}
request := &driver.SearchRequest{
Q: query,
SearchFields: searchFields,
Filter: driver.Filter(filter),
Facet: driver.Facet(facet),
Sort: driver.SortOrder(sort),
Sort: sortArr,
IncludeFields: includeFields,
ExcludeFields: excludeFields,
Page: page,
Expand Down Expand Up @@ -117,7 +123,7 @@ func init() {
"comma separated value of fields to project search query against")
dbSearchCmd.Flags().StringVar(&filter, "filter", "{}", "further refine the search results using filters")
dbSearchCmd.Flags().StringVar(&facet, "facet", "{}", "retrieve aggregate ")
dbSearchCmd.Flags().StringVar(&sort, "sort", "[]", "order to sort the results")
dbSearchCmd.Flags().StringSliceVar(&sort, "sort", nil, "order to sort the results")
dbSearchCmd.Flags().StringSliceVarP(&includeFields, "includeFields", "i", []string{},
"comma separated value of document fields to include in results")
dbSearchCmd.Flags().StringSliceVarP(&excludeFields, "excludeFields", "x", []string{},
Expand Down
43 changes: 17 additions & 26 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ go 1.18

require (
github.com/coreos/go-oidc/v3 v3.5.0
github.com/docker/docker v23.0.3+incompatible
github.com/docker/docker v23.0.6+incompatible
github.com/docker/go-connections v0.4.0
github.com/docker/go-units v0.5.0
github.com/gertd/go-pluralize v0.2.1
Expand All @@ -14,39 +14,35 @@ require (
github.com/json-iterator/go v1.1.12
github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8
github.com/pkg/errors v0.9.1
github.com/rs/zerolog v1.29.0
github.com/rs/zerolog v1.29.1
github.com/schollz/progressbar/v3 v3.13.1
github.com/spf13/cobra v1.7.0
github.com/spf13/viper v1.15.0
github.com/stretchr/testify v1.8.2
github.com/tigrisdata/tigris-client-go v1.0.0-beta.27
golang.org/x/net v0.8.0
golang.org/x/oauth2 v0.6.0
github.com/tigrisdata/tigris-client-go v1.0.0-beta.37
golang.org/x/net v0.10.0
golang.org/x/oauth2 v0.7.0
gopkg.in/yaml.v2 v2.4.0
)

require (
cloud.google.com/go/compute v1.19.0 // indirect
cloud.google.com/go/compute v1.19.2 // indirect
cloud.google.com/go/compute/metadata v0.2.3 // indirect
github.com/Microsoft/go-winio v0.6.0 // indirect
github.com/ProtonMail/go-crypto v0.0.0-20230331115716-d34776aa93ec // indirect
github.com/Microsoft/go-winio v0.6.1 // indirect
github.com/ProtonMail/go-crypto v0.0.0-20230426101702-58e86b294756 // indirect
github.com/acomagu/bufpipe v1.0.4 // indirect
github.com/apapsch/go-jsonmerge/v2 v2.0.0 // indirect
github.com/cloudflare/circl v1.3.2 // indirect
github.com/cloudflare/circl v1.3.3 // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/deepmap/oapi-codegen v1.12.4 // indirect
github.com/docker/distribution v2.8.1+incompatible // indirect
github.com/emirpasic/gods v1.18.1 // indirect
github.com/fsnotify/fsnotify v1.6.0 // indirect
github.com/getkin/kin-openapi v0.115.0 // indirect
github.com/go-git/gcfg v1.5.0 // indirect
github.com/go-git/go-billy/v5 v5.4.1 // indirect
github.com/go-jose/go-jose/v3 v3.0.0 // indirect
github.com/go-openapi/jsonpointer v0.19.6 // indirect
github.com/go-openapi/swag v0.22.3 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/glog v1.1.1 // indirect
github.com/golang/mock v1.6.0 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/google/gnostic v0.6.9 // indirect
Expand All @@ -55,12 +51,9 @@ require (
github.com/hashicorp/hcl v1.0.0 // indirect
github.com/imdario/mergo v0.3.15 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/invopop/yaml v0.2.0 // indirect
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/kevinburke/ssh_config v1.2.0 // indirect
github.com/magiconair/properties v1.8.7 // indirect
github.com/mailru/easyjson v0.7.7 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.18 // indirect
github.com/mattn/go-runewidth v0.0.14 // indirect
Expand All @@ -69,12 +62,10 @@ require (
github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect
github.com/morikuni/aec v1.0.0 // indirect
github.com/opencontainers/go-digest v1.0.0 // indirect
github.com/opencontainers/image-spec v1.1.0-rc2 // indirect
github.com/opencontainers/image-spec v1.1.0-rc3 // indirect
github.com/pelletier/go-toml/v2 v2.0.7 // indirect
github.com/perimeterx/marshmallow v1.1.4 // indirect
github.com/pjbgf/sha1cd v0.3.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/rivo/uniseg v0.4.4 // indirect
Expand All @@ -88,15 +79,15 @@ require (
github.com/spf13/pflag v1.0.5 // indirect
github.com/subosito/gotenv v1.4.2 // indirect
github.com/xanzy/ssh-agent v0.3.3 // indirect
golang.org/x/crypto v0.7.0 // indirect
golang.org/x/crypto v0.8.0 // indirect
golang.org/x/mod v0.10.0 // indirect
golang.org/x/sys v0.7.0 // indirect
golang.org/x/term v0.7.0 // indirect
golang.org/x/text v0.8.0 // indirect
golang.org/x/tools v0.7.0 // indirect
golang.org/x/sys v0.8.0 // indirect
golang.org/x/term v0.8.0 // indirect
golang.org/x/text v0.9.0 // indirect
golang.org/x/tools v0.8.0 // indirect
google.golang.org/appengine v1.6.7 // indirect
google.golang.org/genproto v0.0.0-20230403163135-c38d8f061ccd // indirect
google.golang.org/grpc v1.54.0 // indirect
google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect
google.golang.org/grpc v1.55.0 // indirect
google.golang.org/protobuf v1.30.0 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/warnings.v0 v0.1.2 // indirect
Expand Down
Loading

0 comments on commit c33be05

Please sign in to comment.