Skip to content

Commit e9f5a1e

Browse files
committed
Improve policy bad request handling
1 parent b72430f commit e9f5a1e

File tree

2 files changed

+314
-117
lines changed

2 files changed

+314
-117
lines changed

authority/admin/api/policy.go

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -105,11 +105,8 @@ func (par *PolicyAdminResponder) CreateAuthorityPolicy(w http.ResponseWriter, r
105105

106106
var createdPolicy *linkedca.Policy
107107
if createdPolicy, err = par.auth.CreateAuthorityPolicy(ctx, adm, newPolicy); err != nil {
108-
var pe *authority.PolicyError
109-
isPolicyError := errors.As(err, &pe)
110-
111-
if isPolicyError && pe.Typ == authority.AdminLockOut || pe.Typ == authority.EvaluationFailure || pe.Typ == authority.ConfigurationFailure {
112-
render.Error(w, admin.WrapError(admin.ErrorBadRequestType, pe, "error storing authority policy"))
108+
if isBadRequest(err) {
109+
render.Error(w, admin.WrapError(admin.ErrorBadRequestType, err, "error storing authority policy"))
113110
return
114111
}
115112

@@ -153,10 +150,8 @@ func (par *PolicyAdminResponder) UpdateAuthorityPolicy(w http.ResponseWriter, r
153150

154151
var updatedPolicy *linkedca.Policy
155152
if updatedPolicy, err = par.auth.UpdateAuthorityPolicy(ctx, adm, newPolicy); err != nil {
156-
var pe *authority.PolicyError
157-
isPolicyError := errors.As(err, &pe)
158-
if isPolicyError && pe.Typ == authority.AdminLockOut || pe.Typ == authority.EvaluationFailure || pe.Typ == authority.ConfigurationFailure {
159-
render.Error(w, admin.WrapError(admin.ErrorBadRequestType, pe, "error updating authority policy"))
153+
if isBadRequest(err) {
154+
render.Error(w, admin.WrapError(admin.ErrorBadRequestType, err, "error updating authority policy"))
160155
return
161156
}
162157

@@ -246,10 +241,8 @@ func (par *PolicyAdminResponder) CreateProvisionerPolicy(w http.ResponseWriter,
246241
prov.Policy = newPolicy
247242

248243
if err := par.auth.UpdateProvisioner(ctx, prov); err != nil {
249-
var pe *authority.PolicyError
250-
isPolicyError := errors.As(err, &pe)
251-
if isPolicyError && pe.Typ == authority.AdminLockOut || pe.Typ == authority.EvaluationFailure || pe.Typ == authority.ConfigurationFailure {
252-
render.Error(w, admin.WrapError(admin.ErrorBadRequestType, pe, "error creating provisioner policy"))
244+
if isBadRequest(err) {
245+
render.Error(w, admin.WrapError(admin.ErrorBadRequestType, err, "error creating provisioner policy"))
253246
return
254247
}
255248

@@ -286,10 +279,8 @@ func (par *PolicyAdminResponder) UpdateProvisionerPolicy(w http.ResponseWriter,
286279

287280
prov.Policy = newPolicy
288281
if err := par.auth.UpdateProvisioner(ctx, prov); err != nil {
289-
var pe *authority.PolicyError
290-
isPolicyError := errors.As(err, &pe)
291-
if isPolicyError && pe.Typ == authority.AdminLockOut || pe.Typ == authority.EvaluationFailure || pe.Typ == authority.ConfigurationFailure {
292-
render.Error(w, admin.WrapError(admin.ErrorBadRequestType, pe, "error updating provisioner policy"))
282+
if isBadRequest(err) {
283+
render.Error(w, admin.WrapError(admin.ErrorBadRequestType, err, "error updating provisioner policy"))
293284
return
294285
}
295286

@@ -456,6 +447,14 @@ func (par *PolicyAdminResponder) blockLinkedCA() error {
456447
return nil
457448
}
458449

450+
// isBadRequest checks if an error should result in a bad request error
451+
// returned to the client.
452+
func isBadRequest(err error) bool {
453+
var pe *authority.PolicyError
454+
isPolicyError := errors.As(err, &pe)
455+
return isPolicyError && (pe.Typ == authority.AdminLockOut || pe.Typ == authority.EvaluationFailure || pe.Typ == authority.ConfigurationFailure)
456+
}
457+
459458
// applyConditionalDefaults applies default settings in case they're not provided
460459
// in the request body.
461460
func applyConditionalDefaults(p *linkedca.Policy) {

0 commit comments

Comments
 (0)