From e180142d73a37fcce5b4857ddef6e713f7ae2492 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Thu, 17 Dec 2015 15:50:01 +0100 Subject: Rename files --- cmd/acme/main.go | 112 ++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 86 insertions(+), 26 deletions(-) (limited to 'cmd/acme/main.go') diff --git a/cmd/acme/main.go b/cmd/acme/main.go index c9faa85..058eefb 100644 --- a/cmd/acme/main.go +++ b/cmd/acme/main.go @@ -1,47 +1,107 @@ package main import ( + "crypto/rand" + "crypto/rsa" + "crypto/x509" + "encoding/pem" "flag" + "io" + "io/ioutil" "log" + "os" + "path" "dim13.org/acme" ) -func must(err error) { +var confName = flag.String("conf", "acme.toml", "configuration file") + +func newKey(w io.Writer, size int) (*rsa.PrivateKey, error) { + key, err := rsa.GenerateKey(rand.Reader, size) if err != nil { - log.Fatal("must:", err) + return nil, err + } + block := &pem.Block{ + Type: "RSA PRIVATE KEY", + Bytes: x509.MarshalPKCS1PrivateKey(key), } + return key, pem.Encode(w, block) } -var ( - config = flag.String("config", "acme.toml", "configuration file") - port = flag.Int("port", 8443, "port to listen") -) +func chkKey(k PrivKey) (*rsa.PrivateKey, error) { + key := k.Path() + if _, err := os.Stat(key); os.IsNotExist(err) { + log.Println("allocating", key, k.Size()) + if err := os.MkdirAll(path.Dir(key), 0700); err != nil { + return nil, err + } + flags := os.O_WRONLY | os.O_CREATE | os.O_TRUNC + fd, err := os.OpenFile(key, flags, 0600) + if err != nil { + return nil, err + } + defer fd.Close() + return newKey(fd, k.Size()) + } else { + der, err := ioutil.ReadFile(key) + if err != nil { + return nil, err + } + block, _ := pem.Decode(der) + return x509.ParsePKCS1PrivateKey(block.Bytes) + } +} -func init() { - flag.Parse() +func chkKeys(c *Config) error { + var err error + for k, acc := range c.Account { + acc.key, err = chkKey(acc) + if err != nil { + return err + } + c.Account[k] = acc + } + for k, des := range c.Desire { + des.key, err = chkKey(des) + if err != nil { + return err + } + c.Desire[k] = des + } + return nil } func main() { - conf, err := acme.LoadConfig(*config) - must(err) - log.Printf("%+v\n", conf) - - for _, v := range conf.Desire { - acc := conf.Account[v.Account] - prov := conf.Provider[v.Provider] - a, err := acme.NewAccount(acc.Mail, acme.KeySize) - must(err) - - c, err := acme.NewClient(prov.Directory) - must(err) + flag.Parse() + conf, err := LoadConfig(*confName) + if err != nil { + log.Fatal(err) + } + err = chkKeys(conf) + if err != nil { + log.Fatal(err) + } - re, err := c.Register(a) - must(err) - log.Printf("%+v\n", re) + log.Println(conf) + for k, des := range conf.Desire { + log.Println(k, des.account) + } + return - re, err = c.Agree(a) - must(err) - log.Printf("%+v\n", re) + for k, des := range conf.Desire { + a, _ := acme.NewAccount(des.account.Mail, des.account.Phone, des.account.key) + log.Println(k, a) + c, err := acme.NewClient(des.provider.Directory) + if err != nil { + log.Println(err) + } + log.Println(k, c) + az, err := c.Authorize(a, des.Altnames[0]) + if err != nil { + log.Println(err) + } + log.Println(k, az) } + } -- cgit v1.2.3