Merge pull request #35 from xenolf/caurl

Don't try appending /directory to caURL
This commit is contained in:
xenolf 2015-11-21 01:17:45 +01:00
commit 6a803c6265
2 changed files with 16 additions and 18 deletions

View file

@ -52,13 +52,14 @@ type Client struct {
solvers map[string]solver solvers map[string]solver
} }
// NewClient creates a new client for the set user. // NewClient creates a new ACME client on behalf of user. The client will depend on
// caURL - The root url to the boulder instance you want certificates from // the ACME directory located at caDirURL for the rest of its actions. It will
// usr - A filled in user struct // generate private keys for certificates of size keyBits. And, if the challenge
// keyBits - Size of the key in bits // type requires it, the client will open a port at optPort to solve the challenge.
// optPort - The alternative port to listen on for challenges. // If optPort is blank, the port required by the spec will be used, but you must
func NewClient(caURL string, usr User, keyBits int, optPort string) (*Client, error) { // forward the required port to optPort for the challenge to succeed.
privKey := usr.GetPrivateKey() func NewClient(caDirURL string, user User, keyBits int, optPort string) (*Client, error) {
privKey := user.GetPrivateKey()
if privKey == nil { if privKey == nil {
return nil, errors.New("private key was nil") return nil, errors.New("private key was nil")
} }
@ -67,12 +68,9 @@ func NewClient(caURL string, usr User, keyBits int, optPort string) (*Client, er
return nil, fmt.Errorf("invalid private key: %v", err) return nil, fmt.Errorf("invalid private key: %v", err)
} }
if !strings.HasSuffix(caURL, "/directory") { dirResp, err := http.Get(caDirURL)
caURL = caURL + "/directory"
}
dirResp, err := http.Get(caURL)
if err != nil { if err != nil {
return nil, fmt.Errorf("get directory at '%s': %v", caURL, err) return nil, fmt.Errorf("get directory at '%s': %v", caDirURL, err)
} }
defer dirResp.Body.Close() defer dirResp.Body.Close()
@ -95,7 +93,7 @@ func NewClient(caURL string, usr User, keyBits int, optPort string) (*Client, er
return nil, errors.New("directory missing revoke certificate URL") return nil, errors.New("directory missing revoke certificate URL")
} }
jws := &jws{privKey: privKey, directoryURL: caURL} jws := &jws{privKey: privKey, directoryURL: caDirURL}
// REVIEW: best possibility? // REVIEW: best possibility?
// Add all available solvers with the right index as per ACME // Add all available solvers with the right index as per ACME
@ -103,7 +101,7 @@ func NewClient(caURL string, usr User, keyBits int, optPort string) (*Client, er
solvers := make(map[string]solver) solvers := make(map[string]solver)
solvers["http-01"] = &httpChallenge{jws: jws, optPort: optPort} solvers["http-01"] = &httpChallenge{jws: jws, optPort: optPort}
return &Client{directory: dir, user: usr, jws: jws, keyBits: keyBits, solvers: solvers}, nil return &Client{directory: dir, user: user, jws: jws, keyBits: keyBits, solvers: solvers}, nil
} }
// Register the current account to the ACME server. // Register the current account to the ACME server.

View file

@ -43,19 +43,19 @@ func TestNewClient(t *testing.T) {
t.Errorf("Expected keyBits to be %d but was %d", keyBits, client.keyBits) t.Errorf("Expected keyBits to be %d but was %d", keyBits, client.keyBits)
} }
if expected, actual := 2, len(client.solvers); actual != expected { if expected, actual := 1, len(client.solvers); actual != expected {
t.Fatalf("Expected %d solver(s), got %d", expected, actual) t.Fatalf("Expected %d solver(s), got %d", expected, actual)
} }
httpSolver, ok := client.solvers["http-01"].(*httpChallenge) httpSolver, ok := client.solvers["http-01"].(*httpChallenge)
if !ok { if !ok {
t.Fatal("Expected simpleHttps solver to be simpleHTTPChallenge type") t.Fatal("Expected http-01 solver to be httpChallenge type")
} }
if httpSolver.jws != client.jws { if httpSolver.jws != client.jws {
t.Error("Expected simpleHTTPChallenge to have same jws as client") t.Error("Expected http-01 to have same jws as client")
} }
if httpSolver.optPort != optPort { if httpSolver.optPort != optPort {
t.Errorf("Expected simpleHTTPChallenge to have optPort %s but was %s", optPort, httpSolver.optPort) t.Errorf("Expected http-01 to have optPort %s but was %s", optPort, httpSolver.optPort)
} }
} }