goharbor/harbor · error · github.com/goharbor/harbor/src/lib/errors.Error

BAD_REQUEST

BAD_REQUEST

Error message

empty notification target with policy %s

What it means

Error "empty notification target with policy %s" thrown in goharbor/harbor.

Source

Thrown at src/server/v2.0/handler/webhook.go:407

		notificationTypes.NotifyType = append(notificationTypes.NotifyType, models.NotifyType(notifyType))
	}

	for _, eventType := range notification.GetSupportedEventTypes() {
		notificationTypes.EventType = append(notificationTypes.EventType, models.EventType(eventType))
	}
	// currently only http type support payload format
	httpPayloadFormats := &models.PayloadFormat{NotifyType: models.NotifyType("http")}
	for _, formatType := range notification.GetSupportedPayloadFormats() {
		httpPayloadFormats.Formats = append(httpPayloadFormats.Formats, models.PayloadFormatType(formatType))
	}
	notificationTypes.PayloadFormats = []*models.PayloadFormat{httpPayloadFormats}

	return webhook.NewGetSupportedEventTypesOK().WithPayload(notificationTypes)
}

func (n *webhookAPI) validateTargets(policy *policy_model.Policy) (bool, error) {
	if len(policy.Targets) == 0 {
		return false, errors.New(nil).WithMessagef("empty notification target with policy %s", policy.Name).WithCode(errors.BadRequestCode)
	}
	for i, target := range policy.Targets {
		url, err := utils.ParseEndpoint(target.Address)
		if err != nil {
			return false, errors.New(err).WithCode(errors.BadRequestCode)
		}
		// Prevent SSRF security issue #3755
		target.Address = url.Scheme + "://" + url.Host + url.Path

		if !isNotifyTypeSupported(target.Type) {
			return false, errors.New(nil).WithMessagef("unsupported target type %s with policy %s", target.Type, policy.Name).WithCode(errors.BadRequestCode)
		}
		// don't allow set the payload format for slack type
		// slack should be migrated as a kind of payload in the future
		if len(target.PayloadFormat) > 0 && target.Type == "slack" {
			return false, errors.New(nil).WithMessage("set payload format is not allowed for slack").WithCode(errors.BadRequestCode)
		}

View on GitHub (pinned to 7b2fd08cc5)

When it happens

Trigger: Thrown at src/server/v2.0/handler/webhook.go:407 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of goharbor/harbor@7b2fd08cc5 (2026-08-16). Data as JSON: /api/errors/d2eacc3a0c267ac5. Report an issue: GitHub.