package cli import ( "context" "encoding/json" "fmt" "log" "time" "git.dws.rip/dubey/kat/internal/store" ) // NodeRegistration represents the data stored in etcd for a node type NodeRegistration struct { UID string `json:"uid"` AdvertiseAddr string `json:"advertiseAddr"` WireguardPubKey string `json:"wireguardPubKey"` JoinTimestamp int64 `json:"joinTimestamp"` } // VerifyNodeRegistration checks if a node is registered in etcd func VerifyNodeRegistration(etcdStore store.StateStore, nodeName string) error { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() // Construct the key for the node registration nodeRegKey := fmt.Sprintf("/kat/nodes/registration/%s", nodeName) // Get the node registration from etcd kv, err := etcdStore.Get(ctx, nodeRegKey) if err != nil { return fmt.Errorf("failed to get node registration from etcd: %w", err) } // Parse the node registration var nodeReg NodeRegistration if err := json.Unmarshal(kv.Value, &nodeReg); err != nil { return fmt.Errorf("failed to parse node registration: %w", err) } // Print the node registration details log.Printf("Node Registration Details:") log.Printf(" Node Name: %s", nodeName) log.Printf(" Node UID: %s", nodeReg.UID) log.Printf(" Advertise Address: %s", nodeReg.AdvertiseAddr) log.Printf(" WireGuard Public Key: %s", nodeReg.WireguardPubKey) // Convert timestamp to human-readable format joinTime := time.Unix(nodeReg.JoinTimestamp, 0) log.Printf(" Join Timestamp: %s (%d)", joinTime.Format(time.RFC3339), nodeReg.JoinTimestamp) return nil }