harbor/src/pkg/notifier/model/event.go

66 lines
2.3 KiB
Go

// Copyright Project Harbor Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package model
import (
"github.com/goharbor/harbor/src/controller/event/model"
policy_model "github.com/goharbor/harbor/src/pkg/notification/policy/model"
)
// HookEvent is hook related event data to publish
type HookEvent struct {
ProjectID int64
PolicyID int64
EventType string
Target *policy_model.EventTarget
Payload *Payload
}
// Payload of notification event
type Payload struct {
Type string `json:"type"`
OccurAt int64 `json:"occur_at"`
Operator string `json:"operator"`
EventData *EventData `json:"event_data,omitempty"`
}
// EventData of notification event payload
type EventData struct {
Resources []*Resource `json:"resources,omitempty"`
Repository *Repository `json:"repository,omitempty"`
Replication *model.Replication `json:"replication,omitempty"`
Retention *model.Retention `json:"retention,omitempty"`
ScanType string `json:"scan_type,omitempty"`
Custom map[string]string `json:"custom_attributes,omitempty"`
}
// Resource describe infos of resource triggered notification
type Resource struct {
Digest string `json:"digest,omitempty"`
Tag string `json:"tag,omitempty"`
ResourceURL string `json:"resource_url,omitempty"`
ScanOverview map[string]interface{} `json:"scan_overview,omitempty"`
SBOMOverview map[string]interface{} `json:"sbom_overview,omitempty"`
}
// Repository info of notification event
type Repository struct {
DateCreated int64 `json:"date_created,omitempty"`
Name string `json:"name"`
Namespace string `json:"namespace"`
RepoFullName string `json:"repo_full_name"`
RepoType string `json:"repo_type"`
}