func modelToChallenge(cm *challModel) (core.Challenge, error) { c := core.Challenge{ ID: cm.ID, Type: cm.Type, Status: cm.Status, Token: cm.Token, ProvidedKeyAuthorization: cm.KeyAuthorization, } if len(cm.Error) > 0 { var problem probs.ProblemDetails err := json.Unmarshal(cm.Error, &problem) if err != nil { return core.Challenge{}, err } c.Error = &problem } if len(cm.ValidationRecord) > 0 { var vr []core.ValidationRecord err := json.Unmarshal(cm.ValidationRecord, &vr) if err != nil { return core.Challenge{}, err } c.ValidationRecord = vr } if len(cm.AccountKey) > 0 { var ak jose.JsonWebKey err := json.Unmarshal(cm.AccountKey, &ak) if err != nil { return core.Challenge{}, err } c.AccountKey = &ak } return c, nil }
func modelToChallenge(cm *challModel) (core.Challenge, error) { c := core.Challenge{ Type: cm.Type, Status: cm.Status, Validated: cm.Validated, Token: cm.Token, TLS: cm.TLS, } if len(cm.URI) > 0 { uri, err := core.ParseAcmeURL(cm.URI) if err != nil { return core.Challenge{}, err } c.URI = uri } if len(cm.Validation) > 0 { val, err := jose.ParseSigned(string(cm.Validation)) if err != nil { return core.Challenge{}, err } c.Validation = val } if len(cm.Error) > 0 { var problem core.ProblemDetails err := json.Unmarshal(cm.Error, &problem) if err != nil { return core.Challenge{}, err } c.Error = &problem } if len(cm.ValidationRecord) > 0 { var vr []core.ValidationRecord err := json.Unmarshal(cm.ValidationRecord, &vr) if err != nil { return core.Challenge{}, err } c.ValidationRecord = vr } if len(cm.AccountKey) > 0 { var ak jose.JsonWebKey err := json.Unmarshal(cm.AccountKey, &ak) if err != nil { return core.Challenge{}, err } c.AccountKey = &ak } return c, nil }
func modelToChallenge(cm *challModel) (core.Challenge, error) { c := core.Challenge{ ID: cm.ID, Type: cm.Type, Status: cm.Status, Validated: cm.Validated, Token: cm.Token, TLS: cm.TLS, } if len(cm.KeyAuthorization) > 0 { ka, err := core.NewKeyAuthorizationFromString(cm.KeyAuthorization) if err != nil { return core.Challenge{}, err } c.KeyAuthorization = &ka } if len(cm.Error) > 0 { var problem core.ProblemDetails err := json.Unmarshal(cm.Error, &problem) if err != nil { return core.Challenge{}, err } c.Error = &problem } if len(cm.ValidationRecord) > 0 { var vr []core.ValidationRecord err := json.Unmarshal(cm.ValidationRecord, &vr) if err != nil { return core.Challenge{}, err } c.ValidationRecord = vr } if len(cm.AccountKey) > 0 { var ak jose.JsonWebKey err := json.Unmarshal(cm.AccountKey, &ak) if err != nil { return core.Challenge{}, err } c.AccountKey = &ak } return c, nil }
// prepChallengeForDisplay takes a core.Challenge and prepares it for display to // the client by filling in its URI field and clearing its AccountKey and ID // fields. // TODO: Come up with a cleaner way to do this. // https://github.com/letsencrypt/boulder/issues/761 func (wfe *WebFrontEndImpl) prepChallengeForDisplay(authz core.Authorization, challenge *core.Challenge) { challenge.URI = fmt.Sprintf("%s%s/%d", wfe.ChallengeBase, authz.ID, challenge.ID) challenge.AccountKey = nil // 0 is considered "empty" for the purpose of the JSON omitempty tag. challenge.ID = 0 }