mirror of
https://github.com/DeBrosOfficial/network.git
synced 2026-01-30 03:43:04 +00:00
- Updated the API gateway documentation to reflect changes in architecture and functionality, emphasizing its role as a multi-functional entry point for decentralized services. - Refactored CLI commands to utilize utility functions for better code organization and maintainability. - Introduced new utility functions for handling peer normalization, service management, and port validation, enhancing the overall CLI experience. - Added a new production installation script to streamline the setup process for users, including detailed dry-run summaries for better visibility. - Enhanced validation mechanisms for configuration files and swarm keys, ensuring robust error handling and user feedback during setup.
114 lines
3.0 KiB
Go
114 lines
3.0 KiB
Go
package utils
|
|
|
|
import (
|
|
"fmt"
|
|
"net"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"github.com/DeBrosOfficial/network/pkg/config"
|
|
"github.com/multiformats/go-multiaddr"
|
|
)
|
|
|
|
// ValidateGeneratedConfig loads and validates the generated node configuration
|
|
func ValidateGeneratedConfig(oramaDir string) error {
|
|
configPath := filepath.Join(oramaDir, "configs", "node.yaml")
|
|
|
|
// Check if config file exists
|
|
if _, err := os.Stat(configPath); os.IsNotExist(err) {
|
|
return fmt.Errorf("configuration file not found at %s", configPath)
|
|
}
|
|
|
|
// Load the config file
|
|
file, err := os.Open(configPath)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to open config file: %w", err)
|
|
}
|
|
defer file.Close()
|
|
|
|
var cfg config.Config
|
|
if err := config.DecodeStrict(file, &cfg); err != nil {
|
|
return fmt.Errorf("failed to parse config: %w", err)
|
|
}
|
|
|
|
// Validate the configuration
|
|
if errs := cfg.Validate(); len(errs) > 0 {
|
|
var errMsgs []string
|
|
for _, e := range errs {
|
|
errMsgs = append(errMsgs, e.Error())
|
|
}
|
|
return fmt.Errorf("configuration validation errors:\n - %s", strings.Join(errMsgs, "\n - "))
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// ValidateDNSRecord validates that the domain points to the expected IP address
|
|
// Returns nil if DNS is valid, warning message if DNS doesn't match but continues,
|
|
// or error if DNS lookup fails completely
|
|
func ValidateDNSRecord(domain, expectedIP string) error {
|
|
if domain == "" {
|
|
return nil // No domain provided, skip validation
|
|
}
|
|
|
|
ips, err := net.LookupIP(domain)
|
|
if err != nil {
|
|
// DNS lookup failed - this is a warning, not a fatal error
|
|
// The user might be setting up DNS after installation
|
|
fmt.Printf(" ⚠️ DNS lookup failed for %s: %v\n", domain, err)
|
|
fmt.Printf(" Make sure DNS is configured before enabling HTTPS\n")
|
|
return nil
|
|
}
|
|
|
|
// Check if any resolved IP matches the expected IP
|
|
for _, ip := range ips {
|
|
if ip.String() == expectedIP {
|
|
fmt.Printf(" ✓ DNS validated: %s → %s\n", domain, expectedIP)
|
|
return nil
|
|
}
|
|
}
|
|
|
|
// DNS doesn't point to expected IP - warn but continue
|
|
resolvedIPs := make([]string, len(ips))
|
|
for i, ip := range ips {
|
|
resolvedIPs[i] = ip.String()
|
|
}
|
|
fmt.Printf(" ⚠️ DNS mismatch: %s resolves to %v, expected %s\n", domain, resolvedIPs, expectedIP)
|
|
fmt.Printf(" HTTPS certificate generation may fail until DNS is updated\n")
|
|
return nil
|
|
}
|
|
|
|
// NormalizePeers normalizes and validates peer multiaddrs
|
|
func NormalizePeers(peersStr string) ([]string, error) {
|
|
if peersStr == "" {
|
|
return nil, nil
|
|
}
|
|
|
|
// Split by comma and trim whitespace
|
|
rawPeers := strings.Split(peersStr, ",")
|
|
peers := make([]string, 0, len(rawPeers))
|
|
seen := make(map[string]bool)
|
|
|
|
for _, peer := range rawPeers {
|
|
peer = strings.TrimSpace(peer)
|
|
if peer == "" {
|
|
continue
|
|
}
|
|
|
|
// Validate multiaddr format
|
|
if _, err := multiaddr.NewMultiaddr(peer); err != nil {
|
|
return nil, fmt.Errorf("invalid multiaddr %q: %w", peer, err)
|
|
}
|
|
|
|
// Deduplicate
|
|
if !seen[peer] {
|
|
peers = append(peers, peer)
|
|
seen[peer] = true
|
|
}
|
|
}
|
|
|
|
return peers, nil
|
|
}
|
|
|