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