mirror of https://github.com/goharbor/harbor.git
88 lines
2.3 KiB
Go
88 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 rule
|
|
|
|
import (
|
|
"github.com/beego/beego/v2/core/validation"
|
|
)
|
|
|
|
// Metadata of the retention rule
|
|
type Metadata struct {
|
|
// UUID of rule
|
|
ID int `json:"id"`
|
|
|
|
// Priority of rule when doing calculating
|
|
Priority int `json:"priority"`
|
|
|
|
// Disabled rule
|
|
Disabled bool `json:"disabled"`
|
|
|
|
// Action of the rule performs
|
|
// "retain"
|
|
Action string `json:"action" valid:"Required"`
|
|
|
|
// Template ID
|
|
Template string `json:"template" valid:"Required"`
|
|
|
|
// The parameters of this rule
|
|
Parameters Parameters `json:"params" valid:"Required"`
|
|
|
|
// Selector attached to the rule for filtering tags
|
|
TagSelectors []*Selector `json:"tag_selectors" valid:"Required"`
|
|
|
|
// Selector attached to the rule for filtering scope (e.g: repositories or namespaces)
|
|
ScopeSelectors map[string][]*Selector `json:"scope_selectors" valid:"Required"`
|
|
}
|
|
|
|
// Valid Valid
|
|
func (m *Metadata) Valid(v *validation.Validation) {
|
|
for _, ts := range m.TagSelectors {
|
|
if pass, _ := v.Valid(ts); !pass {
|
|
return
|
|
}
|
|
}
|
|
for _, ss := range m.ScopeSelectors {
|
|
for _, s := range ss {
|
|
if pass, _ := v.Valid(s); !pass {
|
|
return
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Selector to narrow down the list
|
|
type Selector struct {
|
|
// Kind of the selector
|
|
// "doublestar" or "label"
|
|
Kind string `json:"kind" valid:"Required;Match(doublestar)"`
|
|
|
|
// Decorated the selector
|
|
// for "doublestar" : "matching" and "excluding"
|
|
// for "label" : "with" and "without"
|
|
Decoration string `json:"decoration" valid:"Required"`
|
|
|
|
// Param for the selector
|
|
Pattern string `json:"pattern" valid:"Required"`
|
|
|
|
// Extras for other settings
|
|
Extras string `json:"extras"`
|
|
}
|
|
|
|
// Parameters of rule, indexed by the key
|
|
type Parameters map[string]Parameter
|
|
|
|
// Parameter of rule
|
|
type Parameter interface{}
|