Skip to content

Commit

Permalink
Revert "Tags are now case-sensitive, describe account lists tags asso…
Browse files Browse the repository at this point in the history
…ciated with the account (#668)"

This reverts commit 2931e19.
  • Loading branch information
aricart committed Oct 10, 2024
1 parent 26cd02f commit 5da83a3
Show file tree
Hide file tree
Showing 10 changed files with 30 additions and 134 deletions.
1 change: 0 additions & 1 deletion cmd/editaccount.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,6 @@ func createEditAccount() *cobra.Command {
return RunAction(cmd, args, params)
},
}
cmd.Flags().BoolVarP(&params.strictTags, "strict-tags", "", false, "allow tags to be case-sensitive, default false")
cmd.Flags().StringSliceVarP(&params.tags, "tag", "", nil, "add tags for user - comma separated list or option can be specified multiple times")
cmd.Flags().StringSliceVarP(&params.rmTags, "rm-tag", "", nil, "remove tag - comma separated list or option can be specified multiple times")
params.conns = -1
Expand Down
41 changes: 8 additions & 33 deletions cmd/editaccount_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ func Test_EditAccount(t *testing.T) {
{createEditAccount(), []string{"edit", "account"}, nil, []string{"specify an edit option"}, true},
{createEditAccount(), []string{"edit", "account", "--info-url", "http://foo/bar"}, nil, []string{"changed info url to"}, false},
{createEditAccount(), []string{"edit", "account", "--description", "my account is about this"}, nil, []string{"changed description to"}, false},
{createEditAccount(), []string{"edit", "account", "--tag", "a", "--name", "A"}, nil, []string{"edited account \"A\""}, false},
{createEditAccount(), []string{"edit", "account", "--tag", "A", "--name", "A"}, nil, []string{"edited account \"A\""}, false},
}

