...

Source file src/k8s.io/apiextensions-apiserver/pkg/apiserver/validation/formats.go

Documentation: k8s.io/apiextensions-apiserver/pkg/apiserver/validation

     1  /*
     2  Copyright 2019 The Kubernetes Authors.
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8      http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  
    17  package validation
    18  
    19  import (
    20  	"strings"
    21  
    22  	"k8s.io/apimachinery/pkg/util/sets"
    23  	"k8s.io/kube-openapi/pkg/validation/spec"
    24  )
    25  
    26  var supportedFormats = sets.NewString(
    27  	"bsonobjectid", // bson object ID
    28  	"uri",          // an URI as parsed by Golang net/url.ParseRequestURI
    29  	"email",        // an email address as parsed by Golang net/mail.ParseAddress
    30  	"hostname",     // a valid representation for an Internet host name, as defined by RFC 1034, section 3.1 [RFC1034].
    31  	"ipv4",         // an IPv4 IP as parsed by Golang net.ParseIP
    32  	"ipv6",         // an IPv6 IP as parsed by Golang net.ParseIP
    33  	"cidr",         // a CIDR as parsed by Golang net.ParseCIDR
    34  	"mac",          // a MAC address as parsed by Golang net.ParseMAC
    35  	"uuid",         // an UUID that allows uppercase defined by the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}$
    36  	"uuid3",        // an UUID3 that allows uppercase defined by the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?3[0-9a-f]{3}-?[0-9a-f]{4}-?[0-9a-f]{12}$
    37  	"uuid4",        // an UUID4 that allows uppercase defined by the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?4[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$
    38  	"uuid5",        // an UUID6 that allows uppercase defined by the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?5[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$
    39  	"isbn",         // an ISBN10 or ISBN13 number string like "0321751043" or "978-0321751041"
    40  	"isbn10",       // an ISBN10 number string like "0321751043"
    41  	"isbn13",       // an ISBN13 number string like "978-0321751041"
    42  	"creditcard",   // a credit card number defined by the regex ^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\\d{3})\\d{11})$ with any non digit characters mixed in
    43  	"ssn",          // a U.S. social security number following the regex ^\\d{3}[- ]?\\d{2}[- ]?\\d{4}$
    44  	"hexcolor",     // an hexadecimal color code like "#FFFFFF", following the regex ^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
    45  	"rgbcolor",     // an RGB color code like rgb like "rgb(255,255,2559"
    46  	"byte",         // base64 encoded binary data
    47  	"password",     // any kind of string
    48  	"date",         // a date string like "2006-01-02" as defined by full-date in RFC3339
    49  	"duration",     // a duration string like "22 ns" as parsed by Golang time.ParseDuration or compatible with Scala duration format
    50  	"datetime",     // a date time string like "2014-12-15T19:30:20.000Z" as defined by date-time in RFC3339
    51  )
    52  
    53  // StripUnsupportedFormatsPostProcess sets unsupported formats to empty string.
    54  func StripUnsupportedFormatsPostProcess(s *spec.Schema) error {
    55  	if len(s.Format) == 0 {
    56  		return nil
    57  	}
    58  
    59  	normalized := strings.Replace(s.Format, "-", "", -1) // go-openapi default format name normalization
    60  	if !supportedFormats.Has(normalized) {
    61  		s.Format = ""
    62  	}
    63  
    64  	return nil
    65  }
    66  

View as plain text