mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-06-07 04:53:44 +02:00
Locator CLI plumbing.
This commit is contained in:
parent
d70cfe6850
commit
441f4986ac
5 changed files with 63 additions and 12 deletions
|
@ -122,7 +122,7 @@ func Cert(basePath string, authTokenGenerator func() string, args []string, json
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
signingIdentity := readIdentity(args[2])
|
signingIdentity := cliGetIdentityOrFatal(args[2])
|
||||||
if signingIdentity == nil {
|
if signingIdentity == nil {
|
||||||
pErr("unable to read identity from %s", args[2])
|
pErr("unable to read identity from %s", args[2])
|
||||||
return 1
|
return 1
|
||||||
|
|
|
@ -55,7 +55,7 @@ func Identity(args []string) int {
|
||||||
|
|
||||||
case "getpublic":
|
case "getpublic":
|
||||||
if len(args) == 2 {
|
if len(args) == 2 {
|
||||||
fmt.Println(readIdentity(args[1]).String())
|
fmt.Println(cliGetIdentityOrFatal(args[1]).String())
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
pErr("no identity specified")
|
pErr("no identity specified")
|
||||||
|
@ -63,7 +63,7 @@ func Identity(args []string) int {
|
||||||
|
|
||||||
case "fingerprint":
|
case "fingerprint":
|
||||||
if len(args) == 2 {
|
if len(args) == 2 {
|
||||||
fmt.Println(readIdentity(args[1]).Fingerprint().String())
|
fmt.Println(cliGetIdentityOrFatal(args[1]).Fingerprint().String())
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
pErr("no identity specified")
|
pErr("no identity specified")
|
||||||
|
@ -71,7 +71,7 @@ func Identity(args []string) int {
|
||||||
|
|
||||||
case "validate":
|
case "validate":
|
||||||
if len(args) == 2 {
|
if len(args) == 2 {
|
||||||
if readIdentity(args[1]).LocallyValidate() {
|
if cliGetIdentityOrFatal(args[1]).LocallyValidate() {
|
||||||
fmt.Println("VALID")
|
fmt.Println("VALID")
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
@ -81,7 +81,7 @@ func Identity(args []string) int {
|
||||||
|
|
||||||
case "sign", "verify":
|
case "sign", "verify":
|
||||||
if len(args) > 2 {
|
if len(args) > 2 {
|
||||||
id := readIdentity(args[1])
|
id := cliGetIdentityOrFatal(args[1])
|
||||||
msg, err := ioutil.ReadFile(args[2])
|
msg, err := ioutil.ReadFile(args[2])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
pErr("unable to read input file: %s", err.Error())
|
pErr("unable to read input file: %s", err.Error())
|
||||||
|
|
|
@ -13,6 +13,11 @@
|
||||||
|
|
||||||
package cli
|
package cli
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"zerotier/pkg/zerotier"
|
||||||
|
)
|
||||||
|
|
||||||
func Locator(args []string) int {
|
func Locator(args []string) int {
|
||||||
if len(args) < 1 {
|
if len(args) < 1 {
|
||||||
Help()
|
Help()
|
||||||
|
@ -22,10 +27,54 @@ func Locator(args []string) int {
|
||||||
switch args[0] {
|
switch args[0] {
|
||||||
|
|
||||||
case "new":
|
case "new":
|
||||||
|
if len(args) < 3 {
|
||||||
|
Help()
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
id := cliGetIdentityOrFatal(args[1])
|
||||||
|
if !id.HasPrivate() {
|
||||||
|
pErr("identity must include secret key to sign locator")
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
var eps []*zerotier.Endpoint
|
||||||
|
for i:=2;i<len(args);i++ {
|
||||||
|
ep, err := zerotier.NewEndpointFromString(args[i])
|
||||||
|
if err != nil {
|
||||||
|
pErr("invalid endpoint: %s (%s)", args[i], err.Error())
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
eps = append(eps, ep)
|
||||||
|
}
|
||||||
|
loc, err := zerotier.NewLocator(zerotier.TimeMs(), eps, id)
|
||||||
|
if err != nil {
|
||||||
|
pErr("error creating or signing locator: %s", err.Error())
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
fmt.Println(loc.String())
|
||||||
|
|
||||||
case "verify":
|
case "verify":
|
||||||
|
if len(args) != 3 {
|
||||||
|
Help()
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
id := cliGetIdentityOrFatal(args[1])
|
||||||
|
loc := cliGetLocatorOrFatal(args[2])
|
||||||
|
if !loc.Validate(id) {
|
||||||
|
fmt.Println("FAILED")
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
fmt.Println("OK")
|
||||||
|
|
||||||
case "show":
|
case "show":
|
||||||
|
if len(args) != 2 {
|
||||||
|
Help()
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
loc := cliGetLocatorOrFatal(args[1])
|
||||||
|
fmt.Printf("%s %s\n",loc.Fingerprint.Address.String(),loc.Fingerprint.String())
|
||||||
|
for _, e := range loc.Endpoints {
|
||||||
|
fmt.Printf("\t%s\n",e.String())
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -160,7 +160,7 @@ func parseAddressFingerprintOrIdentity(s string) (a zerotier.Address, fp *zeroti
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func readIdentity(s string) *zerotier.Identity {
|
func cliGetIdentityOrFatal(s string) *zerotier.Identity {
|
||||||
if strings.ContainsRune(s, ':') {
|
if strings.ContainsRune(s, ':') {
|
||||||
id, _ := zerotier.NewIdentityFromString(s)
|
id, _ := zerotier.NewIdentityFromString(s)
|
||||||
if id != nil {
|
if id != nil {
|
||||||
|
@ -169,18 +169,18 @@ func readIdentity(s string) *zerotier.Identity {
|
||||||
}
|
}
|
||||||
idData, err := ioutil.ReadFile(s)
|
idData, err := ioutil.ReadFile(s)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("FATAL: identity '%s' cannot be parsed as file or literal: %s", s, err.Error())
|
pErr("identity '%s' cannot be parsed as file or literal: %s", s, err.Error())
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
id, err := zerotier.NewIdentityFromString(string(idData))
|
id, err := zerotier.NewIdentityFromString(string(idData))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("FATAL: identity '%s' cannot be parsed as file or literal: %s", s, err.Error())
|
pErr("identity '%s' cannot be parsed as file or literal: %s", s, err.Error())
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
return id
|
return id
|
||||||
}
|
}
|
||||||
|
|
||||||
func readLocator(s string) *zerotier.Locator {
|
func cliGetLocatorOrFatal(s string) *zerotier.Locator {
|
||||||
if strings.ContainsRune(s, '@') {
|
if strings.ContainsRune(s, '@') {
|
||||||
loc, _ := zerotier.NewLocatorFromString(s)
|
loc, _ := zerotier.NewLocatorFromString(s)
|
||||||
if loc != nil {
|
if loc != nil {
|
||||||
|
@ -189,12 +189,12 @@ func readLocator(s string) *zerotier.Locator {
|
||||||
}
|
}
|
||||||
locData, err := ioutil.ReadFile(s)
|
locData, err := ioutil.ReadFile(s)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("FATAL: locator '%s' cannot be parsed as file or literal: %s", s, err.Error())
|
pErr("locator '%s' cannot be parsed as file or literal: %s", s, err.Error())
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
loc, err := zerotier.NewLocatorFromString(string(locData))
|
loc, err := zerotier.NewLocatorFromString(string(locData))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("FATAL: locator '%s' cannot be parsed as file or literal: %s", s, err.Error())
|
pErr("locator '%s' cannot be parsed as file or literal: %s", s, err.Error())
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
return loc
|
return loc
|
||||||
|
|
|
@ -550,7 +550,7 @@ func (n *Node) DeleteCertificate(serialNo []byte) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------------------------------------------------------------------------------
|
/********************************************************************************************************************/
|
||||||
|
|
||||||
func (n *Node) runMaintenance() {
|
func (n *Node) runMaintenance() {
|
||||||
n.localConfigLock.RLock()
|
n.localConfigLock.RLock()
|
||||||
|
@ -775,6 +775,8 @@ func (n *Node) handleTrace(traceMessage string) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/********************************************************************************************************************/
|
||||||
|
|
||||||
// These are callbacks called by the core and GoGlue stuff to talk to the
|
// These are callbacks called by the core and GoGlue stuff to talk to the
|
||||||
// service. These launch goroutines to do their work where possible to
|
// service. These launch goroutines to do their work where possible to
|
||||||
// avoid blocking anything in the core.
|
// avoid blocking anything in the core.
|
||||||
|
|
Loading…
Add table
Reference in a new issue