tests.Run(t, "root", "edit")
Expand All @@ -60,7 +60,7 @@ func Test_EditAccount_Tag(t *testing.T) {
defer ts.Done(t)

ts.AddAccount(t, "A")
_, _, err := ExecuteCmd(createEditAccount(), "--tag", "a,b,c")
_, _, err := ExecuteCmd(createEditAccount(), "--tag", "A,B,C")
require.NoError(t, err)

ac, err := ts.Store.ReadAccountClaim("A")
Expand All @@ -75,17 +75,17 @@ func Test_EditAccount_RmTag(t *testing.T) {
defer ts.Done(t)

ts.AddAccount(t, "A")
_, _, err := ExecuteCmd(createEditAccount(), "--tag", "A,B,C", "--strict-tags")
_, _, err := ExecuteCmd(createEditAccount(), "--tag", "A,B,C")
require.NoError(t, err)

_, _, err = ExecuteCmd(createEditAccount(), "--rm-tag", "A,B", "--strict-tags")
_, _, err = ExecuteCmd(createEditAccount(), "--rm-tag", "A,B")
require.NoError(t, err)

ac, err := ts.Store.ReadAccountClaim("A")
require.NoError(t, err)

require.Len(t, ac.Tags, 1)
require.ElementsMatch(t, ac.Tags, []string{"C"})
require.ElementsMatch(t, ac.Tags, []string{"c"})
}

func Test_EditAccount_Times(t *testing.T) {
Expand Down Expand Up @@ -380,17 +380,17 @@ func Test_EditSysAccount(t *testing.T) {
for idx, n := range jsOptions {
flag := fmt.Sprintf("--%s", n)
if idx > 0 {
_, _, err = ExecuteCmd(createEditAccount(), "SYS", "--tag", "a", flag, "1")
_, _, err = ExecuteCmd(createEditAccount(), "SYS", "--tag", "A", flag, "1")
require.Error(t, err)
require.Contains(t, err.Error(), flag)
} else {
_, _, err = ExecuteCmd(createEditAccount(), "SYS", "--tag", "a", flag)
_, _, err = ExecuteCmd(createEditAccount(), "SYS", "--tag", "A", flag)
require.Error(t, err)
require.Contains(t, err.Error(), flag)
}
}
// defaults are removed automatically
_, _, err = ExecuteCmd(createEditAccount(), "SYS", "--tag", "a")
_, _, err = ExecuteCmd(createEditAccount(), "SYS", "--tag", "A")
require.NoError(t, err)
}

Expand Down Expand Up @@ -524,28 +524,3 @@ func Test_EnableTierNoOtherFlag(t *testing.T) {
require.Error(t, err)
require.Equal(t, "rm-js-tier is exclusive of all other js options", err.Error())
}

func TestEditAccountStrictTags(t *testing.T) {
ts := NewTestStore(t, "O")
defer ts.Done(t)

ts.AddAccount(t, "A")

_, _, err := ExecuteCmd(createEditAccount(), "--tag", "a")
require.NoError(t, err)

_, _, err = ExecuteCmd(createEditAccount(), "--rm-tag", "A")
require.Error(t, err)
require.Contains(t, err.Error(), "--rm-tag \"A\" is not lowercased")

_, _, err = ExecuteCmd(createEditAccount(), "--rm-tag", "A", "--strict-tags")
require.Error(t, err)
require.Contains(t, err.Error(), "unable to remove tag: \"A\" - not found")

_, _, err = ExecuteCmd(createEditAccount(), "--tag", "A", "--strict-tags")
require.NoError(t, err)

uc, err := ts.Store.ReadAccountClaim("A")
require.NoError(t, err)
require.True(t, uc.Tags.Equals(&jwt.TagList{"A", "a"}))
}
1 change: 0 additions & 1 deletion cmd/editoperator.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ func createEditOperatorCmd() *cobra.Command {
}
params.signingKeys.BindFlags("sk", "", nkeys.PrefixByteOperator, cmd)
cmd.Flags().StringSliceVarP(&params.rmSigningKeys, "rm-sk", "", nil, "remove signing key - comma separated list or option can be specified multiple times")
cmd.Flags().BoolVarP(&params.strictTags, "strict-tags", "", false, "allow tags to be case-sensitive, default false")
cmd.Flags().StringSliceVarP(&params.tags, "tag", "", nil, "add tags for user - comma separated list or option can be specified multiple times")
cmd.Flags().StringSliceVarP(&params.rmTags, "rm-tag", "", nil, "remove tag - comma separated list or option can be specified multiple times")
cmd.Flags().StringVarP(&params.asu, "account-jwt-server-url", "u", "", "set account jwt server url for nsc sync (only http/https or nats service (nats/tls/ws/wss) urls supported if updating with nsc)")
Expand Down
28 changes: 1 addition & 27 deletions cmd/editoperator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ func Test_EditOperator(t *testing.T) {
{createEditOperatorCmd(), []string{"edit", "operator", "--sk"}, nil, []string{"flag needs an argument"}, true},
{createEditOperatorCmd(), []string{"edit", "operator", "--sk", "SAADOZRUTPZS6LIXS6CSSSW5GXY3DNMQMSDTVWHQNHQTIBPGNSADSMBPEU"}, nil, []string{"invalid operator signing key"}, true},
{createEditOperatorCmd(), []string{"edit", "operator", "--sk", "OBMWGGURAFWMH3AFDX65TVIH4ZYSL7UKZ3LOH2ZRWIAU7PGZ3IJNR6W5"}, nil, []string{"edited operator"}, false},
{createEditOperatorCmd(), []string{"edit", "operator", "--tag", "o", "--start", "2019-04-13", "--expiry", "2050-01-01"}, nil, []string{"edited operator"}, false},
{createEditOperatorCmd(), []string{"edit", "operator", "--tag", "O", "--start", "2019-04-13", "--expiry", "2050-01-01"}, nil, []string{"edited operator"}, false},
{createEditOperatorCmd(), []string{"edit", "operator", "--require-signing-keys"}, nil, []string{"needs to be issued with a signing key first"}, true},
}

Expand Down Expand Up @@ -420,29 +420,3 @@ func Test_CannotSetRequireSKWithoutSK(t *testing.T) {
require.False(t, oc.StrictSigningKeyUsage)
require.Empty(t, oc.SigningKeys)
}

func TestEditOperatorStrictTags(t *testing.T) {
ts := NewTestStore(t, "O")
defer ts.Done(t)

_, _, err := ExecuteCmd(createEditOperatorCmd(), "--tag", "A")
require.Error(t, err)

_, _, err = ExecuteCmd(createEditOperatorCmd(), "--tag", "a")
require.NoError(t, err)

_, _, err = ExecuteCmd(createEditOperatorCmd(), "--rm-tag", "A")
require.Error(t, err)
require.Contains(t, err.Error(), "--rm-tag \"A\" is not lowercased")

_, _, err = ExecuteCmd(createEditOperatorCmd(), "--rm-tag", "A", "--strict-tags")
require.Error(t, err)
require.Contains(t, err.Error(), "unable to remove tag: \"A\" - not found")

_, _, err = ExecuteCmd(createEditOperatorCmd(), "--tag", "A", "--strict-tags")
require.NoError(t, err)

oc, err := ts.Store.ReadOperatorClaim()
require.NoError(t, err)
require.True(t, oc.Tags.Equals(&jwt.TagList{"A", "a"}))
}
1 change: 0 additions & 1 deletion cmd/edituser.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,6 @@ nsc edit user --name <n> --rm-response-perms
return RunAction(cmd, args, &params)
},
}
cmd.Flags().BoolVarP(&params.strictTags, "strict-tags", "", false, "allow tags to be case-sensitive, default false")
cmd.Flags().StringSliceVarP(&params.tags, "tag", "", nil, "add tags for user - comma separated list or option can be specified multiple times")
cmd.Flags().StringSliceVarP(&params.rmTags, "rm-tag", "", nil, "remove tag - comma separated list or option can be specified multiple times")
cmd.Flags().StringVarP(&params.name, "name", "n", "", "user name")
Expand Down
44 changes: 8 additions & 36 deletions cmd/edituser_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,11 @@
package cmd

