package main import ( "log" "path" "github.com/dim13/acme" ) func startSolvers() (acme.Solvers, error) { httpSol, err := acme.NewHTTPSolver(*listen) if err != nil { return nil, err } tlsSol, err := acme.NewTLSSolver(*listenTLS) if err != nil { return nil, err } return acme.NewSolvers(httpSol, tlsSol), nil } func main() { log.Println("Scan files") crt, err := scanFiles(*baseDir) if err != nil { log.Fatal(err) } sol, err := startSolvers() if err != nil { log.Fatal(err) } for _, c := range crt { if c.IsValid(*graceTime) && !*force { log.Println("Skip", c) continue } csr, err := acme.NewCSR(c.PrivateKey, c.Leaf.DNSNames) if err != nil { log.Println(err) continue } _ = csr } if *email != "" && len(*domains) > 0 { key, err := acme.NewKey(*keySize) if err != nil { log.Fatal(err) } log.Println("Dial", *provider) prov, err := acme.DialProvider(*provider, key) if err != nil { log.Fatal(err) } var con acme.Contacts m, err := acme.NewMail(*email) if err != nil { log.Fatal(err) } con = append(con, m) log.Println("Register", con) err = prov.Register(con, agree) if err != nil { log.Fatal(err) } for _, domain := range *domains { log.Println("Authofize", domain) err := prov.Authorize(sol, domain) if err != nil { log.Fatal(err) } } log.Println("Request bundle for", *domains) cert, err := prov.Bundle(key, *domains) if err != nil { log.Fatal(err) } c := Cert{ Certificate: cert, sigFile: path.Join(*baseDir, "private", *email+".key"), keyFile: path.Join(*baseDir, "private", (*domains)[0]+".key"), crtFile: path.Join(*baseDir, "certs", (*domains)[0]+".pem"), } err = c.saveFiles() if err != nil { log.Fatal(err) } } } func agree(tos string) bool { log.Println("Agree to", tos) return true }