Replace GetChallenge call in acmechallenge controller to

GetAuthorization

Signed-off-by: joshvanl <vleeuwenjoshua@gmail.com>
This commit is contained in:
joshvanl
2021-09-15 16:05:37 +01:00
parent fcf379d6e9
commit f83f02cc8b
2 changed files with 75 additions and 3 deletions
+14 -1
View File
@@ -18,6 +18,7 @@ package acmechallenges
import (
"context"
"errors"
"fmt"
acmeapi "golang.org/x/crypto/acme"
@@ -300,11 +301,23 @@ func (c *controller) syncChallengeStatus(ctx context.Context, cl acmecl.Interfac
return fmt.Errorf("challenge URL is blank - challenge has not been created yet")
}
acmeChallenge, err := cl.GetChallenge(ctx, ch.Spec.URL)
acmeAuthorization, err := cl.GetAuthorization(ctx, ch.Spec.AuthorizationURL)
if err != nil {
return err
}
var acmeChallenge *acmeapi.Challenge
for _, challenge := range acmeAuthorization.Challenges {
if challenge.URI == ch.Spec.URL {
acmeChallenge = challenge
break
}
}
if acmeChallenge == nil {
return errors.New("challenge was not present in authorization")
}
// TODO: should we validate the State returned by the ACME server here?
cmState := cmacme.State(acmeChallenge.Status)
// be nice to our users and check if there is an error that we
+61 -2
View File
@@ -86,6 +86,61 @@ func TestSyncHappyPath(t *testing.T) {
)
tests := map[string]testT{
"if GetAuthorization doesn't return challenge, error": {
challenge: gen.ChallengeFrom(baseChallenge,
gen.SetChallengeProcessing(true),
gen.SetChallengeURL("testurl"),
),
builder: &testpkg.Builder{
CertManagerObjects: []runtime.Object{gen.ChallengeFrom(baseChallenge,
gen.SetChallengeProcessing(true),
gen.SetChallengeURL("testurl"),
), testIssuerHTTP01Enabled},
ExpectedActions: []testpkg.Action{},
},
expectErr: true,
acmeClient: &acmecl.FakeACME{
FakeGetAuthorization: func(ctx context.Context, url string) (*acmeapi.Authorization, error) {
return &acmeapi.Authorization{
Challenges: []*acmeapi.Challenge{
{URI: "foo", Status: acmeapi.StatusPending},
},
}, nil
},
},
},
"if GetAuthorization returns challenge ready, update ready": {
challenge: gen.ChallengeFrom(baseChallenge,
gen.SetChallengeProcessing(true),
gen.SetChallengeURL("testurl"),
),
builder: &testpkg.Builder{
CertManagerObjects: []runtime.Object{gen.ChallengeFrom(baseChallenge,
gen.SetChallengeProcessing(true),
gen.SetChallengeURL("testurl"),
), testIssuerHTTP01Enabled},
ExpectedActions: []testpkg.Action{
testpkg.NewAction(
coretesting.NewUpdateSubresourceAction(cmacme.SchemeGroupVersion.WithResource("challenges"),
"status",
gen.DefaultTestNamespace,
gen.ChallengeFrom(baseChallenge,
gen.SetChallengeProcessing(true),
gen.SetChallengeURL("testurl"),
gen.SetChallengeState(cmacme.Ready),
))),
},
},
acmeClient: &acmecl.FakeACME{
FakeGetAuthorization: func(ctx context.Context, url string) (*acmeapi.Authorization, error) {
return &acmeapi.Authorization{
Challenges: []*acmeapi.Challenge{
{URI: "testurl", Status: acmeapi.StatusReady},
},
}, nil
},
},
},
"update status if state is unknown": {
challenge: gen.ChallengeFrom(baseChallenge,
gen.SetChallengeProcessing(true),
@@ -109,8 +164,12 @@ func TestSyncHappyPath(t *testing.T) {
},
},
acmeClient: &acmecl.FakeACME{
FakeGetChallenge: func(ctx context.Context, url string) (*acmeapi.Challenge, error) {
return &acmeapi.Challenge{Status: acmeapi.StatusPending}, nil
FakeGetAuthorization: func(ctx context.Context, url string) (*acmeapi.Authorization, error) {
return &acmeapi.Authorization{
Challenges: []*acmeapi.Challenge{
{URI: "testurl", Status: acmeapi.StatusPending},
},
}, nil
},
},
},