// NewPendingAuthorization stores a new Pending Authorization func (ssa *SQLStorageAuthority) NewPendingAuthorization(ctx context.Context, authz core.Authorization) (core.Authorization, error) { var output core.Authorization tx, err := ssa.dbMap.Begin() if err != nil { return output, err } // Check that it doesn't exist already authz.ID = core.NewToken() for existingPending(tx, authz.ID) || existingFinal(tx, authz.ID) { authz.ID = core.NewToken() } // Insert a stub row in pending pendingAuthz := pendingauthzModel{Authorization: authz} err = tx.Insert(&pendingAuthz) if err != nil { err = Rollback(tx, err) return output, err } for i, c := range authz.Challenges { challModel, err := challengeToModel(&c, pendingAuthz.ID) if err != nil { err = Rollback(tx, err) return output, err } // Magic happens here: Gorp will modify challModel, setting challModel.ID // to the auto-increment primary key. This is important because we want // the challenge objects inside the Authorization we return to know their // IDs, so they can have proper URLs. // See https://godoc.org/github.com/coopernurse/gorp#DbMap.Insert err = tx.Insert(challModel) if err != nil { err = Rollback(tx, err) return output, err } challenge, err := modelToChallenge(challModel) if err != nil { err = Rollback(tx, err) return output, err } authz.Challenges[i] = challenge } err = tx.Commit() output = pendingAuthz.Authorization output.Challenges = authz.Challenges return output, err }
// prepAuthorizationForDisplay takes a core.Authorization and prepares it for // display to the client by clearing its ID and RegistrationID fields, and // preparing all its challenges. func (wfe *WebFrontEndImpl) prepAuthorizationForDisplay(authz *core.Authorization) { for i := range authz.Challenges { wfe.prepChallengeForDisplay(*authz, &authz.Challenges[i]) } authz.ID = "" authz.RegistrationID = 0 }
// NewPendingAuthorization stores a new Pending Authorization func (ssa *SQLStorageAuthority) NewPendingAuthorization(authz core.Authorization) (output core.Authorization, err error) { tx, err := ssa.dbMap.Begin() if err != nil { return } // Check that it doesn't exist already authz.ID = core.NewToken() for existingPending(tx, authz.ID) || existingFinal(tx, authz.ID) { authz.ID = core.NewToken() } // Insert a stub row in pending pendingAuthz := pendingauthzModel{Authorization: authz} err = tx.Insert(&pendingAuthz) if err != nil { tx.Rollback() return } for _, c := range authz.Challenges { chall, err := challengeToModel(&c, pendingAuthz.ID) if err != nil { tx.Rollback() return core.Authorization{}, err } err = tx.Insert(chall) if err != nil { tx.Rollback() return core.Authorization{}, err } } err = tx.Commit() output = pendingAuthz.Authorization output.Challenges = authz.Challenges return }
func (wfe *WebFrontEndImpl) GetAuthorization( response http.ResponseWriter, request *http.Request, authz core.Authorization, logEvent *requestEvent) { // Blank out ID and regID authz.ID = "" authz.RegistrationID = 0 jsonReply, err := json.Marshal(authz) if err != nil { logEvent.Error = err.Error() // InternalServerError because this is a failure to decode from our DB. wfe.sendError(response, "Failed to marshal authz", err, http.StatusInternalServerError) return } response.Header().Add("Link", link(wfe.NewCert, "next")) response.Header().Set("Content-Type", "application/json") response.WriteHeader(http.StatusOK) if _, err = response.Write(jsonReply); err != nil { logEvent.Error = err.Error() wfe.log.Warning(fmt.Sprintf("Could not write response: %s", err)) } }
func (ra *MockRegistrationAuthority) NewAuthorization(authz core.Authorization, regID int64) (core.Authorization, error) { authz.RegistrationID = regID authz.ID = "bkrPh2u0JUf18-rVBZtOOWWb3GuIiliypL-hBM9Ak1Q" return authz, nil }