Gitfed
bastien-mrq/gitfed / cmd / gitfed-install / screens_network.go
package main

import (
	"strconv"
	"strings"
)

func (m model) viewDomain() string {
	var b strings.Builder
	b.WriteString(styleInputLabel.Render("DOMAINE DE CETTE INSTANCE") + "\n")
	b.WriteString(m.domainInput.View() + "\n")
	b.WriteString(styleHint.Render("C'est l'adresse que tes collaborateurs utiliseront pour cloner et se connecter.") + "\n\n")

	b.WriteString(styleInputLabel.Render("EMAIL DE CONTACT") + "\n")
	b.WriteString(m.contactInput.View() + "\n")
	b.WriteString(styleHint.Render("Sert uniquement aux alertes d'expiration de certificat Let's Encrypt.") + "\n\n")

	if !m.publicIPDone {
		b.WriteString(m.spin.View() + " " + styleMuted.Render("détection de l'IP publique…"))
	} else if m.publicIP != "" {
		b.WriteString(row(glyph(statusOK), "IP publique détectée automatiquement", m.publicIP) + "\n\n")
		b.WriteString(styleMuted.Render("→ Ajoute un enregistrement DNS A pour ton domaine vers cette IP,\n  maintenant ou pendant qu'on continue — on vérifiera à l'étape suivante."))
	} else {
		b.WriteString(styleWarn.Render("!") + " " + styleMuted.Render("IP publique non détectée automatiquement (pas de sortie internet directe ?) — pas bloquant, ajoute simplement le bon enregistrement DNS toi-même."))
	}

	return stylePanel.Render(b.String())
}

func (m model) viewDNS() string {
	var b strings.Builder
	domain := m.domainInput.Value()

	if m.dnsChecking {
		b.WriteString(m.spin.View() + " " + styleBody.Render("Résolution de "+domain+"…"))
		return stylePanel.Render(b.String())
	}

	if !m.dnsChecked {
		return stylePanel.Render(styleMuted.Render("En attente…"))
	}

	if !m.dns.Resolved {
		b.WriteString(row(glyph(statusWarn), domain, "ne résout pas encore") + "\n\n")
		b.WriteString(styleMuted.Render(errString(m.dns.Err)) + "\n\n")
	} else if m.dns.Matches {
		b.WriteString(row(glyph(statusOK), domain+" → "+strings.Join(m.dns.Addresses, ", "), "résolu") + "\n\n")
		b.WriteString(styleBody.Render("Correspond à l'IP de cette machine — le certificat pourra être délivré à l'étape 4."))
		return stylePanel.Render(b.String())
	} else {
		b.WriteString(row(glyph(statusWarn), domain+" → "+strings.Join(m.dns.Addresses, ", "), "ne correspond pas à "+m.publicIP) + "\n\n")
	}

	if m.dnsRetryIn > 0 {
		b.WriteString(styleMuted.Render(fmtRetry(m.dnsRetryIn)))
	}
	return stylePanel.Render(b.String())
}

func fmtRetry(seconds int) string {
	return "La propagation DNS peut prendre quelques minutes. Nouvel essai dans " + strconv.Itoa(seconds) + "s… (r : revérifier maintenant, i : ignorer et continuer quand même)"
}

func errString(err error) string {
	if err == nil {
		return ""
	}
	return err.Error()
}