local-ip.sh/cmd/root.go

99 lines
2.7 KiB
Go
Raw Normal View History

2024-07-21 20:59:32 +00:00
package cmd
import (
"fmt"
"net/url"
"strings"
"github.com/go-acme/lego/v4/lego"
"github.com/spf13/cobra"
"github.com/spf13/viper"
"local-ip.sh/utils"
)
var command = &cobra.Command{
Use: "local-ip.sh",
PreRun: func(cmd *cobra.Command, args []string) {
staging, err := cmd.Flags().GetBool("staging")
if err != nil {
utils.Logger.Fatal().Err(err).Msg("Unexpected error")
}
nameservers, err := cmd.Flags().GetString("nameservers")
if err != nil {
utils.Logger.Fatal().Err(err).Msg("Unexpected error")
}
viper.Set("NameServers", strings.Split(nameservers, ","))
var caDir string
if staging {
caDir = lego.LEDirectoryStaging
} else {
caDir = lego.LEDirectoryProduction
}
viper.Set("CADirURL", caDir)
parsedCaDirUrl, _ := url.Parse(caDir)
caDirHostname := parsedCaDirUrl.Hostname()
email := viper.GetString("Email")
viper.Set("AccountFilePath", fmt.Sprintf("./.lego/accounts/%s/%s/account.json", caDirHostname, email))
viper.Set("KeyFilePath", fmt.Sprintf("./.lego/accounts/%s/%s/keys/%s.key", caDirHostname, email, email))
utils.InitConfig()
},
Run: func(cmd *cobra.Command, args []string) {
c := utils.GetConfig()
fmt.Printf("%#v\n", c)
fmt.Println(c)
// n := xip.NewXip()
// go func() {
// account := certs.LoadAccount()
// certsClient := certs.NewCertsClient(n, account)
// time.Sleep(5 * time.Second)
// certsClient.RequestCertificates()
// for {
// // try to renew certificate every day
// time.Sleep(24 * time.Hour)
// certsClient.RequestCertificates()
// }
// }()
// go http.ServeHttp()
// n.StartServer()
},
}
func Execute() {
command.Flags().Uint("dns-port", 53, "Port for the DNS server")
viper.BindPFlag("dns-port", command.Flags().Lookup("dns-port"))
command.Flags().Uint("http-port", 80, "Port for the HTTP server")
viper.BindPFlag("http-port", command.Flags().Lookup("http-port"))
command.Flags().Uint("https-port", 443, "Port for the HTTPS server")
viper.BindPFlag("https-port", command.Flags().Lookup("https-port"))
command.Flags().Bool("staging", false, "Enable to use the Let's Encrypt staging environment to obtain certificates")
viper.BindPFlag("staging", command.Flags().Lookup("staging"))
command.Flags().String("domain", "", "Root domain (required)")
command.MarkFlagRequired("domain")
viper.BindPFlag("domain", command.Flags().Lookup("domain"))
command.Flags().String("email", "", "ACME account email address (required)")
command.MarkFlagRequired("email")
viper.BindPFlag("email", command.Flags().Lookup("email"))
command.Flags().String("nameservers", "", "List of nameservers separated by commas")
command.MarkFlagRequired("nameservers")
if err := command.Execute(); err != nil {
utils.Logger.Fatal().Err(err).Msg("")
}
}