From 3152ba00eed77d6ba8415edea2bc2833ef79a010 Mon Sep 17 00:00:00 2001 From: "Richard T. Carback III" <rick.carback@gmail.com> Date: Thu, 28 Jan 2021 22:24:05 +0000 Subject: [PATCH] Add initial getndf command --- cmd/getndf.go | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 cmd/getndf.go diff --git a/cmd/getndf.go b/cmd/getndf.go new file mode 100644 index 000000000..515ec5669 --- /dev/null +++ b/cmd/getndf.go @@ -0,0 +1,91 @@ +/////////////////////////////////////////////////////////////////////////////// +// Copyright © 2020 xx network SEZC // +// // +// Use of this source code is governed by a license that can be found in the // +// LICENSE file // +/////////////////////////////////////////////////////////////////////////////// + +// Package cmd initializes the CLI and config parsers as well as the logger. +package cmd + +import ( + "fmt" + "github.com/spf13/cobra" + jww "github.com/spf13/jwalterweatherman" + "github.com/spf13/viper" + // "gitlab.com/elixxir/client/interfaces/contact" + // "gitlab.com/elixxir/client/interfaces/message" + // "gitlab.com/elixxir/client/switchboard" + // "gitlab.com/elixxir/client/ud" + // "gitlab.com/elixxir/primitives/fact" + "gitlab.com/elixxir/comms/client" + "gitlab.com/xx_network/comms/connect" + //"time" + pb "gitlab.com/elixxir/comms/mixmessages" + "gitlab.com/xx_network/primitives/id" + "gitlab.com/xx_network/primitives/utils" +) + +const opensslCertDL = ("openssl s_client -showcerts -connect ip:port < " + + "/dev/null 2>&1 | openssl x509 -outform PEM > certfile.pem") + +// getNDFCmd user discovery subcommand, allowing user lookup and registration for +// allowing others to search. +// This basically runs a client for these functions with the UD module enabled. +// Normally, clients don't need it so it is not loaded for the rest of the +// commands. +var getNDFCmd = &cobra.Command{ + Use: "getndf", + Short: ("Download the network definition file from the network " + + "and print it."), + Args: cobra.NoArgs, + Run: func(cmd *cobra.Command, args []string) { + gwHost := viper.GetString("gwhost") + certPath := viper.GetString("cert") + + // Load the certificate + var cert []byte + if certPath != "" { + cert, _ = utils.ReadFile(certPath) + } + if len(cert) == 0 { + jww.FATAL.Panicf("Could not load a certificate, "+ + "provide a certificate file with --cert.\n\n"+ + "You can download a cert using openssl:\n\n%s", + opensslCertDL) + } + params := connect.GetDefaultHostParams() + params.AuthEnabled = false + comms, _ := client.NewClientComms(nil, nil, nil, nil) + host, _ := connect.NewHost(&id.TempGateway, gwHost, cert, params) + pollMsg := &pb.GatewayPoll{ + Partial: &pb.NDFHash{ + Hash: nil, + }, + LastUpdate: uint64(0), + ClientID: id.DummyUser.Marshal(), + } + resp, err := comms.SendPoll(host, pollMsg) + if err != nil { + jww.FATAL.Panicf("Unable to poll %s for NDF: %+v", + gwHost, err) + return + } + + fmt.Printf("%s", resp.PartialNDF.Ndf) + }, +} + +func init() { + getNDFCmd.Flags().StringP("gwhost", "", "", + "Poll this gateway host:port for the NDF") + viper.BindPFlag("gwhost", + getNDFCmd.Flags().Lookup("gwhost")) + + getNDFCmd.Flags().StringP("cert", "", "", + "Check with the TLS certificate at this path") + viper.BindPFlag("cert", + getNDFCmd.Flags().Lookup("cert")) + + rootCmd.AddCommand(getNDFCmd) +} -- GitLab