Files
certman/main.go

179 lines
4.3 KiB
Go

package main
import (
"context"
"fmt"
"os"
"sync"
"github.com/spf13/cobra"
)
var version = "1.0.0"
var build = "2"
var (
configFile string
ctx context.Context
cancel context.CancelFunc
wg sync.WaitGroup
)
//TODO create logic for gh vs gt repos
func main() {
rootCmd := &cobra.Command{
Use: "certman",
Short: "CertMan",
Long: "Certificate Manager",
RunE: func(cmd *cobra.Command, args []string) error {
return cmd.Help()
},
}
rootCmd.PersistentFlags().StringVarP(&configFile, "config", "c", "/etc/certman/certman.conf", "Configuration file")
rootCmd.AddCommand(basicCmd("version", "Show version", versionCmd))
rootCmd.AddCommand(basicCmd("gen-key", "Generates encryption key", newKeyCmd))
rootCmd.AddCommand(basicCmd("dev", "Dev Function", devCmd))
var domainCertDir string
newDomainCmd := &cobra.Command{
Use: "new-domain",
Short: "Create config and directories for new domain",
Args: cobra.ExactArgs(1),
SilenceUsage: true,
SilenceErrors: true,
RunE: func(cmd *cobra.Command, args []string) error {
dirOverridden := cmd.Flags().Changed("dir")
return newDomain(args[0], domainCertDir, dirOverridden)
},
}
newDomainCmd.Flags().StringVar(&domainCertDir, "dir", "/var/local/certman/certificates/", "Alternate directory for certificates")
rootCmd.AddCommand(newDomainCmd)
var (
modeFlag string
thinInstallFlag bool
)
installCmd := &cobra.Command{
Use: "install",
Short: "Create certman files and directories",
RunE: func(cmd *cobra.Command, args []string) error {
switch modeFlag {
case "server", "client":
return install(thinInstallFlag, modeFlag)
default:
return fmt.Errorf("invalid --mode %q (must be server or client)", modeFlag)
}
},
}
installCmd.Flags().StringVar(&modeFlag, "mode", "client", "CertManager mode [server, client]")
installCmd.Flags().BoolVarP(&thinInstallFlag, "thin", "t", false, "Thin install (skip creating dirs)")
rootCmd.AddCommand(installCmd)
daemonCmd := &cobra.Command{
Use: "daemon",
Short: "Daemon management",
RunE: func(cmd *cobra.Command, args []string) error {
return cmd.Help()
},
}
daemonCmd.AddCommand(&cobra.Command{
Use: "start",
Short: "Start the daemon",
Args: cobra.NoArgs,
RunE: func(cmd *cobra.Command, args []string) error {
return runDaemonCmd()
},
})
daemonCmd.AddCommand(&cobra.Command{
Use: "stop",
Short: "Stop the daemon",
Args: cobra.NoArgs,
RunE: func(cmd *cobra.Command, args []string) error {
return stopDaemonCmd()
},
})
daemonCmd.AddCommand(&cobra.Command{
Use: "reload",
Short: "Reload daemon configs",
Args: cobra.NoArgs,
RunE: func(cmd *cobra.Command, args []string) error {
return reloadDaemonCmd()
},
})
daemonCmd.AddCommand(&cobra.Command{
Use: "status",
Short: "Show daemon status",
Args: cobra.NoArgs,
RunE: func(cmd *cobra.Command, args []string) error {
return statusDaemonCmd()
},
})
rootCmd.AddCommand(daemonCmd)
if err := rootCmd.Execute(); err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
}
func basicCmd(use, short string, commandFunc func(cmd *cobra.Command, args []string)) *cobra.Command {
return &cobra.Command{
Use: use,
Short: short,
Run: commandFunc,
}
}
// case "gen":
// {
// url := createGiteaRepo(domain)
// if url == "" {
// return
// }
// gitWorkspace.Repo, gitWorkspace.WorkTree = cloneRepo(url, gitWorkspace)
// if gitWorkspace.Repo == nil {
// return
// }
// cmd = exec.Command("lego", legoNewSiteArgs...)
// }
// case "renew":
// {
// gitWorkspace.Repo, gitWorkspace.WorkTree = cloneRepo(config.GetAsString("Git.server")+"/"+config.GetAsString("Git.org_name")+"/"+domain+"-certificates.git", gitWorkspace)
// if gitWorkspace.Repo == nil {
// return
// }
// cmd = exec.Command("lego", legoRenewSiteArgs...)
// }
// case "gen-cert-only":
// {
// cmd = exec.Command("lego", legoNewSiteArgs...)
// }
// case "renew-cert-only":
// {
// cmd = exec.Command("lego", legoRenewSiteArgs...)
// }
// case "git":
// {
// url := createGiteaRepo(domain)
// if url == "" {
// return
// }
// gitWorkspace.Repo, gitWorkspace.WorkTree = cloneRepo(url, gitWorkspace)
// if gitWorkspace.Repo == nil {
// return
// }
// err := addAndPushCerts(domain, gitWorkspace)
// if err != nil {
// return
// }
// os.Exit(0)
// }