aboutsummaryrefslogtreecommitdiff
path: root/provider.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-01-12 16:50:42 +0100
committerDimitri Sokolyuk <demon@dim13.org>2016-01-12 16:50:42 +0100
commit590982ab2f9f70dd59af19997e7888daa2a911bd (patch)
tree8134528561e166bfea0ce782f61d2b8e5aca523b /provider.go
parent3c70d4c70cc99d30df86fa074b7b2c3c1cd054dc (diff)
Split
Diffstat (limited to 'provider.go')
-rw-r--r--provider.go65
1 files changed, 39 insertions, 26 deletions
diff --git a/provider.go b/provider.go
index 4e69783..0266281 100644
--- a/provider.go
+++ b/provider.go
@@ -188,6 +188,36 @@ func (p *Provider) Register(s Signer, c Contacts) error {
return err
}
+func (p *Provider) solve(s ThumbSigner, ch Challenge) error {
+ thumb, err := s.Thumb()
+ if err != nil {
+ return err
+ }
+ ka := ch.Token + "." + thumb
+ r := &Challenge{
+ Resource: ResChallenge,
+ Type: ch.Type,
+ KeyAuthorization: ka,
+ }
+ ns, err := p.postJson(ch.URI, s, r)
+ if err != nil {
+ return err
+ }
+ err = ch.Solve(ch.Token, ka)
+ if err != nil {
+ return err
+ }
+ var done bool
+ for !done {
+ done, err = p.queryStatus(ns.Location)
+ if err != nil {
+ return err
+ }
+ time.Sleep(time.Second)
+ }
+ return nil
+}
+
func (p *Provider) Authorize(s ThumbSigner, d *Desire) error {
for _, domain := range d.altnames {
r := &Authorization{
@@ -201,33 +231,9 @@ func (p *Provider) Authorize(s ThumbSigner, d *Desire) error {
}
for _, ch := range d.Pick(r) {
- ka, _ := KeyAuthorization(s, ch.Token)
-
- ans := &Challenge{
- Resource: ResChallenge,
- Type: ch.Type,
- KeyAuthorization: ka,
- }
-
- ns, err := p.postJson(ch.URI, s, ans)
- if err != nil {
+ if err = p.solve(s, ch); err != nil {
return err
}
-
- //err = d.solver[ch.Type].Solve(ch.Token, ka)
- err = ch.Solve(ch.Token, ka)
- if err != nil {
- return err
- }
-
- var done bool
- for !done {
- done, err = p.queryStatus(ns.Location)
- if err != nil {
- return err
- }
- time.Sleep(time.Second)
- }
}
}
return nil
@@ -241,7 +247,14 @@ func (p *Provider) queryStatus(url string) (bool, error) {
return false, err
}
log.Println("status", r.Status)
- return r.Status == StatusValid, nil
+ switch r.Status {
+ case StatusValid:
+ return true, nil
+ case StatusPending:
+ return false, nil
+ default:
+ return false, errStatus
+ }
}
func (p *Provider) newCert(uri string, s Signer, d *Desire) (*x509.Certificate, nextStep, error) {