aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-03-10 01:01:12 +0100
committerDimitri Sokolyuk <demon@dim13.org>2016-03-10 01:01:12 +0100
commit80eeb7b2cc04989c4df93792ca4fcf1d2ee7adb5 (patch)
treea6fe5780b784de24db9e5bf38991c4da6cc78dd8
parenta9990066cfc70f3137d00fe792f4fd6c09846101 (diff)
Poor men concurency
-rw-r--r--authorize.go15
-rw-r--r--cmd/acme/main.go45
-rw-r--r--solve_http.go2
-rw-r--r--solve_tls.go2
4 files changed, 38 insertions, 26 deletions
diff --git a/authorize.go b/authorize.go
index d86dec8..54b682d 100644
--- a/authorize.go
+++ b/authorize.go
@@ -44,7 +44,7 @@ func (a Authorization) Supported(sol map[ChalType]Solver) []Challenge {
return nil
}
-func (p *Provider) authorize(s Signer, domain string, sol map[ChalType]Solver) error {
+func (p *Provider) Authorize(s Signer, d *Desire, domain string) error {
req := &Authorization{
Resource: ResNewAuthz,
Identifier: Identifier{
@@ -59,17 +59,8 @@ func (p *Provider) authorize(s Signer, domain string, sol map[ChalType]Solver) e
if err := parseJson(resp, req); err != nil {
return err
}
- for _, ch := range req.Supported(sol) {
- if err := p.Solve(s, ch, sol[ch.Type]); err != nil {
- return err
- }
- }
- return nil
-}
-
-func (p *Provider) Authorize(s Signer, d *Desire) error {
- for _, domain := range d.altnames {
- if err := p.authorize(s, domain, d.solver); err != nil {
+ for _, ch := range req.Supported(d.solver) {
+ if err := p.Solve(s, ch, d.solver[ch.Type]); err != nil {
return err
}
}
diff --git a/cmd/acme/main.go b/cmd/acme/main.go
index d0a0fd2..478192b 100644
--- a/cmd/acme/main.go
+++ b/cmd/acme/main.go
@@ -4,6 +4,7 @@ package main
import (
"flag"
"log"
+ "sync"
"dim13.org/acme"
)
@@ -20,11 +21,17 @@ func dialProvider(p provider) error {
if err != nil {
return err
}
+ wg := sync.WaitGroup{}
for _, a := range p.Account {
- if err := loadAccount(prov, a); err != nil {
- return err
- }
- }
+ wg.Add(1)
+ go func(a account) {
+ defer wg.Done()
+ if err := loadAccount(prov, a); err != nil {
+ log.Println(err)
+ }
+ }(a)
+ }
+ wg.Wait()
return nil
}
@@ -59,11 +66,17 @@ func loadAccount(prov *acme.Provider, a account) error {
}
}
+ wg := sync.WaitGroup{}
for _, d := range a.Domain {
- if err := requestCert(prov, acc, d); err != nil {
- return err
- }
- }
+ wg.Add(1)
+ go func(d domain) {
+ defer wg.Done()
+ if err := requestCert(prov, acc, d); err != nil {
+ log.Println(err)
+ }
+ }(d)
+ }
+ wg.Wait()
return nil
}
@@ -92,12 +105,20 @@ func requestCert(prov *acme.Provider, acc *acme.Account, d domain) error {
des.RegisterSolver(tlsSol)
}
- log.Println("Authorize", d.Altnames)
- if err := prov.Authorize(acc, des); err != nil {
- return err
+ wg := sync.WaitGroup{}
+ for _, an := range d.Altnames {
+ wg.Add(1)
+ go func(an string) {
+ defer wg.Done()
+ log.Println("Authorize", an)
+ if err := prov.Authorize(acc, des, an); err != nil {
+ log.Println(err)
+ }
+ }(an)
}
+ wg.Wait()
- log.Println("Request bundle")
+ log.Println("Request bundle for", d.Altnames)
cert, err := prov.Bundle(acc, des)
if err != nil {
return err
diff --git a/solve_http.go b/solve_http.go
index 2b9a4a6..e218ee3 100644
--- a/solve_http.go
+++ b/solve_http.go
@@ -23,7 +23,7 @@ func NewHTTPSolver(addr string) (Solver, error) {
func (s *httpSolver) Solve(ch Challenge) error {
s.Do(func() { go s.ListenAndServe() })
p := path.Join(WellKnown, ch.Token)
- log.Println("solve http", p)
+ log.Println("Solve http", p)
http.HandleFunc(p, func(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, ch.KeyAuthorization)
})
diff --git a/solve_tls.go b/solve_tls.go
index 8dbf496..e1ae3a9 100644
--- a/solve_tls.go
+++ b/solve_tls.go
@@ -84,7 +84,7 @@ func newCert(domain string) (tls.Certificate, error) {
func (s *tlsSolver) Solve(ch Challenge) error {
s.Do(func() { go s.ListenAndServeTLS("", "") })
name := ch.SNIName()
- log.Println("solve tls", name)
+ log.Println("Solve tls", name)
crt, err := newCert(name)
if err != nil {
return err