Skip to content

Commit

Permalink
fix
Browse files Browse the repository at this point in the history
  • Loading branch information
renaynay committed Feb 19, 2025
1 parent 717c39c commit f65fc70
Show file tree
Hide file tree
Showing 4 changed files with 78 additions and 13 deletions.
52 changes: 51 additions & 1 deletion cmd/celestia/cmd_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,20 @@ package main
import (
"bytes"
"context"
"io"
"os"
"reflect"
"testing"

"github.com/cristalhq/jwt/v5"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"

"github.com/celestiaorg/celestia-node/api/rpc/perms"
"github.com/celestiaorg/celestia-node/header"
"github.com/celestiaorg/celestia-node/libs/authtoken"
"github.com/celestiaorg/celestia-node/libs/keystore"
nodemod "github.com/celestiaorg/celestia-node/nodebuilder/node"
)

func TestCompletionHelpString(t *testing.T) {
Expand Down Expand Up @@ -49,7 +56,7 @@ func TestLight(t *testing.T) {
output := &bytes.Buffer{}
rootCmd.SetOut(output)
rootCmd.SetArgs([]string{
"bridge",
"light",
"--node.store", ".celestia-light",
"init",
})
Expand Down Expand Up @@ -102,6 +109,49 @@ func TestBridge(t *testing.T) {
err := rootCmd.ExecuteContext(context.Background())
require.NoError(t, err)
})
// tests that auth admin token generated by node via CLI
// can be verified + contains expected perms
t.Run("auth", func(t *testing.T) {
rootCmd.SetOut(&bytes.Buffer{})
rootCmd.SetArgs([]string{
"bridge",
"--node.store", ".celestia-bridge",
"init",
})
err := rootCmd.ExecuteContext(context.Background())
require.NoError(t, err)

ogStdout := os.Stdout
r, w, _ := os.Pipe()
os.Stdout = w

rootCmd.SetArgs([]string{
"bridge",
"auth", "admin",
"--node.store", ".celestia-bridge",
})

err = rootCmd.ExecuteContext(context.Background())
require.NoError(t, err)

err = w.Close()
require.NoError(t, err)
os.Stdout = ogStdout

ks, err := keystore.NewFSKeystore(".celestia-bridge/keys", nil)
require.NoError(t, err)
key, err := ks.Get(nodemod.SecretName)
require.NoError(t, err)
verifier, err := jwt.NewVerifierHS(jwt.HS256, key.Body)
require.NoError(t, err)

token, err := io.ReadAll(r)
require.NoError(t, err)

permissions, err := authtoken.ExtractSignedPermissions(verifier, string(token))
require.NoError(t, err)
assert.Equal(t, permissions, perms.AllPerms)
})

t.Cleanup(func() {
if err := os.Chdir(testDir); err != nil {
Expand Down
14 changes: 11 additions & 3 deletions cmd/flags_node.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ const (
nodeConfigFlag = "node.config"
)

// NodeStoreFlag returns a flag set for setting the Node Store path.
func NodeStoreFlag() *flag.FlagSet {
flags := &flag.FlagSet{}

Expand Down Expand Up @@ -46,8 +45,7 @@ func NodeFlags() *flag.FlagSet {
return flags
}

// ParseNodeFlags parses Node flags from the given cmd and applies values to Env.
func ParseNodeFlags(ctx context.Context, cmd *cobra.Command, network p2p.Network) (context.Context, error) {
func ParseNodeStore(ctx context.Context, cmd *cobra.Command, network p2p.Network) (context.Context, error) {
store := cmd.Flag(nodeStoreFlag).Value.String()
if store == "" {
tp := NodeType(ctx)
Expand All @@ -57,7 +55,17 @@ func ParseNodeFlags(ctx context.Context, cmd *cobra.Command, network p2p.Network
return ctx, err
}
}

ctx = WithStorePath(ctx, store)
return ctx, nil
}

// ParseNodeFlags parses Node flags from the given cmd and applies values to Env.
func ParseNodeFlags(ctx context.Context, cmd *cobra.Command, network p2p.Network) (context.Context, error) {
ctx, err := ParseNodeStore(ctx, cmd, network)
if err != nil {
return ctx, err
}

nodeConfig := cmd.Flag(nodeConfigFlag).Value.String()
if nodeConfig != "" {
Expand Down
18 changes: 11 additions & 7 deletions cmd/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (

"github.com/celestiaorg/celestia-node/nodebuilder/core"
"github.com/celestiaorg/celestia-node/nodebuilder/gateway"
"github.com/celestiaorg/celestia-node/nodebuilder/header"
"github.com/celestiaorg/celestia-node/nodebuilder/node"
"github.com/celestiaorg/celestia-node/nodebuilder/p2p"
"github.com/celestiaorg/celestia-node/nodebuilder/pruner"
Expand All @@ -33,12 +34,7 @@ func createTopLevelCmd(
addFullFlags,
addMinFlags func(*cobra.Command, []*pflag.FlagSet),
) *cobra.Command {
minFlags := []*pflag.FlagSet{
NodeStoreFlag(),
p2p.NetworkFlag(),
}

flags := []*pflag.FlagSet{
fullFlags := []*pflag.FlagSet{
NodeFlags(),
p2p.Flags(),
MiscFlags(),
Expand All @@ -48,6 +44,14 @@ func createTopLevelCmd(
state.Flags(),
pruner.Flags(),
}
if nodeType != node.Bridge {
fullFlags = append(fullFlags, header.Flags())
}

minFlags := []*pflag.FlagSet{
NodeStoreFlag(),
p2p.NetworkFlag(),
}

cmd := &cobra.Command{
Use: fmt.Sprintf("%s [subcommand]", strings.ToLower(nodeType.String())),
Expand All @@ -59,7 +63,7 @@ func createTopLevelCmd(
},
}

addFullFlags(cmd, flags)
addFullFlags(cmd, fullFlags)
addMinFlags(cmd, minFlags)

return cmd
Expand Down
7 changes: 5 additions & 2 deletions cmd/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,12 +76,15 @@ func DecodeToBytes(param string) ([]byte, error) {
}

func ParseMinimumFlags(cmd *cobra.Command) error {
ctx := cmd.Context()

net, err := p2p.ParseNetwork(cmd)
if err != nil {
return err
}
ctx = WithNetwork(cmd.Context(), net)

ctx, err := ParseNodeFlags(cmd.Context(), cmd, net)
ctx, err = ParseNodeStore(cmd.Context(), cmd, net)
if err != nil {
return err
}
Expand All @@ -96,7 +99,7 @@ func PreRunEnv(cmd *cobra.Command, _ []string) error {
err error
)

nodeType := NodeType(cmd.Context())
nodeType := NodeType(ctx)

parsedNetwork, err := p2p.ParseNetwork(cmd)
if err != nil {
Expand Down

0 comments on commit f65fc70

Please sign in to comment.