import (
"github.com/nats-io/nsc/v2/cmd/store"
"strings"
"testing"
"time"

"github.com/nats-io/nsc/v2/cmd/store"

"github.com/nats-io/nkeys"

cli "github.com/nats-io/cliprompts/v2"
Expand All @@ -39,13 +38,12 @@ func Test_EditUser(t *testing.T) {

tests := CmdTests{
{createEditUserCmd(), []string{"edit", "user"}, nil, []string{"specify an edit option"}, true},
{createEditUserCmd(), []string{"edit", "user", "--tag", "A", "--account", "A"}, nil, []string{"--tag \"A\" is not lowercased"}, true},
{createEditUserCmd(), []string{"edit", "user", "--tag", "a", "--account", "A"}, nil, []string{"edited user \"a\""}, false},
{createEditUserCmd(), []string{"edit", "user", "--tag", "A", "--account", "A"}, nil, []string{"edited user \"a\""}, false},
{createEditUserCmd(), []string{"edit", "user", "--conn-type", "MQTT", "--rm-conn-type", "LEAFNODE", "--account", "A"}, nil, []string{"added connection type MQTT", "added connection type MQTT"}, false},
{createEditUserCmd(), []string{"edit", "user", "--conn-type", "LEAFNODE_WS", "--account", "A"}, nil, []string{"added connection type LEAFNODE_WS"}, false},
{createEditUserCmd(), []string{"edit", "user", "--conn-type", "MQTT_WS", "--account", "A"}, nil, []string{"added connection type MQTT_WS"}, false},
{createEditUserCmd(), []string{"edit", "user", "--tag", "b", "--account", "B"}, nil, []string{"user name is required"}, true},
{createEditUserCmd(), []string{"edit", "user", "--tag", "b", "--account", "B", "--name", "bb"}, nil, []string{"edited user \"bb\""}, false},
{createEditUserCmd(), []string{"edit", "user", "--tag", "B", "--account", "B"}, nil, []string{"user name is required"}, true},
{createEditUserCmd(), []string{"edit", "user", "--tag", "B", "--account", "B", "--name", "bb"}, nil, []string{"edited user \"bb\""}, false},
}

tests.Run(t, "root", "edit")
Expand Down Expand Up @@ -109,25 +107,25 @@ func Test_EditUser_Tag(t *testing.T) {
defer ts.Done(t)

ts.AddUser(t, "A", "a")
_, _, err := ExecuteCmd(createEditUserCmd(), "--tag", "A,B,C", "--strict-tags")
_, _, err := ExecuteCmd(createEditUserCmd(), "--tag", "A,B,C")
require.NoError(t, err)

cc, err := ts.Store.ReadUserClaim("A", "a")
require.NoError(t, err)
require.NotNil(t, cc)

require.Len(t, cc.Tags, 3)
require.ElementsMatch(t, cc.Tags, []string{"A", "B", "C"})
require.ElementsMatch(t, cc.Tags, []string{"a", "b", "c"})

_, _, err = ExecuteCmd(createEditUserCmd(), "--rm-tag", "A,B", "--strict-tags")
_, _, err = ExecuteCmd(createEditUserCmd(), "--rm-tag", "A,B")
require.NoError(t, err)

cc, err = ts.Store.ReadUserClaim("A", "a")
require.NoError(t, err)
require.NotNil(t, cc)

require.Len(t, cc.Tags, 1)
require.ElementsMatch(t, cc.Tags, []string{"C"})
require.ElementsMatch(t, cc.Tags, []string{"c"})

}

Expand Down Expand Up @@ -597,29 +595,3 @@ func Test_EditUserConnectionDeleteCase(t *testing.T) {
require.NoError(t, err)
require.Len(t, claim.AllowedConnectionTypes, 0)
}

func TestEditUserStrictTags(t *testing.T) {
ts := NewTestStore(t, "O")
defer ts.Done(t)

ts.AddAccount(t, "A")
ts.AddUser(t, "A", "U")

_, _, err := ExecuteCmd(createEditUserCmd(), "--tag", "a")
require.NoError(t, err)

_, _, err = ExecuteCmd(createEditUserCmd(), "--rm-tag", "A")
require.Error(t, err)
require.Contains(t, err.Error(), "--rm-tag \"A\" is not lowercased")

_, _, err = ExecuteCmd(createEditUserCmd(), "--rm-tag", "A", "--strict-tags")
require.Error(t, err)
require.Contains(t, err.Error(), "unable to remove tag: \"A\" - not found")

_, _, err = ExecuteCmd(createEditUserCmd(), "--tag", "A", "--strict-tags")
require.NoError(t, err)

uc, err := ts.Store.ReadUserClaim("A", "U")
require.NoError(t, err)
require.True(t, uc.Tags.Equals(&jwt.TagList{"A", "a"}))
}
30 changes: 5 additions & 25 deletions cmd/genericclaimparams.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,8 @@ import (
// GenericClaimsParams - TimeParams and tags
type GenericClaimsParams struct {
TimeParams
tags []string
rmTags []string
strictTags bool
tags []string
rmTags []string
}

func (sp *GenericClaimsParams) Edit(current []string) error {
Expand Down Expand Up @@ -101,21 +100,6 @@ func (sp *GenericClaimsParams) Valid() error {
if err := sp.TimeParams.Validate(); err != nil {
return err
}
if !sp.strictTags {
for _, t := range sp.tags {
tt := strings.ToLower(t)
if t != tt {
return fmt.Errorf("--tag %q is not lowercased, specify option --strict-tags to honor non-lowercased values", t)
}
}
for _, t := range sp.rmTags {
tt := strings.ToLower(t)
if t != tt {
return fmt.Errorf("--rm-tag %q is not lowercased, specify option --strict-tags", t)
}
}
}

return nil
}

Expand Down Expand Up @@ -161,19 +145,15 @@ func (sp *GenericClaimsParams) Run(ctx ActionCtx, claim jwt.Claims, r *store.Rep
}

tags.Add(sp.tags...)
if err := tags.Remove(sp.rmTags...); err != nil {
return err
}
tags.Remove(sp.rmTags...)
sort.Strings(*tags)

if r != nil {
for _, t := range sp.tags {
t = strings.TrimSpace(t)
r.AddOK("added tag %q", t)
r.AddOK("added tag %q", strings.ToLower(t))
}
for _, t := range sp.rmTags {
t = strings.TrimSpace(t)
r.AddOK("removed tag %q", t)
r.AddOK("removed tag %q", strings.ToLower(t))
}
}
return nil
Expand Down
7 changes: 3 additions & 4 deletions cmd/push_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ func Test_SyncOK(t *testing.T) {
ts.AddAccount(t, "A")

// edit the jwt
_, _, err = ExecuteCmd(createEditAccount(), "--tag", "A", "--strict-tags")
_, _, err = ExecuteCmd(createEditAccount(), "--tag", "A")
require.NoError(t, err)

// sync the store
Expand All @@ -50,8 +50,7 @@ func Test_SyncOK(t *testing.T) {
// verify the tag was stored
ac, err := ts.Store.ReadAccountClaim("A")
require.NoError(t, err)
require.Contains(t, ac.Tags, "A")
require.True(t, ac.Tags.Contains("A"))
require.Contains(t, ac.Tags, "a")
}

func Test_SyncNoURL(t *testing.T) {
Expand Down Expand Up @@ -121,7 +120,7 @@ func Test_SyncManualServer(t *testing.T) {
ts.AddAccount(t, "A")

// edit the jwt
_, _, err = ExecuteCmd(createEditAccount(), "--tag", "a")
_, _, err = ExecuteCmd(createEditAccount(), "--tag", "A")
require.NoError(t, err)

// sync the store
Expand Down
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ require (
github.com/mitchellh/go-homedir v1.1.0
github.com/nats-io/cliprompts/v2 v2.0.0-20231014115920-801ca035562a
github.com/nats-io/jsm.go v0.1.2
github.com/nats-io/jwt/v2 v2.7.0
github.com/nats-io/jwt/v2 v2.6.1-0.20240917143920-d3fa85bd725f
github.com/nats-io/nats-server/v2 v2.10.18
github.com/nats-io/nats.go v1.37.0
github.com/nats-io/nkeys v0.4.7
Expand All @@ -24,7 +24,7 @@ require (

require (
github.com/AlecAivazis/survey/v2 v2.3.7 // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.5 // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/fatih/color v1.17.0 // indirect
github.com/google/go-github/v30 v30.1.0 // indirect
Expand Down
7 changes: 3 additions & 4 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,8 @@ github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdn
github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
github.com/briandowns/spinner v1.23.1 h1:t5fDPmScwUjozhDj4FA46p5acZWIPXYE30qW2Ptu650=
github.com/briandowns/spinner v1.23.1/go.mod h1:LaZeM4wm2Ywy6vO571mvhQNRcWfRUnXOs0RcKV0wYKM=
github.com/cpuguy83/go-md2man/v2 v2.0.4 h1:wfIWP927BUkWJb2NmU/kNDYIBTh/ziUX91+lVfRxZq4=
github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/cpuguy83/go-md2man/v2 v2.0.5 h1:ZtcqGrnekaHpVLArFSe4HK5DoKx1T0rq2DwVB0alcyc=
github.com/cpuguy83/go-md2man/v2 v2.0.5/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/creack/pty v1.1.17 h1:QeVUsEDNrLBW4tMgZHvxy18sKtr6VI492kBhUfhDJNI=
github.com/creack/pty v1.1.17/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
Expand Down Expand Up @@ -70,8 +69,8 @@ github.com/nats-io/cliprompts/v2 v2.0.0-20231014115920-801ca035562a h1:28qvB6peS
github.com/nats-io/cliprompts/v2 v2.0.0-20231014115920-801ca035562a/go.mod h1:oweZn7AeaVJYKlNHfCIhznJVsdySLSng55vfuINE/d0=
github.com/nats-io/jsm.go v0.1.2 h1:T4Fq88a03sPAPWYwrOLQ85oanYsC2Bs6517rUiWBMpQ=
github.com/nats-io/jsm.go v0.1.2/go.mod h1:tnubE70CAKi5TNfQiq6XHFqWTuSIe1H7X4sDwfq6ZK8=
github.com/nats-io/jwt/v2 v2.7.0 h1:J+ZnaaMGQi3xSB8iOhVM5ipiWCDrQvgEoitTwWFyOYw=
github.com/nats-io/jwt/v2 v2.7.0/go.mod h1:ZdWS1nZa6WMZfFwwgpEaqBV8EPGVgOTDHN/wTbz0Y5A=
github.com/nats-io/jwt/v2 v2.6.1-0.20240917143920-d3fa85bd725f h1:izYA+fDsvJ71/nlCRmaDFPEhVpmumWx0aSNE00b+00I=
github.com/nats-io/jwt/v2 v2.6.1-0.20240917143920-d3fa85bd725f/go.mod h1:ZdWS1nZa6WMZfFwwgpEaqBV8EPGVgOTDHN/wTbz0Y5A=
github.com/nats-io/nats-server/v2 v2.10.18 h1:tRdZmBuWKVAFYtayqlBB2BuCHNGAQPvoQIXOKwU3WSM=
github.com/nats-io/nats-server/v2 v2.10.18/go.mod h1:97Qyg7YydD8blKlR8yBsUlPlWyZKjA7Bp5cl3MUE9K8=
github.com/nats-io/nats.go v1.37.0 h1:07rauXbVnnJvv1gfIyghFEo6lUcYRY0WXc3x7x0vUxE=
Expand Down

0 comments on commit 5da83a3

Please sign in to comment.