2015-11-12 22:51:07 +00:00
|
|
|
package acme
|
|
|
|
|
|
|
|
import (
|
2016-01-27 01:01:58 +00:00
|
|
|
"crypto/rand"
|
2015-11-12 22:51:07 +00:00
|
|
|
"crypto/rsa"
|
|
|
|
"io/ioutil"
|
|
|
|
"testing"
|
2018-09-15 17:16:35 +00:00
|
|
|
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"github.com/stretchr/testify/require"
|
2015-11-12 22:51:07 +00:00
|
|
|
)
|
|
|
|
|
2015-12-05 14:53:53 +00:00
|
|
|
func TestHTTPChallenge(t *testing.T) {
|
2015-12-27 18:26:47 +00:00
|
|
|
mockValidate := func(_ *jws, _, _ string, chlng challenge) error {
|
2015-12-05 14:53:53 +00:00
|
|
|
uri := "http://localhost:23457/.well-known/acme-challenge/" + chlng.Token
|
2015-12-30 22:01:21 +00:00
|
|
|
resp, err := httpGet(uri)
|
2015-12-05 14:53:53 +00:00
|
|
|
if err != nil {
|
|
|
|
return err
|
2015-11-12 22:51:07 +00:00
|
|
|
}
|
2015-12-05 14:53:53 +00:00
|
|
|
defer resp.Body.Close()
|
2015-11-12 22:51:07 +00:00
|
|
|
|
2015-12-05 14:53:53 +00:00
|
|
|
if want := "text/plain"; resp.Header.Get("Content-Type") != want {
|
|
|
|
t.Errorf("Get(%q) Content-Type: got %q, want %q", uri, resp.Header.Get("Content-Type"), want)
|
2015-11-12 22:51:07 +00:00
|
|
|
}
|
|
|
|
|
2015-12-05 14:53:53 +00:00
|
|
|
body, err := ioutil.ReadAll(resp.Body)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
2015-11-12 22:51:07 +00:00
|
|
|
}
|
2015-12-05 14:53:53 +00:00
|
|
|
bodyStr := string(body)
|
2015-11-12 22:51:07 +00:00
|
|
|
|
2015-12-05 14:53:53 +00:00
|
|
|
if bodyStr != chlng.KeyAuthorization {
|
|
|
|
t.Errorf("Get(%q) Body: got %q, want %q", uri, bodyStr, chlng.KeyAuthorization)
|
2015-11-12 22:51:07 +00:00
|
|
|
}
|
|
|
|
|
2015-12-05 14:53:53 +00:00
|
|
|
return nil
|
2015-11-12 22:51:07 +00:00
|
|
|
}
|
|
|
|
|
2018-09-15 17:16:35 +00:00
|
|
|
privKey, err := rsa.GenerateKey(rand.Reader, 512)
|
|
|
|
require.NoError(t, err, "Could not generate test key")
|
|
|
|
|
|
|
|
solver := &httpChallenge{
|
|
|
|
jws: &jws{privKey: privKey},
|
|
|
|
validate: mockValidate,
|
|
|
|
provider: &HTTPProviderServer{port: "23457"},
|
2015-11-12 22:51:07 +00:00
|
|
|
}
|
2018-09-15 17:16:35 +00:00
|
|
|
|
|
|
|
clientChallenge := challenge{Type: string(HTTP01), Token: "http1"}
|
|
|
|
|
|
|
|
err = solver.Solve(clientChallenge, "localhost:23457")
|
|
|
|
assert.NoError(t, err)
|
2015-11-12 22:51:07 +00:00
|
|
|
}
|
|
|
|
|
2015-12-05 14:53:53 +00:00
|
|
|
func TestHTTPChallengeInvalidPort(t *testing.T) {
|
2018-09-15 17:16:35 +00:00
|
|
|
privKey, err := rsa.GenerateKey(rand.Reader, 128)
|
|
|
|
require.NoError(t, err, "Could not generate test key")
|
2015-12-05 14:53:53 +00:00
|
|
|
|
2018-09-15 17:16:35 +00:00
|
|
|
solver := &httpChallenge{
|
|
|
|
jws: &jws{privKey: privKey},
|
|
|
|
validate: stubValidate,
|
|
|
|
provider: &HTTPProviderServer{port: "123456"},
|
2015-11-12 22:51:07 +00:00
|
|
|
}
|
2018-09-15 17:16:35 +00:00
|
|
|
|
|
|
|
clientChallenge := challenge{Type: string(HTTP01), Token: "http2"}
|
|
|
|
|
|
|
|
err = solver.Solve(clientChallenge, "localhost:123456")
|
|
|
|
require.Error(t, err)
|
|
|
|
assert.Contains(t, err.Error(), "invalid port")
|
|
|
|
assert.Contains(t, err.Error(), "123456")
|
2015-11-12 22:51:07 +00:00
|
|
|
}
|