mirror of
https://github.com/gosticks/simplecert.git
synced 2026-08-27 11:30:20 +00:00
97 lines
2.5 KiB
Go
97 lines
2.5 KiB
Go
//
|
|
// simplecert
|
|
//
|
|
// Created by Philipp Mieden
|
|
// Contact: dreadl0ck@protonmail.ch
|
|
// Copyright © 2018 bestbytes. All rights reserved.
|
|
//
|
|
|
|
package simplecert
|
|
|
|
import (
|
|
"log"
|
|
"strings"
|
|
|
|
"github.com/xenolf/lego/providers/dns"
|
|
|
|
"github.com/xenolf/lego/certcrypto"
|
|
"github.com/xenolf/lego/challenge/http01"
|
|
"github.com/xenolf/lego/challenge/tlsalpn01"
|
|
"github.com/xenolf/lego/lego"
|
|
"github.com/xenolf/lego/registration"
|
|
)
|
|
|
|
/*
|
|
* ACMEClient
|
|
*/
|
|
|
|
func createClient(u SSLUser) lego.Client {
|
|
|
|
// create lego config
|
|
config := lego.NewConfig(&u)
|
|
config.CADirURL = c.DirectoryURL
|
|
config.Certificate.KeyType = certcrypto.RSA4096
|
|
|
|
// Create a new client instance
|
|
client, err := lego.NewClient(config)
|
|
if err != nil {
|
|
log.Fatal("[FATAL] simplecert: failed to create client", err)
|
|
}
|
|
|
|
log.Println("[INFO] simplecert: client creation complete")
|
|
|
|
// -------------------------------------------
|
|
// HTTP & TLS Challenges
|
|
// -------------------------------------------
|
|
|
|
httpSlice := strings.Split(c.HTTPAddress, ":")
|
|
if len(httpSlice) != 2 {
|
|
log.Fatal("[FATAL] simplecert: invalid HTTP address: ", c.HTTPAddress)
|
|
}
|
|
tlsSlice := strings.Split(c.TLSAddress, ":")
|
|
if len(tlsSlice) != 2 {
|
|
log.Fatal("[FATAL] simplecert: invalid TLS address: ", c.TLSAddress)
|
|
}
|
|
|
|
// Set Endpoints
|
|
err = client.Challenge.SetHTTP01Provider(http01.NewProviderServer(httpSlice[0], httpSlice[1]))
|
|
if err != nil {
|
|
log.Fatal("[FATAL] simplecert: setting http challenge provider failed: ", err)
|
|
}
|
|
err = client.Challenge.SetTLSALPN01Provider(tlsalpn01.NewProviderServer(tlsSlice[0], tlsSlice[1]))
|
|
if err != nil {
|
|
log.Fatal("[FATAL] simplecert: setting tls challenge provider failed: ", err)
|
|
}
|
|
|
|
// -------------------------------------------
|
|
// DNS Challenge
|
|
// -------------------------------------------
|
|
|
|
if c.DNSProvider != "" {
|
|
p, err := dns.NewDNSChallengeProviderByName(c.DNSProvider)
|
|
if err != nil {
|
|
log.Fatal("[FATAL] simplecert: invalid dns provider specified in config: ", err)
|
|
}
|
|
|
|
client.Challenge.SetDNS01Provider(p)
|
|
if err != nil {
|
|
log.Fatal("[FATAL] simplecert: setting dns challenge provider failed: ", err)
|
|
}
|
|
}
|
|
|
|
// register if necessary
|
|
if u.Registration == nil {
|
|
|
|
// Register Client and agree to TOS
|
|
reg, err := client.Registration.Register(registration.RegisterOptions{TermsOfServiceAgreed: true})
|
|
if err != nil {
|
|
log.Fatal("[FATAL] simplecert: failed to register client: ", err)
|
|
}
|
|
u.Registration = reg
|
|
log.Println("[INFO] simplecert: client registration complete: ", client)
|
|
saveUserToDisk(u, c.CacheDir)
|
|
}
|
|
|
|
return *client
|
|
}
|