network/pkg/installer/steps/confirm.go
2026-01-20 10:03:55 +02:00

79 lines
1.9 KiB
Go

package steps
import (
"fmt"
"strings"
"github.com/charmbracelet/lipgloss"
)
// Confirm step for reviewing and confirming installation
type Confirm struct {
VpsIP string
Domain string
Branch string
NoPull bool
IsFirstNode bool
PeerDomain string
JoinAddress string
Peers []string
ClusterSecret string
SwarmKeyHex string
IPFSPeerID string
SNIWarning string
}
// View renders the confirmation step
func (c *Confirm) View() string {
var s strings.Builder
s.WriteString(titleStyle.Render("Confirm Installation") + "\n\n")
noPullStr := "Pull latest"
if c.NoPull {
noPullStr = "Skip git pull"
}
config := fmt.Sprintf(
" VPS IP: %s\n"+
" Domain: %s\n"+
" Branch: %s\n"+
" Git Pull: %s\n"+
" Node Type: %s\n",
c.VpsIP,
c.Domain,
c.Branch,
noPullStr,
map[bool]string{true: "First node (new cluster)", false: "Join existing cluster"}[c.IsFirstNode],
)
if !c.IsFirstNode {
config += fmt.Sprintf(" Peer Node: %s\n", c.PeerDomain)
config += fmt.Sprintf(" Join Addr: %s\n", c.JoinAddress)
if len(c.Peers) > 0 {
config += fmt.Sprintf(" Bootstrap: %s...\n", c.Peers[0][:40])
}
if len(c.ClusterSecret) >= 8 {
config += fmt.Sprintf(" Secret: %s...\n", c.ClusterSecret[:8])
}
if len(c.SwarmKeyHex) >= 8 {
config += fmt.Sprintf(" Swarm Key: %s...\n", c.SwarmKeyHex[:8])
}
if c.IPFSPeerID != "" {
config += fmt.Sprintf(" IPFS Peer: %s...\n", c.IPFSPeerID[:16])
}
}
s.WriteString(boxStyle.Render(config))
// Show SNI DNS warning if present
if c.SNIWarning != "" {
s.WriteString("\n\n")
warningStyle := lipgloss.NewStyle().Foreground(lipgloss.Color("#FFA500"))
s.WriteString(warningStyle.Render(c.SNIWarning))
}
s.WriteString("\n\n")
s.WriteString(helpStyle.Render("Press Enter to install • Esc to go back"))
return s.String()
}