Vendor Update (#14496)
* update code.gitea.io/sdk/gitea v0.13.1 -> v0.13.2 * update github.com/go-swagger/go-swagger v0.25.0 -> v0.26.0 * update github.com/google/uuid v1.1.2 -> v1.2.0 * update github.com/klauspost/compress v1.11.3 -> v1.11.7 * update github.com/lib/pq 083382b7e6fc -> v1.9.0 * update github.com/markbates/goth v1.65.0 -> v1.66.1 * update github.com/mattn/go-sqlite3 v1.14.4 -> v1.14.6 * update github.com/mgechev/revive 246eac737dc7 -> v1.0.3 * update github.com/minio/minio-go/v7 v7.0.6 -> v7.0.7 * update github.com/niklasfasching/go-org v1.3.2 -> v1.4.0 * update github.com/olivere/elastic/v7 v7.0.21 -> v7.0.22 * update github.com/pquerna/otp v1.2.0 -> v1.3.0 * update github.com/xanzy/go-gitlab v0.39.0 -> v0.42.0 * update github.com/yuin/goldmark v1.2.1 -> v1.3.1
This commit is contained in:
		
					parent
					
						
							
								e45bf12a34
							
						
					
				
			
			
				commit
				
					
						d1353e1f7c
					
				
			
		
					 403 changed files with 29737 additions and 14357 deletions
				
			
		
							
								
								
									
										51
									
								
								go.mod
									
										
									
									
									
								
							
							
						
						
									
										51
									
								
								go.mod
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -4,7 +4,7 @@ go 1.14
 | 
			
		|||
 | 
			
		||||
require (
 | 
			
		||||
	code.gitea.io/gitea-vet v0.2.1
 | 
			
		||||
	code.gitea.io/sdk/gitea v0.13.1
 | 
			
		||||
	code.gitea.io/sdk/gitea v0.13.2
 | 
			
		||||
	gitea.com/go-chi/binding v0.0.0-20210113025129-03f1d313373c
 | 
			
		||||
	gitea.com/go-chi/cache v0.0.0-20210110083709-82c4c9ce2d5e
 | 
			
		||||
	gitea.com/go-chi/captcha v0.0.0-20210110083842-e7696c336a1e
 | 
			
		||||
| 
						 | 
				
			
			@ -17,6 +17,7 @@ require (
 | 
			
		|||
	github.com/andybalholm/brotli v1.0.1 // indirect
 | 
			
		||||
	github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be // indirect
 | 
			
		||||
	github.com/blevesearch/bleve/v2 v2.0.1
 | 
			
		||||
	github.com/boombuler/barcode v1.0.1 // indirect
 | 
			
		||||
	github.com/caddyserver/certmagic v0.12.0
 | 
			
		||||
	github.com/cpuguy83/go-md2man/v2 v2.0.0 // indirect
 | 
			
		||||
	github.com/denisenkom/go-mssqldb v0.9.0
 | 
			
		||||
| 
						 | 
				
			
			@ -36,14 +37,14 @@ require (
 | 
			
		|||
	github.com/go-ldap/ldap/v3 v3.2.4
 | 
			
		||||
	github.com/go-redis/redis/v7 v7.4.0
 | 
			
		||||
	github.com/go-sql-driver/mysql v1.5.0
 | 
			
		||||
	github.com/go-swagger/go-swagger v0.25.0
 | 
			
		||||
	github.com/go-swagger/go-swagger v0.26.0
 | 
			
		||||
	github.com/go-testfixtures/testfixtures/v3 v3.4.1
 | 
			
		||||
	github.com/gobwas/glob v0.2.3
 | 
			
		||||
	github.com/gogs/chardet v0.0.0-20191104214054-4b6791f73a28
 | 
			
		||||
	github.com/gogs/cron v0.0.0-20171120032916-9f6c956d3e14
 | 
			
		||||
	github.com/gogs/go-gogs-client v0.0.0-20200905025246-8bb8a50cb355
 | 
			
		||||
	github.com/google/go-github/v32 v32.1.0
 | 
			
		||||
	github.com/google/uuid v1.1.2
 | 
			
		||||
	github.com/google/uuid v1.2.0
 | 
			
		||||
	github.com/gorilla/context v1.1.1
 | 
			
		||||
	github.com/hashicorp/go-retryablehttp v0.6.8 // indirect
 | 
			
		||||
	github.com/hashicorp/go-version v1.2.1
 | 
			
		||||
| 
						 | 
				
			
			@ -54,37 +55,37 @@ require (
 | 
			
		|||
	github.com/jaytaylor/html2text v0.0.0-20200412013138-3577fbdbcff7
 | 
			
		||||
	github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51
 | 
			
		||||
	github.com/keybase/go-crypto v0.0.0-20200123153347-de78d2cb44f4
 | 
			
		||||
	github.com/klauspost/compress v1.11.3
 | 
			
		||||
	github.com/klauspost/compress v1.11.7
 | 
			
		||||
	github.com/klauspost/pgzip v1.2.5 // indirect
 | 
			
		||||
	github.com/lafriks/xormstore v1.3.2
 | 
			
		||||
	github.com/lib/pq v1.8.1-0.20200908161135-083382b7e6fc
 | 
			
		||||
	github.com/lib/pq v1.9.0
 | 
			
		||||
	github.com/lunny/dingtalk_webhook v0.0.0-20171025031554-e3534c89ef96
 | 
			
		||||
	github.com/markbates/goth v1.65.0
 | 
			
		||||
	github.com/mattn/go-colorable v0.1.7 // indirect
 | 
			
		||||
	github.com/markbates/goth v1.66.1
 | 
			
		||||
	github.com/mattn/go-isatty v0.0.12
 | 
			
		||||
	github.com/mattn/go-runewidth v0.0.9 // indirect
 | 
			
		||||
	github.com/mattn/go-sqlite3 v1.14.4
 | 
			
		||||
	github.com/mattn/go-runewidth v0.0.10 // indirect
 | 
			
		||||
	github.com/mattn/go-sqlite3 v1.14.6
 | 
			
		||||
	github.com/mgechev/dots v0.0.0-20190921121421-c36f7dcfbb81
 | 
			
		||||
	github.com/mgechev/revive v1.0.3-0.20200921231451-246eac737dc7
 | 
			
		||||
	github.com/mgechev/revive v1.0.3
 | 
			
		||||
	github.com/mholt/archiver/v3 v3.5.0
 | 
			
		||||
	github.com/microcosm-cc/bluemonday v1.0.4
 | 
			
		||||
	github.com/minio/minio-go/v7 v7.0.6
 | 
			
		||||
	github.com/minio/md5-simd v1.1.1 // indirect
 | 
			
		||||
	github.com/minio/minio-go/v7 v7.0.7
 | 
			
		||||
	github.com/mitchellh/go-homedir v1.1.0
 | 
			
		||||
	github.com/msteinert/pam v0.0.0-20200810204841-913b8f8cdf8b
 | 
			
		||||
	github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646
 | 
			
		||||
	github.com/niklasfasching/go-org v1.3.2
 | 
			
		||||
	github.com/niklasfasching/go-org v1.4.0
 | 
			
		||||
	github.com/oliamb/cutter v0.2.2
 | 
			
		||||
	github.com/olivere/elastic/v7 v7.0.21
 | 
			
		||||
	github.com/olivere/elastic/v7 v7.0.22
 | 
			
		||||
	github.com/pelletier/go-toml v1.8.1
 | 
			
		||||
	github.com/pierrec/lz4/v4 v4.1.1 // indirect
 | 
			
		||||
	github.com/pkg/errors v0.9.1
 | 
			
		||||
	github.com/pquerna/otp v1.2.0
 | 
			
		||||
	github.com/pquerna/otp v1.3.0
 | 
			
		||||
	github.com/prometheus/client_golang v1.8.0
 | 
			
		||||
	github.com/quasoft/websspi v1.0.0
 | 
			
		||||
	github.com/rivo/uniseg v0.2.0 // indirect
 | 
			
		||||
	github.com/sergi/go-diff v1.1.0
 | 
			
		||||
	github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749 // indirect
 | 
			
		||||
	github.com/shurcooL/vfsgen v0.0.0-20200824052919-0d455de96546
 | 
			
		||||
	github.com/spf13/viper v1.7.1 // indirect
 | 
			
		||||
	github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf // indirect
 | 
			
		||||
	github.com/stretchr/testify v1.7.0
 | 
			
		||||
	github.com/syndtr/goleveldb v1.0.0
 | 
			
		||||
| 
						 | 
				
			
			@ -97,24 +98,24 @@ require (
 | 
			
		|||
	github.com/unrolled/render v1.0.3
 | 
			
		||||
	github.com/urfave/cli v1.22.5
 | 
			
		||||
	github.com/willf/bitset v1.1.11 // indirect
 | 
			
		||||
	github.com/xanzy/go-gitlab v0.39.0
 | 
			
		||||
	github.com/xanzy/go-gitlab v0.42.0
 | 
			
		||||
	github.com/yohcop/openid-go v1.0.0
 | 
			
		||||
	github.com/yuin/goldmark v1.2.1
 | 
			
		||||
	github.com/yuin/goldmark v1.3.1
 | 
			
		||||
	github.com/yuin/goldmark-highlighting v0.0.0-20200307114337-60d527fdb691
 | 
			
		||||
	github.com/yuin/goldmark-meta v1.0.0
 | 
			
		||||
	go.jolheiser.com/hcaptcha v0.0.4
 | 
			
		||||
	go.jolheiser.com/pwn v0.0.3
 | 
			
		||||
	golang.org/x/crypto v0.0.0-20201217014255-9d1352758620
 | 
			
		||||
	golang.org/x/net v0.0.0-20201031054903-ff519b6c9102
 | 
			
		||||
	golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43
 | 
			
		||||
	golang.org/x/sys v0.0.0-20210113181707-4bcb84eeeb78
 | 
			
		||||
	golang.org/x/text v0.3.4
 | 
			
		||||
	golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e // indirect
 | 
			
		||||
	golang.org/x/tools v0.0.0-20201022035929-9cf592e881e9
 | 
			
		||||
	golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad
 | 
			
		||||
	golang.org/x/net v0.0.0-20210119194325-5f4716e94777
 | 
			
		||||
	golang.org/x/oauth2 v0.0.0-20210126194326-f9ce19ea3013
 | 
			
		||||
	golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c
 | 
			
		||||
	golang.org/x/text v0.3.5
 | 
			
		||||
	golang.org/x/time v0.0.0-20201208040808-7e3f01d25324 // indirect
 | 
			
		||||
	golang.org/x/tools v0.1.0
 | 
			
		||||
	gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
 | 
			
		||||
	gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
 | 
			
		||||
	gopkg.in/ini.v1 v1.62.0
 | 
			
		||||
	gopkg.in/yaml.v2 v2.3.0
 | 
			
		||||
	gopkg.in/yaml.v2 v2.4.0
 | 
			
		||||
	mvdan.cc/xurls/v2 v2.2.0
 | 
			
		||||
	strk.kbt.io/projects/go/libravatar v0.0.0-20191008002943-06d1c002b251
 | 
			
		||||
	xorm.io/builder v0.3.7
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										194
									
								
								go.sum
									
										
									
									
									
								
							
							
						
						
									
										194
									
								
								go.sum
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -37,8 +37,8 @@ cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RX
 | 
			
		|||
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
 | 
			
		||||
code.gitea.io/gitea-vet v0.2.1 h1:b30by7+3SkmiftK0RjuXqFvZg2q4p68uoPGuxhzBN0s=
 | 
			
		||||
code.gitea.io/gitea-vet v0.2.1/go.mod h1:zcNbT/aJEmivCAhfmkHOlT645KNOf9W2KnkLgFjGGfE=
 | 
			
		||||
code.gitea.io/sdk/gitea v0.13.1 h1:Y7bpH2iO6Q0KhhMJfjP/LZ0AmiYITeRQlCD8b0oYqhk=
 | 
			
		||||
code.gitea.io/sdk/gitea v0.13.1/go.mod h1:z3uwDV/b9Ls47NGukYM9XhnHtqPh/J+t40lsUrR6JDY=
 | 
			
		||||
code.gitea.io/sdk/gitea v0.13.2 h1:wAnT/J7Z62q3fJXbgnecoaOBh8CM1Qq0/DakWxiv4yA=
 | 
			
		||||
code.gitea.io/sdk/gitea v0.13.2/go.mod h1:lee2y8LeV3kQb2iK+hHlMqoadL4bp27QOkOV/hawLKg=
 | 
			
		||||
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
 | 
			
		||||
gitea.com/go-chi/binding v0.0.0-20210113025129-03f1d313373c h1:NTtrGYjR40WUdkCdn26Y5LGFT52rIkFPkjmtgCAyiTs=
 | 
			
		||||
gitea.com/go-chi/binding v0.0.0-20210113025129-03f1d313373c/go.mod h1:9bGA9dIsrz+wVQKH1DzvxuAvrudHaQ8Wx8hLme/GVGQ=
 | 
			
		||||
| 
						 | 
				
			
			@ -82,6 +82,7 @@ github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWX
 | 
			
		|||
github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
 | 
			
		||||
github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g=
 | 
			
		||||
github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c=
 | 
			
		||||
github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM=
 | 
			
		||||
github.com/akavel/rsrc v0.8.0/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c=
 | 
			
		||||
github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7 h1:uSoVVbwJiQipAclBbw+8quDsfcvFjOpI5iCf4p/cqCs=
 | 
			
		||||
github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs=
 | 
			
		||||
| 
						 | 
				
			
			@ -103,6 +104,7 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy
 | 
			
		|||
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
 | 
			
		||||
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
 | 
			
		||||
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
 | 
			
		||||
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
 | 
			
		||||
github.com/andybalholm/brotli v1.0.0/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y=
 | 
			
		||||
github.com/andybalholm/brotli v1.0.1 h1:KqhlKozYbRtJvsPrrEeXcO+N2l6NYT5A2QAFmSULpEc=
 | 
			
		||||
github.com/andybalholm/brotli v1.0.1/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y=
 | 
			
		||||
| 
						 | 
				
			
			@ -126,9 +128,12 @@ github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:l
 | 
			
		|||
github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg=
 | 
			
		||||
github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535 h1:4daAzAu0S6Vi7/lbWECcX0j45yZReDZ56BQsrVBOEEY=
 | 
			
		||||
github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg=
 | 
			
		||||
github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef h1:46PFijGLmAjMPwCCCo7Jf0W6f9slllCkkv7vyc1yOSg=
 | 
			
		||||
github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
 | 
			
		||||
github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU=
 | 
			
		||||
github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
 | 
			
		||||
github.com/aws/aws-sdk-go v1.34.13/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0=
 | 
			
		||||
github.com/aws/aws-sdk-go v1.34.28/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48=
 | 
			
		||||
github.com/aws/aws-sdk-go v1.35.20/go.mod h1:tlPOdRjfxPBpNIwqDj61rmsnA85v9jc0Ps9+muhnW+k=
 | 
			
		||||
github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g=
 | 
			
		||||
github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk=
 | 
			
		||||
github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4=
 | 
			
		||||
| 
						 | 
				
			
			@ -167,6 +172,8 @@ github.com/blevesearch/zapx/v15 v15.1.10 h1:kZR3b9jO9l6s2B5UHI+1N1llLzJ4nYikkXQT
 | 
			
		|||
github.com/blevesearch/zapx/v15 v15.1.10/go.mod h1:4ypq25bwtSQKzwEF1UERyIhmGTbMT3brY/n4NC5gRnM=
 | 
			
		||||
github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc h1:biVzkmvwrH8WK8raXaxBx6fRVTlJILwEwQGL1I/ByEI=
 | 
			
		||||
github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
 | 
			
		||||
github.com/boombuler/barcode v1.0.1 h1:NDBbPmhS+EqABEs5Kg3n/5ZNjy73Pz7SIV+KCeqyXcs=
 | 
			
		||||
github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
 | 
			
		||||
github.com/bradfitz/gomemcache v0.0.0-20190329173943-551aad21a668 h1:U/lr3Dgy4WK+hNk4tyD+nuGjpVLPEHuJSFXMw11/HPA=
 | 
			
		||||
github.com/bradfitz/gomemcache v0.0.0-20190329173943-551aad21a668/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA=
 | 
			
		||||
github.com/caddyserver/certmagic v0.12.0 h1:1f7kxykaJkOVVpXJ8ZrC6RAO5F6+kKm9U7dBFbLNeug=
 | 
			
		||||
| 
						 | 
				
			
			@ -270,8 +277,12 @@ github.com/ethantkoenig/rupture v1.0.0/go.mod h1:GyE9QabHfxA6ch0NZgwsHopRbOLcYjU
 | 
			
		|||
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
 | 
			
		||||
github.com/fatih/color v1.9.0 h1:8xPHl4/q1VyqGIPif1F+1V3Y3lSmrq01EabUW3CoW5s=
 | 
			
		||||
github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
 | 
			
		||||
github.com/fatih/color v1.10.0 h1:s36xzo75JdqLaaWoiEHk767eHiwo0598uUxyfiPkDsg=
 | 
			
		||||
github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM=
 | 
			
		||||
github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4=
 | 
			
		||||
github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94=
 | 
			
		||||
github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ=
 | 
			
		||||
github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
 | 
			
		||||
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 h1:BHsljHzVlRcyQhjrss6TZTdY2VfCqZPbv5k3iBFa2ZQ=
 | 
			
		||||
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc=
 | 
			
		||||
github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw=
 | 
			
		||||
| 
						 | 
				
			
			@ -331,12 +342,18 @@ github.com/go-openapi/analysis v0.19.4/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9sn
 | 
			
		|||
github.com/go-openapi/analysis v0.19.5/go.mod h1:hkEAkxagaIvIP7VTn8ygJNkd4kAYON2rCu0v0ObL0AU=
 | 
			
		||||
github.com/go-openapi/analysis v0.19.10 h1:5BHISBAXOc/aJK25irLZnx2D3s6WyYaY9D4gmuz9fdE=
 | 
			
		||||
github.com/go-openapi/analysis v0.19.10/go.mod h1:qmhS3VNFxBlquFJ0RGoDtylO9y4pgTAUNE9AEEMdlJQ=
 | 
			
		||||
github.com/go-openapi/analysis v0.19.16 h1:Ub9e++M8sDwtHD+S587TYi+6ANBG1NRYGZDihqk0SaY=
 | 
			
		||||
github.com/go-openapi/analysis v0.19.16/go.mod h1:GLInF007N83Ad3m8a/CbQ5TPzdnGT7workfHwuVjNVk=
 | 
			
		||||
github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0=
 | 
			
		||||
github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0=
 | 
			
		||||
github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94=
 | 
			
		||||
github.com/go-openapi/errors v0.19.3/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94=
 | 
			
		||||
github.com/go-openapi/errors v0.19.6 h1:xZMThgv5SQ7SMbWtKFkCf9bBdvR2iEyw9k3zGZONuys=
 | 
			
		||||
github.com/go-openapi/errors v0.19.6/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M=
 | 
			
		||||
github.com/go-openapi/errors v0.19.7/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M=
 | 
			
		||||
github.com/go-openapi/errors v0.19.8/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M=
 | 
			
		||||
github.com/go-openapi/errors v0.19.9 h1:9SnKdGhiPZHF3ttwFMiCBEb8jQ4IDdrK+5+a0oTygA4=
 | 
			
		||||
github.com/go-openapi/errors v0.19.9/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M=
 | 
			
		||||
github.com/go-openapi/inflect v0.19.0 h1:9jCH9scKIbHeV9m12SmPilScz6krDxKRasNNSNPXu/4=
 | 
			
		||||
github.com/go-openapi/inflect v0.19.0/go.mod h1:lHpZVlpIQqLyKwJ4N+YSc9hchQy/i12fJykb83CRBH4=
 | 
			
		||||
github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M=
 | 
			
		||||
| 
						 | 
				
			
			@ -344,12 +361,14 @@ github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwds
 | 
			
		|||
github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg=
 | 
			
		||||
github.com/go-openapi/jsonpointer v0.19.3 h1:gihV7YNZK1iK6Tgwwsxo2rJbD1GTbdm72325Bq8FI3w=
 | 
			
		||||
github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
 | 
			
		||||
github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY=
 | 
			
		||||
github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
 | 
			
		||||
github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I=
 | 
			
		||||
github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I=
 | 
			
		||||
github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc=
 | 
			
		||||
github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8=
 | 
			
		||||
github.com/go-openapi/jsonreference v0.19.4 h1:3Vw+rh13uq2JFNxgnMTGE1rnoieU9FmyE1gvnyylsYg=
 | 
			
		||||
github.com/go-openapi/jsonreference v0.19.4/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg=
 | 
			
		||||
github.com/go-openapi/jsonreference v0.19.5 h1:1WJP/wi4OjB4iV8KVbH73rQaoialJrqv8gitZLxGLtM=
 | 
			
		||||
github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg=
 | 
			
		||||
github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU=
 | 
			
		||||
github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU=
 | 
			
		||||
github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU=
 | 
			
		||||
| 
						 | 
				
			
			@ -357,12 +376,18 @@ github.com/go-openapi/loads v0.19.2/go.mod h1:QAskZPMX5V0C2gvfkGZzJlINuP7Hx/4+ix
 | 
			
		|||
github.com/go-openapi/loads v0.19.3/go.mod h1:YVfqhUCdahYwR3f3iiwQLhicVRvLlU/WO5WPaZvcvSI=
 | 
			
		||||
github.com/go-openapi/loads v0.19.5 h1:jZVYWawIQiA1NBnHla28ktg6hrcfTHsCE+3QLVRBIls=
 | 
			
		||||
github.com/go-openapi/loads v0.19.5/go.mod h1:dswLCAdonkRufe/gSUC3gN8nTSaB9uaS2es0x5/IbjY=
 | 
			
		||||
github.com/go-openapi/loads v0.19.6/go.mod h1:brCsvE6j8mnbmGBh103PT/QLHfbyDxA4hsKvYBNEGVc=
 | 
			
		||||
github.com/go-openapi/loads v0.19.7/go.mod h1:brCsvE6j8mnbmGBh103PT/QLHfbyDxA4hsKvYBNEGVc=
 | 
			
		||||
github.com/go-openapi/loads v0.20.0 h1:Pymw1O8zDmWeNv4kVsHd0W3cvgdp8juRa4U/U/8D/Pk=
 | 
			
		||||
github.com/go-openapi/loads v0.20.0/go.mod h1:2LhKquiE513rN5xC6Aan6lYOSddlL8Mp20AW9kpviM4=
 | 
			
		||||
github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA=
 | 
			
		||||
github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64=
 | 
			
		||||
github.com/go-openapi/runtime v0.19.4/go.mod h1:X277bwSUBxVlCYR3r7xgZZGKVvBd/29gLDlFGtJ8NL4=
 | 
			
		||||
github.com/go-openapi/runtime v0.19.15/go.mod h1:dhGWCTKRXlAfGnQG0ONViOZpjfg0m2gUt9nTQPQZuoo=
 | 
			
		||||
github.com/go-openapi/runtime v0.19.20 h1:J/t+QIjbcoq8WJvjGxRKiFBhqUE8slS9SbmD0Oi/raQ=
 | 
			
		||||
github.com/go-openapi/runtime v0.19.20/go.mod h1:Lm9YGCeecBnUUkFTxPC4s1+lwrkJ0pthx8YvyjCfkgk=
 | 
			
		||||
github.com/go-openapi/runtime v0.19.16/go.mod h1:5P9104EJgYcizotuXhEuUrzVc+j1RiSjahULvYmlv98=
 | 
			
		||||
github.com/go-openapi/runtime v0.19.24/go.mod h1:Lm9YGCeecBnUUkFTxPC4s1+lwrkJ0pthx8YvyjCfkgk=
 | 
			
		||||
github.com/go-openapi/runtime v0.19.26 h1:K/6PoVNj5WJXUnMk+VEbELeXjtBkCS1UxTDa04tdXE0=
 | 
			
		||||
github.com/go-openapi/runtime v0.19.26/go.mod h1:BvrQtn6iVb2QmiVXRsFAm6ZCAZBpbVKFfN6QWCp582M=
 | 
			
		||||
github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI=
 | 
			
		||||
github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI=
 | 
			
		||||
github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY=
 | 
			
		||||
| 
						 | 
				
			
			@ -370,6 +395,10 @@ github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8
 | 
			
		|||
github.com/go-openapi/spec v0.19.6/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk=
 | 
			
		||||
github.com/go-openapi/spec v0.19.8 h1:qAdZLh1r6QF/hI/gTq+TJTvsQUodZsM7KLqkAJdiJNg=
 | 
			
		||||
github.com/go-openapi/spec v0.19.8/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk=
 | 
			
		||||
github.com/go-openapi/spec v0.19.15/go.mod h1:+81FIL1JwC5P3/Iuuozq3pPE9dXdIEGxFutcFKaVbmU=
 | 
			
		||||
github.com/go-openapi/spec v0.20.0/go.mod h1:+81FIL1JwC5P3/Iuuozq3pPE9dXdIEGxFutcFKaVbmU=
 | 
			
		||||
github.com/go-openapi/spec v0.20.1 h1:5WNKTzPguDN+79wbJw2UE2q+eX+gUmEFsIKSvnSQJlc=
 | 
			
		||||
github.com/go-openapi/spec v0.20.1/go.mod h1:93x7oh+d+FQsmsieroS4cmR3u0p/ywH649a3qwC9OsQ=
 | 
			
		||||
github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU=
 | 
			
		||||
github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU=
 | 
			
		||||
github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY=
 | 
			
		||||
| 
						 | 
				
			
			@ -378,6 +407,9 @@ github.com/go-openapi/strfmt v0.19.3/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6
 | 
			
		|||
github.com/go-openapi/strfmt v0.19.4/go.mod h1:eftuHTlB/dI8Uq8JJOyRlieZf+WkkxUuk0dgdHXr2Qk=
 | 
			
		||||
github.com/go-openapi/strfmt v0.19.5 h1:0utjKrw+BAh8s57XE9Xz8DUBsVvPmRUB6styvl9wWIM=
 | 
			
		||||
github.com/go-openapi/strfmt v0.19.5/go.mod h1:eftuHTlB/dI8Uq8JJOyRlieZf+WkkxUuk0dgdHXr2Qk=
 | 
			
		||||
github.com/go-openapi/strfmt v0.19.11/go.mod h1:UukAYgTaQfqJuAFlNxxMWNvMYiwiXtLsF2VwmoFtbtc=
 | 
			
		||||
github.com/go-openapi/strfmt v0.20.0 h1:l2omNtmNbMc39IGptl9BuXBEKcZfS8zjrTsPKTiJiDM=
 | 
			
		||||
github.com/go-openapi/strfmt v0.20.0/go.mod h1:UukAYgTaQfqJuAFlNxxMWNvMYiwiXtLsF2VwmoFtbtc=
 | 
			
		||||
github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg=
 | 
			
		||||
github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg=
 | 
			
		||||
github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
 | 
			
		||||
| 
						 | 
				
			
			@ -385,11 +417,18 @@ github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh
 | 
			
		|||
github.com/go-openapi/swag v0.19.7/go.mod h1:ao+8BpOPyKdpQz3AOJfbeEVpLmWAvlT1IfTe5McPyhY=
 | 
			
		||||
github.com/go-openapi/swag v0.19.9 h1:1IxuqvBUU3S2Bi4YC7tlP9SJF1gVpCvqN0T2Qof4azE=
 | 
			
		||||
github.com/go-openapi/swag v0.19.9/go.mod h1:ao+8BpOPyKdpQz3AOJfbeEVpLmWAvlT1IfTe5McPyhY=
 | 
			
		||||
github.com/go-openapi/swag v0.19.12/go.mod h1:eFdyEBkTdoAf/9RXBvj4cr1nH7GD8Kzo5HTt47gr72M=
 | 
			
		||||
github.com/go-openapi/swag v0.19.13 h1:233UVgMy1DlmCYYfOiFpta6e2urloh+sEs5id6lyzog=
 | 
			
		||||
github.com/go-openapi/swag v0.19.13/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ=
 | 
			
		||||
github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4=
 | 
			
		||||
github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA=
 | 
			
		||||
github.com/go-openapi/validate v0.19.3/go.mod h1:90Vh6jjkTn+OT1Eefm0ZixWNFjhtOH7vS9k0lo6zwJo=
 | 
			
		||||
github.com/go-openapi/validate v0.19.10 h1:tG3SZ5DC5KF4cyt7nqLVcQXGj5A7mpaYkAcNPlDK+Yk=
 | 
			
		||||
github.com/go-openapi/validate v0.19.10/go.mod h1:RKEZTUWDkxKQxN2jDT7ZnZi2bhZlbNMAuKvKB+IaGx8=
 | 
			
		||||
github.com/go-openapi/validate v0.19.12/go.mod h1:Rzou8hA/CBw8donlS6WNEUQupNvUZ0waH08tGe6kAQ4=
 | 
			
		||||
github.com/go-openapi/validate v0.19.15/go.mod h1:tbn/fdOwYHgrhPBzidZfJC2MIVvs9GA7monOmWBbeCI=
 | 
			
		||||
github.com/go-openapi/validate v0.20.1 h1:QGQ5CvK74E28t3DkegGweKR+auemUi5IdpMc4x3UW6s=
 | 
			
		||||
github.com/go-openapi/validate v0.20.1/go.mod h1:b60iJT+xNNLfaQJUqLI7946tYiFEOuE9E4k54HpKcJ0=
 | 
			
		||||
github.com/go-redis/redis v6.15.2+incompatible h1:9SpNVG76gr6InJGxoZ6IuuxaCOQwDAhzyXg+Bs+0Sb4=
 | 
			
		||||
github.com/go-redis/redis v6.15.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
 | 
			
		||||
github.com/go-redis/redis/v7 v7.4.0 h1:7obg6wUoj05T0EpY0o8B59S9w5yeMWql7sw2kwNW1x4=
 | 
			
		||||
| 
						 | 
				
			
			@ -401,8 +440,8 @@ github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gG
 | 
			
		|||
github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
 | 
			
		||||
github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
 | 
			
		||||
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
 | 
			
		||||
github.com/go-swagger/go-swagger v0.25.0 h1:FxhyrWWV8V/A9P6GtI5szWordAdbb6Y0nqdY/y9So2w=
 | 
			
		||||
github.com/go-swagger/go-swagger v0.25.0/go.mod h1:9639ioXrPX9E6BbnbaDklGXjNz7upAXoNBwL4Ok11Vk=
 | 
			
		||||
github.com/go-swagger/go-swagger v0.26.0 h1:LM5XTbeRbDdjHRqdA0jchK5Qs3DB2F0R5QmXs1pd/L0=
 | 
			
		||||
github.com/go-swagger/go-swagger v0.26.0/go.mod h1:kSAA+pziAr5x68on6TxcxWoIl9GOo1mLsHmfMV2rrCo=
 | 
			
		||||
github.com/go-swagger/scan-repo-boundary v0.0.0-20180623220736-973b3573c013 h1:l9rI6sNaZgNC0LnF3MiE+qTmyBA/tZAg1rtyrGbUMK0=
 | 
			
		||||
github.com/go-swagger/scan-repo-boundary v0.0.0-20180623220736-973b3573c013/go.mod h1:b65mBPzqzZWxOZGxSWrqs4GInLIn+u99Q9q7p+GKni0=
 | 
			
		||||
github.com/go-testfixtures/testfixtures/v3 v3.4.1 h1:Qz9y0wUOXPHzKhK6C79A/menChtEu/xd0Dn5ngVyMD0=
 | 
			
		||||
| 
						 | 
				
			
			@ -511,8 +550,8 @@ github.com/google/pprof v0.0.0-20200905233945-acf8798be1f7/go.mod h1:ZgVRPoUq/hf
 | 
			
		|||
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
 | 
			
		||||
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 | 
			
		||||
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 | 
			
		||||
github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y=
 | 
			
		||||
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 | 
			
		||||
github.com/google/uuid v1.2.0 h1:qJYtXnJRWmpe7m/3XlyhrsLrEURqHRM2kxzoxXqyUDs=
 | 
			
		||||
github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 | 
			
		||||
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
 | 
			
		||||
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
 | 
			
		||||
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
 | 
			
		||||
| 
						 | 
				
			
			@ -525,8 +564,8 @@ github.com/gorilla/csrf v1.6.0/go.mod h1:7tSf8kmjNYr7IWDCYhd3U8Ck34iQ/Yw5CJu7bAk
 | 
			
		|||
github.com/gorilla/css v1.0.0 h1:BQqNyPTi50JCFMTw/b67hByjMVXZRwGha6wxVGkeihY=
 | 
			
		||||
github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c=
 | 
			
		||||
github.com/gorilla/handlers v1.4.1/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
 | 
			
		||||
github.com/gorilla/handlers v1.4.2 h1:0QniY0USkHQ1RGCLfKxeNHK9bkDHGRYGNDFBCS+YARg=
 | 
			
		||||
github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
 | 
			
		||||
github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4=
 | 
			
		||||
github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q=
 | 
			
		||||
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
 | 
			
		||||
github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw=
 | 
			
		||||
github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
 | 
			
		||||
| 
						 | 
				
			
			@ -637,7 +676,8 @@ github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i
 | 
			
		|||
github.com/jessevdk/go-flags v1.4.0 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGARJA=
 | 
			
		||||
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
 | 
			
		||||
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
 | 
			
		||||
github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik=
 | 
			
		||||
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
 | 
			
		||||
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
 | 
			
		||||
github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc=
 | 
			
		||||
github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
 | 
			
		||||
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
 | 
			
		||||
| 
						 | 
				
			
			@ -670,8 +710,8 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o
 | 
			
		|||
github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
 | 
			
		||||
github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
 | 
			
		||||
github.com/klauspost/compress v1.10.10/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
 | 
			
		||||
github.com/klauspost/compress v1.11.3 h1:dB4Bn0tN3wdCzQxnS8r06kV74qN/TAfaIS0bVE8h3jc=
 | 
			
		||||
github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
 | 
			
		||||
github.com/klauspost/compress v1.11.7 h1:0hzRabrMN4tSTvMfnL3SCv1ZGeAP23ynzodBgaHeMeg=
 | 
			
		||||
github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
 | 
			
		||||
github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
 | 
			
		||||
github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
 | 
			
		||||
github.com/klauspost/cpuid v1.2.5/go.mod h1:bYW4mA6ZgKPob1/Dlai2LviZJO7KGI3uoWLd42rAQw4=
 | 
			
		||||
| 
						 | 
				
			
			@ -687,8 +727,8 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxv
 | 
			
		|||
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
 | 
			
		||||
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
 | 
			
		||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
 | 
			
		||||
github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs=
 | 
			
		||||
github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
 | 
			
		||||
github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI=
 | 
			
		||||
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
 | 
			
		||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
 | 
			
		||||
github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA=
 | 
			
		||||
github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw=
 | 
			
		||||
| 
						 | 
				
			
			@ -703,8 +743,8 @@ github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
 | 
			
		|||
github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
 | 
			
		||||
github.com/lib/pq v1.3.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
 | 
			
		||||
github.com/lib/pq v1.7.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
 | 
			
		||||
github.com/lib/pq v1.8.1-0.20200908161135-083382b7e6fc h1:ERSU1OvZ6MdWhHieo2oT7xwR/HCksqKdgK6iYPU5pHI=
 | 
			
		||||
github.com/lib/pq v1.8.1-0.20200908161135-083382b7e6fc/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
 | 
			
		||||
github.com/lib/pq v1.9.0 h1:L8nSXQQzAYByakOFMTwpjRoHsMJklur4Gi59b6VivR8=
 | 
			
		||||
github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
 | 
			
		||||
github.com/libdns/libdns v0.1.0 h1:0ctCOrVJsVzj53mop1angHp/pE3hmAhP7KiHvR0HD04=
 | 
			
		||||
github.com/libdns/libdns v0.1.0/go.mod h1:yQCXzk1lEZmmCPa857bnk4TsOiqYasqpyOEeSObbb40=
 | 
			
		||||
github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM=
 | 
			
		||||
| 
						 | 
				
			
			@ -719,6 +759,8 @@ github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0Q
 | 
			
		|||
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
 | 
			
		||||
github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4=
 | 
			
		||||
github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
 | 
			
		||||
github.com/magiconair/properties v1.8.4 h1:8KGKTcQQGm0Kv7vEbKFErAoAOFyyacLStRtQSeYtvkY=
 | 
			
		||||
github.com/magiconair/properties v1.8.4/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
 | 
			
		||||
github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
 | 
			
		||||
github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
 | 
			
		||||
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
 | 
			
		||||
| 
						 | 
				
			
			@ -727,8 +769,8 @@ github.com/mailru/easyjson v0.7.1/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7
 | 
			
		|||
github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA=
 | 
			
		||||
github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
 | 
			
		||||
github.com/markbates/going v1.0.0/go.mod h1:I6mnB4BPnEeqo85ynXIx1ZFLLbtiLHNXVgWeFO9OGOA=
 | 
			
		||||
github.com/markbates/goth v1.65.0 h1:IbXpMneUhqbxgJ8JP1Ghl8ghlAaVX66jWDAapU1KxqU=
 | 
			
		||||
github.com/markbates/goth v1.65.0/go.mod h1:65frybxoeSCfORin51KOKqAKbIh7wREIDvdCkdWj//4=
 | 
			
		||||
github.com/markbates/goth v1.66.1 h1:8YIkRxRxiUxhYhHdvriKiJ+mk2itt2ezjf/ABR8U+JI=
 | 
			
		||||
github.com/markbates/goth v1.66.1/go.mod h1:57wf4mNb/fy/Cizm8xe4komsQRKPuelTMrm/wGcw3v8=
 | 
			
		||||
github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE=
 | 
			
		||||
github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0=
 | 
			
		||||
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
 | 
			
		||||
| 
						 | 
				
			
			@ -736,8 +778,8 @@ github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcncea
 | 
			
		|||
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
 | 
			
		||||
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
 | 
			
		||||
github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
 | 
			
		||||
github.com/mattn/go-colorable v0.1.7 h1:bQGKb3vps/j0E9GfJQ03JyhRuxsvdAanXlT9BTw3mdw=
 | 
			
		||||
github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
 | 
			
		||||
github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8=
 | 
			
		||||
github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
 | 
			
		||||
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
 | 
			
		||||
github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
 | 
			
		||||
github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
 | 
			
		||||
| 
						 | 
				
			
			@ -750,19 +792,19 @@ github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Ky
 | 
			
		|||
github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
 | 
			
		||||
github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
 | 
			
		||||
github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
 | 
			
		||||
github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=
 | 
			
		||||
github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
 | 
			
		||||
github.com/mattn/go-runewidth v0.0.10 h1:CoZ3S2P7pvtP45xOtBw+/mDL2z0RKI576gSkzRRpdGg=
 | 
			
		||||
github.com/mattn/go-runewidth v0.0.10/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk=
 | 
			
		||||
github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
 | 
			
		||||
github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
 | 
			
		||||
github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus=
 | 
			
		||||
github.com/mattn/go-sqlite3 v1.14.4 h1:4rQjbDxdu9fSgI/r3KN72G3c2goxknAqHHgPWWs8UlI=
 | 
			
		||||
github.com/mattn/go-sqlite3 v1.14.4/go.mod h1:WVKg1VTActs4Qso6iwGbiFih2UIHo0ENGwNd0Lj+XmI=
 | 
			
		||||
github.com/mattn/go-sqlite3 v1.14.6 h1:dNPt6NO46WmLVt2DLNpwczCmdV5boIZ6g/tlDrlRUbg=
 | 
			
		||||
github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
 | 
			
		||||
github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
 | 
			
		||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
 | 
			
		||||
github.com/mgechev/dots v0.0.0-20190921121421-c36f7dcfbb81 h1:QASJXOGm2RZ5Ardbc86qNFvby9AqkLDibfChMtAg5QM=
 | 
			
		||||
github.com/mgechev/dots v0.0.0-20190921121421-c36f7dcfbb81/go.mod h1:KQ7+USdGKfpPjXk4Ga+5XxQM4Lm4e3gAogrreFAYpOg=
 | 
			
		||||
github.com/mgechev/revive v1.0.3-0.20200921231451-246eac737dc7 h1:ydVkpU/M4/c45yT3e5lzMeguKJm9GxGgsawx4/XlwK0=
 | 
			
		||||
github.com/mgechev/revive v1.0.3-0.20200921231451-246eac737dc7/go.mod h1:no/hfevHbndpXR5CaJahkYCfM/FFpmM/dSOwFGU7Z1o=
 | 
			
		||||
github.com/mgechev/revive v1.0.3 h1:z3FL6IFFN3JKzHYHD8O1ExH9g/4lAGJ5x1+9rPZgsFg=
 | 
			
		||||
github.com/mgechev/revive v1.0.3/go.mod h1:POGGZagSo/0frdr7VeAifzS5Uka0d0GPiM35MsTO8nE=
 | 
			
		||||
github.com/mholt/acmez v0.1.1 h1:KQODCqk+hBn3O7qfCRPj6L96uG65T5BSS95FKNEqtdA=
 | 
			
		||||
github.com/mholt/acmez v0.1.1/go.mod h1:8qnn8QA/Ewx8E3ZSsmscqsIjhhpxuy9vqdgbX2ceceM=
 | 
			
		||||
github.com/mholt/archiver/v3 v3.5.0 h1:nE8gZIrw66cu4osS/U7UW7YDuGMHssxKutU8IfWxwWE=
 | 
			
		||||
| 
						 | 
				
			
			@ -772,10 +814,13 @@ github.com/miekg/dns v1.1.30 h1:Qww6FseFn8PRfw07jueqIXqodm0JKiiKuK0DeXSqfyo=
 | 
			
		|||
github.com/miekg/dns v1.1.30/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM=
 | 
			
		||||
github.com/minio/md5-simd v1.1.0 h1:QPfiOqlZH+Cj9teu0t9b1nTBfPbyTl16Of5MeuShdK4=
 | 
			
		||||
github.com/minio/md5-simd v1.1.0/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw=
 | 
			
		||||
github.com/minio/minio-go/v7 v7.0.6 h1:9czXaG0LEZ9s74smSqy0rm034MxngQoP6HTTuSc5GEs=
 | 
			
		||||
github.com/minio/minio-go/v7 v7.0.6/go.mod h1:HcIuq+11d/3MfavIPZiswSzfQ1VJ2Lwxp/XLtW46IWQ=
 | 
			
		||||
github.com/minio/md5-simd v1.1.1 h1:9ojcLbuZ4gXbB2sX53MKn8JUZ0sB/2wfwsEcRw+I08U=
 | 
			
		||||
github.com/minio/md5-simd v1.1.1/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw=
 | 
			
		||||
github.com/minio/minio-go/v7 v7.0.7 h1:Qld/xb8C1Pwbu0jU46xAceyn9xXKCMW+3XfNbpmTB70=
 | 
			
		||||
github.com/minio/minio-go/v7 v7.0.7/go.mod h1:pEZBUa+L2m9oECoIA6IcSK8bv/qggtQVLovjeKK5jYc=
 | 
			
		||||
github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU=
 | 
			
		||||
github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM=
 | 
			
		||||
github.com/minio/sio v0.2.1/go.mod h1:8b0yPp2avGThviy/+OCJBI6OMpvxoUuiLvE6F1lebhw=
 | 
			
		||||
github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
 | 
			
		||||
github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
 | 
			
		||||
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
 | 
			
		||||
| 
						 | 
				
			
			@ -787,6 +832,10 @@ github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:F
 | 
			
		|||
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
 | 
			
		||||
github.com/mitchellh/mapstructure v1.3.2 h1:mRS76wmkOn3KkKAyXDu42V+6ebnXWIztFSYGN7GeoRg=
 | 
			
		||||
github.com/mitchellh/mapstructure v1.3.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
 | 
			
		||||
github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
 | 
			
		||||
github.com/mitchellh/mapstructure v1.4.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
 | 
			
		||||
github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag=
 | 
			
		||||
github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
 | 
			
		||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
 | 
			
		||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
 | 
			
		||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
 | 
			
		||||
| 
						 | 
				
			
			@ -814,8 +863,8 @@ github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6
 | 
			
		|||
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
 | 
			
		||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
 | 
			
		||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
 | 
			
		||||
github.com/niklasfasching/go-org v1.3.2 h1:ZKTSd+GdJYkoZl1pBXLR/k7DRiRXnmB96TRiHmHdzwI=
 | 
			
		||||
github.com/niklasfasching/go-org v1.3.2/go.mod h1:AsLD6X7djzRIz4/RFZu8vwRL0VGjUvGZCCH1Nz0VdrU=
 | 
			
		||||
github.com/niklasfasching/go-org v1.4.0 h1:qPy4VEdX55f5QcLiaD3X7N/tY5XOgk4y2uEyQa02i7A=
 | 
			
		||||
github.com/niklasfasching/go-org v1.4.0/go.mod h1:4FWT4U/Anir9ewjwNpbZIzMjG5RaXFafkyWZNEPRdk8=
 | 
			
		||||
github.com/nkovacs/streamquote v0.0.0-20170412213628-49af9bddb229/go.mod h1:0aYXnNPJ8l7uZxf45rWW1a/uME32OF0rhiYGNQ2oF2E=
 | 
			
		||||
github.com/nwaples/rardecode v1.1.0 h1:vSxaY8vQhOcVr4mm5e8XllHWTiM4JF507A0Katqw7MQ=
 | 
			
		||||
github.com/nwaples/rardecode v1.1.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0=
 | 
			
		||||
| 
						 | 
				
			
			@ -829,8 +878,8 @@ github.com/olekukonko/tablewriter v0.0.4 h1:vHD/YYe1Wolo78koG299f7V/VAS08c6IpCLn
 | 
			
		|||
github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA=
 | 
			
		||||
github.com/oliamb/cutter v0.2.2 h1:Lfwkya0HHNU1YLnGv2hTkzHfasrSMkgv4Dn+5rmlk3k=
 | 
			
		||||
github.com/oliamb/cutter v0.2.2/go.mod h1:4BenG2/4GuRBDbVm/OPahDVqbrOemzpPiG5mi1iryBU=
 | 
			
		||||
github.com/olivere/elastic/v7 v7.0.21 h1:58a2pMlLketCsLyKg8kJNJG+OZIFKrSQXX6gJBpqqlg=
 | 
			
		||||
github.com/olivere/elastic/v7 v7.0.21/go.mod h1:Kh7iIsXIBl5qRQOBFoylCsXVTtye3keQU2Y/YbR7HD8=
 | 
			
		||||
github.com/olivere/elastic/v7 v7.0.22 h1:esBA6JJwvYgfms0EVlH7Z+9J4oQ/WUADF2y/nCNDw7s=
 | 
			
		||||
github.com/olivere/elastic/v7 v7.0.22/go.mod h1:VDexNy9NjmtAkrjNoI7tImv7FR4tf5zUA3ickqu5Pc8=
 | 
			
		||||
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 | 
			
		||||
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 | 
			
		||||
github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 | 
			
		||||
| 
						 | 
				
			
			@ -860,7 +909,7 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI
 | 
			
		|||
github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
 | 
			
		||||
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
 | 
			
		||||
github.com/pelletier/go-toml v1.4.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo=
 | 
			
		||||
github.com/pelletier/go-toml v1.8.0/go.mod h1:D6yutnOGMveHEPV7VQOuvI/gXY61bv+9bAOTRnLElKs=
 | 
			
		||||
github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE=
 | 
			
		||||
github.com/pelletier/go-toml v1.8.1 h1:1Nf83orprkJyknT6h7zbuEGUEjcyVlCxSUGTENmNCRM=
 | 
			
		||||
github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc=
 | 
			
		||||
github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac=
 | 
			
		||||
| 
						 | 
				
			
			@ -882,9 +931,9 @@ github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZ
 | 
			
		|||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 | 
			
		||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 | 
			
		||||
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
 | 
			
		||||
github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA=
 | 
			
		||||
github.com/pquerna/otp v1.2.0 h1:/A3+Jn+cagqayeR3iHs/L62m5ue7710D35zl1zJ1kok=
 | 
			
		||||
github.com/pquerna/otp v1.2.0/go.mod h1:dkJfzwRKNiegxyNb54X/3fLwhCynbMspSyWKnvi1AEg=
 | 
			
		||||
github.com/pquerna/cachecontrol v0.0.0-20200921180117-858c6e7e6b7e/go.mod h1:hoLfEwdY11HjRfKFH6KqnPsfxlo3BP6bJehpDv8t6sQ=
 | 
			
		||||
github.com/pquerna/otp v1.3.0 h1:oJV/SkzR33anKXwQU3Of42rL4wbrffP4uvUf1SvS5Xs=
 | 
			
		||||
github.com/pquerna/otp v1.3.0/go.mod h1:dkJfzwRKNiegxyNb54X/3fLwhCynbMspSyWKnvi1AEg=
 | 
			
		||||
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
 | 
			
		||||
github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs=
 | 
			
		||||
github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
 | 
			
		||||
| 
						 | 
				
			
			@ -921,6 +970,10 @@ github.com/quasoft/websspi v1.0.0 h1:5nDgdM5xSur9s+B5w2xQ5kxf5nUGqgFgU4W0aDLZ8Mw
 | 
			
		|||
github.com/quasoft/websspi v1.0.0/go.mod h1:HmVdl939dQ0WIXZhyik+ARdI03M6bQzaSEKcgpFmewk=
 | 
			
		||||
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
 | 
			
		||||
github.com/rcrowley/go-metrics v0.0.0-20190826022208-cac0b30c2563/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
 | 
			
		||||
github.com/rivo/uniseg v0.1.0 h1:+2KBaVoUmb9XzDsrx/Ct0W/EYOSFf/nWTauy++DprtY=
 | 
			
		||||
github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
 | 
			
		||||
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
 | 
			
		||||
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
 | 
			
		||||
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
 | 
			
		||||
github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
 | 
			
		||||
github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
 | 
			
		||||
| 
						 | 
				
			
			@ -975,8 +1028,8 @@ github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4k
 | 
			
		|||
github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY=
 | 
			
		||||
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
 | 
			
		||||
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
 | 
			
		||||
github.com/spf13/afero v1.3.2 h1:GDarE4TJQI52kYSbSAmLiId1Elfj+xgSDqrUZxFhxlU=
 | 
			
		||||
github.com/spf13/afero v1.3.2/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4=
 | 
			
		||||
github.com/spf13/afero v1.4.1 h1:asw9sl74539yqavKaglDM5hFpdJVK0Y5Dr/JOgQ89nQ=
 | 
			
		||||
github.com/spf13/afero v1.4.1/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I=
 | 
			
		||||
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
 | 
			
		||||
github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng=
 | 
			
		||||
github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
 | 
			
		||||
| 
						 | 
				
			
			@ -990,7 +1043,6 @@ github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn
 | 
			
		|||
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
 | 
			
		||||
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
 | 
			
		||||
github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
 | 
			
		||||
github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
 | 
			
		||||
github.com/spf13/viper v1.7.1 h1:pM5oEahlgWv/WnHXpgbKz7iLIxRf65tye2Ci+XFK5sk=
 | 
			
		||||
github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
 | 
			
		||||
github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf h1:pvbZ0lM0XWPBqUKqFU8cmavspvIl9nulOYwdy6IFRRo=
 | 
			
		||||
| 
						 | 
				
			
			@ -1046,11 +1098,12 @@ github.com/urfave/cli v1.22.5 h1:lNq9sAHXK2qfdI8W+GRItjCEkI+2oR4d+MEHy1CKXoU=
 | 
			
		|||
github.com/urfave/cli v1.22.5/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
 | 
			
		||||
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
 | 
			
		||||
github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8=
 | 
			
		||||
github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw=
 | 
			
		||||
github.com/willf/bitset v1.1.10/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4=
 | 
			
		||||
github.com/willf/bitset v1.1.11 h1:N7Z7E9UvjW+sGsEl7k/SJrvY2reP1A07MrGuCjIOjRE=
 | 
			
		||||
github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI=
 | 
			
		||||
github.com/xanzy/go-gitlab v0.39.0 h1:7aiZ03fJfCdqoHFhsZq/SoVYp2lR91hfYWmiXLOU5Qo=
 | 
			
		||||
github.com/xanzy/go-gitlab v0.39.0/go.mod h1:sPLojNBn68fMUWSxIJtdVVIP8uSBYqesTfDUseX11Ug=
 | 
			
		||||
github.com/xanzy/go-gitlab v0.42.0 h1:daNdMFnw2FG+lDRBcX+YLnKbqIKMdefVyVztMHwsFhk=
 | 
			
		||||
github.com/xanzy/go-gitlab v0.42.0/go.mod h1:sPLojNBn68fMUWSxIJtdVVIP8uSBYqesTfDUseX11Ug=
 | 
			
		||||
github.com/xanzy/ssh-agent v0.2.1 h1:TCbipTQL2JiiCprBWx9frJ2eJlCYT00NmctrHxVAr70=
 | 
			
		||||
github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4=
 | 
			
		||||
github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I=
 | 
			
		||||
| 
						 | 
				
			
			@ -1067,6 +1120,8 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
 | 
			
		|||
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 | 
			
		||||
github.com/yuin/goldmark v1.2.1 h1:ruQGxdhGHe7FWOJPT0mKs5+pD2Xs1Bm/kdGlHO04FmM=
 | 
			
		||||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 | 
			
		||||
github.com/yuin/goldmark v1.3.1 h1:eVwehsLsZlCJCwXyGLgg+Q4iFWE/eTIMG0e8waCmm/I=
 | 
			
		||||
github.com/yuin/goldmark v1.3.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
 | 
			
		||||
github.com/yuin/goldmark-highlighting v0.0.0-20200307114337-60d527fdb691 h1:VWSxtAiQNh3zgHJpdpkpVYjTPqRE3P6UZCOPa1nRDio=
 | 
			
		||||
github.com/yuin/goldmark-highlighting v0.0.0-20200307114337-60d527fdb691/go.mod h1:YLF3kDffRfUH/bTxOxHhV6lxwIB3Vfj91rEwNMS9MXo=
 | 
			
		||||
github.com/yuin/goldmark-meta v1.0.0 h1:ScsatUIT2gFS6azqzLGUjgOnELsBOxMXerM3ogdJhAM=
 | 
			
		||||
| 
						 | 
				
			
			@ -1086,8 +1141,9 @@ go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qL
 | 
			
		|||
go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM=
 | 
			
		||||
go.mongodb.org/mongo-driver v1.3.0/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE=
 | 
			
		||||
go.mongodb.org/mongo-driver v1.3.4/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE=
 | 
			
		||||
go.mongodb.org/mongo-driver v1.3.5 h1:S0ZOruh4YGHjD7JoN7mIsTrNjnQbOjrmgrx6l6pZN7I=
 | 
			
		||||
go.mongodb.org/mongo-driver v1.3.5/go.mod h1:Ual6Gkco7ZGQw8wE1t4tLnvBsf6yVSM60qW6TgOeJ5c=
 | 
			
		||||
go.mongodb.org/mongo-driver v1.4.3/go.mod h1:WcMNYLx/IlOxLe6JRJiv2uXuCz6zBLndR4SoGjYphSc=
 | 
			
		||||
go.mongodb.org/mongo-driver v1.4.4 h1:bsPHfODES+/yx2PCWzUYMH8xj6PVniPI8DQrsJuSXSs=
 | 
			
		||||
go.mongodb.org/mongo-driver v1.4.4/go.mod h1:WcMNYLx/IlOxLe6JRJiv2uXuCz6zBLndR4SoGjYphSc=
 | 
			
		||||
go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
 | 
			
		||||
go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
 | 
			
		||||
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
 | 
			
		||||
| 
						 | 
				
			
			@ -1095,6 +1151,7 @@ go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
 | 
			
		|||
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
 | 
			
		||||
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
 | 
			
		||||
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
 | 
			
		||||
go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
 | 
			
		||||
go.opentelemetry.io/otel v0.14.0/go.mod h1:vH5xEuwy7Rts0GNtsCW3HYQoZDY+OmBJ6t1bFGGlxgw=
 | 
			
		||||
go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
 | 
			
		||||
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
 | 
			
		||||
| 
						 | 
				
			
			@ -1122,6 +1179,7 @@ golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACk
 | 
			
		|||
golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
			
		||||
| 
						 | 
				
			
			@ -1136,8 +1194,9 @@ golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9/go.mod h1:LzIPMQfyMNhhGPh
 | 
			
		|||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20201217014255-9d1352758620 h1:3wPMTskHO3+O6jqTEXyFcsnuxMQOqYSaHsDxcbUXpqA=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20201217014255-9d1352758620/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20201124201722-c8d3bf9c5392/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad h1:DN0cp81fZ3njFcrLCytUHRSUkqBjfTo4Tx9RJTWs0EY=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
 | 
			
		||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
			
		||||
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
			
		||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 | 
			
		||||
| 
						 | 
				
			
			@ -1217,8 +1276,12 @@ golang.org/x/net v0.0.0-20200927032502-5d4f70055728/go.mod h1:/O7V0waA8r7cgGh81R
 | 
			
		|||
golang.org/x/net v0.0.0-20200930145003-4acb6c075d10/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 | 
			
		||||
golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
 | 
			
		||||
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
 | 
			
		||||
golang.org/x/net v0.0.0-20201031054903-ff519b6c9102 h1:42cLlJJdEh+ySyeUUbEQ5bsTiq8voBeTuweGVkY6Puw=
 | 
			
		||||
golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
 | 
			
		||||
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
 | 
			
		||||
golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
 | 
			
		||||
golang.org/x/net v0.0.0-20201224014010-6772e930b67b h1:iFwSg7t5GZmB/Q5TjiEAsdoLDrdJRC1RiF2WhuV29Qw=
 | 
			
		||||
golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
 | 
			
		||||
golang.org/x/net v0.0.0-20210119194325-5f4716e94777 h1:003p0dJM77cxMSyCPFphvZf/Y5/NXf5fzg6ufd1/Oew=
 | 
			
		||||
golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
 | 
			
		||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 | 
			
		||||
golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 | 
			
		||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
			
		||||
| 
						 | 
				
			
			@ -1227,6 +1290,10 @@ golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4Iltr
 | 
			
		|||
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
			
		||||
golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43 h1:ld7aEMNHoBnnDAX15v1T6z31v8HwR2A9FYOuAhWqkwc=
 | 
			
		||||
golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
 | 
			
		||||
golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58 h1:Mj83v+wSRNEar42a/MQgxk9X42TdEmrOl9i+y8WbxLo=
 | 
			
		||||
golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
 | 
			
		||||
golang.org/x/oauth2 v0.0.0-20210126194326-f9ce19ea3013 h1:55H5j7lotzuFCEOKDsMch+fRNUQ9DgtyHOUP31FNqKc=
 | 
			
		||||
golang.org/x/oauth2 v0.0.0-20210126194326-f9ce19ea3013/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
 | 
			
		||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
			
		||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
			
		||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
			
		||||
| 
						 | 
				
			
			@ -1300,10 +1367,16 @@ golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7w
 | 
			
		|||
golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/sys v0.0.0-20210113181707-4bcb84eeeb78 h1:nVuTkr9L6Bq62qpUqKo/RnZCFfzDBL0bYo6w9OJUqZY=
 | 
			
		||||
golang.org/x/sys v0.0.0-20210113181707-4bcb84eeeb78/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/sys v0.0.0-20201126233918-771906719818/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4 h1:myAQVi0cGEoqQVR5POX+8RR2mrocKqNN1hmeMqhX27k=
 | 
			
		||||
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c h1:VwygUrnw9jn88c4u8GD3rZQbqrP/tgas88tPUbBxQrk=
 | 
			
		||||
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221 h1:/ZHdbVpdR/jk3g30/d4yUL0JU9kksj8+F/bnQUVLGDM=
 | 
			
		||||
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
 | 
			
		||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E=
 | 
			
		||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 | 
			
		||||
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 | 
			
		||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 | 
			
		||||
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 | 
			
		||||
| 
						 | 
				
			
			@ -1311,17 +1384,20 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
 | 
			
		|||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 | 
			
		||||
golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc=
 | 
			
		||||
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 | 
			
		||||
golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ=
 | 
			
		||||
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 | 
			
		||||
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 | 
			
		||||
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 | 
			
		||||
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 | 
			
		||||
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 | 
			
		||||
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s=
 | 
			
		||||
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 | 
			
		||||
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324 h1:Hir2P/De0WpUhtrKGGjvSb2YxUgyZ7EFOSLIcSSpiwE=
 | 
			
		||||
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 | 
			
		||||
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 | 
			
		||||
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 | 
			
		||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 | 
			
		||||
golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 | 
			
		||||
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 | 
			
		||||
golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 | 
			
		||||
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
 | 
			
		||||
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 | 
			
		||||
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 | 
			
		||||
| 
						 | 
				
			
			@ -1372,16 +1448,18 @@ golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roY
 | 
			
		|||
golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
 | 
			
		||||
golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
 | 
			
		||||
golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
 | 
			
		||||
golang.org/x/tools v0.0.0-20200717024301-6ddee64345a6/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
 | 
			
		||||
golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
 | 
			
		||||
golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
 | 
			
		||||
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
 | 
			
		||||
golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE=
 | 
			
		||||
golang.org/x/tools v0.0.0-20200921210052-fa0125251cc4/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU=
 | 
			
		||||
golang.org/x/tools v0.0.0-20200928182047-19e03678916f/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU=
 | 
			
		||||
golang.org/x/tools v0.0.0-20200929161345-d7fc70abf50f/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU=
 | 
			
		||||
golang.org/x/tools v0.0.0-20201022035929-9cf592e881e9 h1:sEvmEcJVKBNUvgCUClbUQeHOAa9U0I2Ce1BooMvVCY4=
 | 
			
		||||
golang.org/x/tools v0.0.0-20201022035929-9cf592e881e9/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
 | 
			
		||||
golang.org/x/tools v0.0.0-20201125231158-b5590deeca9b h1:Lq5JUTFhiybGVf28jB6QRpqd13/JPOaCnET17PVzYJE=
 | 
			
		||||
golang.org/x/tools v0.0.0-20201125231158-b5590deeca9b/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
 | 
			
		||||
golang.org/x/tools v0.1.0 h1:po9/4sTYwZU9lPhi1tOrb4hCv3qrhiQ77LZfGa2OjwY=
 | 
			
		||||
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
 | 
			
		||||
golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 | 
			
		||||
golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 | 
			
		||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 | 
			
		||||
| 
						 | 
				
			
			@ -1518,6 +1596,8 @@ gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 | 
			
		|||
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 | 
			
		||||
gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
 | 
			
		||||
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 | 
			
		||||
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
 | 
			
		||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
 | 
			
		||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 | 
			
		||||
gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 | 
			
		||||
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ=
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										4
									
								
								vendor/code.gitea.io/sdk/gitea/admin_cron.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/code.gitea.io/sdk/gitea/admin_cron.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -25,7 +25,7 @@ type ListCronTaskOptions struct {
 | 
			
		|||
 | 
			
		||||
// ListCronTasks list available cron tasks
 | 
			
		||||
func (c *Client) ListCronTasks(opt ListCronTaskOptions) ([]*CronTask, *Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.13.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_13_0); err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	opt.setDefaults()
 | 
			
		||||
| 
						 | 
				
			
			@ -36,7 +36,7 @@ func (c *Client) ListCronTasks(opt ListCronTaskOptions) ([]*CronTask, *Response,
 | 
			
		|||
 | 
			
		||||
// RunCronTasks run a cron task
 | 
			
		||||
func (c *Client) RunCronTasks(task string) (*Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.13.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_13_0); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	_, resp, err := c.getResponse("POST", fmt.Sprintf("/admin/cron/%s", task), jsonHeader, nil)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										2
									
								
								vendor/code.gitea.io/sdk/gitea/client.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/code.gitea.io/sdk/gitea/client.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -56,7 +56,7 @@ func NewClient(url string, options ...func(*Client)) (*Client, error) {
 | 
			
		|||
	for _, opt := range options {
 | 
			
		||||
		opt(client)
 | 
			
		||||
	}
 | 
			
		||||
	if err := client.CheckServerVersionConstraint(">=1.10"); err != nil {
 | 
			
		||||
	if err := client.checkServerVersionGreaterThanOrEqual(version1_10_0); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return client, nil
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										2
									
								
								vendor/code.gitea.io/sdk/gitea/go.mod
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/code.gitea.io/sdk/gitea/go.mod
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -3,6 +3,6 @@ module code.gitea.io/sdk/gitea
 | 
			
		|||
go 1.12
 | 
			
		||||
 | 
			
		||||
require (
 | 
			
		||||
	github.com/hashicorp/go-version v1.2.0
 | 
			
		||||
	github.com/hashicorp/go-version v1.2.1
 | 
			
		||||
	github.com/stretchr/testify v1.4.0
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										6
									
								
								vendor/code.gitea.io/sdk/gitea/issue.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								vendor/code.gitea.io/sdk/gitea/issue.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -121,7 +121,7 @@ func (c *Client) ListIssues(opt ListIssueOption) ([]*Issue, *Response, error) {
 | 
			
		|||
	link, _ := url.Parse("/repos/issues/search")
 | 
			
		||||
	link.RawQuery = opt.QueryEncode()
 | 
			
		||||
	resp, err := c.getParsedResponse("GET", link.String(), jsonHeader, nil, &issues)
 | 
			
		||||
	if e := c.CheckServerVersionConstraint(">=1.12.0"); e != nil {
 | 
			
		||||
	if e := c.checkServerVersionGreaterThanOrEqual(version1_12_0); e != nil {
 | 
			
		||||
		for i := 0; i < len(issues); i++ {
 | 
			
		||||
			if issues[i].Repository != nil {
 | 
			
		||||
				issues[i].Repository.Owner = strings.Split(issues[i].Repository.FullName, "/")[0]
 | 
			
		||||
| 
						 | 
				
			
			@ -139,7 +139,7 @@ func (c *Client) ListRepoIssues(owner, repo string, opt ListIssueOption) ([]*Iss
 | 
			
		|||
	link, _ := url.Parse(fmt.Sprintf("/repos/%s/%s/issues", owner, repo))
 | 
			
		||||
	link.RawQuery = opt.QueryEncode()
 | 
			
		||||
	resp, err := c.getParsedResponse("GET", link.String(), jsonHeader, nil, &issues)
 | 
			
		||||
	if e := c.CheckServerVersionConstraint(">=1.12.0"); e != nil {
 | 
			
		||||
	if e := c.checkServerVersionGreaterThanOrEqual(version1_12_0); e != nil {
 | 
			
		||||
		for i := 0; i < len(issues); i++ {
 | 
			
		||||
			if issues[i].Repository != nil {
 | 
			
		||||
				issues[i].Repository.Owner = strings.Split(issues[i].Repository.FullName, "/")[0]
 | 
			
		||||
| 
						 | 
				
			
			@ -153,7 +153,7 @@ func (c *Client) ListRepoIssues(owner, repo string, opt ListIssueOption) ([]*Iss
 | 
			
		|||
func (c *Client) GetIssue(owner, repo string, index int64) (*Issue, *Response, error) {
 | 
			
		||||
	issue := new(Issue)
 | 
			
		||||
	resp, err := c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/issues/%d", owner, repo, index), nil, nil, issue)
 | 
			
		||||
	if e := c.CheckServerVersionConstraint(">=1.12.0"); e != nil && issue.Repository != nil {
 | 
			
		||||
	if e := c.checkServerVersionGreaterThanOrEqual(version1_12_0); e != nil && issue.Repository != nil {
 | 
			
		||||
		issue.Repository.Owner = strings.Split(issue.Repository.FullName, "/")[0]
 | 
			
		||||
	}
 | 
			
		||||
	return issue, resp, err
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										2
									
								
								vendor/code.gitea.io/sdk/gitea/issue_comment.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/code.gitea.io/sdk/gitea/issue_comment.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -68,7 +68,7 @@ func (c *Client) ListRepoIssueComments(owner, repo string, opt ListIssueCommentO
 | 
			
		|||
// GetIssueComment get a comment for a given repo by id.
 | 
			
		||||
func (c *Client) GetIssueComment(owner, repo string, id int64) (*Comment, *Response, error) {
 | 
			
		||||
	comment := new(Comment)
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.12.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_12_0); err != nil {
 | 
			
		||||
		return comment, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	resp, err := c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/issues/comments/%d", owner, repo, id), nil, nil, &comment)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										2
									
								
								vendor/code.gitea.io/sdk/gitea/issue_label.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/code.gitea.io/sdk/gitea/issue_label.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -71,7 +71,7 @@ func (c *Client) CreateLabel(owner, repo string, opt CreateLabelOption) (*Label,
 | 
			
		|||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	if len(opt.Color) == 6 {
 | 
			
		||||
		if err := c.CheckServerVersionConstraint(">=1.12.0"); err != nil {
 | 
			
		||||
		if err := c.checkServerVersionGreaterThanOrEqual(version1_12_0); err != nil {
 | 
			
		||||
			opt.Color = "#" + opt.Color
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										12
									
								
								vendor/code.gitea.io/sdk/gitea/issue_reaction.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								vendor/code.gitea.io/sdk/gitea/issue_reaction.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -20,7 +20,7 @@ type Reaction struct {
 | 
			
		|||
 | 
			
		||||
// GetIssueReactions get a list reactions of an issue
 | 
			
		||||
func (c *Client) GetIssueReactions(owner, repo string, index int64) ([]*Reaction, *Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.11.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_11_0); err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	reactions := make([]*Reaction, 0, 10)
 | 
			
		||||
| 
						 | 
				
			
			@ -30,7 +30,7 @@ func (c *Client) GetIssueReactions(owner, repo string, index int64) ([]*Reaction
 | 
			
		|||
 | 
			
		||||
// GetIssueCommentReactions get a list of reactions from a comment of an issue
 | 
			
		||||
func (c *Client) GetIssueCommentReactions(owner, repo string, commentID int64) ([]*Reaction, *Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.11.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_11_0); err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	reactions := make([]*Reaction, 0, 10)
 | 
			
		||||
| 
						 | 
				
			
			@ -45,7 +45,7 @@ type editReactionOption struct {
 | 
			
		|||
 | 
			
		||||
// PostIssueReaction add a reaction to an issue
 | 
			
		||||
func (c *Client) PostIssueReaction(owner, repo string, index int64, reaction string) (*Reaction, *Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.11.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_11_0); err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	reactionResponse := new(Reaction)
 | 
			
		||||
| 
						 | 
				
			
			@ -61,7 +61,7 @@ func (c *Client) PostIssueReaction(owner, repo string, index int64, reaction str
 | 
			
		|||
 | 
			
		||||
// DeleteIssueReaction remove a reaction from an issue
 | 
			
		||||
func (c *Client) DeleteIssueReaction(owner, repo string, index int64, reaction string) (*Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.11.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_11_0); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	body, err := json.Marshal(&editReactionOption{Reaction: reaction})
 | 
			
		||||
| 
						 | 
				
			
			@ -74,7 +74,7 @@ func (c *Client) DeleteIssueReaction(owner, repo string, index int64, reaction s
 | 
			
		|||
 | 
			
		||||
// PostIssueCommentReaction add a reaction to a comment of an issue
 | 
			
		||||
func (c *Client) PostIssueCommentReaction(owner, repo string, commentID int64, reaction string) (*Reaction, *Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.11.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_11_0); err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	reactionResponse := new(Reaction)
 | 
			
		||||
| 
						 | 
				
			
			@ -90,7 +90,7 @@ func (c *Client) PostIssueCommentReaction(owner, repo string, commentID int64, r
 | 
			
		|||
 | 
			
		||||
// DeleteIssueCommentReaction remove a reaction from a comment of an issue
 | 
			
		||||
func (c *Client) DeleteIssueCommentReaction(owner, repo string, commentID int64, reaction string) (*Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.11.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_11_0); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	body, err := json.Marshal(&editReactionOption{Reaction: reaction})
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										8
									
								
								vendor/code.gitea.io/sdk/gitea/issue_subscription.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								vendor/code.gitea.io/sdk/gitea/issue_subscription.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -11,7 +11,7 @@ import (
 | 
			
		|||
 | 
			
		||||
// GetIssueSubscribers get list of users who subscribed on an issue
 | 
			
		||||
func (c *Client) GetIssueSubscribers(owner, repo string, index int64) ([]*User, *Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.11.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_11_0); err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	subscribers := make([]*User, 0, 10)
 | 
			
		||||
| 
						 | 
				
			
			@ -21,7 +21,7 @@ func (c *Client) GetIssueSubscribers(owner, repo string, index int64) ([]*User,
 | 
			
		|||
 | 
			
		||||
// AddIssueSubscription Subscribe user to issue
 | 
			
		||||
func (c *Client) AddIssueSubscription(owner, repo string, index int64, user string) (*Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.11.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_11_0); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	status, resp, err := c.getStatusCode("PUT", fmt.Sprintf("/repos/%s/%s/issues/%d/subscriptions/%s", owner, repo, index, user), nil, nil)
 | 
			
		||||
| 
						 | 
				
			
			@ -39,7 +39,7 @@ func (c *Client) AddIssueSubscription(owner, repo string, index int64, user stri
 | 
			
		|||
 | 
			
		||||
// DeleteIssueSubscription unsubscribe user from issue
 | 
			
		||||
func (c *Client) DeleteIssueSubscription(owner, repo string, index int64, user string) (*Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.11.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_11_0); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	status, resp, err := c.getStatusCode("DELETE", fmt.Sprintf("/repos/%s/%s/issues/%d/subscriptions/%s", owner, repo, index, user), nil, nil)
 | 
			
		||||
| 
						 | 
				
			
			@ -57,7 +57,7 @@ func (c *Client) DeleteIssueSubscription(owner, repo string, index int64, user s
 | 
			
		|||
 | 
			
		||||
// CheckIssueSubscription check if current user is subscribed to an issue
 | 
			
		||||
func (c *Client) CheckIssueSubscription(owner, repo string, index int64) (*WatchInfo, *Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.12.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_12_0); err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	wi := new(WatchInfo)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										14
									
								
								vendor/code.gitea.io/sdk/gitea/issue_tracked_time.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								vendor/code.gitea.io/sdk/gitea/issue_tracked_time.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -27,7 +27,7 @@ type TrackedTime struct {
 | 
			
		|||
 | 
			
		||||
// GetUserTrackedTimes list tracked times of a user
 | 
			
		||||
func (c *Client) GetUserTrackedTimes(owner, repo, user string) ([]*TrackedTime, *Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.11.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_11_0); err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	times := make([]*TrackedTime, 0, 10)
 | 
			
		||||
| 
						 | 
				
			
			@ -37,7 +37,7 @@ func (c *Client) GetUserTrackedTimes(owner, repo, user string) ([]*TrackedTime,
 | 
			
		|||
 | 
			
		||||
// GetRepoTrackedTimes list tracked times of a repository
 | 
			
		||||
func (c *Client) GetRepoTrackedTimes(owner, repo string) ([]*TrackedTime, *Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.11.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_11_0); err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	times := make([]*TrackedTime, 0, 10)
 | 
			
		||||
| 
						 | 
				
			
			@ -47,7 +47,7 @@ func (c *Client) GetRepoTrackedTimes(owner, repo string) ([]*TrackedTime, *Respo
 | 
			
		|||
 | 
			
		||||
// GetMyTrackedTimes list tracked times of the current user
 | 
			
		||||
func (c *Client) GetMyTrackedTimes() ([]*TrackedTime, *Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.11.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_11_0); err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	times := make([]*TrackedTime, 0, 10)
 | 
			
		||||
| 
						 | 
				
			
			@ -75,7 +75,7 @@ func (opt AddTimeOption) Validate() error {
 | 
			
		|||
 | 
			
		||||
// AddTime adds time to issue with the given index
 | 
			
		||||
func (c *Client) AddTime(owner, repo string, index int64, opt AddTimeOption) (*TrackedTime, *Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.11.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_11_0); err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	if err := opt.Validate(); err != nil {
 | 
			
		||||
| 
						 | 
				
			
			@ -99,7 +99,7 @@ type ListTrackedTimesOptions struct {
 | 
			
		|||
 | 
			
		||||
// ListTrackedTimes list tracked times of a single issue for a given repository
 | 
			
		||||
func (c *Client) ListTrackedTimes(owner, repo string, index int64, opt ListTrackedTimesOptions) ([]*TrackedTime, *Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.11.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_11_0); err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	opt.setDefaults()
 | 
			
		||||
| 
						 | 
				
			
			@ -110,7 +110,7 @@ func (c *Client) ListTrackedTimes(owner, repo string, index int64, opt ListTrack
 | 
			
		|||
 | 
			
		||||
// ResetIssueTime reset tracked time of a single issue for a given repository
 | 
			
		||||
func (c *Client) ResetIssueTime(owner, repo string, index int64) (*Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.11.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_11_0); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	_, resp, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/issues/%d/times", owner, repo, index), nil, nil)
 | 
			
		||||
| 
						 | 
				
			
			@ -119,7 +119,7 @@ func (c *Client) ResetIssueTime(owner, repo string, index int64) (*Response, err
 | 
			
		|||
 | 
			
		||||
// DeleteTime delete a specific tracked time by id of a single issue for a given repository
 | 
			
		||||
func (c *Client) DeleteTime(owner, repo string, index, timeID int64) (*Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.11.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_11_0); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	_, resp, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/issues/%d/times/%d", owner, repo, index, timeID), nil, nil)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										24
									
								
								vendor/code.gitea.io/sdk/gitea/notifications.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										24
									
								
								vendor/code.gitea.io/sdk/gitea/notifications.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -8,6 +8,12 @@ import (
 | 
			
		|||
	"fmt"
 | 
			
		||||
	"net/url"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/hashicorp/go-version"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	version1_12_3, _ = version.NewVersion("1.12.3")
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// NotificationThread expose Notification on API
 | 
			
		||||
| 
						 | 
				
			
			@ -75,7 +81,7 @@ func (opt *ListNotificationOptions) QueryEncode() string {
 | 
			
		|||
// Validate the CreateUserOption struct
 | 
			
		||||
func (opt ListNotificationOptions) Validate(c *Client) error {
 | 
			
		||||
	if len(opt.Status) != 0 {
 | 
			
		||||
		return c.CheckServerVersionConstraint(">=1.12.3")
 | 
			
		||||
		return c.checkServerVersionGreaterThanOrEqual(version1_12_3)
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -98,14 +104,14 @@ func (opt *MarkNotificationOptions) QueryEncode() string {
 | 
			
		|||
// Validate the CreateUserOption struct
 | 
			
		||||
func (opt MarkNotificationOptions) Validate(c *Client) error {
 | 
			
		||||
	if len(opt.Status) != 0 || len(opt.ToStatus) != 0 {
 | 
			
		||||
		return c.CheckServerVersionConstraint(">=1.12.3")
 | 
			
		||||
		return c.checkServerVersionGreaterThanOrEqual(version1_12_3)
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CheckNotifications list users's notification threads
 | 
			
		||||
func (c *Client) CheckNotifications() (int64, *Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.12.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_12_0); err != nil {
 | 
			
		||||
		return 0, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	new := struct {
 | 
			
		||||
| 
						 | 
				
			
			@ -118,7 +124,7 @@ func (c *Client) CheckNotifications() (int64, *Response, error) {
 | 
			
		|||
 | 
			
		||||
// GetNotification get notification thread by ID
 | 
			
		||||
func (c *Client) GetNotification(id int64) (*NotificationThread, *Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.12.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_12_0); err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	thread := new(NotificationThread)
 | 
			
		||||
| 
						 | 
				
			
			@ -129,7 +135,7 @@ func (c *Client) GetNotification(id int64) (*NotificationThread, *Response, erro
 | 
			
		|||
// ReadNotification mark notification thread as read by ID
 | 
			
		||||
// It optionally takes a second argument if status has to be set other than 'read'
 | 
			
		||||
func (c *Client) ReadNotification(id int64, status ...NotifyStatus) (*Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.12.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_12_0); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	link := fmt.Sprintf("/notifications/threads/%d", id)
 | 
			
		||||
| 
						 | 
				
			
			@ -142,7 +148,7 @@ func (c *Client) ReadNotification(id int64, status ...NotifyStatus) (*Response,
 | 
			
		|||
 | 
			
		||||
// ListNotifications list users's notification threads
 | 
			
		||||
func (c *Client) ListNotifications(opt ListNotificationOptions) ([]*NotificationThread, *Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.12.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_12_0); err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	if err := opt.Validate(c); err != nil {
 | 
			
		||||
| 
						 | 
				
			
			@ -157,7 +163,7 @@ func (c *Client) ListNotifications(opt ListNotificationOptions) ([]*Notification
 | 
			
		|||
 | 
			
		||||
// ReadNotifications mark notification threads as read
 | 
			
		||||
func (c *Client) ReadNotifications(opt MarkNotificationOptions) (*Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.12.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_12_0); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	if err := opt.Validate(c); err != nil {
 | 
			
		||||
| 
						 | 
				
			
			@ -171,7 +177,7 @@ func (c *Client) ReadNotifications(opt MarkNotificationOptions) (*Response, erro
 | 
			
		|||
 | 
			
		||||
// ListRepoNotifications list users's notification threads on a specific repo
 | 
			
		||||
func (c *Client) ListRepoNotifications(owner, reponame string, opt ListNotificationOptions) ([]*NotificationThread, *Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.12.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_12_0); err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	if err := opt.Validate(c); err != nil {
 | 
			
		||||
| 
						 | 
				
			
			@ -186,7 +192,7 @@ func (c *Client) ListRepoNotifications(owner, reponame string, opt ListNotificat
 | 
			
		|||
 | 
			
		||||
// ReadRepoNotifications mark notification threads as read on a specific repo
 | 
			
		||||
func (c *Client) ReadRepoNotifications(owner, reponame string, opt MarkNotificationOptions) (*Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.12.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_12_0); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	if err := opt.Validate(c); err != nil {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										10
									
								
								vendor/code.gitea.io/sdk/gitea/oauth2.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								vendor/code.gitea.io/sdk/gitea/oauth2.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -34,7 +34,7 @@ type CreateOauth2Option struct {
 | 
			
		|||
 | 
			
		||||
// CreateOauth2 create an Oauth2 Application and returns a completed Oauth2 object.
 | 
			
		||||
func (c *Client) CreateOauth2(opt CreateOauth2Option) (*Oauth2, *Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.12.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_12_0); err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	body, err := json.Marshal(&opt)
 | 
			
		||||
| 
						 | 
				
			
			@ -48,7 +48,7 @@ func (c *Client) CreateOauth2(opt CreateOauth2Option) (*Oauth2, *Response, error
 | 
			
		|||
 | 
			
		||||
// UpdateOauth2 a specific Oauth2 Application by ID and return a completed Oauth2 object.
 | 
			
		||||
func (c *Client) UpdateOauth2(oauth2id int64, opt CreateOauth2Option) (*Oauth2, *Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.12.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_12_0); err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	body, err := json.Marshal(&opt)
 | 
			
		||||
| 
						 | 
				
			
			@ -62,7 +62,7 @@ func (c *Client) UpdateOauth2(oauth2id int64, opt CreateOauth2Option) (*Oauth2,
 | 
			
		|||
 | 
			
		||||
// GetOauth2 a specific Oauth2 Application by ID.
 | 
			
		||||
func (c *Client) GetOauth2(oauth2id int64) (*Oauth2, *Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.12.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_12_0); err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	oauth2s := &Oauth2{}
 | 
			
		||||
| 
						 | 
				
			
			@ -72,7 +72,7 @@ func (c *Client) GetOauth2(oauth2id int64) (*Oauth2, *Response, error) {
 | 
			
		|||
 | 
			
		||||
// ListOauth2 all of your Oauth2 Applications.
 | 
			
		||||
func (c *Client) ListOauth2(opt ListOauth2Option) ([]*Oauth2, *Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.12.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_12_0); err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	opt.setDefaults()
 | 
			
		||||
| 
						 | 
				
			
			@ -83,7 +83,7 @@ func (c *Client) ListOauth2(opt ListOauth2Option) ([]*Oauth2, *Response, error)
 | 
			
		|||
 | 
			
		||||
// DeleteOauth2 delete an Oauth2 application by ID
 | 
			
		||||
func (c *Client) DeleteOauth2(oauth2id int64) (*Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.12.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_12_0); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	_, resp, err := c.getResponse("DELETE", fmt.Sprintf("/user/applications/oauth2/%d", oauth2id), nil, nil)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										4
									
								
								vendor/code.gitea.io/sdk/gitea/pull.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/code.gitea.io/sdk/gitea/pull.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -160,7 +160,7 @@ func (opt EditPullRequestOption) Validate(c *Client) error {
 | 
			
		|||
		return fmt.Errorf("title is empty")
 | 
			
		||||
	}
 | 
			
		||||
	if len(opt.Base) != 0 {
 | 
			
		||||
		if err := c.CheckServerVersionConstraint(">=1.12.0"); err != nil {
 | 
			
		||||
		if err := c.checkServerVersionGreaterThanOrEqual(version1_12_0); err != nil {
 | 
			
		||||
			return fmt.Errorf("can not change base gitea to old")
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -229,7 +229,7 @@ func (c *Client) IsPullRequestMerged(owner, repo string, index int64) (bool, *Re
 | 
			
		|||
 | 
			
		||||
// getPullRequestDiffOrPatch gets the patch or diff file as bytes for a PR
 | 
			
		||||
func (c *Client) getPullRequestDiffOrPatch(owner, repo, kind string, index int64) ([]byte, *Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.13.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_13_0); err != nil {
 | 
			
		||||
		r, _, err2 := c.GetRepo(owner, repo)
 | 
			
		||||
		if err2 != nil {
 | 
			
		||||
			return nil, nil, err
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										12
									
								
								vendor/code.gitea.io/sdk/gitea/pull_review.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								vendor/code.gitea.io/sdk/gitea/pull_review.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -132,7 +132,7 @@ func (opt CreatePullReviewComment) Validate() error {
 | 
			
		|||
 | 
			
		||||
// ListPullReviews lists all reviews of a pull request
 | 
			
		||||
func (c *Client) ListPullReviews(owner, repo string, index int64, opt ListPullReviewsOptions) ([]*PullReview, *Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.12.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_12_0); err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	opt.setDefaults()
 | 
			
		||||
| 
						 | 
				
			
			@ -147,7 +147,7 @@ func (c *Client) ListPullReviews(owner, repo string, index int64, opt ListPullRe
 | 
			
		|||
 | 
			
		||||
// GetPullReview gets a specific review of a pull request
 | 
			
		||||
func (c *Client) GetPullReview(owner, repo string, index, id int64) (*PullReview, *Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.12.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_12_0); err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -158,7 +158,7 @@ func (c *Client) GetPullReview(owner, repo string, index, id int64) (*PullReview
 | 
			
		|||
 | 
			
		||||
// ListPullReviewComments lists all comments of a pull request review
 | 
			
		||||
func (c *Client) ListPullReviewComments(owner, repo string, index, id int64) ([]*PullReviewComment, *Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.12.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_12_0); err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	rcl := make([]*PullReviewComment, 0, 4)
 | 
			
		||||
| 
						 | 
				
			
			@ -170,7 +170,7 @@ func (c *Client) ListPullReviewComments(owner, repo string, index, id int64) ([]
 | 
			
		|||
 | 
			
		||||
// DeletePullReview delete a specific review from a pull request
 | 
			
		||||
func (c *Client) DeletePullReview(owner, repo string, index, id int64) (*Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.12.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_12_0); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -180,7 +180,7 @@ func (c *Client) DeletePullReview(owner, repo string, index, id int64) (*Respons
 | 
			
		|||
 | 
			
		||||
// CreatePullReview create a review to an pull request
 | 
			
		||||
func (c *Client) CreatePullReview(owner, repo string, index int64, opt CreatePullReviewOptions) (*PullReview, *Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.12.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_12_0); err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	if err := opt.Validate(); err != nil {
 | 
			
		||||
| 
						 | 
				
			
			@ -200,7 +200,7 @@ func (c *Client) CreatePullReview(owner, repo string, index int64, opt CreatePul
 | 
			
		|||
 | 
			
		||||
// SubmitPullReview submit a pending review to an pull request
 | 
			
		||||
func (c *Client) SubmitPullReview(owner, repo string, index, id int64, opt SubmitPullReviewOptions) (*PullReview, *Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.12.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_12_0); err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	if err := opt.Validate(); err != nil {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										2
									
								
								vendor/code.gitea.io/sdk/gitea/release.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/code.gitea.io/sdk/gitea/release.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -57,7 +57,7 @@ func (c *Client) GetRelease(user, repo string, id int64) (*Release, *Response, e
 | 
			
		|||
 | 
			
		||||
// GetReleaseByTag get a release of a repository by tag
 | 
			
		||||
func (c *Client) GetReleaseByTag(user, repo string, tag string) (*Release, *Response, error) {
 | 
			
		||||
	if c.CheckServerVersionConstraint(">=1.13.0") != nil {
 | 
			
		||||
	if c.checkServerVersionGreaterThanOrEqual(version1_13_0) != nil {
 | 
			
		||||
		return c.fallbackGetReleaseByTag(user, repo, tag)
 | 
			
		||||
	}
 | 
			
		||||
	r := new(Release)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										40
									
								
								vendor/code.gitea.io/sdk/gitea/repo.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										40
									
								
								vendor/code.gitea.io/sdk/gitea/repo.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -73,6 +73,20 @@ const (
 | 
			
		|||
	RepoTypeMirror RepoType = "mirror"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// TrustModel represent how git signatures are handled in a repository
 | 
			
		||||
type TrustModel string
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	// TrustModelDefault use TM set by global config
 | 
			
		||||
	TrustModelDefault TrustModel = "default"
 | 
			
		||||
	// TrustModelCollaborator gpg signature has to be owned by a repo collaborator
 | 
			
		||||
	TrustModelCollaborator TrustModel = "collaborator"
 | 
			
		||||
	// TrustModelCommitter gpg signature has to match committer
 | 
			
		||||
	TrustModelCommitter TrustModel = "committer"
 | 
			
		||||
	// TrustModelCollaboratorCommitter gpg signature has to match committer and owned by a repo collaborator
 | 
			
		||||
	TrustModelCollaboratorCommitter TrustModel = "collaboratorcommitter"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// ListReposOptions options for listing repositories
 | 
			
		||||
type ListReposOptions struct {
 | 
			
		||||
	ListOptions
 | 
			
		||||
| 
						 | 
				
			
			@ -224,7 +238,7 @@ func (c *Client) SearchRepos(opt SearchRepoOptions) ([]*Repository, *Response, e
 | 
			
		|||
	} else {
 | 
			
		||||
		link.RawQuery = opt.QueryEncode()
 | 
			
		||||
		// IsPrivate only works on gitea >= 1.12.0
 | 
			
		||||
		if err := c.CheckServerVersionConstraint(">=1.12.0"); err != nil && opt.IsPrivate != nil {
 | 
			
		||||
		if err := c.checkServerVersionGreaterThanOrEqual(version1_12_0); err != nil && opt.IsPrivate != nil {
 | 
			
		||||
			if *opt.IsPrivate {
 | 
			
		||||
				// private repos only not supported on gitea <= 1.11.x
 | 
			
		||||
				return nil, nil, err
 | 
			
		||||
| 
						 | 
				
			
			@ -249,6 +263,8 @@ type CreateRepoOption struct {
 | 
			
		|||
	IssueLabels string `json:"issue_labels"`
 | 
			
		||||
	// Whether the repository should be auto-intialized?
 | 
			
		||||
	AutoInit bool `json:"auto_init"`
 | 
			
		||||
	// Whether the repository is template
 | 
			
		||||
	Template bool `json:"template"`
 | 
			
		||||
	// Gitignores to use
 | 
			
		||||
	Gitignores string `json:"gitignores"`
 | 
			
		||||
	// License to use
 | 
			
		||||
| 
						 | 
				
			
			@ -257,19 +273,35 @@ type CreateRepoOption struct {
 | 
			
		|||
	Readme string `json:"readme"`
 | 
			
		||||
	// DefaultBranch of the repository (used when initializes and in template)
 | 
			
		||||
	DefaultBranch string `json:"default_branch"`
 | 
			
		||||
	// TrustModel of the repository
 | 
			
		||||
	TrustModel TrustModel `json:"trust_model"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Validate the CreateRepoOption struct
 | 
			
		||||
func (opt CreateRepoOption) Validate() error {
 | 
			
		||||
func (opt CreateRepoOption) Validate(c *Client) error {
 | 
			
		||||
	if len(strings.TrimSpace(opt.Name)) == 0 {
 | 
			
		||||
		return fmt.Errorf("name is empty")
 | 
			
		||||
	}
 | 
			
		||||
	if len(opt.Name) > 100 {
 | 
			
		||||
		return fmt.Errorf("name has more than 100 chars")
 | 
			
		||||
	}
 | 
			
		||||
	if len(opt.Description) > 255 {
 | 
			
		||||
		return fmt.Errorf("name has more than 255 chars")
 | 
			
		||||
	}
 | 
			
		||||
	if len(opt.DefaultBranch) > 100 {
 | 
			
		||||
		return fmt.Errorf("name has more than 100 chars")
 | 
			
		||||
	}
 | 
			
		||||
	if len(opt.TrustModel) != 0 {
 | 
			
		||||
		if err := c.CheckServerVersionConstraint(">=1.13.0"); err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CreateRepo creates a repository for authenticated user.
 | 
			
		||||
func (c *Client) CreateRepo(opt CreateRepoOption) (*Repository, *Response, error) {
 | 
			
		||||
	if err := opt.Validate(); err != nil {
 | 
			
		||||
	if err := opt.Validate(c); err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	body, err := json.Marshal(&opt)
 | 
			
		||||
| 
						 | 
				
			
			@ -283,7 +315,7 @@ func (c *Client) CreateRepo(opt CreateRepoOption) (*Repository, *Response, error
 | 
			
		|||
 | 
			
		||||
// CreateOrgRepo creates an organization repository for authenticated user.
 | 
			
		||||
func (c *Client) CreateOrgRepo(org string, opt CreateRepoOption) (*Repository, *Response, error) {
 | 
			
		||||
	if err := opt.Validate(); err != nil {
 | 
			
		||||
	if err := opt.Validate(c); err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	body, err := json.Marshal(&opt)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										4
									
								
								vendor/code.gitea.io/sdk/gitea/repo_branch.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/code.gitea.io/sdk/gitea/repo_branch.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -84,7 +84,7 @@ func (c *Client) GetRepoBranch(user, repo, branch string) (*Branch, *Response, e
 | 
			
		|||
 | 
			
		||||
// DeleteRepoBranch delete a branch in a repository
 | 
			
		||||
func (c *Client) DeleteRepoBranch(user, repo, branch string) (bool, *Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.12.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_12_0); err != nil {
 | 
			
		||||
		return false, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	status, resp, err := c.getStatusCode("DELETE", fmt.Sprintf("/repos/%s/%s/branches/%s", user, repo, branch), nil, nil)
 | 
			
		||||
| 
						 | 
				
			
			@ -118,7 +118,7 @@ func (opt CreateBranchOption) Validate() error {
 | 
			
		|||
 | 
			
		||||
// CreateBranch creates a branch for a user's repository
 | 
			
		||||
func (c *Client) CreateBranch(owner, repo string, opt CreateBranchOption) (*Branch, *Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.13.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_13_0); err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	if err := opt.Validate(); err != nil {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										10
									
								
								vendor/code.gitea.io/sdk/gitea/repo_branch_protection.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								vendor/code.gitea.io/sdk/gitea/repo_branch_protection.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -92,7 +92,7 @@ type ListBranchProtectionsOptions struct {
 | 
			
		|||
 | 
			
		||||
// ListBranchProtections list branch protections for a repo
 | 
			
		||||
func (c *Client) ListBranchProtections(owner, repo string, opt ListBranchProtectionsOptions) ([]*BranchProtection, *Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.12.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_12_0); err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	bps := make([]*BranchProtection, 0, opt.PageSize)
 | 
			
		||||
| 
						 | 
				
			
			@ -104,7 +104,7 @@ func (c *Client) ListBranchProtections(owner, repo string, opt ListBranchProtect
 | 
			
		|||
 | 
			
		||||
// GetBranchProtection gets a branch protection
 | 
			
		||||
func (c *Client) GetBranchProtection(owner, repo, name string) (*BranchProtection, *Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.12.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_12_0); err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	bp := new(BranchProtection)
 | 
			
		||||
| 
						 | 
				
			
			@ -114,7 +114,7 @@ func (c *Client) GetBranchProtection(owner, repo, name string) (*BranchProtectio
 | 
			
		|||
 | 
			
		||||
// CreateBranchProtection creates a branch protection for a repo
 | 
			
		||||
func (c *Client) CreateBranchProtection(owner, repo string, opt CreateBranchProtectionOption) (*BranchProtection, *Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.12.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_12_0); err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	bp := new(BranchProtection)
 | 
			
		||||
| 
						 | 
				
			
			@ -128,7 +128,7 @@ func (c *Client) CreateBranchProtection(owner, repo string, opt CreateBranchProt
 | 
			
		|||
 | 
			
		||||
// EditBranchProtection edits a branch protection for a repo
 | 
			
		||||
func (c *Client) EditBranchProtection(owner, repo, name string, opt EditBranchProtectionOption) (*BranchProtection, *Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.12.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_12_0); err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	bp := new(BranchProtection)
 | 
			
		||||
| 
						 | 
				
			
			@ -142,7 +142,7 @@ func (c *Client) EditBranchProtection(owner, repo, name string, opt EditBranchPr
 | 
			
		|||
 | 
			
		||||
// DeleteBranchProtection deletes a branch protection for a repo
 | 
			
		||||
func (c *Client) DeleteBranchProtection(owner, repo, name string) (*Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.12.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_12_0); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	_, resp, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/branch_protections/%s", owner, repo, name), jsonHeader, nil)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										5
									
								
								vendor/code.gitea.io/sdk/gitea/repo_commit.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								vendor/code.gitea.io/sdk/gitea/repo_commit.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -19,8 +19,9 @@ type Identity struct {
 | 
			
		|||
 | 
			
		||||
// CommitMeta contains meta information of a commit in terms of API.
 | 
			
		||||
type CommitMeta struct {
 | 
			
		||||
	URL string `json:"url"`
 | 
			
		||||
	SHA string `json:"sha"`
 | 
			
		||||
	URL     string    `json:"url"`
 | 
			
		||||
	SHA     string    `json:"sha"`
 | 
			
		||||
	Created time.Time `json:"created"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CommitUser contains information of a user in the context of a commit.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										2
									
								
								vendor/code.gitea.io/sdk/gitea/repo_file.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/code.gitea.io/sdk/gitea/repo_file.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -182,7 +182,7 @@ func (c *Client) DeleteFile(owner, repo, filepath string, opt DeleteFileOptions)
 | 
			
		|||
func (c *Client) setDefaultBranchForOldVersions(owner, repo, branch string) (string, error) {
 | 
			
		||||
	if len(branch) == 0 {
 | 
			
		||||
		// Gitea >= 1.12.0 Use DefaultBranch on "", mimic this for older versions
 | 
			
		||||
		if c.CheckServerVersionConstraint(">=1.12.0") != nil {
 | 
			
		||||
		if c.checkServerVersionGreaterThanOrEqual(version1_12_0) != nil {
 | 
			
		||||
			r, _, err := c.GetRepo(owner, repo)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return "", err
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										19
									
								
								vendor/code.gitea.io/sdk/gitea/repo_migrate.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										19
									
								
								vendor/code.gitea.io/sdk/gitea/repo_migrate.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -20,10 +20,10 @@ const (
 | 
			
		|||
	GitServiceGithub GitServiceType = "github"
 | 
			
		||||
	// GitServiceGitlab represents a gitlab service
 | 
			
		||||
	GitServiceGitlab GitServiceType = "gitlab"
 | 
			
		||||
	// GitServiceGitea represents a gitea service
 | 
			
		||||
	GitServiceGitea GitServiceType = "gitea"
 | 
			
		||||
 | 
			
		||||
	// Not supported jet
 | 
			
		||||
	// // GitServiceGitea represents a gitea service
 | 
			
		||||
	// GitServiceGitea GitServiceType = "gitea"
 | 
			
		||||
	// // GitServiceGogs represents a gogs service
 | 
			
		||||
	// GitServiceGogs GitServiceType = "gogs"
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			@ -51,7 +51,7 @@ type MigrateRepoOption struct {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
// Validate the MigrateRepoOption struct
 | 
			
		||||
func (opt *MigrateRepoOption) Validate() error {
 | 
			
		||||
func (opt *MigrateRepoOption) Validate(c *Client) error {
 | 
			
		||||
	// check user options
 | 
			
		||||
	if len(opt.CloneAddr) == 0 {
 | 
			
		||||
		return fmt.Errorf("CloneAddr required")
 | 
			
		||||
| 
						 | 
				
			
			@ -69,6 +69,15 @@ func (opt *MigrateRepoOption) Validate() error {
 | 
			
		|||
		if len(opt.AuthToken) == 0 {
 | 
			
		||||
			return fmt.Errorf("github require token authentication")
 | 
			
		||||
		}
 | 
			
		||||
	case GitServiceGitlab, GitServiceGitea:
 | 
			
		||||
		if len(opt.AuthToken) == 0 {
 | 
			
		||||
			return fmt.Errorf("%s require token authentication", opt.Service)
 | 
			
		||||
		}
 | 
			
		||||
		// Gitlab is supported since 1.12.0 but api cant handle it until 1.13.0
 | 
			
		||||
		// https://github.com/go-gitea/gitea/pull/12672
 | 
			
		||||
		if c.checkServerVersionGreaterThanOrEqual(version1_13_0) != nil {
 | 
			
		||||
			return fmt.Errorf("migrate from service %s need gitea >= 1.13.0", opt.Service)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -78,11 +87,11 @@ func (opt *MigrateRepoOption) Validate() error {
 | 
			
		|||
// To migrate a repository for a organization, the authenticated user must be a
 | 
			
		||||
// owner of the specified organization.
 | 
			
		||||
func (c *Client) MigrateRepo(opt MigrateRepoOption) (*Repository, *Response, error) {
 | 
			
		||||
	if err := opt.Validate(); err != nil {
 | 
			
		||||
	if err := opt.Validate(c); err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.13.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_13_0); err != nil {
 | 
			
		||||
		if len(opt.AuthToken) != 0 {
 | 
			
		||||
			// gitea <= 1.12 dont understand AuthToken
 | 
			
		||||
			opt.AuthUsername = opt.AuthToken
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										2
									
								
								vendor/code.gitea.io/sdk/gitea/repo_transfer.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/code.gitea.io/sdk/gitea/repo_transfer.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -20,7 +20,7 @@ type TransferRepoOption struct {
 | 
			
		|||
 | 
			
		||||
// TransferRepo transfers the ownership of a repository
 | 
			
		||||
func (c *Client) TransferRepo(owner, reponame string, opt TransferRepoOption) (*Repository, *Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.12.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_12_0); err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	body, err := json.Marshal(&opt)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										8
									
								
								vendor/code.gitea.io/sdk/gitea/settings.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								vendor/code.gitea.io/sdk/gitea/settings.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -33,7 +33,7 @@ type GlobalAttachmentSettings struct {
 | 
			
		|||
 | 
			
		||||
// GetGlobalUISettings get global ui settings witch are exposed by API
 | 
			
		||||
func (c *Client) GetGlobalUISettings() (*GlobalUISettings, *Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.13.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_13_0); err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	conf := new(GlobalUISettings)
 | 
			
		||||
| 
						 | 
				
			
			@ -43,7 +43,7 @@ func (c *Client) GetGlobalUISettings() (*GlobalUISettings, *Response, error) {
 | 
			
		|||
 | 
			
		||||
// GetGlobalRepoSettings get global repository settings witch are exposed by API
 | 
			
		||||
func (c *Client) GetGlobalRepoSettings() (*GlobalRepoSettings, *Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.13.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_13_0); err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	conf := new(GlobalRepoSettings)
 | 
			
		||||
| 
						 | 
				
			
			@ -53,7 +53,7 @@ func (c *Client) GetGlobalRepoSettings() (*GlobalRepoSettings, *Response, error)
 | 
			
		|||
 | 
			
		||||
// GetGlobalAPISettings get global api settings witch are exposed by it
 | 
			
		||||
func (c *Client) GetGlobalAPISettings() (*GlobalAPISettings, *Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.13.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_13_0); err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	conf := new(GlobalAPISettings)
 | 
			
		||||
| 
						 | 
				
			
			@ -63,7 +63,7 @@ func (c *Client) GetGlobalAPISettings() (*GlobalAPISettings, *Response, error) {
 | 
			
		|||
 | 
			
		||||
// GetGlobalAttachmentSettings get global repository settings witch are exposed by API
 | 
			
		||||
func (c *Client) GetGlobalAttachmentSettings() (*GlobalAttachmentSettings, *Response, error) {
 | 
			
		||||
	if err := c.CheckServerVersionConstraint(">=1.13.0"); err != nil {
 | 
			
		||||
	if err := c.checkServerVersionGreaterThanOrEqual(version1_13_0); err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	conf := new(GlobalAttachmentSettings)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										26
									
								
								vendor/code.gitea.io/sdk/gitea/version.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										26
									
								
								vendor/code.gitea.io/sdk/gitea/version.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -42,6 +42,32 @@ func (c *Client) CheckServerVersionConstraint(constraint string) error {
 | 
			
		|||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// predefined versions only have to be parsed by library once
 | 
			
		||||
var (
 | 
			
		||||
	version1_10_0, _ = version.NewVersion("1.10.0")
 | 
			
		||||
	version1_11_0, _ = version.NewVersion("1.11.0")
 | 
			
		||||
	version1_12_0, _ = version.NewVersion("1.12.0")
 | 
			
		||||
	version1_13_0, _ = version.NewVersion("1.13.0")
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// checkServerVersionGreaterThanOrEqual is internally used to speed up things and ignore issues with prerelease
 | 
			
		||||
func (c *Client) checkServerVersionGreaterThanOrEqual(v *version.Version) error {
 | 
			
		||||
	c.versionLock.RLock()
 | 
			
		||||
	if c.serverVersion == nil {
 | 
			
		||||
		c.versionLock.RUnlock()
 | 
			
		||||
		if err := c.loadClientServerVersion(); err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		c.versionLock.RUnlock()
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if !c.serverVersion.GreaterThanOrEqual(v) {
 | 
			
		||||
		return fmt.Errorf("gitea server at %s is older than %s", c.url, v.Original())
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// loadClientServerVersion init the serverVersion variable
 | 
			
		||||
func (c *Client) loadClientServerVersion() error {
 | 
			
		||||
	c.versionLock.Lock()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										22
									
								
								vendor/github.com/asaskevich/govalidator/.travis.yml
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										22
									
								
								vendor/github.com/asaskevich/govalidator/.travis.yml
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,18 +1,12 @@
 | 
			
		|||
dist: bionic
 | 
			
		||||
language: go
 | 
			
		||||
env: GO111MODULE=on GOFLAGS='-mod vendor'
 | 
			
		||||
install: true
 | 
			
		||||
email: false
 | 
			
		||||
 | 
			
		||||
dist: xenial
 | 
			
		||||
go:
 | 
			
		||||
  - 1.10
 | 
			
		||||
  - 1.11
 | 
			
		||||
  - 1.12
 | 
			
		||||
  - 1.13
 | 
			
		||||
  - tip
 | 
			
		||||
  - '1.10'
 | 
			
		||||
  - '1.11'
 | 
			
		||||
  - '1.12'
 | 
			
		||||
  - '1.13'
 | 
			
		||||
  - 'tip'
 | 
			
		||||
 | 
			
		||||
before_script:
 | 
			
		||||
  - go install github.com/golangci/golangci-lint/cmd/golangci-lint
 | 
			
		||||
script:
 | 
			
		||||
  - golangci-lint run       # run a bunch of code checkers/linters in parallel
 | 
			
		||||
  - go test -v -race ./...  # Run all the tests with the race detector enabled
 | 
			
		||||
     - go test -coverpkg=./... -coverprofile=coverage.info -timeout=5s
 | 
			
		||||
     - bash <(curl -s https://codecov.io/bash)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										43
									
								
								vendor/github.com/asaskevich/govalidator/CODE_OF_CONDUCT.md
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								vendor/github.com/asaskevich/govalidator/CODE_OF_CONDUCT.md
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,43 @@
 | 
			
		|||
# Contributor Code of Conduct
 | 
			
		||||
 | 
			
		||||
This project adheres to [The Code Manifesto](http://codemanifesto.com)
 | 
			
		||||
as its guidelines for contributor interactions.
 | 
			
		||||
 | 
			
		||||
## The Code Manifesto
 | 
			
		||||
 | 
			
		||||
We want to work in an ecosystem that empowers developers to reach their
 | 
			
		||||
potential — one that encourages growth and effective collaboration. A space
 | 
			
		||||
that is safe for all.
 | 
			
		||||
 | 
			
		||||
A space such as this benefits everyone that participates in it. It encourages
 | 
			
		||||
new developers to enter our field. It is through discussion and collaboration
 | 
			
		||||
that we grow, and through growth that we improve.
 | 
			
		||||
 | 
			
		||||
In the effort to create such a place, we hold to these values:
 | 
			
		||||
 | 
			
		||||
1. **Discrimination limits us.** This includes discrimination on the basis of
 | 
			
		||||
   race, gender, sexual orientation, gender identity, age, nationality,
 | 
			
		||||
   technology and any other arbitrary exclusion of a group of people.
 | 
			
		||||
2. **Boundaries honor us.** Your comfort levels are not everyone’s comfort
 | 
			
		||||
   levels. Remember that, and if brought to your attention, heed it.
 | 
			
		||||
3. **We are our biggest assets.** None of us were born masters of our trade.
 | 
			
		||||
   Each of us has been helped along the way. Return that favor, when and where
 | 
			
		||||
   you can.
 | 
			
		||||
4. **We are resources for the future.** As an extension of #3, share what you
 | 
			
		||||
   know. Make yourself a resource to help those that come after you.
 | 
			
		||||
5. **Respect defines us.** Treat others as you wish to be treated. Make your
 | 
			
		||||
   discussions, criticisms and debates from a position of respectfulness. Ask
 | 
			
		||||
   yourself, is it true? Is it necessary? Is it constructive? Anything less is
 | 
			
		||||
   unacceptable.
 | 
			
		||||
6. **Reactions require grace.** Angry responses are valid, but abusive language
 | 
			
		||||
   and vindictive actions are toxic. When something happens that offends you,
 | 
			
		||||
   handle it assertively, but be respectful. Escalate reasonably, and try to
 | 
			
		||||
   allow the offender an opportunity to explain themselves, and possibly
 | 
			
		||||
   correct the issue.
 | 
			
		||||
7. **Opinions are just that: opinions.** Each and every one of us, due to our
 | 
			
		||||
   background and upbringing, have varying opinions. That is perfectly
 | 
			
		||||
   acceptable. Remember this: if you respect your own opinions, you should
 | 
			
		||||
   respect the opinions of others.
 | 
			
		||||
8. **To err is human.** You might not intend it, but mistakes do happen and
 | 
			
		||||
   contribute to build experience. Tolerate honest mistakes, and don't
 | 
			
		||||
   hesitate to apologize if you make one yourself.
 | 
			
		||||
							
								
								
									
										2
									
								
								vendor/github.com/asaskevich/govalidator/LICENSE
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/asaskevich/govalidator/LICENSE
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
The MIT License (MIT)
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2014 Alex Saskevich
 | 
			
		||||
Copyright (c) 2014-2020 Alex Saskevich
 | 
			
		||||
 | 
			
		||||
Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										9
									
								
								vendor/github.com/asaskevich/govalidator/README.md
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								vendor/github.com/asaskevich/govalidator/README.md
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,7 +1,8 @@
 | 
			
		|||
govalidator
 | 
			
		||||
===========
 | 
			
		||||
[](https://gitter.im/asaskevich/govalidator?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) [](https://godoc.org/github.com/asaskevich/govalidator) [](https://coveralls.io/r/asaskevich/govalidator?branch=master) [](https://app.wercker.com/project/bykey/1ec990b09ea86c910d5f08b0e02c6043)
 | 
			
		||||
[](https://travis-ci.org/asaskevich/govalidator) [](https://goreportcard.com/report/github.com/asaskevich/govalidator) [](http://go-search.org/view?id=github.com%2Fasaskevich%2Fgovalidator) [](#backers) [](#sponsors) [](https://app.fossa.io/projects/git%2Bgithub.com%2Fasaskevich%2Fgovalidator?ref=badge_shield)
 | 
			
		||||
[](https://gitter.im/asaskevich/govalidator?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) [](https://godoc.org/github.com/asaskevich/govalidator)
 | 
			
		||||
[](https://travis-ci.org/asaskevich/govalidator)
 | 
			
		||||
[](https://codecov.io/gh/asaskevich/govalidator) [](https://goreportcard.com/report/github.com/asaskevich/govalidator) [](http://go-search.org/view?id=github.com%2Fasaskevich%2Fgovalidator) [](#backers) [](#sponsors) [](https://app.fossa.io/projects/git%2Bgithub.com%2Fasaskevich%2Fgovalidator?ref=badge_shield)
 | 
			
		||||
 | 
			
		||||
A package of validators and sanitizers for strings, structs and collections. Based on [validator.js](https://github.com/chriso/validator.js).
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -279,7 +280,7 @@ type User	struct {
 | 
			
		|||
  Age  int         `valid:"type(int)"`
 | 
			
		||||
  Meta interface{} `valid:"type(string)"`
 | 
			
		||||
}
 | 
			
		||||
result, err := govalidator.ValidateStruct(user{"Bob", 20, "meta"})
 | 
			
		||||
result, err := govalidator.ValidateStruct(User{"Bob", 20, "meta"})
 | 
			
		||||
if err != nil {
 | 
			
		||||
	println("error: " + err.Error())
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -392,6 +393,8 @@ Validators with parameters
 | 
			
		|||
"matches(pattern)": StringMatches,
 | 
			
		||||
"in(string1|string2|...|stringN)": IsIn,
 | 
			
		||||
"rsapub(keylength)" : IsRsaPub,
 | 
			
		||||
"minstringlength(int): MinStringLength,
 | 
			
		||||
"maxstringlength(int): MaxStringLength,
 | 
			
		||||
```
 | 
			
		||||
Validators with parameters for any type
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										29
									
								
								vendor/github.com/asaskevich/govalidator/arrays.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										29
									
								
								vendor/github.com/asaskevich/govalidator/arrays.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -9,6 +9,35 @@ type ResultIterator func(interface{}, int) interface{}
 | 
			
		|||
// ConditionIterator is the function that accepts element of slice/array and its index and returns boolean
 | 
			
		||||
type ConditionIterator func(interface{}, int) bool
 | 
			
		||||
 | 
			
		||||
// ReduceIterator is the function that accepts two element of slice/array and returns result of merging those values
 | 
			
		||||
type ReduceIterator func(interface{}, interface{}) interface{}
 | 
			
		||||
 | 
			
		||||
// Some validates that any item of array corresponds to ConditionIterator. Returns boolean.
 | 
			
		||||
func Some(array []interface{}, iterator ConditionIterator) bool {
 | 
			
		||||
	res := false
 | 
			
		||||
	for index, data := range array {
 | 
			
		||||
		res = res || iterator(data, index)
 | 
			
		||||
	}
 | 
			
		||||
	return res
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Every validates that every item of array corresponds to ConditionIterator. Returns boolean.
 | 
			
		||||
func Every(array []interface{}, iterator ConditionIterator) bool {
 | 
			
		||||
	res := true
 | 
			
		||||
	for index, data := range array {
 | 
			
		||||
		res = res && iterator(data, index)
 | 
			
		||||
	}
 | 
			
		||||
	return res
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Reduce boils down a list of values into a single value by ReduceIterator
 | 
			
		||||
func Reduce(array []interface{}, iterator ReduceIterator, initialValue interface{}) interface{} {
 | 
			
		||||
	for _, data := range array {
 | 
			
		||||
		initialValue = iterator(initialValue, data)
 | 
			
		||||
	}
 | 
			
		||||
	return initialValue
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Each iterates over the slice and apply Iterator to every item
 | 
			
		||||
func Each(array []interface{}, iterator Iterator) {
 | 
			
		||||
	for index, data := range array {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										33
									
								
								vendor/github.com/asaskevich/govalidator/converter.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										33
									
								
								vendor/github.com/asaskevich/govalidator/converter.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -10,7 +10,7 @@ import (
 | 
			
		|||
// ToString convert the input to a string.
 | 
			
		||||
func ToString(obj interface{}) string {
 | 
			
		||||
	res := fmt.Sprintf("%v", obj)
 | 
			
		||||
	return string(res)
 | 
			
		||||
	return res
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ToJSON convert the input to a valid JSON string
 | 
			
		||||
| 
						 | 
				
			
			@ -23,12 +23,27 @@ func ToJSON(obj interface{}) (string, error) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
// ToFloat convert the input string to a float, or 0.0 if the input is not a float.
 | 
			
		||||
func ToFloat(str string) (float64, error) {
 | 
			
		||||
	res, err := strconv.ParseFloat(str, 64)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		res = 0.0
 | 
			
		||||
func ToFloat(value interface{}) (res float64, err error) {
 | 
			
		||||
	val := reflect.ValueOf(value)
 | 
			
		||||
 | 
			
		||||
	switch value.(type) {
 | 
			
		||||
	case int, int8, int16, int32, int64:
 | 
			
		||||
		res = float64(val.Int())
 | 
			
		||||
	case uint, uint8, uint16, uint32, uint64:
 | 
			
		||||
		res = float64(val.Uint())
 | 
			
		||||
	case float32, float64:
 | 
			
		||||
		res = val.Float()
 | 
			
		||||
	case string:
 | 
			
		||||
		res, err = strconv.ParseFloat(val.String(), 64)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			res = 0
 | 
			
		||||
		}
 | 
			
		||||
	default:
 | 
			
		||||
		err = fmt.Errorf("ToInt: unknown interface type %T", value)
 | 
			
		||||
		res = 0
 | 
			
		||||
	}
 | 
			
		||||
	return res, err
 | 
			
		||||
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ToInt convert the input string or any int type to an integer type 64, or 0 if the input is not an integer.
 | 
			
		||||
| 
						 | 
				
			
			@ -40,6 +55,8 @@ func ToInt(value interface{}) (res int64, err error) {
 | 
			
		|||
		res = val.Int()
 | 
			
		||||
	case uint, uint8, uint16, uint32, uint64:
 | 
			
		||||
		res = int64(val.Uint())
 | 
			
		||||
	case float32, float64:
 | 
			
		||||
		res = int64(val.Float())
 | 
			
		||||
	case string:
 | 
			
		||||
		if IsInt(val.String()) {
 | 
			
		||||
			res, err = strconv.ParseInt(val.String(), 0, 64)
 | 
			
		||||
| 
						 | 
				
			
			@ -47,11 +64,11 @@ func ToInt(value interface{}) (res int64, err error) {
 | 
			
		|||
				res = 0
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			err = fmt.Errorf("math: square root of negative number %g", value)
 | 
			
		||||
			err = fmt.Errorf("ToInt: invalid numeric format %g", value)
 | 
			
		||||
			res = 0
 | 
			
		||||
		}
 | 
			
		||||
	default:
 | 
			
		||||
		err = fmt.Errorf("math: square root of negative number %g", value)
 | 
			
		||||
		err = fmt.Errorf("ToInt: unknown interface type %T", value)
 | 
			
		||||
		res = 0
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										2
									
								
								vendor/github.com/asaskevich/govalidator/go.mod
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/asaskevich/govalidator/go.mod
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,3 +1,3 @@
 | 
			
		|||
module github.com/asaskevich/govalidator
 | 
			
		||||
 | 
			
		||||
go 1.12
 | 
			
		||||
go 1.13
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										37
									
								
								vendor/github.com/asaskevich/govalidator/numerics.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										37
									
								
								vendor/github.com/asaskevich/govalidator/numerics.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -2,7 +2,6 @@ package govalidator
 | 
			
		|||
 | 
			
		||||
import (
 | 
			
		||||
	"math"
 | 
			
		||||
	"reflect"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Abs returns absolute value of number
 | 
			
		||||
| 
						 | 
				
			
			@ -41,7 +40,7 @@ func IsNonPositive(value float64) bool {
 | 
			
		|||
	return value <= 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// InRange returns true if value lies between left and right border
 | 
			
		||||
// InRangeInt returns true if value lies between left and right border
 | 
			
		||||
func InRangeInt(value, left, right interface{}) bool {
 | 
			
		||||
	value64, _ := ToInt(value)
 | 
			
		||||
	left64, _ := ToInt(left)
 | 
			
		||||
| 
						 | 
				
			
			@ -52,7 +51,7 @@ func InRangeInt(value, left, right interface{}) bool {
 | 
			
		|||
	return value64 >= left64 && value64 <= right64
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// InRange returns true if value lies between left and right border
 | 
			
		||||
// InRangeFloat32 returns true if value lies between left and right border
 | 
			
		||||
func InRangeFloat32(value, left, right float32) bool {
 | 
			
		||||
	if left > right {
 | 
			
		||||
		left, right = right, left
 | 
			
		||||
| 
						 | 
				
			
			@ -60,7 +59,7 @@ func InRangeFloat32(value, left, right float32) bool {
 | 
			
		|||
	return value >= left && value <= right
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// InRange returns true if value lies between left and right border
 | 
			
		||||
// InRangeFloat64 returns true if value lies between left and right border
 | 
			
		||||
func InRangeFloat64(value, left, right float64) bool {
 | 
			
		||||
	if left > right {
 | 
			
		||||
		left, right = right, left
 | 
			
		||||
| 
						 | 
				
			
			@ -68,20 +67,24 @@ func InRangeFloat64(value, left, right float64) bool {
 | 
			
		|||
	return value >= left && value <= right
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// InRange returns true if value lies between left and right border, generic type to handle int, float32 or float64, all types must the same type
 | 
			
		||||
// InRange returns true if value lies between left and right border, generic type to handle int, float32, float64 and string.
 | 
			
		||||
// All types must the same type.
 | 
			
		||||
// False if value doesn't lie in range or if it incompatible or not comparable
 | 
			
		||||
func InRange(value interface{}, left interface{}, right interface{}) bool {
 | 
			
		||||
 | 
			
		||||
	reflectValue := reflect.TypeOf(value).Kind()
 | 
			
		||||
	reflectLeft := reflect.TypeOf(left).Kind()
 | 
			
		||||
	reflectRight := reflect.TypeOf(right).Kind()
 | 
			
		||||
 | 
			
		||||
	if reflectValue == reflect.Int && reflectLeft == reflect.Int && reflectRight == reflect.Int {
 | 
			
		||||
		return InRangeInt(value.(int), left.(int), right.(int))
 | 
			
		||||
	} else if reflectValue == reflect.Float32 && reflectLeft == reflect.Float32 && reflectRight == reflect.Float32 {
 | 
			
		||||
		return InRangeFloat32(value.(float32), left.(float32), right.(float32))
 | 
			
		||||
	} else if reflectValue == reflect.Float64 && reflectLeft == reflect.Float64 && reflectRight == reflect.Float64 {
 | 
			
		||||
		return InRangeFloat64(value.(float64), left.(float64), right.(float64))
 | 
			
		||||
	} else {
 | 
			
		||||
	switch value.(type) {
 | 
			
		||||
	case int:
 | 
			
		||||
		intValue, _ := ToInt(value)
 | 
			
		||||
		intLeft, _ := ToInt(left)
 | 
			
		||||
		intRight, _ := ToInt(right)
 | 
			
		||||
		return InRangeInt(intValue, intLeft, intRight)
 | 
			
		||||
	case float32, float64:
 | 
			
		||||
		intValue, _ := ToFloat(value)
 | 
			
		||||
		intLeft, _ := ToFloat(left)
 | 
			
		||||
		intRight, _ := ToFloat(right)
 | 
			
		||||
		return InRangeFloat64(intValue, intLeft, intRight)
 | 
			
		||||
	case string:
 | 
			
		||||
		return value.(string) >= left.(string) && value.(string) <= right.(string)
 | 
			
		||||
	default:
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										4
									
								
								vendor/github.com/asaskevich/govalidator/patterns.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/github.com/asaskevich/govalidator/patterns.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -38,7 +38,7 @@ const (
 | 
			
		|||
	URLPort           string = `(:(\d{1,5}))`
 | 
			
		||||
	URLIP             string = `([1-9]\d?|1\d\d|2[01]\d|22[0-3]|24\d|25[0-5])(\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])){2}(?:\.([0-9]\d?|1\d\d|2[0-4]\d|25[0-5]))`
 | 
			
		||||
	URLSubdomain      string = `((www\.)|([a-zA-Z0-9]+([-_\.]?[a-zA-Z0-9])*[a-zA-Z0-9]\.[a-zA-Z0-9]+))`
 | 
			
		||||
	URL               string = `^` + URLSchema + `?` + URLUsername + `?` + `((` + URLIP + `|(\[` + IP + `\])|(([a-zA-Z0-9]([a-zA-Z0-9-_]+)?[a-zA-Z0-9]([-\.][a-zA-Z0-9]+)*)|(` + URLSubdomain + `?))?(([a-zA-Z\x{00a1}-\x{ffff}0-9]+-?-?)*[a-zA-Z\x{00a1}-\x{ffff}0-9]+)(?:\.([a-zA-Z\x{00a1}-\x{ffff}]{1,}))?))\.?` + URLPort + `?` + URLPath + `?$`
 | 
			
		||||
	URL                      = `^` + URLSchema + `?` + URLUsername + `?` + `((` + URLIP + `|(\[` + IP + `\])|(([a-zA-Z0-9]([a-zA-Z0-9-_]+)?[a-zA-Z0-9]([-\.][a-zA-Z0-9]+)*)|(` + URLSubdomain + `?))?(([a-zA-Z\x{00a1}-\x{ffff}0-9]+-?-?)*[a-zA-Z\x{00a1}-\x{ffff}0-9]+)(?:\.([a-zA-Z\x{00a1}-\x{ffff}]{1,}))?))\.?` + URLPort + `?` + URLPath + `?$`
 | 
			
		||||
	SSN               string = `^\d{3}[- ]?\d{2}[- ]?\d{4}$`
 | 
			
		||||
	WinPath           string = `^[a-zA-Z]:\\(?:[^\\/:*?"<>|\r\n]+\\)*[^\\/:*?"<>|\r\n]*$`
 | 
			
		||||
	UnixPath          string = `^(/[^/\x00]*)+/?$`
 | 
			
		||||
| 
						 | 
				
			
			@ -49,6 +49,7 @@ const (
 | 
			
		|||
	hasWhitespace     string = ".*[[:space:]]"
 | 
			
		||||
	hasWhitespaceOnly string = "^[[:space:]]+$"
 | 
			
		||||
	IMEI              string = "^[0-9a-f]{14}$|^\\d{15}$|^\\d{18}$"
 | 
			
		||||
	IMSI              string = "^\\d{14,15}$"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Used by IsFilePath func
 | 
			
		||||
| 
						 | 
				
			
			@ -102,4 +103,5 @@ var (
 | 
			
		|||
	rxHasWhitespace     = regexp.MustCompile(hasWhitespace)
 | 
			
		||||
	rxHasWhitespaceOnly = regexp.MustCompile(hasWhitespaceOnly)
 | 
			
		||||
	rxIMEI              = regexp.MustCompile(IMEI)
 | 
			
		||||
	rxIMSI              = regexp.MustCompile(IMSI)
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										24
									
								
								vendor/github.com/asaskevich/govalidator/types.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										24
									
								
								vendor/github.com/asaskevich/govalidator/types.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -14,8 +14,10 @@ type Validator func(str string) bool
 | 
			
		|||
// The second parameter should be the context (in the case of validating a struct: the whole object being validated).
 | 
			
		||||
type CustomTypeValidator func(i interface{}, o interface{}) bool
 | 
			
		||||
 | 
			
		||||
// ParamValidator is a wrapper for validator functions that accepts additional parameters.
 | 
			
		||||
// ParamValidator is a wrapper for validator functions that accept additional parameters.
 | 
			
		||||
type ParamValidator func(str string, params ...string) bool
 | 
			
		||||
 | 
			
		||||
// InterfaceParamValidator is a wrapper for functions that accept variants parameters for an interface value
 | 
			
		||||
type InterfaceParamValidator func(in interface{}, params ...string) bool
 | 
			
		||||
type tagOptionsMap map[string]tagOption
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -72,13 +74,13 @@ var ParamTagMap = map[string]ParamValidator{
 | 
			
		|||
 | 
			
		||||
// ParamTagRegexMap maps param tags to their respective regexes.
 | 
			
		||||
var ParamTagRegexMap = map[string]*regexp.Regexp{
 | 
			
		||||
	"range":        regexp.MustCompile("^range\\((\\d+)\\|(\\d+)\\)$"),
 | 
			
		||||
	"length":       regexp.MustCompile("^length\\((\\d+)\\|(\\d+)\\)$"),
 | 
			
		||||
	"runelength":   regexp.MustCompile("^runelength\\((\\d+)\\|(\\d+)\\)$"),
 | 
			
		||||
	"stringlength": regexp.MustCompile("^stringlength\\((\\d+)\\|(\\d+)\\)$"),
 | 
			
		||||
	"in":           regexp.MustCompile(`^in\((.*)\)`),
 | 
			
		||||
	"matches":      regexp.MustCompile(`^matches\((.+)\)$`),
 | 
			
		||||
	"rsapub":       regexp.MustCompile("^rsapub\\((\\d+)\\)$"),
 | 
			
		||||
	"range":           regexp.MustCompile("^range\\((\\d+)\\|(\\d+)\\)$"),
 | 
			
		||||
	"length":          regexp.MustCompile("^length\\((\\d+)\\|(\\d+)\\)$"),
 | 
			
		||||
	"runelength":      regexp.MustCompile("^runelength\\((\\d+)\\|(\\d+)\\)$"),
 | 
			
		||||
	"stringlength":    regexp.MustCompile("^stringlength\\((\\d+)\\|(\\d+)\\)$"),
 | 
			
		||||
	"in":              regexp.MustCompile(`^in\((.*)\)`),
 | 
			
		||||
	"matches":         regexp.MustCompile(`^matches\((.+)\)$`),
 | 
			
		||||
	"rsapub":          regexp.MustCompile("^rsapub\\((\\d+)\\)$"),
 | 
			
		||||
	"minstringlength": regexp.MustCompile("^minstringlength\\((\\d+)\\)$"),
 | 
			
		||||
	"maxstringlength": regexp.MustCompile("^maxstringlength\\((\\d+)\\)$"),
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -447,10 +449,10 @@ var ISO4217List = []string{
 | 
			
		|||
	"PAB", "PEN", "PGK", "PHP", "PKR", "PLN", "PYG",
 | 
			
		||||
	"QAR",
 | 
			
		||||
	"RON", "RSD", "RUB", "RWF",
 | 
			
		||||
	"SAR", "SBD", "SCR", "SDG", "SEK", "SGD", "SHP", "SLL", "SOS", "SRD", "SSP", "STD", "SVC", "SYP", "SZL",
 | 
			
		||||
	"SAR", "SBD", "SCR", "SDG", "SEK", "SGD", "SHP", "SLL", "SOS", "SRD", "SSP", "STD", "STN", "SVC", "SYP", "SZL",
 | 
			
		||||
	"THB", "TJS", "TMT", "TND", "TOP", "TRY", "TTD", "TWD", "TZS",
 | 
			
		||||
	"UAH", "UGX", "USD", "USN", "UYI", "UYU", "UZS",
 | 
			
		||||
	"VEF", "VND", "VUV",
 | 
			
		||||
	"UAH", "UGX", "USD", "USN", "UYI", "UYU", "UYW", "UZS",
 | 
			
		||||
	"VEF", "VES", "VND", "VUV",
 | 
			
		||||
	"WST",
 | 
			
		||||
	"XAF", "XAG", "XAU", "XBA", "XBB", "XBC", "XBD", "XCD", "XDR", "XOF", "XPD", "XPF", "XPT", "XSU", "XTS", "XUA", "XXX",
 | 
			
		||||
	"YER",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										293
									
								
								vendor/github.com/asaskevich/govalidator/validator.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										293
									
								
								vendor/github.com/asaskevich/govalidator/validator.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -32,7 +32,7 @@ var (
 | 
			
		|||
 | 
			
		||||
const maxURLRuneCount = 2083
 | 
			
		||||
const minURLRuneCount = 3
 | 
			
		||||
const RF3339WithoutZone = "2006-01-02T15:04:05"
 | 
			
		||||
const rfc3339WithoutZone = "2006-01-02T15:04:05"
 | 
			
		||||
 | 
			
		||||
// SetFieldsRequiredByDefault causes validation to fail when struct fields
 | 
			
		||||
// do not include validations or are not explicitly marked as exempt (using `valid:"-"` or `valid:"email,optional"`).
 | 
			
		||||
| 
						 | 
				
			
			@ -63,13 +63,13 @@ func SetNilPtrAllowedByRequired(value bool) {
 | 
			
		|||
	nilPtrAllowedByRequired = value
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsEmail check if the string is an email.
 | 
			
		||||
// IsEmail checks if the string is an email.
 | 
			
		||||
func IsEmail(str string) bool {
 | 
			
		||||
	// TODO uppercase letters are not supported
 | 
			
		||||
	return rxEmail.MatchString(str)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsExistingEmail check if the string is an email of existing domain
 | 
			
		||||
// IsExistingEmail checks if the string is an email of existing domain
 | 
			
		||||
func IsExistingEmail(email string) bool {
 | 
			
		||||
 | 
			
		||||
	if len(email) < 6 || len(email) > 254 {
 | 
			
		||||
| 
						 | 
				
			
			@ -84,13 +84,13 @@ func IsExistingEmail(email string) bool {
 | 
			
		|||
	if len(user) > 64 {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
	if userDotRegexp.MatchString(user) || !userRegexp.MatchString(user) || !hostRegexp.MatchString(host) {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
	switch host {
 | 
			
		||||
	case "localhost", "example.com":
 | 
			
		||||
		return true
 | 
			
		||||
	}
 | 
			
		||||
	if userDotRegexp.MatchString(user) || !userRegexp.MatchString(user) || !hostRegexp.MatchString(host) {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
	if _, err := net.LookupMX(host); err != nil {
 | 
			
		||||
		if _, err := net.LookupIP(host); err != nil {
 | 
			
		||||
			return false
 | 
			
		||||
| 
						 | 
				
			
			@ -100,7 +100,7 @@ func IsExistingEmail(email string) bool {
 | 
			
		|||
	return true
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsURL check if the string is an URL.
 | 
			
		||||
// IsURL checks if the string is an URL.
 | 
			
		||||
func IsURL(str string) bool {
 | 
			
		||||
	if str == "" || utf8.RuneCountInString(str) >= maxURLRuneCount || len(str) <= minURLRuneCount || strings.HasPrefix(str, ".") {
 | 
			
		||||
		return false
 | 
			
		||||
| 
						 | 
				
			
			@ -124,7 +124,7 @@ func IsURL(str string) bool {
 | 
			
		|||
	return rxURL.MatchString(str)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsRequestURL check if the string rawurl, assuming
 | 
			
		||||
// IsRequestURL checks if the string rawurl, assuming
 | 
			
		||||
// it was received in an HTTP request, is a valid
 | 
			
		||||
// URL confirm to RFC 3986
 | 
			
		||||
func IsRequestURL(rawurl string) bool {
 | 
			
		||||
| 
						 | 
				
			
			@ -138,7 +138,7 @@ func IsRequestURL(rawurl string) bool {
 | 
			
		|||
	return true
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsRequestURI check if the string rawurl, assuming
 | 
			
		||||
// IsRequestURI checks if the string rawurl, assuming
 | 
			
		||||
// it was received in an HTTP request, is an
 | 
			
		||||
// absolute URI or an absolute path.
 | 
			
		||||
func IsRequestURI(rawurl string) bool {
 | 
			
		||||
| 
						 | 
				
			
			@ -146,7 +146,7 @@ func IsRequestURI(rawurl string) bool {
 | 
			
		|||
	return err == nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsAlpha check if the string contains only letters (a-zA-Z). Empty string is valid.
 | 
			
		||||
// IsAlpha checks if the string contains only letters (a-zA-Z). Empty string is valid.
 | 
			
		||||
func IsAlpha(str string) bool {
 | 
			
		||||
	if IsNull(str) {
 | 
			
		||||
		return true
 | 
			
		||||
| 
						 | 
				
			
			@ -154,7 +154,7 @@ func IsAlpha(str string) bool {
 | 
			
		|||
	return rxAlpha.MatchString(str)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//IsUTFLetter check if the string contains only unicode letter characters.
 | 
			
		||||
//IsUTFLetter checks if the string contains only unicode letter characters.
 | 
			
		||||
//Similar to IsAlpha but for all languages. Empty string is valid.
 | 
			
		||||
func IsUTFLetter(str string) bool {
 | 
			
		||||
	if IsNull(str) {
 | 
			
		||||
| 
						 | 
				
			
			@ -170,7 +170,7 @@ func IsUTFLetter(str string) bool {
 | 
			
		|||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsAlphanumeric check if the string contains only letters and numbers. Empty string is valid.
 | 
			
		||||
// IsAlphanumeric checks if the string contains only letters and numbers. Empty string is valid.
 | 
			
		||||
func IsAlphanumeric(str string) bool {
 | 
			
		||||
	if IsNull(str) {
 | 
			
		||||
		return true
 | 
			
		||||
| 
						 | 
				
			
			@ -178,7 +178,7 @@ func IsAlphanumeric(str string) bool {
 | 
			
		|||
	return rxAlphanumeric.MatchString(str)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsUTFLetterNumeric check if the string contains only unicode letters and numbers. Empty string is valid.
 | 
			
		||||
// IsUTFLetterNumeric checks if the string contains only unicode letters and numbers. Empty string is valid.
 | 
			
		||||
func IsUTFLetterNumeric(str string) bool {
 | 
			
		||||
	if IsNull(str) {
 | 
			
		||||
		return true
 | 
			
		||||
| 
						 | 
				
			
			@ -192,7 +192,7 @@ func IsUTFLetterNumeric(str string) bool {
 | 
			
		|||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsNumeric check if the string contains only numbers. Empty string is valid.
 | 
			
		||||
// IsNumeric checks if the string contains only numbers. Empty string is valid.
 | 
			
		||||
func IsNumeric(str string) bool {
 | 
			
		||||
	if IsNull(str) {
 | 
			
		||||
		return true
 | 
			
		||||
| 
						 | 
				
			
			@ -200,7 +200,7 @@ func IsNumeric(str string) bool {
 | 
			
		|||
	return rxNumeric.MatchString(str)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsUTFNumeric check if the string contains only unicode numbers of any kind.
 | 
			
		||||
// IsUTFNumeric checks if the string contains only unicode numbers of any kind.
 | 
			
		||||
// Numbers can be 0-9 but also Fractions ¾,Roman Ⅸ and Hangzhou 〩. Empty string is valid.
 | 
			
		||||
func IsUTFNumeric(str string) bool {
 | 
			
		||||
	if IsNull(str) {
 | 
			
		||||
| 
						 | 
				
			
			@ -222,7 +222,7 @@ func IsUTFNumeric(str string) bool {
 | 
			
		|||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsUTFDigit check if the string contains only unicode radix-10 decimal digits. Empty string is valid.
 | 
			
		||||
// IsUTFDigit checks if the string contains only unicode radix-10 decimal digits. Empty string is valid.
 | 
			
		||||
func IsUTFDigit(str string) bool {
 | 
			
		||||
	if IsNull(str) {
 | 
			
		||||
		return true
 | 
			
		||||
| 
						 | 
				
			
			@ -243,22 +243,22 @@ func IsUTFDigit(str string) bool {
 | 
			
		|||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsHexadecimal check if the string is a hexadecimal number.
 | 
			
		||||
// IsHexadecimal checks if the string is a hexadecimal number.
 | 
			
		||||
func IsHexadecimal(str string) bool {
 | 
			
		||||
	return rxHexadecimal.MatchString(str)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsHexcolor check if the string is a hexadecimal color.
 | 
			
		||||
// IsHexcolor checks if the string is a hexadecimal color.
 | 
			
		||||
func IsHexcolor(str string) bool {
 | 
			
		||||
	return rxHexcolor.MatchString(str)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsRGBcolor check if the string is a valid RGB color in form rgb(RRR, GGG, BBB).
 | 
			
		||||
// IsRGBcolor checks if the string is a valid RGB color in form rgb(RRR, GGG, BBB).
 | 
			
		||||
func IsRGBcolor(str string) bool {
 | 
			
		||||
	return rxRGBcolor.MatchString(str)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsLowerCase check if the string is lowercase. Empty string is valid.
 | 
			
		||||
// IsLowerCase checks if the string is lowercase. Empty string is valid.
 | 
			
		||||
func IsLowerCase(str string) bool {
 | 
			
		||||
	if IsNull(str) {
 | 
			
		||||
		return true
 | 
			
		||||
| 
						 | 
				
			
			@ -266,7 +266,7 @@ func IsLowerCase(str string) bool {
 | 
			
		|||
	return str == strings.ToLower(str)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsUpperCase check if the string is uppercase. Empty string is valid.
 | 
			
		||||
// IsUpperCase checks if the string is uppercase. Empty string is valid.
 | 
			
		||||
func IsUpperCase(str string) bool {
 | 
			
		||||
	if IsNull(str) {
 | 
			
		||||
		return true
 | 
			
		||||
| 
						 | 
				
			
			@ -274,7 +274,7 @@ func IsUpperCase(str string) bool {
 | 
			
		|||
	return str == strings.ToUpper(str)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// HasLowerCase check if the string contains at least 1 lowercase. Empty string is valid.
 | 
			
		||||
// HasLowerCase checks if the string contains at least 1 lowercase. Empty string is valid.
 | 
			
		||||
func HasLowerCase(str string) bool {
 | 
			
		||||
	if IsNull(str) {
 | 
			
		||||
		return true
 | 
			
		||||
| 
						 | 
				
			
			@ -282,7 +282,7 @@ func HasLowerCase(str string) bool {
 | 
			
		|||
	return rxHasLowerCase.MatchString(str)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// HasUpperCase check if the string contains as least 1 uppercase. Empty string is valid.
 | 
			
		||||
// HasUpperCase checks if the string contains as least 1 uppercase. Empty string is valid.
 | 
			
		||||
func HasUpperCase(str string) bool {
 | 
			
		||||
	if IsNull(str) {
 | 
			
		||||
		return true
 | 
			
		||||
| 
						 | 
				
			
			@ -290,7 +290,7 @@ func HasUpperCase(str string) bool {
 | 
			
		|||
	return rxHasUpperCase.MatchString(str)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsInt check if the string is an integer. Empty string is valid.
 | 
			
		||||
// IsInt checks if the string is an integer. Empty string is valid.
 | 
			
		||||
func IsInt(str string) bool {
 | 
			
		||||
	if IsNull(str) {
 | 
			
		||||
		return true
 | 
			
		||||
| 
						 | 
				
			
			@ -298,12 +298,12 @@ func IsInt(str string) bool {
 | 
			
		|||
	return rxInt.MatchString(str)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsFloat check if the string is a float.
 | 
			
		||||
// IsFloat checks if the string is a float.
 | 
			
		||||
func IsFloat(str string) bool {
 | 
			
		||||
	return str != "" && rxFloat.MatchString(str)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsDivisibleBy check if the string is a number that's divisible by another.
 | 
			
		||||
// IsDivisibleBy checks if the string is a number that's divisible by another.
 | 
			
		||||
// If second argument is not valid integer or zero, it's return false.
 | 
			
		||||
// Otherwise, if first argument is not valid integer or zero, it's return true (Invalid string converts to zero).
 | 
			
		||||
func IsDivisibleBy(str, num string) bool {
 | 
			
		||||
| 
						 | 
				
			
			@ -316,12 +316,12 @@ func IsDivisibleBy(str, num string) bool {
 | 
			
		|||
	return (p == 0) || (p%q == 0)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsNull check if the string is null.
 | 
			
		||||
// IsNull checks if the string is null.
 | 
			
		||||
func IsNull(str string) bool {
 | 
			
		||||
	return len(str) == 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsNotNull check if the string is not null.
 | 
			
		||||
// IsNotNull checks if the string is not null.
 | 
			
		||||
func IsNotNull(str string) bool {
 | 
			
		||||
	return !IsNull(str)
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -336,32 +336,32 @@ func HasWhitespace(str string) bool {
 | 
			
		|||
	return len(str) > 0 && rxHasWhitespace.MatchString(str)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsByteLength check if the string's length (in bytes) falls in a range.
 | 
			
		||||
// IsByteLength checks if the string's length (in bytes) falls in a range.
 | 
			
		||||
func IsByteLength(str string, min, max int) bool {
 | 
			
		||||
	return len(str) >= min && len(str) <= max
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsUUIDv3 check if the string is a UUID version 3.
 | 
			
		||||
// IsUUIDv3 checks if the string is a UUID version 3.
 | 
			
		||||
func IsUUIDv3(str string) bool {
 | 
			
		||||
	return rxUUID3.MatchString(str)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsUUIDv4 check if the string is a UUID version 4.
 | 
			
		||||
// IsUUIDv4 checks if the string is a UUID version 4.
 | 
			
		||||
func IsUUIDv4(str string) bool {
 | 
			
		||||
	return rxUUID4.MatchString(str)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsUUIDv5 check if the string is a UUID version 5.
 | 
			
		||||
// IsUUIDv5 checks if the string is a UUID version 5.
 | 
			
		||||
func IsUUIDv5(str string) bool {
 | 
			
		||||
	return rxUUID5.MatchString(str)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsUUID check if the string is a UUID (version 3, 4 or 5).
 | 
			
		||||
// IsUUID checks if the string is a UUID (version 3, 4 or 5).
 | 
			
		||||
func IsUUID(str string) bool {
 | 
			
		||||
	return rxUUID.MatchString(str)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsCreditCard check if the string is a credit card.
 | 
			
		||||
// IsCreditCard checks if the string is a credit card.
 | 
			
		||||
func IsCreditCard(str string) bool {
 | 
			
		||||
	sanitized := notNumberRegexp.ReplaceAllString(str, "")
 | 
			
		||||
	if !rxCreditCard.MatchString(sanitized) {
 | 
			
		||||
| 
						 | 
				
			
			@ -377,7 +377,7 @@ func IsCreditCard(str string) bool {
 | 
			
		|||
		if shouldDouble {
 | 
			
		||||
			tmpNum *= 2
 | 
			
		||||
			if tmpNum >= 10 {
 | 
			
		||||
				sum += ((tmpNum % 10) + 1)
 | 
			
		||||
				sum += (tmpNum % 10) + 1
 | 
			
		||||
			} else {
 | 
			
		||||
				sum += tmpNum
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			@ -390,18 +390,18 @@ func IsCreditCard(str string) bool {
 | 
			
		|||
	return sum%10 == 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsISBN10 check if the string is an ISBN version 10.
 | 
			
		||||
// IsISBN10 checks if the string is an ISBN version 10.
 | 
			
		||||
func IsISBN10(str string) bool {
 | 
			
		||||
	return IsISBN(str, 10)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsISBN13 check if the string is an ISBN version 13.
 | 
			
		||||
// IsISBN13 checks if the string is an ISBN version 13.
 | 
			
		||||
func IsISBN13(str string) bool {
 | 
			
		||||
	return IsISBN(str, 13)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsISBN check if the string is an ISBN (version 10 or 13).
 | 
			
		||||
// If version value is not equal to 10 or 13, it will be check both variants.
 | 
			
		||||
// IsISBN checks if the string is an ISBN (version 10 or 13).
 | 
			
		||||
// If version value is not equal to 10 or 13, it will be checks both variants.
 | 
			
		||||
func IsISBN(str string, version int) bool {
 | 
			
		||||
	sanitized := whiteSpacesAndMinus.ReplaceAllString(str, "")
 | 
			
		||||
	var checksum int32
 | 
			
		||||
| 
						 | 
				
			
			@ -435,13 +435,13 @@ func IsISBN(str string, version int) bool {
 | 
			
		|||
	return IsISBN(str, 10) || IsISBN(str, 13)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsJSON check if the string is valid JSON (note: uses json.Unmarshal).
 | 
			
		||||
// IsJSON checks if the string is valid JSON (note: uses json.Unmarshal).
 | 
			
		||||
func IsJSON(str string) bool {
 | 
			
		||||
	var js json.RawMessage
 | 
			
		||||
	return json.Unmarshal([]byte(str), &js) == nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsMultibyte check if the string contains one or more multibyte chars. Empty string is valid.
 | 
			
		||||
// IsMultibyte checks if the string contains one or more multibyte chars. Empty string is valid.
 | 
			
		||||
func IsMultibyte(str string) bool {
 | 
			
		||||
	if IsNull(str) {
 | 
			
		||||
		return true
 | 
			
		||||
| 
						 | 
				
			
			@ -449,7 +449,7 @@ func IsMultibyte(str string) bool {
 | 
			
		|||
	return rxMultibyte.MatchString(str)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsASCII check if the string contains ASCII chars only. Empty string is valid.
 | 
			
		||||
// IsASCII checks if the string contains ASCII chars only. Empty string is valid.
 | 
			
		||||
func IsASCII(str string) bool {
 | 
			
		||||
	if IsNull(str) {
 | 
			
		||||
		return true
 | 
			
		||||
| 
						 | 
				
			
			@ -457,7 +457,7 @@ func IsASCII(str string) bool {
 | 
			
		|||
	return rxASCII.MatchString(str)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsPrintableASCII check if the string contains printable ASCII chars only. Empty string is valid.
 | 
			
		||||
// IsPrintableASCII checks if the string contains printable ASCII chars only. Empty string is valid.
 | 
			
		||||
func IsPrintableASCII(str string) bool {
 | 
			
		||||
	if IsNull(str) {
 | 
			
		||||
		return true
 | 
			
		||||
| 
						 | 
				
			
			@ -465,7 +465,7 @@ func IsPrintableASCII(str string) bool {
 | 
			
		|||
	return rxPrintableASCII.MatchString(str)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsFullWidth check if the string contains any full-width chars. Empty string is valid.
 | 
			
		||||
// IsFullWidth checks if the string contains any full-width chars. Empty string is valid.
 | 
			
		||||
func IsFullWidth(str string) bool {
 | 
			
		||||
	if IsNull(str) {
 | 
			
		||||
		return true
 | 
			
		||||
| 
						 | 
				
			
			@ -473,7 +473,7 @@ func IsFullWidth(str string) bool {
 | 
			
		|||
	return rxFullWidth.MatchString(str)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsHalfWidth check if the string contains any half-width chars. Empty string is valid.
 | 
			
		||||
// IsHalfWidth checks if the string contains any half-width chars. Empty string is valid.
 | 
			
		||||
func IsHalfWidth(str string) bool {
 | 
			
		||||
	if IsNull(str) {
 | 
			
		||||
		return true
 | 
			
		||||
| 
						 | 
				
			
			@ -481,7 +481,7 @@ func IsHalfWidth(str string) bool {
 | 
			
		|||
	return rxHalfWidth.MatchString(str)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsVariableWidth check if the string contains a mixture of full and half-width chars. Empty string is valid.
 | 
			
		||||
// IsVariableWidth checks if the string contains a mixture of full and half-width chars. Empty string is valid.
 | 
			
		||||
func IsVariableWidth(str string) bool {
 | 
			
		||||
	if IsNull(str) {
 | 
			
		||||
		return true
 | 
			
		||||
| 
						 | 
				
			
			@ -489,12 +489,12 @@ func IsVariableWidth(str string) bool {
 | 
			
		|||
	return rxHalfWidth.MatchString(str) && rxFullWidth.MatchString(str)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsBase64 check if a string is base64 encoded.
 | 
			
		||||
// IsBase64 checks if a string is base64 encoded.
 | 
			
		||||
func IsBase64(str string) bool {
 | 
			
		||||
	return rxBase64.MatchString(str)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsFilePath check is a string is Win or Unix file path and returns it's type.
 | 
			
		||||
// IsFilePath checks is a string is Win or Unix file path and returns it's type.
 | 
			
		||||
func IsFilePath(str string) (bool, int) {
 | 
			
		||||
	if rxWinPath.MatchString(str) {
 | 
			
		||||
		//check windows path limit see:
 | 
			
		||||
| 
						 | 
				
			
			@ -686,25 +686,25 @@ func IsPort(str string) bool {
 | 
			
		|||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsIPv4 check if the string is an IP version 4.
 | 
			
		||||
// IsIPv4 checks if the string is an IP version 4.
 | 
			
		||||
func IsIPv4(str string) bool {
 | 
			
		||||
	ip := net.ParseIP(str)
 | 
			
		||||
	return ip != nil && strings.Contains(str, ".")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsIPv6 check if the string is an IP version 6.
 | 
			
		||||
// IsIPv6 checks if the string is an IP version 6.
 | 
			
		||||
func IsIPv6(str string) bool {
 | 
			
		||||
	ip := net.ParseIP(str)
 | 
			
		||||
	return ip != nil && strings.Contains(str, ":")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsCIDR check if the string is an valid CIDR notiation (IPV4 & IPV6)
 | 
			
		||||
// IsCIDR checks if the string is an valid CIDR notiation (IPV4 & IPV6)
 | 
			
		||||
func IsCIDR(str string) bool {
 | 
			
		||||
	_, _, err := net.ParseCIDR(str)
 | 
			
		||||
	return err == nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsMAC check if a string is valid MAC address.
 | 
			
		||||
// IsMAC checks if a string is valid MAC address.
 | 
			
		||||
// Possible MAC formats:
 | 
			
		||||
// 01:23:45:67:89:ab
 | 
			
		||||
// 01:23:45:67:89:ab:cd:ef
 | 
			
		||||
| 
						 | 
				
			
			@ -722,27 +722,70 @@ func IsHost(str string) bool {
 | 
			
		|||
	return IsIP(str) || IsDNSName(str)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsMongoID check if the string is a valid hex-encoded representation of a MongoDB ObjectId.
 | 
			
		||||
// IsMongoID checks if the string is a valid hex-encoded representation of a MongoDB ObjectId.
 | 
			
		||||
func IsMongoID(str string) bool {
 | 
			
		||||
	return rxHexadecimal.MatchString(str) && (len(str) == 24)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsLatitude check if a string is valid latitude.
 | 
			
		||||
// IsLatitude checks if a string is valid latitude.
 | 
			
		||||
func IsLatitude(str string) bool {
 | 
			
		||||
	return rxLatitude.MatchString(str)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsLongitude check if a string is valid longitude.
 | 
			
		||||
// IsLongitude checks if a string is valid longitude.
 | 
			
		||||
func IsLongitude(str string) bool {
 | 
			
		||||
	return rxLongitude.MatchString(str)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsIMEI check if a string is valid IMEI
 | 
			
		||||
// IsIMEI checks if a string is valid IMEI
 | 
			
		||||
func IsIMEI(str string) bool {
 | 
			
		||||
	return rxIMEI.MatchString(str)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsRsaPublicKey check if a string is valid public key with provided length
 | 
			
		||||
// IsIMSI checks if a string is valid IMSI
 | 
			
		||||
func IsIMSI(str string) bool {
 | 
			
		||||
	if !rxIMSI.MatchString(str) {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	mcc, err := strconv.ParseInt(str[0:3], 10, 32)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	switch mcc {
 | 
			
		||||
	case 202, 204, 206, 208, 212, 213, 214, 216, 218, 219:
 | 
			
		||||
	case 220, 221, 222, 226, 228, 230, 231, 232, 234, 235:
 | 
			
		||||
	case 238, 240, 242, 244, 246, 247, 248, 250, 255, 257:
 | 
			
		||||
	case 259, 260, 262, 266, 268, 270, 272, 274, 276, 278:
 | 
			
		||||
	case 280, 282, 283, 284, 286, 288, 289, 290, 292, 293:
 | 
			
		||||
	case 294, 295, 297, 302, 308, 310, 311, 312, 313, 314:
 | 
			
		||||
	case 315, 316, 330, 332, 334, 338, 340, 342, 344, 346:
 | 
			
		||||
	case 348, 350, 352, 354, 356, 358, 360, 362, 363, 364:
 | 
			
		||||
	case 365, 366, 368, 370, 372, 374, 376, 400, 401, 402:
 | 
			
		||||
	case 404, 405, 406, 410, 412, 413, 414, 415, 416, 417:
 | 
			
		||||
	case 418, 419, 420, 421, 422, 424, 425, 426, 427, 428:
 | 
			
		||||
	case 429, 430, 431, 432, 434, 436, 437, 438, 440, 441:
 | 
			
		||||
	case 450, 452, 454, 455, 456, 457, 460, 461, 466, 467:
 | 
			
		||||
	case 470, 472, 502, 505, 510, 514, 515, 520, 525, 528:
 | 
			
		||||
	case 530, 536, 537, 539, 540, 541, 542, 543, 544, 545:
 | 
			
		||||
	case 546, 547, 548, 549, 550, 551, 552, 553, 554, 555:
 | 
			
		||||
	case 602, 603, 604, 605, 606, 607, 608, 609, 610, 611:
 | 
			
		||||
	case 612, 613, 614, 615, 616, 617, 618, 619, 620, 621:
 | 
			
		||||
	case 622, 623, 624, 625, 626, 627, 628, 629, 630, 631:
 | 
			
		||||
	case 632, 633, 634, 635, 636, 637, 638, 639, 640, 641:
 | 
			
		||||
	case 642, 643, 645, 646, 647, 648, 649, 650, 651, 652:
 | 
			
		||||
	case 653, 654, 655, 657, 658, 659, 702, 704, 706, 708:
 | 
			
		||||
	case 710, 712, 714, 716, 722, 724, 730, 732, 734, 736:
 | 
			
		||||
	case 738, 740, 742, 744, 746, 748, 750, 995:
 | 
			
		||||
		return true
 | 
			
		||||
	default:
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
	return true
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsRsaPublicKey checks if a string is valid public key with provided length
 | 
			
		||||
func IsRsaPublicKey(str string, keylen int) bool {
 | 
			
		||||
	bb := bytes.NewBufferString(str)
 | 
			
		||||
	pemBytes, err := ioutil.ReadAll(bb)
 | 
			
		||||
| 
						 | 
				
			
			@ -796,7 +839,7 @@ func toJSONName(tag string) string {
 | 
			
		|||
	return name
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func PrependPathToErrors(err error, path string) error {
 | 
			
		||||
func prependPathToErrors(err error, path string) error {
 | 
			
		||||
	switch err2 := err.(type) {
 | 
			
		||||
	case Error:
 | 
			
		||||
		err2.Path = append([]string{path}, err2.Path...)
 | 
			
		||||
| 
						 | 
				
			
			@ -804,13 +847,18 @@ func PrependPathToErrors(err error, path string) error {
 | 
			
		|||
	case Errors:
 | 
			
		||||
		errors := err2.Errors()
 | 
			
		||||
		for i, err3 := range errors {
 | 
			
		||||
			errors[i] = PrependPathToErrors(err3, path)
 | 
			
		||||
			errors[i] = prependPathToErrors(err3, path)
 | 
			
		||||
		}
 | 
			
		||||
		return err2
 | 
			
		||||
	}
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ValidateArray performs validation according to condition iterator that validates every element of the array
 | 
			
		||||
func ValidateArray(array []interface{}, iterator ConditionIterator) bool {
 | 
			
		||||
	return Every(array, iterator)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ValidateMap use validation map for fields.
 | 
			
		||||
// result will be equal to `false` if there are any errors.
 | 
			
		||||
// s is the map containing the data to be validated.
 | 
			
		||||
| 
						 | 
				
			
			@ -832,7 +880,7 @@ func ValidateMap(s map[string]interface{}, m map[string]interface{}) (bool, erro
 | 
			
		|||
			presentResult = false
 | 
			
		||||
			var err error
 | 
			
		||||
			err = fmt.Errorf("all map keys has to be present in the validation map; got %s", key)
 | 
			
		||||
			err = PrependPathToErrors(err, key)
 | 
			
		||||
			err = prependPathToErrors(err, key)
 | 
			
		||||
			errs = append(errs, err)
 | 
			
		||||
		}
 | 
			
		||||
		valueField := reflect.ValueOf(value)
 | 
			
		||||
| 
						 | 
				
			
			@ -846,13 +894,13 @@ func ValidateMap(s map[string]interface{}, m map[string]interface{}) (bool, erro
 | 
			
		|||
			if v, ok := value.(map[string]interface{}); !ok {
 | 
			
		||||
				mapResult = false
 | 
			
		||||
				err = fmt.Errorf("map validator has to be for the map type only; got %s", valueField.Type().String())
 | 
			
		||||
				err = PrependPathToErrors(err, key)
 | 
			
		||||
				err = prependPathToErrors(err, key)
 | 
			
		||||
				errs = append(errs, err)
 | 
			
		||||
			} else {
 | 
			
		||||
				mapResult, err = ValidateMap(v, subValidator)
 | 
			
		||||
				if err != nil {
 | 
			
		||||
					mapResult = false
 | 
			
		||||
					err = PrependPathToErrors(err, key)
 | 
			
		||||
					err = prependPathToErrors(err, key)
 | 
			
		||||
					errs = append(errs, err)
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			@ -863,7 +911,7 @@ func ValidateMap(s map[string]interface{}, m map[string]interface{}) (bool, erro
 | 
			
		|||
				var err error
 | 
			
		||||
				structResult, err = ValidateStruct(valueField.Interface())
 | 
			
		||||
				if err != nil {
 | 
			
		||||
					err = PrependPathToErrors(err, key)
 | 
			
		||||
					err = prependPathToErrors(err, key)
 | 
			
		||||
					errs = append(errs, err)
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			@ -884,13 +932,13 @@ func ValidateMap(s map[string]interface{}, m map[string]interface{}) (bool, erro
 | 
			
		|||
		default:
 | 
			
		||||
			typeResult = false
 | 
			
		||||
			err = fmt.Errorf("map validator has to be either map[string]interface{} or string; got %s", valueField.Type().String())
 | 
			
		||||
			err = PrependPathToErrors(err, key)
 | 
			
		||||
			err = prependPathToErrors(err, key)
 | 
			
		||||
			errs = append(errs, err)
 | 
			
		||||
		}
 | 
			
		||||
		result = result && presentResult && typeResult && resultField && structResult && mapResult
 | 
			
		||||
		index++
 | 
			
		||||
	}
 | 
			
		||||
	// check required keys
 | 
			
		||||
	// checks required keys
 | 
			
		||||
	requiredResult := true
 | 
			
		||||
	for key, value := range m {
 | 
			
		||||
		if schema, ok := value.(string); ok {
 | 
			
		||||
| 
						 | 
				
			
			@ -949,7 +997,7 @@ func ValidateStruct(s interface{}) (bool, error) {
 | 
			
		|||
			var err error
 | 
			
		||||
			structResult, err = ValidateStruct(valueField.Interface())
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				err = PrependPathToErrors(err, typeField.Name)
 | 
			
		||||
				err = prependPathToErrors(err, typeField.Name)
 | 
			
		||||
				errs = append(errs, err)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -986,6 +1034,42 @@ func ValidateStruct(s interface{}) (bool, error) {
 | 
			
		|||
	return result, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ValidateStructAsync performs async validation of the struct and returns results through the channels
 | 
			
		||||
func ValidateStructAsync(s interface{}) (<-chan bool, <-chan error) {
 | 
			
		||||
	res := make(chan bool)
 | 
			
		||||
	errors := make(chan error)
 | 
			
		||||
 | 
			
		||||
	go func() {
 | 
			
		||||
		defer close(res)
 | 
			
		||||
		defer close(errors)
 | 
			
		||||
 | 
			
		||||
		isValid, isFailed := ValidateStruct(s)
 | 
			
		||||
 | 
			
		||||
		res <- isValid
 | 
			
		||||
		errors <- isFailed
 | 
			
		||||
	}()
 | 
			
		||||
 | 
			
		||||
	return res, errors
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ValidateMapAsync performs async validation of the map and returns results through the channels
 | 
			
		||||
func ValidateMapAsync(s map[string]interface{}, m map[string]interface{}) (<-chan bool, <-chan error) {
 | 
			
		||||
	res := make(chan bool)
 | 
			
		||||
	errors := make(chan error)
 | 
			
		||||
 | 
			
		||||
	go func() {
 | 
			
		||||
		defer close(res)
 | 
			
		||||
		defer close(errors)
 | 
			
		||||
 | 
			
		||||
		isValid, isFailed := ValidateMap(s, m)
 | 
			
		||||
 | 
			
		||||
		res <- isValid
 | 
			
		||||
		errors <- isFailed
 | 
			
		||||
	}()
 | 
			
		||||
 | 
			
		||||
	return res, errors
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// parseTagIntoMap parses a struct tag `valid:required~Some error message,length(2|3)` into map[string]string{"required": "Some error message", "length(2|3)": ""}
 | 
			
		||||
func parseTagIntoMap(tag string) tagOptionsMap {
 | 
			
		||||
	optionsMap := make(tagOptionsMap)
 | 
			
		||||
| 
						 | 
				
			
			@ -1034,12 +1118,12 @@ func IsSSN(str string) bool {
 | 
			
		|||
	return rxSSN.MatchString(str)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsSemver check if string is valid semantic version
 | 
			
		||||
// IsSemver checks if string is valid semantic version
 | 
			
		||||
func IsSemver(str string) bool {
 | 
			
		||||
	return rxSemver.MatchString(str)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsType check if interface is of some type
 | 
			
		||||
// IsType checks if interface is of some type
 | 
			
		||||
func IsType(v interface{}, params ...string) bool {
 | 
			
		||||
	if len(params) == 1 {
 | 
			
		||||
		typ := params[0]
 | 
			
		||||
| 
						 | 
				
			
			@ -1048,13 +1132,13 @@ func IsType(v interface{}, params ...string) bool {
 | 
			
		|||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsTime check if string is valid according to given format
 | 
			
		||||
// IsTime checks if string is valid according to given format
 | 
			
		||||
func IsTime(str string, format string) bool {
 | 
			
		||||
	_, err := time.Parse(format, str)
 | 
			
		||||
	return err == nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsUnixTime check if string is valid unix timestamp value
 | 
			
		||||
// IsUnixTime checks if string is valid unix timestamp value
 | 
			
		||||
func IsUnixTime(str string) bool {
 | 
			
		||||
	if _, err := strconv.Atoi(str); err == nil {
 | 
			
		||||
		return true
 | 
			
		||||
| 
						 | 
				
			
			@ -1062,17 +1146,17 @@ func IsUnixTime(str string) bool {
 | 
			
		|||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsRFC3339 check if string is valid timestamp value according to RFC3339
 | 
			
		||||
// IsRFC3339 checks if string is valid timestamp value according to RFC3339
 | 
			
		||||
func IsRFC3339(str string) bool {
 | 
			
		||||
	return IsTime(str, time.RFC3339)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsRFC3339WithoutZone check if string is valid timestamp value according to RFC3339 which excludes the timezone.
 | 
			
		||||
// IsRFC3339WithoutZone checks if string is valid timestamp value according to RFC3339 which excludes the timezone.
 | 
			
		||||
func IsRFC3339WithoutZone(str string) bool {
 | 
			
		||||
	return IsTime(str, RF3339WithoutZone)
 | 
			
		||||
	return IsTime(str, rfc3339WithoutZone)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsISO4217 check if string is valid ISO currency code
 | 
			
		||||
// IsISO4217 checks if string is valid ISO currency code
 | 
			
		||||
func IsISO4217(str string) bool {
 | 
			
		||||
	for _, currency := range ISO4217List {
 | 
			
		||||
		if str == currency {
 | 
			
		||||
| 
						 | 
				
			
			@ -1083,7 +1167,7 @@ func IsISO4217(str string) bool {
 | 
			
		|||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ByteLength check string's length
 | 
			
		||||
// ByteLength checks string's length
 | 
			
		||||
func ByteLength(str string, params ...string) bool {
 | 
			
		||||
	if len(params) == 2 {
 | 
			
		||||
		min, _ := ToInt(params[0])
 | 
			
		||||
| 
						 | 
				
			
			@ -1094,13 +1178,13 @@ func ByteLength(str string, params ...string) bool {
 | 
			
		|||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// RuneLength check string's length
 | 
			
		||||
// RuneLength checks string's length
 | 
			
		||||
// Alias for StringLength
 | 
			
		||||
func RuneLength(str string, params ...string) bool {
 | 
			
		||||
	return StringLength(str, params...)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsRsaPub check whether string is valid RSA key
 | 
			
		||||
// IsRsaPub checks whether string is valid RSA key
 | 
			
		||||
// Alias for IsRsaPublicKey
 | 
			
		||||
func IsRsaPub(str string, params ...string) bool {
 | 
			
		||||
	if len(params) == 1 {
 | 
			
		||||
| 
						 | 
				
			
			@ -1120,7 +1204,7 @@ func StringMatches(s string, params ...string) bool {
 | 
			
		|||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// StringLength check string's length (including multi byte strings)
 | 
			
		||||
// StringLength checks string's length (including multi byte strings)
 | 
			
		||||
func StringLength(str string, params ...string) bool {
 | 
			
		||||
 | 
			
		||||
	if len(params) == 2 {
 | 
			
		||||
| 
						 | 
				
			
			@ -1133,7 +1217,7 @@ func StringLength(str string, params ...string) bool {
 | 
			
		|||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// MinStringLength check string's minimum length (including multi byte strings)
 | 
			
		||||
// MinStringLength checks string's minimum length (including multi byte strings)
 | 
			
		||||
func MinStringLength(str string, params ...string) bool {
 | 
			
		||||
 | 
			
		||||
	if len(params) == 1 {
 | 
			
		||||
| 
						 | 
				
			
			@ -1145,7 +1229,7 @@ func MinStringLength(str string, params ...string) bool {
 | 
			
		|||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// MaxStringLength check string's maximum length (including multi byte strings)
 | 
			
		||||
// MaxStringLength checks string's maximum length (including multi byte strings)
 | 
			
		||||
func MaxStringLength(str string, params ...string) bool {
 | 
			
		||||
 | 
			
		||||
	if len(params) == 1 {
 | 
			
		||||
| 
						 | 
				
			
			@ -1157,7 +1241,7 @@ func MaxStringLength(str string, params ...string) bool {
 | 
			
		|||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Range check string's length
 | 
			
		||||
// Range checks string's length
 | 
			
		||||
func Range(str string, params ...string) bool {
 | 
			
		||||
	if len(params) == 2 {
 | 
			
		||||
		value, _ := ToFloat(str)
 | 
			
		||||
| 
						 | 
				
			
			@ -1169,6 +1253,7 @@ func Range(str string, params ...string) bool {
 | 
			
		|||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsInRaw checks if string is in list of allowed values
 | 
			
		||||
func IsInRaw(str string, params ...string) bool {
 | 
			
		||||
	if len(params) == 1 {
 | 
			
		||||
		rawParams := params[0]
 | 
			
		||||
| 
						 | 
				
			
			@ -1181,7 +1266,7 @@ func IsInRaw(str string, params ...string) bool {
 | 
			
		|||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsIn check if string str is a member of the set of strings params
 | 
			
		||||
// IsIn checks if string str is a member of the set of strings params
 | 
			
		||||
func IsIn(str string, params ...string) bool {
 | 
			
		||||
	for _, param := range params {
 | 
			
		||||
		if str == param {
 | 
			
		||||
| 
						 | 
				
			
			@ -1219,7 +1304,7 @@ func typeCheck(v reflect.Value, t reflect.StructField, o reflect.Value, options
 | 
			
		|||
 | 
			
		||||
	tag := t.Tag.Get(tagName)
 | 
			
		||||
 | 
			
		||||
	// Check if the field should be ignored
 | 
			
		||||
	// checks if the field should be ignored
 | 
			
		||||
	switch tag {
 | 
			
		||||
	case "":
 | 
			
		||||
		if v.Kind() != reflect.Slice && v.Kind() != reflect.Map {
 | 
			
		||||
| 
						 | 
				
			
			@ -1238,8 +1323,8 @@ func typeCheck(v reflect.Value, t reflect.StructField, o reflect.Value, options
 | 
			
		|||
		options = parseTagIntoMap(tag)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if !isFieldSet(v) {
 | 
			
		||||
		// an empty value is not validated, check only required
 | 
			
		||||
	if isEmptyValue(v) {
 | 
			
		||||
		// an empty value is not validated, checks only required
 | 
			
		||||
		isValid, resultErr = checkRequired(v, t, options)
 | 
			
		||||
		for key := range options {
 | 
			
		||||
			delete(options, key)
 | 
			
		||||
| 
						 | 
				
			
			@ -1292,13 +1377,13 @@ func typeCheck(v reflect.Value, t reflect.StructField, o reflect.Value, options
 | 
			
		|||
		validator := validatorSpec
 | 
			
		||||
		customMsgExists := len(validatorStruct.customErrorMessage) > 0
 | 
			
		||||
 | 
			
		||||
		// Check whether the tag looks like '!something' or 'something'
 | 
			
		||||
		// checks whether the tag looks like '!something' or 'something'
 | 
			
		||||
		if validator[0] == '!' {
 | 
			
		||||
			validator = validator[1:]
 | 
			
		||||
			negate = true
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Check for interface param validators
 | 
			
		||||
		// checks for interface param validators
 | 
			
		||||
		for key, value := range InterfaceParamTagRegexMap {
 | 
			
		||||
			ps := value.FindStringSubmatch(validator)
 | 
			
		||||
			if len(ps) == 0 {
 | 
			
		||||
| 
						 | 
				
			
			@ -1331,20 +1416,20 @@ func typeCheck(v reflect.Value, t reflect.StructField, o reflect.Value, options
 | 
			
		|||
		reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr,
 | 
			
		||||
		reflect.Float32, reflect.Float64,
 | 
			
		||||
		reflect.String:
 | 
			
		||||
		// for each tag option check the map of validator functions
 | 
			
		||||
		// for each tag option checks the map of validator functions
 | 
			
		||||
		for _, validatorSpec := range optionsOrder {
 | 
			
		||||
			validatorStruct := options[validatorSpec]
 | 
			
		||||
			var negate bool
 | 
			
		||||
			validator := validatorSpec
 | 
			
		||||
			customMsgExists := len(validatorStruct.customErrorMessage) > 0
 | 
			
		||||
 | 
			
		||||
			// Check whether the tag looks like '!something' or 'something'
 | 
			
		||||
			// checks whether the tag looks like '!something' or 'something'
 | 
			
		||||
			if validator[0] == '!' {
 | 
			
		||||
				validator = validator[1:]
 | 
			
		||||
				negate = true
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			// Check for param validators
 | 
			
		||||
			// checks for param validators
 | 
			
		||||
			for key, value := range ParamTagRegexMap {
 | 
			
		||||
				ps := value.FindStringSubmatch(validator)
 | 
			
		||||
				if len(ps) == 0 {
 | 
			
		||||
| 
						 | 
				
			
			@ -1425,7 +1510,7 @@ func typeCheck(v reflect.Value, t reflect.StructField, o reflect.Value, options
 | 
			
		|||
			} else {
 | 
			
		||||
				resultItem, err = ValidateStruct(v.MapIndex(k).Interface())
 | 
			
		||||
				if err != nil {
 | 
			
		||||
					err = PrependPathToErrors(err, t.Name+"."+sv[i].Interface().(string))
 | 
			
		||||
					err = prependPathToErrors(err, t.Name+"."+sv[i].Interface().(string))
 | 
			
		||||
					return false, err
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			@ -1445,7 +1530,7 @@ func typeCheck(v reflect.Value, t reflect.StructField, o reflect.Value, options
 | 
			
		|||
			} else {
 | 
			
		||||
				resultItem, err = ValidateStruct(v.Index(i).Interface())
 | 
			
		||||
				if err != nil {
 | 
			
		||||
					err = PrependPathToErrors(err, t.Name+"."+strconv.Itoa(i))
 | 
			
		||||
					err = prependPathToErrors(err, t.Name+"."+strconv.Itoa(i))
 | 
			
		||||
					return false, err
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			@ -1459,7 +1544,7 @@ func typeCheck(v reflect.Value, t reflect.StructField, o reflect.Value, options
 | 
			
		|||
		}
 | 
			
		||||
		return ValidateStruct(v.Interface())
 | 
			
		||||
	case reflect.Ptr:
 | 
			
		||||
		// If the value is a pointer then check its element
 | 
			
		||||
		// If the value is a pointer then checks its element
 | 
			
		||||
		if v.IsNil() {
 | 
			
		||||
			return true, nil
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -1475,14 +1560,26 @@ func stripParams(validatorString string) string {
 | 
			
		|||
	return paramsRegexp.ReplaceAllString(validatorString, "")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// isFieldSet returns false for nil pointers, interfaces, maps, and slices. For all other values, it returns true.
 | 
			
		||||
func isFieldSet(v reflect.Value) bool {
 | 
			
		||||
// isEmptyValue checks whether value empty or not
 | 
			
		||||
func isEmptyValue(v reflect.Value) bool {
 | 
			
		||||
	switch v.Kind() {
 | 
			
		||||
	case reflect.Map, reflect.Slice, reflect.Interface, reflect.Ptr:
 | 
			
		||||
		return !v.IsNil()
 | 
			
		||||
	case reflect.String, reflect.Array:
 | 
			
		||||
		return v.Len() == 0
 | 
			
		||||
	case reflect.Map, reflect.Slice:
 | 
			
		||||
		return v.Len() == 0 || v.IsNil()
 | 
			
		||||
	case reflect.Bool:
 | 
			
		||||
		return !v.Bool()
 | 
			
		||||
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
 | 
			
		||||
		return v.Int() == 0
 | 
			
		||||
	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
 | 
			
		||||
		return v.Uint() == 0
 | 
			
		||||
	case reflect.Float32, reflect.Float64:
 | 
			
		||||
		return v.Float() == 0
 | 
			
		||||
	case reflect.Interface, reflect.Ptr:
 | 
			
		||||
		return v.IsNil()
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return true
 | 
			
		||||
	return reflect.DeepEqual(v.Interface(), reflect.Zero(v.Type()).Interface())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ErrorByField returns error for specified field of the struct
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										13
									
								
								vendor/github.com/fatih/color/README.md
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								vendor/github.com/fatih/color/README.md
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,20 +1,11 @@
 | 
			
		|||
# Archived project. No maintenance. 
 | 
			
		||||
 | 
			
		||||
This project is not maintained anymore and is archived. Feel free to fork and
 | 
			
		||||
make your own changes if needed. For more detail read my blog post: [Taking an indefinite sabbatical from my projects](https://arslan.io/2018/10/09/taking-an-indefinite-sabbatical-from-my-projects/)
 | 
			
		||||
 | 
			
		||||
Thanks to everyone for their valuable feedback and contributions.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Color [](https://godoc.org/github.com/fatih/color) 
 | 
			
		||||
# color [](https://github.com/fatih/color/actions) [](https://pkg.go.dev/github.com/fatih/color)
 | 
			
		||||
 | 
			
		||||
Color lets you use colorized outputs in terms of [ANSI Escape
 | 
			
		||||
Codes](http://en.wikipedia.org/wiki/ANSI_escape_code#Colors) in Go (Golang). It
 | 
			
		||||
has support for Windows too! The API can be used in several ways, pick one that
 | 
			
		||||
suits you.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Install
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										4
									
								
								vendor/github.com/fatih/color/go.mod
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/github.com/fatih/color/go.mod
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -3,6 +3,6 @@ module github.com/fatih/color
 | 
			
		|||
go 1.13
 | 
			
		||||
 | 
			
		||||
require (
 | 
			
		||||
	github.com/mattn/go-colorable v0.1.4
 | 
			
		||||
	github.com/mattn/go-isatty v0.0.11
 | 
			
		||||
	github.com/mattn/go-colorable v0.1.8
 | 
			
		||||
	github.com/mattn/go-isatty v0.0.12
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										15
									
								
								vendor/github.com/fatih/color/go.sum
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								vendor/github.com/fatih/color/go.sum
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,8 +1,7 @@
 | 
			
		|||
github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA=
 | 
			
		||||
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
 | 
			
		||||
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
 | 
			
		||||
github.com/mattn/go-isatty v0.0.11 h1:FxPOTFNqGkuDUGi3H/qkUbQO4ZiBa2brKq5r0l8TGeM=
 | 
			
		||||
github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE=
 | 
			
		||||
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
			
		||||
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037 h1:YyJpGZS1sBuBCzLAR1VEpK193GlqGZbnPFnPV/5Rsb4=
 | 
			
		||||
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8=
 | 
			
		||||
github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
 | 
			
		||||
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
 | 
			
		||||
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
 | 
			
		||||
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae h1:/WDfKMnPU+m5M4xB+6x4kaepxRw6jWvR5iDRdvjHgy8=
 | 
			
		||||
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										0
									
								
								vendor/github.com/felixge/httpsnoop/.gitignore
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								vendor/github.com/felixge/httpsnoop/.gitignore
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
								
								
									
										6
									
								
								vendor/github.com/felixge/httpsnoop/.travis.yml
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								vendor/github.com/felixge/httpsnoop/.travis.yml
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
language: go
 | 
			
		||||
 | 
			
		||||
go:
 | 
			
		||||
  - 1.6
 | 
			
		||||
  - 1.7
 | 
			
		||||
  - 1.8
 | 
			
		||||
							
								
								
									
										19
									
								
								vendor/github.com/felixge/httpsnoop/LICENSE.txt
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								vendor/github.com/felixge/httpsnoop/LICENSE.txt
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,19 @@
 | 
			
		|||
Copyright (c) 2016 Felix Geisendörfer (felix@debuggable.com)
 | 
			
		||||
 | 
			
		||||
 Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
 of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
 in the Software without restriction, including without limitation the rights
 | 
			
		||||
 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
 copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
 furnished to do so, subject to the following conditions:
 | 
			
		||||
 | 
			
		||||
 The above copyright notice and this permission notice shall be included in
 | 
			
		||||
 all copies or substantial portions of the Software.
 | 
			
		||||
 | 
			
		||||
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
			
		||||
 THE SOFTWARE.
 | 
			
		||||
							
								
								
									
										10
									
								
								vendor/github.com/felixge/httpsnoop/Makefile
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								vendor/github.com/felixge/httpsnoop/Makefile
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,10 @@
 | 
			
		|||
.PHONY: ci generate clean
 | 
			
		||||
 | 
			
		||||
ci: clean generate
 | 
			
		||||
	go test -v ./...
 | 
			
		||||
 | 
			
		||||
generate:
 | 
			
		||||
	go generate .
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	rm -rf *_generated*.go
 | 
			
		||||
							
								
								
									
										94
									
								
								vendor/github.com/felixge/httpsnoop/README.md
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								vendor/github.com/felixge/httpsnoop/README.md
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,94 @@
 | 
			
		|||
# httpsnoop
 | 
			
		||||
 | 
			
		||||
Package httpsnoop provides an easy way to capture http related metrics (i.e.
 | 
			
		||||
response time, bytes written, and http status code) from your application's
 | 
			
		||||
http.Handlers.
 | 
			
		||||
 | 
			
		||||
Doing this requires non-trivial wrapping of the http.ResponseWriter interface,
 | 
			
		||||
which is also exposed for users interested in a more low-level API.
 | 
			
		||||
 | 
			
		||||
[](https://godoc.org/github.com/felixge/httpsnoop)
 | 
			
		||||
[](https://travis-ci.org/felixge/httpsnoop)
 | 
			
		||||
 | 
			
		||||
## Usage Example
 | 
			
		||||
 | 
			
		||||
```go
 | 
			
		||||
// myH is your app's http handler, perhaps a http.ServeMux or similar.
 | 
			
		||||
var myH http.Handler
 | 
			
		||||
// wrappedH wraps myH in order to log every request.
 | 
			
		||||
wrappedH := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 | 
			
		||||
	m := httpsnoop.CaptureMetrics(myH, w, r)
 | 
			
		||||
	log.Printf(
 | 
			
		||||
		"%s %s (code=%d dt=%s written=%d)",
 | 
			
		||||
		r.Method,
 | 
			
		||||
		r.URL,
 | 
			
		||||
		m.Code,
 | 
			
		||||
		m.Duration,
 | 
			
		||||
		m.Written,
 | 
			
		||||
	)
 | 
			
		||||
})
 | 
			
		||||
http.ListenAndServe(":8080", wrappedH)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Why this package exists
 | 
			
		||||
 | 
			
		||||
Instrumenting an application's http.Handler is surprisingly difficult.
 | 
			
		||||
 | 
			
		||||
However if you google for e.g. "capture ResponseWriter status code" you'll find
 | 
			
		||||
lots of advise and code examples that suggest it to be a fairly trivial
 | 
			
		||||
undertaking. Unfortunately everything I've seen so far has a high chance of
 | 
			
		||||
breaking your application.
 | 
			
		||||
 | 
			
		||||
The main problem is that a `http.ResponseWriter` often implements additional
 | 
			
		||||
interfaces such as `http.Flusher`, `http.CloseNotifier`, `http.Hijacker`, `http.Pusher`, and
 | 
			
		||||
`io.ReaderFrom`. So the naive approach of just wrapping `http.ResponseWriter`
 | 
			
		||||
in your own struct that also implements the `http.ResponseWriter` interface
 | 
			
		||||
will hide the additional interfaces mentioned above. This has a high change of
 | 
			
		||||
introducing subtle bugs into any non-trivial application.
 | 
			
		||||
 | 
			
		||||
Another approach I've seen people take is to return a struct that implements
 | 
			
		||||
all of the interfaces above. However, that's also problematic, because it's
 | 
			
		||||
difficult to fake some of these interfaces behaviors when the underlying
 | 
			
		||||
`http.ResponseWriter` doesn't have an implementation. It's also dangerous,
 | 
			
		||||
because an application may choose to operate differently, merely because it
 | 
			
		||||
detects the presence of these additional interfaces.
 | 
			
		||||
 | 
			
		||||
This package solves this problem by checking which additional interfaces a
 | 
			
		||||
`http.ResponseWriter` implements, returning a wrapped version implementing the
 | 
			
		||||
exact same set of interfaces.
 | 
			
		||||
 | 
			
		||||
Additionally this package properly handles edge cases such as `WriteHeader` not
 | 
			
		||||
being called, or called more than once, as well as concurrent calls to
 | 
			
		||||
`http.ResponseWriter` methods, and even calls happening after the wrapped
 | 
			
		||||
`ServeHTTP` has already returned.
 | 
			
		||||
 | 
			
		||||
Unfortunately this package is not perfect either. It's possible that it is
 | 
			
		||||
still missing some interfaces provided by the go core (let me know if you find
 | 
			
		||||
one), and it won't work for applications adding their own interfaces into the
 | 
			
		||||
mix.
 | 
			
		||||
 | 
			
		||||
However, hopefully the explanation above has sufficiently scared you of rolling
 | 
			
		||||
your own solution to this problem. httpsnoop may still break your application,
 | 
			
		||||
but at least it tries to avoid it as much as possible.
 | 
			
		||||
 | 
			
		||||
Anyway, the real problem here is that smuggling additional interfaces inside
 | 
			
		||||
`http.ResponseWriter` is a problematic design choice, but it probably goes as
 | 
			
		||||
deep as the Go language specification itself. But that's okay, I still prefer
 | 
			
		||||
Go over the alternatives ;).
 | 
			
		||||
 | 
			
		||||
## Performance
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
BenchmarkBaseline-8      	   20000	     94912 ns/op
 | 
			
		||||
BenchmarkCaptureMetrics-8	   20000	     95461 ns/op
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
As you can see, using `CaptureMetrics` on a vanilla http.Handler introduces an
 | 
			
		||||
overhead of ~500 ns per http request on my machine. However, the margin of
 | 
			
		||||
error appears to be larger than that, therefor it should be reasonable to
 | 
			
		||||
assume that the overhead introduced by `CaptureMetrics` is absolutely
 | 
			
		||||
negligible.
 | 
			
		||||
 | 
			
		||||
## License
 | 
			
		||||
 | 
			
		||||
MIT
 | 
			
		||||
							
								
								
									
										84
									
								
								vendor/github.com/felixge/httpsnoop/capture_metrics.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								vendor/github.com/felixge/httpsnoop/capture_metrics.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,84 @@
 | 
			
		|||
package httpsnoop
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"io"
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"sync"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Metrics holds metrics captured from CaptureMetrics.
 | 
			
		||||
type Metrics struct {
 | 
			
		||||
	// Code is the first http response code passed to the WriteHeader func of
 | 
			
		||||
	// the ResponseWriter. If no such call is made, a default code of 200 is
 | 
			
		||||
	// assumed instead.
 | 
			
		||||
	Code int
 | 
			
		||||
	// Duration is the time it took to execute the handler.
 | 
			
		||||
	Duration time.Duration
 | 
			
		||||
	// Written is the number of bytes successfully written by the Write or
 | 
			
		||||
	// ReadFrom function of the ResponseWriter. ResponseWriters may also write
 | 
			
		||||
	// data to their underlaying connection directly (e.g. headers), but those
 | 
			
		||||
	// are not tracked. Therefor the number of Written bytes will usually match
 | 
			
		||||
	// the size of the response body.
 | 
			
		||||
	Written int64
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CaptureMetrics wraps the given hnd, executes it with the given w and r, and
 | 
			
		||||
// returns the metrics it captured from it.
 | 
			
		||||
func CaptureMetrics(hnd http.Handler, w http.ResponseWriter, r *http.Request) Metrics {
 | 
			
		||||
	return CaptureMetricsFn(w, func(ww http.ResponseWriter) {
 | 
			
		||||
		hnd.ServeHTTP(ww, r)
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CaptureMetricsFn wraps w and calls fn with the wrapped w and returns the
 | 
			
		||||
// resulting metrics. This is very similar to CaptureMetrics (which is just
 | 
			
		||||
// sugar on top of this func), but is a more usable interface if your
 | 
			
		||||
// application doesn't use the Go http.Handler interface.
 | 
			
		||||
func CaptureMetricsFn(w http.ResponseWriter, fn func(http.ResponseWriter)) Metrics {
 | 
			
		||||
	var (
 | 
			
		||||
		start         = time.Now()
 | 
			
		||||
		m             = Metrics{Code: http.StatusOK}
 | 
			
		||||
		headerWritten bool
 | 
			
		||||
		lock          sync.Mutex
 | 
			
		||||
		hooks         = Hooks{
 | 
			
		||||
			WriteHeader: func(next WriteHeaderFunc) WriteHeaderFunc {
 | 
			
		||||
				return func(code int) {
 | 
			
		||||
					next(code)
 | 
			
		||||
					lock.Lock()
 | 
			
		||||
					defer lock.Unlock()
 | 
			
		||||
					if !headerWritten {
 | 
			
		||||
						m.Code = code
 | 
			
		||||
						headerWritten = true
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
 | 
			
		||||
			Write: func(next WriteFunc) WriteFunc {
 | 
			
		||||
				return func(p []byte) (int, error) {
 | 
			
		||||
					n, err := next(p)
 | 
			
		||||
					lock.Lock()
 | 
			
		||||
					defer lock.Unlock()
 | 
			
		||||
					m.Written += int64(n)
 | 
			
		||||
					headerWritten = true
 | 
			
		||||
					return n, err
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
 | 
			
		||||
			ReadFrom: func(next ReadFromFunc) ReadFromFunc {
 | 
			
		||||
				return func(src io.Reader) (int64, error) {
 | 
			
		||||
					n, err := next(src)
 | 
			
		||||
					lock.Lock()
 | 
			
		||||
					defer lock.Unlock()
 | 
			
		||||
					headerWritten = true
 | 
			
		||||
					m.Written += n
 | 
			
		||||
					return n, err
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
		}
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	fn(Wrap(w, hooks))
 | 
			
		||||
	m.Duration = time.Since(start)
 | 
			
		||||
	return m
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										10
									
								
								vendor/github.com/felixge/httpsnoop/docs.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								vendor/github.com/felixge/httpsnoop/docs.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,10 @@
 | 
			
		|||
// Package httpsnoop provides an easy way to capture http related metrics (i.e.
 | 
			
		||||
// response time, bytes written, and http status code) from your application's
 | 
			
		||||
// http.Handlers.
 | 
			
		||||
//
 | 
			
		||||
// Doing this requires non-trivial wrapping of the http.ResponseWriter
 | 
			
		||||
// interface, which is also exposed for users interested in a more low-level
 | 
			
		||||
// API.
 | 
			
		||||
package httpsnoop
 | 
			
		||||
 | 
			
		||||
//go:generate go run codegen/main.go
 | 
			
		||||
							
								
								
									
										3
									
								
								vendor/github.com/felixge/httpsnoop/go.mod
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								vendor/github.com/felixge/httpsnoop/go.mod
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
module github.com/felixge/httpsnoop
 | 
			
		||||
 | 
			
		||||
go 1.13
 | 
			
		||||
							
								
								
									
										385
									
								
								vendor/github.com/felixge/httpsnoop/wrap_generated_gteq_1.8.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										385
									
								
								vendor/github.com/felixge/httpsnoop/wrap_generated_gteq_1.8.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,385 @@
 | 
			
		|||
// +build go1.8
 | 
			
		||||
// Code generated by "httpsnoop/codegen"; DO NOT EDIT
 | 
			
		||||
 | 
			
		||||
package httpsnoop
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bufio"
 | 
			
		||||
	"io"
 | 
			
		||||
	"net"
 | 
			
		||||
	"net/http"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// HeaderFunc is part of the http.ResponseWriter interface.
 | 
			
		||||
type HeaderFunc func() http.Header
 | 
			
		||||
 | 
			
		||||
// WriteHeaderFunc is part of the http.ResponseWriter interface.
 | 
			
		||||
type WriteHeaderFunc func(code int)
 | 
			
		||||
 | 
			
		||||
// WriteFunc is part of the http.ResponseWriter interface.
 | 
			
		||||
type WriteFunc func(b []byte) (int, error)
 | 
			
		||||
 | 
			
		||||
// FlushFunc is part of the http.Flusher interface.
 | 
			
		||||
type FlushFunc func()
 | 
			
		||||
 | 
			
		||||
// CloseNotifyFunc is part of the http.CloseNotifier interface.
 | 
			
		||||
type CloseNotifyFunc func() <-chan bool
 | 
			
		||||
 | 
			
		||||
// HijackFunc is part of the http.Hijacker interface.
 | 
			
		||||
type HijackFunc func() (net.Conn, *bufio.ReadWriter, error)
 | 
			
		||||
 | 
			
		||||
// ReadFromFunc is part of the io.ReaderFrom interface.
 | 
			
		||||
type ReadFromFunc func(src io.Reader) (int64, error)
 | 
			
		||||
 | 
			
		||||
// PushFunc is part of the http.Pusher interface.
 | 
			
		||||
type PushFunc func(target string, opts *http.PushOptions) error
 | 
			
		||||
 | 
			
		||||
// Hooks defines a set of method interceptors for methods included in
 | 
			
		||||
// http.ResponseWriter as well as some others. You can think of them as
 | 
			
		||||
// middleware for the function calls they target. See Wrap for more details.
 | 
			
		||||
type Hooks struct {
 | 
			
		||||
	Header      func(HeaderFunc) HeaderFunc
 | 
			
		||||
	WriteHeader func(WriteHeaderFunc) WriteHeaderFunc
 | 
			
		||||
	Write       func(WriteFunc) WriteFunc
 | 
			
		||||
	Flush       func(FlushFunc) FlushFunc
 | 
			
		||||
	CloseNotify func(CloseNotifyFunc) CloseNotifyFunc
 | 
			
		||||
	Hijack      func(HijackFunc) HijackFunc
 | 
			
		||||
	ReadFrom    func(ReadFromFunc) ReadFromFunc
 | 
			
		||||
	Push        func(PushFunc) PushFunc
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Wrap returns a wrapped version of w that provides the exact same interface
 | 
			
		||||
// as w. Specifically if w implements any combination of:
 | 
			
		||||
//
 | 
			
		||||
// - http.Flusher
 | 
			
		||||
// - http.CloseNotifier
 | 
			
		||||
// - http.Hijacker
 | 
			
		||||
// - io.ReaderFrom
 | 
			
		||||
// - http.Pusher
 | 
			
		||||
//
 | 
			
		||||
// The wrapped version will implement the exact same combination. If no hooks
 | 
			
		||||
// are set, the wrapped version also behaves exactly as w. Hooks targeting
 | 
			
		||||
// methods not supported by w are ignored. Any other hooks will intercept the
 | 
			
		||||
// method they target and may modify the call's arguments and/or return values.
 | 
			
		||||
// The CaptureMetrics implementation serves as a working example for how the
 | 
			
		||||
// hooks can be used.
 | 
			
		||||
func Wrap(w http.ResponseWriter, hooks Hooks) http.ResponseWriter {
 | 
			
		||||
	rw := &rw{w: w, h: hooks}
 | 
			
		||||
	_, i0 := w.(http.Flusher)
 | 
			
		||||
	_, i1 := w.(http.CloseNotifier)
 | 
			
		||||
	_, i2 := w.(http.Hijacker)
 | 
			
		||||
	_, i3 := w.(io.ReaderFrom)
 | 
			
		||||
	_, i4 := w.(http.Pusher)
 | 
			
		||||
	switch {
 | 
			
		||||
	// combination 1/32
 | 
			
		||||
	case !i0 && !i1 && !i2 && !i3 && !i4:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
		}{rw}
 | 
			
		||||
	// combination 2/32
 | 
			
		||||
	case !i0 && !i1 && !i2 && !i3 && i4:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.Pusher
 | 
			
		||||
		}{rw, rw}
 | 
			
		||||
	// combination 3/32
 | 
			
		||||
	case !i0 && !i1 && !i2 && i3 && !i4:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			io.ReaderFrom
 | 
			
		||||
		}{rw, rw}
 | 
			
		||||
	// combination 4/32
 | 
			
		||||
	case !i0 && !i1 && !i2 && i3 && i4:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			io.ReaderFrom
 | 
			
		||||
			http.Pusher
 | 
			
		||||
		}{rw, rw, rw}
 | 
			
		||||
	// combination 5/32
 | 
			
		||||
	case !i0 && !i1 && i2 && !i3 && !i4:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.Hijacker
 | 
			
		||||
		}{rw, rw}
 | 
			
		||||
	// combination 6/32
 | 
			
		||||
	case !i0 && !i1 && i2 && !i3 && i4:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.Hijacker
 | 
			
		||||
			http.Pusher
 | 
			
		||||
		}{rw, rw, rw}
 | 
			
		||||
	// combination 7/32
 | 
			
		||||
	case !i0 && !i1 && i2 && i3 && !i4:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.Hijacker
 | 
			
		||||
			io.ReaderFrom
 | 
			
		||||
		}{rw, rw, rw}
 | 
			
		||||
	// combination 8/32
 | 
			
		||||
	case !i0 && !i1 && i2 && i3 && i4:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.Hijacker
 | 
			
		||||
			io.ReaderFrom
 | 
			
		||||
			http.Pusher
 | 
			
		||||
		}{rw, rw, rw, rw}
 | 
			
		||||
	// combination 9/32
 | 
			
		||||
	case !i0 && i1 && !i2 && !i3 && !i4:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.CloseNotifier
 | 
			
		||||
		}{rw, rw}
 | 
			
		||||
	// combination 10/32
 | 
			
		||||
	case !i0 && i1 && !i2 && !i3 && i4:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.CloseNotifier
 | 
			
		||||
			http.Pusher
 | 
			
		||||
		}{rw, rw, rw}
 | 
			
		||||
	// combination 11/32
 | 
			
		||||
	case !i0 && i1 && !i2 && i3 && !i4:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.CloseNotifier
 | 
			
		||||
			io.ReaderFrom
 | 
			
		||||
		}{rw, rw, rw}
 | 
			
		||||
	// combination 12/32
 | 
			
		||||
	case !i0 && i1 && !i2 && i3 && i4:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.CloseNotifier
 | 
			
		||||
			io.ReaderFrom
 | 
			
		||||
			http.Pusher
 | 
			
		||||
		}{rw, rw, rw, rw}
 | 
			
		||||
	// combination 13/32
 | 
			
		||||
	case !i0 && i1 && i2 && !i3 && !i4:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.CloseNotifier
 | 
			
		||||
			http.Hijacker
 | 
			
		||||
		}{rw, rw, rw}
 | 
			
		||||
	// combination 14/32
 | 
			
		||||
	case !i0 && i1 && i2 && !i3 && i4:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.CloseNotifier
 | 
			
		||||
			http.Hijacker
 | 
			
		||||
			http.Pusher
 | 
			
		||||
		}{rw, rw, rw, rw}
 | 
			
		||||
	// combination 15/32
 | 
			
		||||
	case !i0 && i1 && i2 && i3 && !i4:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.CloseNotifier
 | 
			
		||||
			http.Hijacker
 | 
			
		||||
			io.ReaderFrom
 | 
			
		||||
		}{rw, rw, rw, rw}
 | 
			
		||||
	// combination 16/32
 | 
			
		||||
	case !i0 && i1 && i2 && i3 && i4:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.CloseNotifier
 | 
			
		||||
			http.Hijacker
 | 
			
		||||
			io.ReaderFrom
 | 
			
		||||
			http.Pusher
 | 
			
		||||
		}{rw, rw, rw, rw, rw}
 | 
			
		||||
	// combination 17/32
 | 
			
		||||
	case i0 && !i1 && !i2 && !i3 && !i4:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.Flusher
 | 
			
		||||
		}{rw, rw}
 | 
			
		||||
	// combination 18/32
 | 
			
		||||
	case i0 && !i1 && !i2 && !i3 && i4:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.Flusher
 | 
			
		||||
			http.Pusher
 | 
			
		||||
		}{rw, rw, rw}
 | 
			
		||||
	// combination 19/32
 | 
			
		||||
	case i0 && !i1 && !i2 && i3 && !i4:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.Flusher
 | 
			
		||||
			io.ReaderFrom
 | 
			
		||||
		}{rw, rw, rw}
 | 
			
		||||
	// combination 20/32
 | 
			
		||||
	case i0 && !i1 && !i2 && i3 && i4:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.Flusher
 | 
			
		||||
			io.ReaderFrom
 | 
			
		||||
			http.Pusher
 | 
			
		||||
		}{rw, rw, rw, rw}
 | 
			
		||||
	// combination 21/32
 | 
			
		||||
	case i0 && !i1 && i2 && !i3 && !i4:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.Flusher
 | 
			
		||||
			http.Hijacker
 | 
			
		||||
		}{rw, rw, rw}
 | 
			
		||||
	// combination 22/32
 | 
			
		||||
	case i0 && !i1 && i2 && !i3 && i4:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.Flusher
 | 
			
		||||
			http.Hijacker
 | 
			
		||||
			http.Pusher
 | 
			
		||||
		}{rw, rw, rw, rw}
 | 
			
		||||
	// combination 23/32
 | 
			
		||||
	case i0 && !i1 && i2 && i3 && !i4:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.Flusher
 | 
			
		||||
			http.Hijacker
 | 
			
		||||
			io.ReaderFrom
 | 
			
		||||
		}{rw, rw, rw, rw}
 | 
			
		||||
	// combination 24/32
 | 
			
		||||
	case i0 && !i1 && i2 && i3 && i4:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.Flusher
 | 
			
		||||
			http.Hijacker
 | 
			
		||||
			io.ReaderFrom
 | 
			
		||||
			http.Pusher
 | 
			
		||||
		}{rw, rw, rw, rw, rw}
 | 
			
		||||
	// combination 25/32
 | 
			
		||||
	case i0 && i1 && !i2 && !i3 && !i4:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.Flusher
 | 
			
		||||
			http.CloseNotifier
 | 
			
		||||
		}{rw, rw, rw}
 | 
			
		||||
	// combination 26/32
 | 
			
		||||
	case i0 && i1 && !i2 && !i3 && i4:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.Flusher
 | 
			
		||||
			http.CloseNotifier
 | 
			
		||||
			http.Pusher
 | 
			
		||||
		}{rw, rw, rw, rw}
 | 
			
		||||
	// combination 27/32
 | 
			
		||||
	case i0 && i1 && !i2 && i3 && !i4:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.Flusher
 | 
			
		||||
			http.CloseNotifier
 | 
			
		||||
			io.ReaderFrom
 | 
			
		||||
		}{rw, rw, rw, rw}
 | 
			
		||||
	// combination 28/32
 | 
			
		||||
	case i0 && i1 && !i2 && i3 && i4:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.Flusher
 | 
			
		||||
			http.CloseNotifier
 | 
			
		||||
			io.ReaderFrom
 | 
			
		||||
			http.Pusher
 | 
			
		||||
		}{rw, rw, rw, rw, rw}
 | 
			
		||||
	// combination 29/32
 | 
			
		||||
	case i0 && i1 && i2 && !i3 && !i4:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.Flusher
 | 
			
		||||
			http.CloseNotifier
 | 
			
		||||
			http.Hijacker
 | 
			
		||||
		}{rw, rw, rw, rw}
 | 
			
		||||
	// combination 30/32
 | 
			
		||||
	case i0 && i1 && i2 && !i3 && i4:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.Flusher
 | 
			
		||||
			http.CloseNotifier
 | 
			
		||||
			http.Hijacker
 | 
			
		||||
			http.Pusher
 | 
			
		||||
		}{rw, rw, rw, rw, rw}
 | 
			
		||||
	// combination 31/32
 | 
			
		||||
	case i0 && i1 && i2 && i3 && !i4:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.Flusher
 | 
			
		||||
			http.CloseNotifier
 | 
			
		||||
			http.Hijacker
 | 
			
		||||
			io.ReaderFrom
 | 
			
		||||
		}{rw, rw, rw, rw, rw}
 | 
			
		||||
	// combination 32/32
 | 
			
		||||
	case i0 && i1 && i2 && i3 && i4:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.Flusher
 | 
			
		||||
			http.CloseNotifier
 | 
			
		||||
			http.Hijacker
 | 
			
		||||
			io.ReaderFrom
 | 
			
		||||
			http.Pusher
 | 
			
		||||
		}{rw, rw, rw, rw, rw, rw}
 | 
			
		||||
	}
 | 
			
		||||
	panic("unreachable")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type rw struct {
 | 
			
		||||
	w http.ResponseWriter
 | 
			
		||||
	h Hooks
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (w *rw) Header() http.Header {
 | 
			
		||||
	f := w.w.(http.ResponseWriter).Header
 | 
			
		||||
	if w.h.Header != nil {
 | 
			
		||||
		f = w.h.Header(f)
 | 
			
		||||
	}
 | 
			
		||||
	return f()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (w *rw) WriteHeader(code int) {
 | 
			
		||||
	f := w.w.(http.ResponseWriter).WriteHeader
 | 
			
		||||
	if w.h.WriteHeader != nil {
 | 
			
		||||
		f = w.h.WriteHeader(f)
 | 
			
		||||
	}
 | 
			
		||||
	f(code)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (w *rw) Write(b []byte) (int, error) {
 | 
			
		||||
	f := w.w.(http.ResponseWriter).Write
 | 
			
		||||
	if w.h.Write != nil {
 | 
			
		||||
		f = w.h.Write(f)
 | 
			
		||||
	}
 | 
			
		||||
	return f(b)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (w *rw) Flush() {
 | 
			
		||||
	f := w.w.(http.Flusher).Flush
 | 
			
		||||
	if w.h.Flush != nil {
 | 
			
		||||
		f = w.h.Flush(f)
 | 
			
		||||
	}
 | 
			
		||||
	f()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (w *rw) CloseNotify() <-chan bool {
 | 
			
		||||
	f := w.w.(http.CloseNotifier).CloseNotify
 | 
			
		||||
	if w.h.CloseNotify != nil {
 | 
			
		||||
		f = w.h.CloseNotify(f)
 | 
			
		||||
	}
 | 
			
		||||
	return f()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (w *rw) Hijack() (net.Conn, *bufio.ReadWriter, error) {
 | 
			
		||||
	f := w.w.(http.Hijacker).Hijack
 | 
			
		||||
	if w.h.Hijack != nil {
 | 
			
		||||
		f = w.h.Hijack(f)
 | 
			
		||||
	}
 | 
			
		||||
	return f()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (w *rw) ReadFrom(src io.Reader) (int64, error) {
 | 
			
		||||
	f := w.w.(io.ReaderFrom).ReadFrom
 | 
			
		||||
	if w.h.ReadFrom != nil {
 | 
			
		||||
		f = w.h.ReadFrom(f)
 | 
			
		||||
	}
 | 
			
		||||
	return f(src)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (w *rw) Push(target string, opts *http.PushOptions) error {
 | 
			
		||||
	f := w.w.(http.Pusher).Push
 | 
			
		||||
	if w.h.Push != nil {
 | 
			
		||||
		f = w.h.Push(f)
 | 
			
		||||
	}
 | 
			
		||||
	return f(target, opts)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										243
									
								
								vendor/github.com/felixge/httpsnoop/wrap_generated_lt_1.8.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										243
									
								
								vendor/github.com/felixge/httpsnoop/wrap_generated_lt_1.8.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,243 @@
 | 
			
		|||
// +build !go1.8
 | 
			
		||||
// Code generated by "httpsnoop/codegen"; DO NOT EDIT
 | 
			
		||||
 | 
			
		||||
package httpsnoop
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bufio"
 | 
			
		||||
	"io"
 | 
			
		||||
	"net"
 | 
			
		||||
	"net/http"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// HeaderFunc is part of the http.ResponseWriter interface.
 | 
			
		||||
type HeaderFunc func() http.Header
 | 
			
		||||
 | 
			
		||||
// WriteHeaderFunc is part of the http.ResponseWriter interface.
 | 
			
		||||
type WriteHeaderFunc func(code int)
 | 
			
		||||
 | 
			
		||||
// WriteFunc is part of the http.ResponseWriter interface.
 | 
			
		||||
type WriteFunc func(b []byte) (int, error)
 | 
			
		||||
 | 
			
		||||
// FlushFunc is part of the http.Flusher interface.
 | 
			
		||||
type FlushFunc func()
 | 
			
		||||
 | 
			
		||||
// CloseNotifyFunc is part of the http.CloseNotifier interface.
 | 
			
		||||
type CloseNotifyFunc func() <-chan bool
 | 
			
		||||
 | 
			
		||||
// HijackFunc is part of the http.Hijacker interface.
 | 
			
		||||
type HijackFunc func() (net.Conn, *bufio.ReadWriter, error)
 | 
			
		||||
 | 
			
		||||
// ReadFromFunc is part of the io.ReaderFrom interface.
 | 
			
		||||
type ReadFromFunc func(src io.Reader) (int64, error)
 | 
			
		||||
 | 
			
		||||
// Hooks defines a set of method interceptors for methods included in
 | 
			
		||||
// http.ResponseWriter as well as some others. You can think of them as
 | 
			
		||||
// middleware for the function calls they target. See Wrap for more details.
 | 
			
		||||
type Hooks struct {
 | 
			
		||||
	Header      func(HeaderFunc) HeaderFunc
 | 
			
		||||
	WriteHeader func(WriteHeaderFunc) WriteHeaderFunc
 | 
			
		||||
	Write       func(WriteFunc) WriteFunc
 | 
			
		||||
	Flush       func(FlushFunc) FlushFunc
 | 
			
		||||
	CloseNotify func(CloseNotifyFunc) CloseNotifyFunc
 | 
			
		||||
	Hijack      func(HijackFunc) HijackFunc
 | 
			
		||||
	ReadFrom    func(ReadFromFunc) ReadFromFunc
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Wrap returns a wrapped version of w that provides the exact same interface
 | 
			
		||||
// as w. Specifically if w implements any combination of:
 | 
			
		||||
//
 | 
			
		||||
// - http.Flusher
 | 
			
		||||
// - http.CloseNotifier
 | 
			
		||||
// - http.Hijacker
 | 
			
		||||
// - io.ReaderFrom
 | 
			
		||||
//
 | 
			
		||||
// The wrapped version will implement the exact same combination. If no hooks
 | 
			
		||||
// are set, the wrapped version also behaves exactly as w. Hooks targeting
 | 
			
		||||
// methods not supported by w are ignored. Any other hooks will intercept the
 | 
			
		||||
// method they target and may modify the call's arguments and/or return values.
 | 
			
		||||
// The CaptureMetrics implementation serves as a working example for how the
 | 
			
		||||
// hooks can be used.
 | 
			
		||||
func Wrap(w http.ResponseWriter, hooks Hooks) http.ResponseWriter {
 | 
			
		||||
	rw := &rw{w: w, h: hooks}
 | 
			
		||||
	_, i0 := w.(http.Flusher)
 | 
			
		||||
	_, i1 := w.(http.CloseNotifier)
 | 
			
		||||
	_, i2 := w.(http.Hijacker)
 | 
			
		||||
	_, i3 := w.(io.ReaderFrom)
 | 
			
		||||
	switch {
 | 
			
		||||
	// combination 1/16
 | 
			
		||||
	case !i0 && !i1 && !i2 && !i3:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
		}{rw}
 | 
			
		||||
	// combination 2/16
 | 
			
		||||
	case !i0 && !i1 && !i2 && i3:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			io.ReaderFrom
 | 
			
		||||
		}{rw, rw}
 | 
			
		||||
	// combination 3/16
 | 
			
		||||
	case !i0 && !i1 && i2 && !i3:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.Hijacker
 | 
			
		||||
		}{rw, rw}
 | 
			
		||||
	// combination 4/16
 | 
			
		||||
	case !i0 && !i1 && i2 && i3:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.Hijacker
 | 
			
		||||
			io.ReaderFrom
 | 
			
		||||
		}{rw, rw, rw}
 | 
			
		||||
	// combination 5/16
 | 
			
		||||
	case !i0 && i1 && !i2 && !i3:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.CloseNotifier
 | 
			
		||||
		}{rw, rw}
 | 
			
		||||
	// combination 6/16
 | 
			
		||||
	case !i0 && i1 && !i2 && i3:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.CloseNotifier
 | 
			
		||||
			io.ReaderFrom
 | 
			
		||||
		}{rw, rw, rw}
 | 
			
		||||
	// combination 7/16
 | 
			
		||||
	case !i0 && i1 && i2 && !i3:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.CloseNotifier
 | 
			
		||||
			http.Hijacker
 | 
			
		||||
		}{rw, rw, rw}
 | 
			
		||||
	// combination 8/16
 | 
			
		||||
	case !i0 && i1 && i2 && i3:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.CloseNotifier
 | 
			
		||||
			http.Hijacker
 | 
			
		||||
			io.ReaderFrom
 | 
			
		||||
		}{rw, rw, rw, rw}
 | 
			
		||||
	// combination 9/16
 | 
			
		||||
	case i0 && !i1 && !i2 && !i3:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.Flusher
 | 
			
		||||
		}{rw, rw}
 | 
			
		||||
	// combination 10/16
 | 
			
		||||
	case i0 && !i1 && !i2 && i3:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.Flusher
 | 
			
		||||
			io.ReaderFrom
 | 
			
		||||
		}{rw, rw, rw}
 | 
			
		||||
	// combination 11/16
 | 
			
		||||
	case i0 && !i1 && i2 && !i3:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.Flusher
 | 
			
		||||
			http.Hijacker
 | 
			
		||||
		}{rw, rw, rw}
 | 
			
		||||
	// combination 12/16
 | 
			
		||||
	case i0 && !i1 && i2 && i3:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.Flusher
 | 
			
		||||
			http.Hijacker
 | 
			
		||||
			io.ReaderFrom
 | 
			
		||||
		}{rw, rw, rw, rw}
 | 
			
		||||
	// combination 13/16
 | 
			
		||||
	case i0 && i1 && !i2 && !i3:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.Flusher
 | 
			
		||||
			http.CloseNotifier
 | 
			
		||||
		}{rw, rw, rw}
 | 
			
		||||
	// combination 14/16
 | 
			
		||||
	case i0 && i1 && !i2 && i3:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.Flusher
 | 
			
		||||
			http.CloseNotifier
 | 
			
		||||
			io.ReaderFrom
 | 
			
		||||
		}{rw, rw, rw, rw}
 | 
			
		||||
	// combination 15/16
 | 
			
		||||
	case i0 && i1 && i2 && !i3:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.Flusher
 | 
			
		||||
			http.CloseNotifier
 | 
			
		||||
			http.Hijacker
 | 
			
		||||
		}{rw, rw, rw, rw}
 | 
			
		||||
	// combination 16/16
 | 
			
		||||
	case i0 && i1 && i2 && i3:
 | 
			
		||||
		return struct {
 | 
			
		||||
			http.ResponseWriter
 | 
			
		||||
			http.Flusher
 | 
			
		||||
			http.CloseNotifier
 | 
			
		||||
			http.Hijacker
 | 
			
		||||
			io.ReaderFrom
 | 
			
		||||
		}{rw, rw, rw, rw, rw}
 | 
			
		||||
	}
 | 
			
		||||
	panic("unreachable")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type rw struct {
 | 
			
		||||
	w http.ResponseWriter
 | 
			
		||||
	h Hooks
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (w *rw) Header() http.Header {
 | 
			
		||||
	f := w.w.(http.ResponseWriter).Header
 | 
			
		||||
	if w.h.Header != nil {
 | 
			
		||||
		f = w.h.Header(f)
 | 
			
		||||
	}
 | 
			
		||||
	return f()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (w *rw) WriteHeader(code int) {
 | 
			
		||||
	f := w.w.(http.ResponseWriter).WriteHeader
 | 
			
		||||
	if w.h.WriteHeader != nil {
 | 
			
		||||
		f = w.h.WriteHeader(f)
 | 
			
		||||
	}
 | 
			
		||||
	f(code)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (w *rw) Write(b []byte) (int, error) {
 | 
			
		||||
	f := w.w.(http.ResponseWriter).Write
 | 
			
		||||
	if w.h.Write != nil {
 | 
			
		||||
		f = w.h.Write(f)
 | 
			
		||||
	}
 | 
			
		||||
	return f(b)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (w *rw) Flush() {
 | 
			
		||||
	f := w.w.(http.Flusher).Flush
 | 
			
		||||
	if w.h.Flush != nil {
 | 
			
		||||
		f = w.h.Flush(f)
 | 
			
		||||
	}
 | 
			
		||||
	f()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (w *rw) CloseNotify() <-chan bool {
 | 
			
		||||
	f := w.w.(http.CloseNotifier).CloseNotify
 | 
			
		||||
	if w.h.CloseNotify != nil {
 | 
			
		||||
		f = w.h.CloseNotify(f)
 | 
			
		||||
	}
 | 
			
		||||
	return f()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (w *rw) Hijack() (net.Conn, *bufio.ReadWriter, error) {
 | 
			
		||||
	f := w.w.(http.Hijacker).Hijack
 | 
			
		||||
	if w.h.Hijack != nil {
 | 
			
		||||
		f = w.h.Hijack(f)
 | 
			
		||||
	}
 | 
			
		||||
	return f()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (w *rw) ReadFrom(src io.Reader) (int64, error) {
 | 
			
		||||
	f := w.w.(io.ReaderFrom).ReadFrom
 | 
			
		||||
	if w.h.ReadFrom != nil {
 | 
			
		||||
		f = w.h.ReadFrom(f)
 | 
			
		||||
	}
 | 
			
		||||
	return f(src)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										15
									
								
								vendor/github.com/go-openapi/analysis/.golangci.yml
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								vendor/github.com/go-openapi/analysis/.golangci.yml
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -8,7 +8,7 @@ linters-settings:
 | 
			
		|||
  maligned:
 | 
			
		||||
    suggest-new: true
 | 
			
		||||
  dupl:
 | 
			
		||||
    threshold: 100
 | 
			
		||||
    threshold: 150
 | 
			
		||||
  goconst:
 | 
			
		||||
    min-len: 2
 | 
			
		||||
    min-occurrences: 4
 | 
			
		||||
| 
						 | 
				
			
			@ -30,3 +30,16 @@ linters:
 | 
			
		|||
    - whitespace
 | 
			
		||||
    - wsl
 | 
			
		||||
    - funlen
 | 
			
		||||
    - testpackage
 | 
			
		||||
    - wrapcheck
 | 
			
		||||
    - nlreturn
 | 
			
		||||
    - gomnd
 | 
			
		||||
    - goerr113
 | 
			
		||||
    - exhaustivestruct
 | 
			
		||||
    - errorlint
 | 
			
		||||
    - nestif
 | 
			
		||||
    - gofumpt
 | 
			
		||||
    - godot
 | 
			
		||||
    - gci
 | 
			
		||||
    - dogsled
 | 
			
		||||
    - paralleltest
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										5
									
								
								vendor/github.com/go-openapi/analysis/.travis.yml
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								vendor/github.com/go-openapi/analysis/.travis.yml
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,8 +1,11 @@
 | 
			
		|||
after_success:
 | 
			
		||||
- bash <(curl -s https://codecov.io/bash)
 | 
			
		||||
go:
 | 
			
		||||
- 1.13.x
 | 
			
		||||
- 1.14.x
 | 
			
		||||
- 1.x
 | 
			
		||||
arch:
 | 
			
		||||
  - amd64
 | 
			
		||||
  - ppc64le
 | 
			
		||||
install:
 | 
			
		||||
- go get -u gotest.tools/gotestsum
 | 
			
		||||
language: go
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										22
									
								
								vendor/github.com/go-openapi/analysis/analyzer.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										22
									
								
								vendor/github.com/go-openapi/analysis/analyzer.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -212,7 +212,7 @@ func (s *Spec) initialize() {
 | 
			
		|||
		}
 | 
			
		||||
	}
 | 
			
		||||
	for path, pathItem := range s.AllPaths() {
 | 
			
		||||
		s.analyzeOperations(path, &pathItem)
 | 
			
		||||
		s.analyzeOperations(path, &pathItem) //#nosec
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for name, parameter := range s.spec.Parameters {
 | 
			
		||||
| 
						 | 
				
			
			@ -277,7 +277,7 @@ func (s *Spec) analyzeOperations(path string, pi *spec.PathItem) {
 | 
			
		|||
	for i, param := range op.Parameters {
 | 
			
		||||
		refPref := slashpath.Join("/paths", jsonpointer.Escape(path), "parameters", strconv.Itoa(i))
 | 
			
		||||
		if param.Ref.String() != "" {
 | 
			
		||||
			s.references.addParamRef(refPref, ¶m)
 | 
			
		||||
			s.references.addParamRef(refPref, ¶m) //#nosec
 | 
			
		||||
		}
 | 
			
		||||
		if param.Pattern != "" {
 | 
			
		||||
			s.patterns.addParameterPattern(refPref, param.Pattern)
 | 
			
		||||
| 
						 | 
				
			
			@ -335,7 +335,7 @@ func (s *Spec) analyzeOperation(method, path string, op *spec.Operation) {
 | 
			
		|||
	for i, param := range op.Parameters {
 | 
			
		||||
		refPref := slashpath.Join(prefix, "parameters", strconv.Itoa(i))
 | 
			
		||||
		if param.Ref.String() != "" {
 | 
			
		||||
			s.references.addParamRef(refPref, ¶m)
 | 
			
		||||
			s.references.addParamRef(refPref, ¶m) //#nosec
 | 
			
		||||
		}
 | 
			
		||||
		if param.Pattern != "" {
 | 
			
		||||
			s.patterns.addParameterPattern(refPref, param.Pattern)
 | 
			
		||||
| 
						 | 
				
			
			@ -368,7 +368,7 @@ func (s *Spec) analyzeOperation(method, path string, op *spec.Operation) {
 | 
			
		|||
		for k, res := range op.Responses.StatusCodeResponses {
 | 
			
		||||
			refPref := slashpath.Join(prefix, "responses", strconv.Itoa(k))
 | 
			
		||||
			if res.Ref.String() != "" {
 | 
			
		||||
				s.references.addResponseRef(refPref, &res)
 | 
			
		||||
				s.references.addResponseRef(refPref, &res) //#nosec
 | 
			
		||||
			}
 | 
			
		||||
			for k, v := range res.Headers {
 | 
			
		||||
				hRefPref := slashpath.Join(refPref, "headers", k)
 | 
			
		||||
| 
						 | 
				
			
			@ -665,25 +665,25 @@ func (s *Spec) SafeParametersFor(operationID string, callmeOnError ErrorOnParamF
 | 
			
		|||
	}
 | 
			
		||||
	for _, pi := range s.spec.Paths.Paths {
 | 
			
		||||
		if pi.Get != nil && pi.Get.ID == operationID {
 | 
			
		||||
			return gatherParams(&pi, pi.Get)
 | 
			
		||||
			return gatherParams(&pi, pi.Get) //#nosec
 | 
			
		||||
		}
 | 
			
		||||
		if pi.Head != nil && pi.Head.ID == operationID {
 | 
			
		||||
			return gatherParams(&pi, pi.Head)
 | 
			
		||||
			return gatherParams(&pi, pi.Head) //#nosec
 | 
			
		||||
		}
 | 
			
		||||
		if pi.Options != nil && pi.Options.ID == operationID {
 | 
			
		||||
			return gatherParams(&pi, pi.Options)
 | 
			
		||||
			return gatherParams(&pi, pi.Options) //#nosec
 | 
			
		||||
		}
 | 
			
		||||
		if pi.Post != nil && pi.Post.ID == operationID {
 | 
			
		||||
			return gatherParams(&pi, pi.Post)
 | 
			
		||||
			return gatherParams(&pi, pi.Post) //#nosec
 | 
			
		||||
		}
 | 
			
		||||
		if pi.Patch != nil && pi.Patch.ID == operationID {
 | 
			
		||||
			return gatherParams(&pi, pi.Patch)
 | 
			
		||||
			return gatherParams(&pi, pi.Patch) //#nosec
 | 
			
		||||
		}
 | 
			
		||||
		if pi.Put != nil && pi.Put.ID == operationID {
 | 
			
		||||
			return gatherParams(&pi, pi.Put)
 | 
			
		||||
			return gatherParams(&pi, pi.Put) //#nosec
 | 
			
		||||
		}
 | 
			
		||||
		if pi.Delete != nil && pi.Delete.ID == operationID {
 | 
			
		||||
			return gatherParams(&pi, pi.Delete)
 | 
			
		||||
			return gatherParams(&pi, pi.Delete) //#nosec
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										3
									
								
								vendor/github.com/go-openapi/analysis/appveyor.yml
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/github.com/go-openapi/analysis/appveyor.yml
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -17,7 +17,8 @@ environment:
 | 
			
		|||
stack: go 1.12
 | 
			
		||||
 | 
			
		||||
test_script:
 | 
			
		||||
  - go test -v -timeout 20m ./...
 | 
			
		||||
  - echo "test disabled for now"
 | 
			
		||||
  #- go test -v -timeout 20m ./...
 | 
			
		||||
#artifacts:
 | 
			
		||||
#  - path: '%GOPATH%\bin\*.exe'
 | 
			
		||||
deploy: off
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										4
									
								
								vendor/github.com/go-openapi/analysis/fixer.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/github.com/go-openapi/analysis/fixer.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -50,7 +50,7 @@ func FixEmptyResponseDescriptions(s *spec.Swagger) {
 | 
			
		|||
		}
 | 
			
		||||
	}
 | 
			
		||||
	for k, v := range s.Responses {
 | 
			
		||||
		FixEmptyDesc(&v)
 | 
			
		||||
		FixEmptyDesc(&v) //#nosec
 | 
			
		||||
		s.Responses[k] = v
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -60,7 +60,7 @@ func FixEmptyResponseDescriptions(s *spec.Swagger) {
 | 
			
		|||
func FixEmptyDescs(rs *spec.Responses) {
 | 
			
		||||
	FixEmptyDesc(rs.Default)
 | 
			
		||||
	for k, v := range rs.StatusCodeResponses {
 | 
			
		||||
		FixEmptyDesc(&v)
 | 
			
		||||
		FixEmptyDesc(&v) //#nosec
 | 
			
		||||
		rs.StatusCodeResponses[k] = v
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										35
									
								
								vendor/github.com/go-openapi/analysis/flatten.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										35
									
								
								vendor/github.com/go-openapi/analysis/flatten.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -156,6 +156,8 @@ func Flatten(opts FlattenOpts) error {
 | 
			
		|||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	opts.Spec.reload() // re-analyze
 | 
			
		||||
 | 
			
		||||
	// strip current file from $ref's, so we can recognize them as proper definitions
 | 
			
		||||
	// In particular, this works around for issue go-openapi/spec#76: leading absolute file in $ref is stripped
 | 
			
		||||
	if err := normalizeRef(&opts); err != nil {
 | 
			
		||||
| 
						 | 
				
			
			@ -778,6 +780,9 @@ func rewriteParentRef(spec *swspec.Swagger, key string, ref swspec.Ref) error {
 | 
			
		|||
		}
 | 
			
		||||
		container.Schemas[idx] = swspec.Schema{SchemaProps: swspec.SchemaProps{Ref: ref}}
 | 
			
		||||
 | 
			
		||||
	case swspec.SchemaProperties:
 | 
			
		||||
		container[entry] = swspec.Schema{SchemaProps: swspec.SchemaProps{Ref: ref}}
 | 
			
		||||
 | 
			
		||||
	// NOTE: can't have case *swspec.SchemaOrBool = parent in this case is *Schema
 | 
			
		||||
 | 
			
		||||
	default:
 | 
			
		||||
| 
						 | 
				
			
			@ -1038,7 +1043,7 @@ func nameFromRef(ref swspec.Ref) string {
 | 
			
		|||
			return swag.ToJSONName(bn)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return swag.ToJSONName(strings.Replace(u.Host, ".", " ", -1))
 | 
			
		||||
	return swag.ToJSONName(strings.ReplaceAll(u.Host, ".", " "))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func saveSchema(spec *swspec.Swagger, name string, schema *swspec.Schema) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1155,6 +1160,9 @@ func updateRef(spec interface{}, key string, ref swspec.Ref) error {
 | 
			
		|||
			}
 | 
			
		||||
			container.Schemas[idx] = swspec.Schema{SchemaProps: swspec.SchemaProps{Ref: ref}}
 | 
			
		||||
 | 
			
		||||
		case swspec.SchemaProperties:
 | 
			
		||||
			container[entry] = swspec.Schema{SchemaProps: swspec.SchemaProps{Ref: ref}}
 | 
			
		||||
 | 
			
		||||
		// NOTE: can't have case *swspec.SchemaOrBool = parent in this case is *Schema
 | 
			
		||||
 | 
			
		||||
		default:
 | 
			
		||||
| 
						 | 
				
			
			@ -1206,6 +1214,9 @@ func updateRefWithSchema(spec *swspec.Swagger, key string, sch *swspec.Schema) e
 | 
			
		|||
			}
 | 
			
		||||
			container.Schemas[idx] = *sch
 | 
			
		||||
 | 
			
		||||
		case swspec.SchemaProperties:
 | 
			
		||||
			container[entry] = *sch
 | 
			
		||||
 | 
			
		||||
		// NOTE: can't have case *swspec.SchemaOrBool = parent in this case is *Schema
 | 
			
		||||
 | 
			
		||||
		default:
 | 
			
		||||
| 
						 | 
				
			
			@ -1741,17 +1752,21 @@ DOWNREF:
 | 
			
		|||
// leading absolute file in $ref is stripped
 | 
			
		||||
func normalizeRef(opts *FlattenOpts) error {
 | 
			
		||||
	debugLog("normalizeRef")
 | 
			
		||||
	opts.Spec.reload() // re-analyze
 | 
			
		||||
	altered := false
 | 
			
		||||
	for k, w := range opts.Spec.references.allRefs {
 | 
			
		||||
		if strings.HasPrefix(w.String(), opts.BasePath+definitionsPath) { // may be a mix of / and \, depending on OS
 | 
			
		||||
			// strip base path from definition
 | 
			
		||||
			debugLog("stripping absolute path for: %s", w.String())
 | 
			
		||||
			if err := updateRef(opts.Swagger(), k,
 | 
			
		||||
				swspec.MustCreateRef(slashpath.Join(definitionsPath, slashpath.Base(w.String())))); err != nil {
 | 
			
		||||
				return err
 | 
			
		||||
			}
 | 
			
		||||
		if !strings.HasPrefix(w.String(), opts.BasePath+definitionsPath) { // may be a mix of / and \, depending on OS
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
		altered = true
 | 
			
		||||
		// strip base path from definition
 | 
			
		||||
		debugLog("stripping absolute path for: %s", w.String())
 | 
			
		||||
		if err := updateRef(opts.Swagger(), k,
 | 
			
		||||
			swspec.MustCreateRef(slashpath.Join(definitionsPath, slashpath.Base(w.String())))); err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	opts.Spec.reload() // re-analyze
 | 
			
		||||
	if altered {
 | 
			
		||||
		opts.Spec.reload() // re-analyze
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										25
									
								
								vendor/github.com/go-openapi/analysis/go.mod
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										25
									
								
								vendor/github.com/go-openapi/analysis/go.mod
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,23 +1,14 @@
 | 
			
		|||
module github.com/go-openapi/analysis
 | 
			
		||||
 | 
			
		||||
require (
 | 
			
		||||
	github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496 // indirect
 | 
			
		||||
	github.com/go-openapi/errors v0.19.3 // indirect
 | 
			
		||||
	github.com/go-openapi/jsonpointer v0.19.3
 | 
			
		||||
	github.com/go-openapi/jsonreference v0.19.3 // indirect
 | 
			
		||||
	github.com/go-openapi/loads v0.19.0
 | 
			
		||||
	github.com/go-openapi/spec v0.19.6
 | 
			
		||||
	github.com/go-openapi/strfmt v0.19.4
 | 
			
		||||
	github.com/go-openapi/swag v0.19.7
 | 
			
		||||
	github.com/kr/pty v1.1.5 // indirect
 | 
			
		||||
	github.com/mailru/easyjson v0.7.1 // indirect
 | 
			
		||||
	github.com/stretchr/testify v1.3.0
 | 
			
		||||
	go.mongodb.org/mongo-driver v1.3.0 // indirect
 | 
			
		||||
	golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8 // indirect
 | 
			
		||||
	golang.org/x/net v0.0.0-20200226121028-0de0cce0169b // indirect
 | 
			
		||||
	golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f // indirect
 | 
			
		||||
	golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59 // indirect
 | 
			
		||||
	gopkg.in/yaml.v2 v2.2.8 // indirect
 | 
			
		||||
	github.com/go-openapi/errors v0.19.9 // indirect
 | 
			
		||||
	github.com/go-openapi/jsonpointer v0.19.5
 | 
			
		||||
	github.com/go-openapi/loads v0.19.6
 | 
			
		||||
	github.com/go-openapi/spec v0.19.15
 | 
			
		||||
	github.com/go-openapi/strfmt v0.19.11
 | 
			
		||||
	github.com/go-openapi/swag v0.19.12
 | 
			
		||||
	github.com/mitchellh/mapstructure v1.4.0 // indirect
 | 
			
		||||
	github.com/stretchr/testify v1.6.1
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
go 1.13
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										130
									
								
								vendor/github.com/go-openapi/analysis/go.sum
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										130
									
								
								vendor/github.com/go-openapi/analysis/go.sum
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -4,52 +4,114 @@ github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tN
 | 
			
		|||
github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
 | 
			
		||||
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
 | 
			
		||||
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
 | 
			
		||||
github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM=
 | 
			
		||||
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
 | 
			
		||||
github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
 | 
			
		||||
github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a h1:idn718Q4B6AGu/h5Sxe66HYVdqdGu2l9Iebqhi/AEoA=
 | 
			
		||||
github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
 | 
			
		||||
github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496 h1:zV3ejI06GQ59hwDQAvmK1qxOQGB3WuVTRoY0okPTAv0=
 | 
			
		||||
github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg=
 | 
			
		||||
github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535 h1:4daAzAu0S6Vi7/lbWECcX0j45yZReDZ56BQsrVBOEEY=
 | 
			
		||||
github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg=
 | 
			
		||||
github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef h1:46PFijGLmAjMPwCCCo7Jf0W6f9slllCkkv7vyc1yOSg=
 | 
			
		||||
github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
 | 
			
		||||
github.com/aws/aws-sdk-go v1.34.28/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48=
 | 
			
		||||
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 | 
			
		||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 | 
			
		||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 | 
			
		||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 | 
			
		||||
github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
 | 
			
		||||
github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
 | 
			
		||||
github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q=
 | 
			
		||||
github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q=
 | 
			
		||||
github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI=
 | 
			
		||||
github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik=
 | 
			
		||||
github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik=
 | 
			
		||||
github.com/go-openapi/analysis v0.19.2/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk=
 | 
			
		||||
github.com/go-openapi/analysis v0.19.4/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk=
 | 
			
		||||
github.com/go-openapi/analysis v0.19.5/go.mod h1:hkEAkxagaIvIP7VTn8ygJNkd4kAYON2rCu0v0ObL0AU=
 | 
			
		||||
github.com/go-openapi/analysis v0.19.10/go.mod h1:qmhS3VNFxBlquFJ0RGoDtylO9y4pgTAUNE9AEEMdlJQ=
 | 
			
		||||
github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0=
 | 
			
		||||
github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0=
 | 
			
		||||
github.com/go-openapi/errors v0.19.2 h1:a2kIyV3w+OS3S97zxUndRVD46+FhGOUBDFY7nmu4CsY=
 | 
			
		||||
github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94=
 | 
			
		||||
github.com/go-openapi/errors v0.19.3 h1:7MGZI1ibQDLasvAz8HuhvYk9eNJbJkCOXWsSjjMS+Zc=
 | 
			
		||||
github.com/go-openapi/errors v0.19.3/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94=
 | 
			
		||||
github.com/go-openapi/errors v0.19.6/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M=
 | 
			
		||||
github.com/go-openapi/errors v0.19.7/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M=
 | 
			
		||||
github.com/go-openapi/errors v0.19.8 h1:doM+tQdZbUm9gydV9yR+iQNmztbjj7I3sW4sIcAwIzc=
 | 
			
		||||
github.com/go-openapi/errors v0.19.8/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M=
 | 
			
		||||
github.com/go-openapi/errors v0.19.9 h1:9SnKdGhiPZHF3ttwFMiCBEb8jQ4IDdrK+5+a0oTygA4=
 | 
			
		||||
github.com/go-openapi/errors v0.19.9/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M=
 | 
			
		||||
github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M=
 | 
			
		||||
github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M=
 | 
			
		||||
github.com/go-openapi/jsonpointer v0.19.2 h1:A9+F4Dc/MCNB5jibxf6rRvOvR/iFgQdyNx9eIhnGqq0=
 | 
			
		||||
github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg=
 | 
			
		||||
github.com/go-openapi/jsonpointer v0.19.3 h1:gihV7YNZK1iK6Tgwwsxo2rJbD1GTbdm72325Bq8FI3w=
 | 
			
		||||
github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
 | 
			
		||||
github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY=
 | 
			
		||||
github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
 | 
			
		||||
github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I=
 | 
			
		||||
github.com/go-openapi/jsonreference v0.19.2 h1:o20suLFB4Ri0tuzpWtyHlh7E7HnkqTNLq6aR6WVNS1w=
 | 
			
		||||
github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I=
 | 
			
		||||
github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc=
 | 
			
		||||
github.com/go-openapi/jsonreference v0.19.3 h1:5cxNfTy0UVC3X8JL5ymxzyoUZmo8iZb+jeTWn7tUa8o=
 | 
			
		||||
github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8=
 | 
			
		||||
github.com/go-openapi/jsonreference v0.19.5 h1:1WJP/wi4OjB4iV8KVbH73rQaoialJrqv8gitZLxGLtM=
 | 
			
		||||
github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg=
 | 
			
		||||
github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU=
 | 
			
		||||
github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU=
 | 
			
		||||
github.com/go-openapi/loads v0.19.0 h1:wCOBNscACI8L93tt5tvB2zOMkJ098XCw3fP0BY2ybDA=
 | 
			
		||||
github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU=
 | 
			
		||||
github.com/go-openapi/loads v0.19.2/go.mod h1:QAskZPMX5V0C2gvfkGZzJlINuP7Hx/4+ix5jWFxsNPs=
 | 
			
		||||
github.com/go-openapi/loads v0.19.3/go.mod h1:YVfqhUCdahYwR3f3iiwQLhicVRvLlU/WO5WPaZvcvSI=
 | 
			
		||||
github.com/go-openapi/loads v0.19.5/go.mod h1:dswLCAdonkRufe/gSUC3gN8nTSaB9uaS2es0x5/IbjY=
 | 
			
		||||
github.com/go-openapi/loads v0.19.6 h1:6IAtnx22MNSjPocZZ2sV7EjgF6wW5rDC9r6ZkNxjiN8=
 | 
			
		||||
github.com/go-openapi/loads v0.19.6/go.mod h1:brCsvE6j8mnbmGBh103PT/QLHfbyDxA4hsKvYBNEGVc=
 | 
			
		||||
github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA=
 | 
			
		||||
github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64=
 | 
			
		||||
github.com/go-openapi/runtime v0.19.4/go.mod h1:X277bwSUBxVlCYR3r7xgZZGKVvBd/29gLDlFGtJ8NL4=
 | 
			
		||||
github.com/go-openapi/runtime v0.19.15/go.mod h1:dhGWCTKRXlAfGnQG0ONViOZpjfg0m2gUt9nTQPQZuoo=
 | 
			
		||||
github.com/go-openapi/runtime v0.19.16 h1:tQMAY5s5BfmmCC31+ufDCsGrr8iO1A8UIdYfDo5ADvs=
 | 
			
		||||
github.com/go-openapi/runtime v0.19.16/go.mod h1:5P9104EJgYcizotuXhEuUrzVc+j1RiSjahULvYmlv98=
 | 
			
		||||
github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI=
 | 
			
		||||
github.com/go-openapi/spec v0.19.3 h1:0XRyw8kguri6Yw4SxhsQA/atC88yqrk0+G4YhI2wabc=
 | 
			
		||||
github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI=
 | 
			
		||||
github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY=
 | 
			
		||||
github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo=
 | 
			
		||||
github.com/go-openapi/spec v0.19.6 h1:rMMMj8cV38KVXK7SFc+I2MWClbEfbK705+j+dyqun5g=
 | 
			
		||||
github.com/go-openapi/spec v0.19.6/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk=
 | 
			
		||||
github.com/go-openapi/spec v0.19.8/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk=
 | 
			
		||||
github.com/go-openapi/spec v0.19.15 h1:uxh8miNJEfMm8l8ekpY7i39LcORm1xSRtoipEGl1JPk=
 | 
			
		||||
github.com/go-openapi/spec v0.19.15/go.mod h1:+81FIL1JwC5P3/Iuuozq3pPE9dXdIEGxFutcFKaVbmU=
 | 
			
		||||
github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU=
 | 
			
		||||
github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU=
 | 
			
		||||
github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY=
 | 
			
		||||
github.com/go-openapi/strfmt v0.19.2 h1:clPGfBnJohokno0e+d7hs6Yocrzjlgz6EsQSDncCRnE=
 | 
			
		||||
github.com/go-openapi/strfmt v0.19.2/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU=
 | 
			
		||||
github.com/go-openapi/strfmt v0.19.3 h1:eRfyY5SkaNJCAwmmMcADjY31ow9+N7MCLW7oRkbsINA=
 | 
			
		||||
github.com/go-openapi/strfmt v0.19.3/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU=
 | 
			
		||||
github.com/go-openapi/strfmt v0.19.4 h1:eRvaqAhpL0IL6Trh5fDsGnGhiXndzHFuA05w6sXH6/g=
 | 
			
		||||
github.com/go-openapi/strfmt v0.19.4/go.mod h1:eftuHTlB/dI8Uq8JJOyRlieZf+WkkxUuk0dgdHXr2Qk=
 | 
			
		||||
github.com/go-openapi/strfmt v0.19.5 h1:0utjKrw+BAh8s57XE9Xz8DUBsVvPmRUB6styvl9wWIM=
 | 
			
		||||
github.com/go-openapi/strfmt v0.19.5/go.mod h1:eftuHTlB/dI8Uq8JJOyRlieZf+WkkxUuk0dgdHXr2Qk=
 | 
			
		||||
github.com/go-openapi/strfmt v0.19.11 h1:0+YvbNh05rmBkgztd6zHp4OCFn7Mtu30bn46NQo2ZRw=
 | 
			
		||||
github.com/go-openapi/strfmt v0.19.11/go.mod h1:UukAYgTaQfqJuAFlNxxMWNvMYiwiXtLsF2VwmoFtbtc=
 | 
			
		||||
github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg=
 | 
			
		||||
github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg=
 | 
			
		||||
github.com/go-openapi/swag v0.19.2 h1:jvO6bCMBEilGwMfHhrd61zIID4oIFdwb76V17SM88dE=
 | 
			
		||||
github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
 | 
			
		||||
github.com/go-openapi/swag v0.19.5 h1:lTz6Ys4CmqqCQmZPBlbQENR1/GucA2bzYTE12Pw4tFY=
 | 
			
		||||
github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
 | 
			
		||||
github.com/go-openapi/swag v0.19.7 h1:VRuXN2EnMSsZdauzdss6JBC29YotDqG59BZ+tdlIL1s=
 | 
			
		||||
github.com/go-openapi/swag v0.19.7/go.mod h1:ao+8BpOPyKdpQz3AOJfbeEVpLmWAvlT1IfTe5McPyhY=
 | 
			
		||||
github.com/go-openapi/swag v0.19.9/go.mod h1:ao+8BpOPyKdpQz3AOJfbeEVpLmWAvlT1IfTe5McPyhY=
 | 
			
		||||
github.com/go-openapi/swag v0.19.12 h1:Bc0bnY2c3AoF7Gc+IMIAQQsD8fLHjHpc19wXvYuayQI=
 | 
			
		||||
github.com/go-openapi/swag v0.19.12/go.mod h1:eFdyEBkTdoAf/9RXBvj4cr1nH7GD8Kzo5HTt47gr72M=
 | 
			
		||||
github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4=
 | 
			
		||||
github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA=
 | 
			
		||||
github.com/go-openapi/validate v0.19.3/go.mod h1:90Vh6jjkTn+OT1Eefm0ZixWNFjhtOH7vS9k0lo6zwJo=
 | 
			
		||||
github.com/go-openapi/validate v0.19.10/go.mod h1:RKEZTUWDkxKQxN2jDT7ZnZi2bhZlbNMAuKvKB+IaGx8=
 | 
			
		||||
github.com/go-openapi/validate v0.19.12 h1:mPLM/bfbd00PGOCJlU0yJL7IulkZ+q9VjPv7U11RMQQ=
 | 
			
		||||
github.com/go-openapi/validate v0.19.12/go.mod h1:Rzou8hA/CBw8donlS6WNEUQupNvUZ0waH08tGe6kAQ4=
 | 
			
		||||
github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
 | 
			
		||||
github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
 | 
			
		||||
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
 | 
			
		||||
github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0=
 | 
			
		||||
| 
						 | 
				
			
			@ -80,11 +142,17 @@ github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEW
 | 
			
		|||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
 | 
			
		||||
github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY=
 | 
			
		||||
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
 | 
			
		||||
github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM=
 | 
			
		||||
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 | 
			
		||||
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 | 
			
		||||
github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
 | 
			
		||||
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 | 
			
		||||
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
 | 
			
		||||
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
 | 
			
		||||
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
 | 
			
		||||
github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
 | 
			
		||||
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
 | 
			
		||||
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
 | 
			
		||||
github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4=
 | 
			
		||||
github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA=
 | 
			
		||||
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
 | 
			
		||||
| 
						 | 
				
			
			@ -97,27 +165,43 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
 | 
			
		|||
github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA=
 | 
			
		||||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
 | 
			
		||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 | 
			
		||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
 | 
			
		||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
 | 
			
		||||
github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
 | 
			
		||||
github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
 | 
			
		||||
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63 h1:nTT4s92Dgz2HlrB2NaMgvlfqHH39OgMhA7z3PK7PGD4=
 | 
			
		||||
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
 | 
			
		||||
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e h1:hB2xlXdHp/pmPZq0y3QnmWAArdw9PqbmotexnWx/FU8=
 | 
			
		||||
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
 | 
			
		||||
github.com/mailru/easyjson v0.7.1 h1:mdxE1MF9o53iCb2Ghj1VfWvh7ZOwHpnVG/xwXrV90U8=
 | 
			
		||||
github.com/mailru/easyjson v0.7.1/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs=
 | 
			
		||||
github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA=
 | 
			
		||||
github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
 | 
			
		||||
github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE=
 | 
			
		||||
github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0=
 | 
			
		||||
github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=
 | 
			
		||||
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
 | 
			
		||||
github.com/mitchellh/mapstructure v1.3.2 h1:mRS76wmkOn3KkKAyXDu42V+6ebnXWIztFSYGN7GeoRg=
 | 
			
		||||
github.com/mitchellh/mapstructure v1.3.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
 | 
			
		||||
github.com/mitchellh/mapstructure v1.3.3 h1:SzB1nHZ2Xi+17FP0zVQBHIZqvwRN9408fJO8h+eeNA8=
 | 
			
		||||
github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
 | 
			
		||||
github.com/mitchellh/mapstructure v1.4.0 h1:7ks8ZkOP5/ujthUsT07rNv+nkLXCQWKNHuwzOAesEks=
 | 
			
		||||
github.com/mitchellh/mapstructure v1.4.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
 | 
			
		||||
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
 | 
			
		||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
 | 
			
		||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
 | 
			
		||||
github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
 | 
			
		||||
github.com/pelletier/go-toml v1.4.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo=
 | 
			
		||||
github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE=
 | 
			
		||||
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 | 
			
		||||
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 | 
			
		||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 | 
			
		||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 | 
			
		||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 | 
			
		||||
github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
 | 
			
		||||
github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
 | 
			
		||||
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
 | 
			
		||||
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
 | 
			
		||||
github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
 | 
			
		||||
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
 | 
			
		||||
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
 | 
			
		||||
| 
						 | 
				
			
			@ -129,8 +213,12 @@ github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoH
 | 
			
		|||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
 | 
			
		||||
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
 | 
			
		||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
 | 
			
		||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
 | 
			
		||||
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
 | 
			
		||||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
 | 
			
		||||
github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4=
 | 
			
		||||
github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
 | 
			
		||||
github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw=
 | 
			
		||||
github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I=
 | 
			
		||||
github.com/xdg/stringprep v0.0.0-20180714160509-73f8eece6fdc/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y=
 | 
			
		||||
go.mongodb.org/mongo-driver v1.0.3 h1:GKoji1ld3tw2aC+GX1wbr/J2fX13yNacEYoJ8Nhr0yU=
 | 
			
		||||
| 
						 | 
				
			
			@ -139,44 +227,69 @@ go.mongodb.org/mongo-driver v1.1.1 h1:Sq1fR+0c58RME5EoqKdjkiQAmPjmfHlZOoRI6fTUOc
 | 
			
		|||
go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM=
 | 
			
		||||
go.mongodb.org/mongo-driver v1.3.0 h1:ew6uUIeJOo+qdUUv7LxFCUhtWmVv7ZV/Xuy4FAUsw2E=
 | 
			
		||||
go.mongodb.org/mongo-driver v1.3.0/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE=
 | 
			
		||||
go.mongodb.org/mongo-driver v1.3.4 h1:zs/dKNwX0gYUtzwrN9lLiR15hCO0nDwQj5xXx+vjCdE=
 | 
			
		||||
go.mongodb.org/mongo-driver v1.3.4/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE=
 | 
			
		||||
go.mongodb.org/mongo-driver v1.4.3 h1:moga+uhicpVshTyaqY9L23E6QqwcHRUv1sqyOsoyOO8=
 | 
			
		||||
go.mongodb.org/mongo-driver v1.4.3/go.mod h1:WcMNYLx/IlOxLe6JRJiv2uXuCz6zBLndR4SoGjYphSc=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
			
		||||
golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
			
		||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 | 
			
		||||
golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 | 
			
		||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 | 
			
		||||
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980 h1:dfGZHvZk057jK2MCeWus/TowKpJ8y4AmooUzdBSR9GU=
 | 
			
		||||
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
			
		||||
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297 h1:k7pJ2yAPLPgbskkFdhRCsA77k2fySZ1zf2zCjvQCiIM=
 | 
			
		||||
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
			
		||||
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
			
		||||
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b h1:0mm1VjtFUOIlE1SbDlwjYaDxZVDP2S5ou6y0gSgXHu8=
 | 
			
		||||
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
			
		||||
golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
			
		||||
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b h1:uwuIcX0g4Yl1NC5XAz37xsr2lTtcqevgzYNVt49waME=
 | 
			
		||||
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
 | 
			
		||||
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
			
		||||
golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
			
		||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
			
		||||
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
			
		||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
			
		||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
			
		||||
golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 | 
			
		||||
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
 | 
			
		||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
 | 
			
		||||
golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
 | 
			
		||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 | 
			
		||||
golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc=
 | 
			
		||||
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 | 
			
		||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 | 
			
		||||
golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 | 
			
		||||
golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 | 
			
		||||
golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 | 
			
		||||
golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 | 
			
		||||
golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 | 
			
		||||
golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
 | 
			
		||||
golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
 | 
			
		||||
golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
 | 
			
		||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
 | 
			
		||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 | 
			
		||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 | 
			
		||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
 | 
			
		||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 | 
			
		||||
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
 | 
			
		||||
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 | 
			
		||||
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
 | 
			
		||||
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 | 
			
		||||
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
 | 
			
		||||
| 
						 | 
				
			
			@ -184,3 +297,12 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 | 
			
		|||
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 | 
			
		||||
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
 | 
			
		||||
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 | 
			
		||||
gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
 | 
			
		||||
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 | 
			
		||||
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
 | 
			
		||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
 | 
			
		||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 | 
			
		||||
gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c h1:grhR+C34yXImVGp7EzNk+DTIk+323eIUWOmEevy6bDo=
 | 
			
		||||
gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 | 
			
		||||
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ=
 | 
			
		||||
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										2
									
								
								vendor/github.com/go-openapi/analysis/schema.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/go-openapi/analysis/schema.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -218,7 +218,7 @@ func (a *AnalyzedSchema) initializeFlags() {
 | 
			
		|||
		(a.schema.Items.Schema != nil || len(a.schema.Items.Schemas) > 0)
 | 
			
		||||
 | 
			
		||||
	a.hasAdditionalProps = a.schema.AdditionalProperties != nil &&
 | 
			
		||||
		(a.schema.AdditionalProperties != nil || a.schema.AdditionalProperties.Allows)
 | 
			
		||||
		(a.schema.AdditionalProperties.Schema != nil || a.schema.AdditionalProperties.Allows)
 | 
			
		||||
 | 
			
		||||
	a.hasAdditionalItems = a.schema.AdditionalItems != nil &&
 | 
			
		||||
		(a.schema.AdditionalItems.Schema != nil || a.schema.AdditionalItems.Allows)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										21
									
								
								vendor/github.com/go-openapi/errors/.golangci.yml
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										21
									
								
								vendor/github.com/go-openapi/errors/.golangci.yml
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -18,3 +18,24 @@ linters:
 | 
			
		|||
    - maligned
 | 
			
		||||
    - lll
 | 
			
		||||
    - gochecknoglobals
 | 
			
		||||
    - godox
 | 
			
		||||
    - gocognit
 | 
			
		||||
    - whitespace
 | 
			
		||||
    - wsl
 | 
			
		||||
    - funlen
 | 
			
		||||
    - gochecknoglobals
 | 
			
		||||
    - gochecknoinits
 | 
			
		||||
    - scopelint
 | 
			
		||||
    - wrapcheck
 | 
			
		||||
    - exhaustivestruct
 | 
			
		||||
    - exhaustive
 | 
			
		||||
    - nlreturn
 | 
			
		||||
    - testpackage
 | 
			
		||||
    - gci
 | 
			
		||||
    - gofumpt
 | 
			
		||||
    - goerr113
 | 
			
		||||
    - gomnd
 | 
			
		||||
    - tparallel
 | 
			
		||||
    - nestif
 | 
			
		||||
    - godot
 | 
			
		||||
    - errorlint
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										19
									
								
								vendor/github.com/go-openapi/errors/.travis.yml
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										19
									
								
								vendor/github.com/go-openapi/errors/.travis.yml
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,8 +1,25 @@
 | 
			
		|||
after_success:
 | 
			
		||||
- bash <(curl -s https://codecov.io/bash)
 | 
			
		||||
go:
 | 
			
		||||
- 1.13.x
 | 
			
		||||
- 1.14.x
 | 
			
		||||
- 1.x
 | 
			
		||||
arch:
 | 
			
		||||
  - amd64
 | 
			
		||||
jobs:
 | 
			
		||||
  include:
 | 
			
		||||
  # only run fast tests on ppc64le
 | 
			
		||||
  - go: 1.x
 | 
			
		||||
    arch: ppc64le
 | 
			
		||||
    script:
 | 
			
		||||
    - gotestsum -f short-verbose -- ./...
 | 
			
		||||
 | 
			
		||||
  # include linting job, but only for latest go version and amd64 arch
 | 
			
		||||
  - go: 1.x
 | 
			
		||||
    arch: amd64
 | 
			
		||||
    install:
 | 
			
		||||
      go get github.com/golangci/golangci-lint/cmd/golangci-lint
 | 
			
		||||
    script:
 | 
			
		||||
    - golangci-lint run --new-from-rev master
 | 
			
		||||
install:
 | 
			
		||||
- GO111MODULE=off go get -u gotest.tools/gotestsum
 | 
			
		||||
language: go
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										20
									
								
								vendor/github.com/go-openapi/errors/schema.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								vendor/github.com/go-openapi/errors/schema.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -25,6 +25,7 @@ const (
 | 
			
		|||
	typeFailWithData          = "%s in %s must be of type %s: %q"
 | 
			
		||||
	typeFailWithError         = "%s in %s must be of type %s, because: %s"
 | 
			
		||||
	requiredFail              = "%s in %s is required"
 | 
			
		||||
	readOnlyFail              = "%s in %s is readOnly"
 | 
			
		||||
	tooLongMessage            = "%s in %s should be at most %d chars long"
 | 
			
		||||
	tooShortMessage           = "%s in %s should be at least %d chars long"
 | 
			
		||||
	patternFail               = "%s in %s should match '%s'"
 | 
			
		||||
| 
						 | 
				
			
			@ -41,6 +42,7 @@ const (
 | 
			
		|||
	typeFailWithDataNoIn      = "%s must be of type %s: %q"
 | 
			
		||||
	typeFailWithErrorNoIn     = "%s must be of type %s, because: %s"
 | 
			
		||||
	requiredFailNoIn          = "%s is required"
 | 
			
		||||
	readOnlyFailNoIn          = "%s is readOnly"
 | 
			
		||||
	tooLongMessageNoIn        = "%s should be at most %d chars long"
 | 
			
		||||
	tooShortMessageNoIn       = "%s should be at least %d chars long"
 | 
			
		||||
	patternFailNoIn           = "%s should match '%s'"
 | 
			
		||||
| 
						 | 
				
			
			@ -91,6 +93,7 @@ const (
 | 
			
		|||
	UnallowedPropertyCode
 | 
			
		||||
	FailedAllPatternPropsCode
 | 
			
		||||
	MultipleOfMustBePositiveCode
 | 
			
		||||
	ReadOnlyFailCode
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// CompositeError is an error that groups several errors together
 | 
			
		||||
| 
						 | 
				
			
			@ -501,6 +504,23 @@ func Required(name, in string, value interface{}) *Validation {
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ReadOnly error for when a value is present in request
 | 
			
		||||
func ReadOnly(name, in string, value interface{}) *Validation {
 | 
			
		||||
	var msg string
 | 
			
		||||
	if in == "" {
 | 
			
		||||
		msg = fmt.Sprintf(readOnlyFailNoIn, name)
 | 
			
		||||
	} else {
 | 
			
		||||
		msg = fmt.Sprintf(readOnlyFail, name, in)
 | 
			
		||||
	}
 | 
			
		||||
	return &Validation{
 | 
			
		||||
		code:    ReadOnlyFailCode,
 | 
			
		||||
		Name:    name,
 | 
			
		||||
		In:      in,
 | 
			
		||||
		Value:   value,
 | 
			
		||||
		message: msg,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// TooLong error for when a string is too long
 | 
			
		||||
func TooLong(name, in string, max int64, value interface{}) *Validation {
 | 
			
		||||
	var msg string
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										4
									
								
								vendor/github.com/go-openapi/jsonpointer/.travis.yml
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/github.com/go-openapi/jsonpointer/.travis.yml
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,8 +1,8 @@
 | 
			
		|||
after_success:
 | 
			
		||||
- bash <(curl -s https://codecov.io/bash)
 | 
			
		||||
go:
 | 
			
		||||
- 1.11.x
 | 
			
		||||
- 1.12.x
 | 
			
		||||
- 1.14.x
 | 
			
		||||
- 1.15.x
 | 
			
		||||
install:
 | 
			
		||||
- GO111MODULE=off go get -u gotest.tools/gotestsum
 | 
			
		||||
env:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										64
									
								
								vendor/github.com/go-openapi/jsonpointer/pointer.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										64
									
								
								vendor/github.com/go-openapi/jsonpointer/pointer.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -114,16 +114,16 @@ func getSingleImpl(node interface{}, decodedToken string, nameProvider *swag.Nam
 | 
			
		|||
	rValue := reflect.Indirect(reflect.ValueOf(node))
 | 
			
		||||
	kind := rValue.Kind()
 | 
			
		||||
 | 
			
		||||
	switch kind {
 | 
			
		||||
 | 
			
		||||
	case reflect.Struct:
 | 
			
		||||
		if rValue.Type().Implements(jsonPointableType) {
 | 
			
		||||
			r, err := node.(JSONPointable).JSONLookup(decodedToken)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return nil, kind, err
 | 
			
		||||
			}
 | 
			
		||||
			return r, kind, nil
 | 
			
		||||
	if rValue.Type().Implements(jsonPointableType) {
 | 
			
		||||
		r, err := node.(JSONPointable).JSONLookup(decodedToken)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, kind, err
 | 
			
		||||
		}
 | 
			
		||||
		return r, kind, nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	switch kind {
 | 
			
		||||
	case reflect.Struct:
 | 
			
		||||
		nm, ok := nameProvider.GetGoNameForType(rValue.Type(), decodedToken)
 | 
			
		||||
		if !ok {
 | 
			
		||||
			return nil, kind, fmt.Errorf("object has no field %q", decodedToken)
 | 
			
		||||
| 
						 | 
				
			
			@ -161,17 +161,17 @@ func getSingleImpl(node interface{}, decodedToken string, nameProvider *swag.Nam
 | 
			
		|||
 | 
			
		||||
func setSingleImpl(node, data interface{}, decodedToken string, nameProvider *swag.NameProvider) error {
 | 
			
		||||
	rValue := reflect.Indirect(reflect.ValueOf(node))
 | 
			
		||||
 | 
			
		||||
	if ns, ok := node.(JSONSetable); ok { // pointer impl
 | 
			
		||||
		return ns.JSONSet(decodedToken, data)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if rValue.Type().Implements(jsonSetableType) {
 | 
			
		||||
		return node.(JSONSetable).JSONSet(decodedToken, data)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	switch rValue.Kind() {
 | 
			
		||||
 | 
			
		||||
	case reflect.Struct:
 | 
			
		||||
		if ns, ok := node.(JSONSetable); ok { // pointer impl
 | 
			
		||||
			return ns.JSONSet(decodedToken, data)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if rValue.Type().Implements(jsonSetableType) {
 | 
			
		||||
			return node.(JSONSetable).JSONSet(decodedToken, data)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		nm, ok := nameProvider.GetGoNameForType(rValue.Type(), decodedToken)
 | 
			
		||||
		if !ok {
 | 
			
		||||
			return fmt.Errorf("object has no field %q", decodedToken)
 | 
			
		||||
| 
						 | 
				
			
			@ -270,22 +270,22 @@ func (p *Pointer) set(node, data interface{}, nameProvider *swag.NameProvider) e
 | 
			
		|||
		rValue := reflect.Indirect(reflect.ValueOf(node))
 | 
			
		||||
		kind := rValue.Kind()
 | 
			
		||||
 | 
			
		||||
		switch kind {
 | 
			
		||||
 | 
			
		||||
		case reflect.Struct:
 | 
			
		||||
			if rValue.Type().Implements(jsonPointableType) {
 | 
			
		||||
				r, err := node.(JSONPointable).JSONLookup(decodedToken)
 | 
			
		||||
				if err != nil {
 | 
			
		||||
					return err
 | 
			
		||||
				}
 | 
			
		||||
				fld := reflect.ValueOf(r)
 | 
			
		||||
				if fld.CanAddr() && fld.Kind() != reflect.Interface && fld.Kind() != reflect.Map && fld.Kind() != reflect.Slice && fld.Kind() != reflect.Ptr {
 | 
			
		||||
					node = fld.Addr().Interface()
 | 
			
		||||
					continue
 | 
			
		||||
				}
 | 
			
		||||
				node = r
 | 
			
		||||
		if rValue.Type().Implements(jsonPointableType) {
 | 
			
		||||
			r, err := node.(JSONPointable).JSONLookup(decodedToken)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return err
 | 
			
		||||
			}
 | 
			
		||||
			fld := reflect.ValueOf(r)
 | 
			
		||||
			if fld.CanAddr() && fld.Kind() != reflect.Interface && fld.Kind() != reflect.Map && fld.Kind() != reflect.Slice && fld.Kind() != reflect.Ptr {
 | 
			
		||||
				node = fld.Addr().Interface()
 | 
			
		||||
				continue
 | 
			
		||||
			}
 | 
			
		||||
			node = r
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		switch kind {
 | 
			
		||||
		case reflect.Struct:
 | 
			
		||||
			nm, ok := nameProvider.GetGoNameForType(rValue.Type(), decodedToken)
 | 
			
		||||
			if !ok {
 | 
			
		||||
				return fmt.Errorf("object has no field %q", decodedToken)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										41
									
								
								vendor/github.com/go-openapi/jsonreference/.golangci.yml
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								vendor/github.com/go-openapi/jsonreference/.golangci.yml
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,41 @@
 | 
			
		|||
linters-settings:
 | 
			
		||||
  govet:
 | 
			
		||||
    check-shadowing: true
 | 
			
		||||
  golint:
 | 
			
		||||
    min-confidence: 0
 | 
			
		||||
  gocyclo:
 | 
			
		||||
    min-complexity: 30
 | 
			
		||||
  maligned:
 | 
			
		||||
    suggest-new: true
 | 
			
		||||
  dupl:
 | 
			
		||||
    threshold: 100
 | 
			
		||||
  goconst:
 | 
			
		||||
    min-len: 2
 | 
			
		||||
    min-occurrences: 4
 | 
			
		||||
linters:
 | 
			
		||||
  enable-all: true
 | 
			
		||||
  disable:
 | 
			
		||||
    - maligned
 | 
			
		||||
    - lll
 | 
			
		||||
    - gochecknoglobals
 | 
			
		||||
    - godox
 | 
			
		||||
    - gocognit
 | 
			
		||||
    - whitespace
 | 
			
		||||
    - wsl
 | 
			
		||||
    - funlen
 | 
			
		||||
    - gochecknoglobals
 | 
			
		||||
    - gochecknoinits
 | 
			
		||||
    - scopelint
 | 
			
		||||
    - wrapcheck
 | 
			
		||||
    - exhaustivestruct
 | 
			
		||||
    - exhaustive
 | 
			
		||||
    - nlreturn
 | 
			
		||||
    - testpackage
 | 
			
		||||
    - gci
 | 
			
		||||
    - gofumpt
 | 
			
		||||
    - goerr113
 | 
			
		||||
    - gomnd
 | 
			
		||||
    - tparallel
 | 
			
		||||
    - nestif
 | 
			
		||||
    - godot
 | 
			
		||||
    - errorlint
 | 
			
		||||
							
								
								
									
										15
									
								
								vendor/github.com/go-openapi/jsonreference/.travis.yml
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								vendor/github.com/go-openapi/jsonreference/.travis.yml
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,10 +1,19 @@
 | 
			
		|||
after_success:
 | 
			
		||||
- bash <(curl -s https://codecov.io/bash)
 | 
			
		||||
go:
 | 
			
		||||
- 1.11.x
 | 
			
		||||
- 1.12.x
 | 
			
		||||
- 1.14.x
 | 
			
		||||
- 1.x
 | 
			
		||||
install:
 | 
			
		||||
- GO111MODULE=off go get -u gotest.tools/gotestsum
 | 
			
		||||
- go get gotest.tools/gotestsum
 | 
			
		||||
jobs:
 | 
			
		||||
  include:
 | 
			
		||||
  # include linting job, but only for latest go version and amd64 arch
 | 
			
		||||
  - go: 1.x
 | 
			
		||||
    arch: amd64
 | 
			
		||||
    install:
 | 
			
		||||
      go get github.com/golangci/golangci-lint/cmd/golangci-lint
 | 
			
		||||
    script:
 | 
			
		||||
    - golangci-lint run --new-from-rev master
 | 
			
		||||
env:
 | 
			
		||||
- GO111MODULE=on
 | 
			
		||||
language: go
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										22
									
								
								vendor/github.com/go-openapi/loads/.golangci.yml
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										22
									
								
								vendor/github.com/go-openapi/loads/.golangci.yml
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -20,3 +20,25 @@ linters:
 | 
			
		|||
    - lll
 | 
			
		||||
    - gochecknoglobals
 | 
			
		||||
    - gochecknoinits
 | 
			
		||||
    - godox
 | 
			
		||||
    - gocognit
 | 
			
		||||
    - whitespace
 | 
			
		||||
    - wsl
 | 
			
		||||
    - funlen
 | 
			
		||||
    - gochecknoglobals
 | 
			
		||||
    - gochecknoinits
 | 
			
		||||
    - scopelint
 | 
			
		||||
    - wrapcheck
 | 
			
		||||
    - exhaustivestruct
 | 
			
		||||
    - exhaustive
 | 
			
		||||
    - nlreturn
 | 
			
		||||
    - testpackage
 | 
			
		||||
    - gci
 | 
			
		||||
    - gofumpt
 | 
			
		||||
    - goerr113
 | 
			
		||||
    - gomnd
 | 
			
		||||
    - tparallel
 | 
			
		||||
    - nestif
 | 
			
		||||
    - godot
 | 
			
		||||
    - errorlint
 | 
			
		||||
    - paralleltest
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										13
									
								
								vendor/github.com/go-openapi/loads/.travis.yml
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								vendor/github.com/go-openapi/loads/.travis.yml
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,11 +1,20 @@
 | 
			
		|||
after_success:
 | 
			
		||||
- bash <(curl -s https://codecov.io/bash)
 | 
			
		||||
go:
 | 
			
		||||
- 1.13.x
 | 
			
		||||
- 1.14.x
 | 
			
		||||
- 1.x
 | 
			
		||||
install:
 | 
			
		||||
- go get -u gotest.tools/gotestsum
 | 
			
		||||
- go get gotest.tools/gotestsum
 | 
			
		||||
language: go
 | 
			
		||||
jobs:
 | 
			
		||||
  include:
 | 
			
		||||
  # include linting job, but only for latest go version and amd64 arch
 | 
			
		||||
  - go: 1.x
 | 
			
		||||
    arch: amd64
 | 
			
		||||
    install:
 | 
			
		||||
      go get github.com/golangci/golangci-lint/cmd/golangci-lint
 | 
			
		||||
    script:
 | 
			
		||||
    - golangci-lint run --new-from-rev master
 | 
			
		||||
notifications:
 | 
			
		||||
  slack:
 | 
			
		||||
    secure: OxkPwVp35qBTUilgWC8xykSj+sGMcj0h8IIOKD+Rflx2schZVlFfdYdyVBM+s9OqeOfvtuvnR9v1Ye2rPKAvcjWdC4LpRGUsgmItZaI6Um8Aj6+K9udCw5qrtZVfOVmRu8LieH//XznWWKdOultUuniW0MLqw5+II87Gd00RWbCGi0hk0PykHe7uK+PDA2BEbqyZ2WKKYCvfB3j+0nrFOHScXqnh0V05l2E83J4+Sgy1fsPy+1WdX58ZlNBG333ibaC1FS79XvKSmTgKRkx3+YBo97u6ZtUmJa5WZjf2OdLG3KIckGWAv6R5xgxeU31N0Ng8L332w/Edpp2O/M2bZwdnKJ8hJQikXIAQbICbr+lTDzsoNzMdEIYcHpJ5hjPbiUl3Bmd+Jnsjf5McgAZDiWIfpCKZ29tPCEkVwRsOCqkyPRMNMzHHmoja495P5jR+ODS7+J8RFg5xgcnOgpP9D4Wlhztlf5WyZMpkLxTUD+bZq2SRf50HfHFXTkfq22zPl3d1eq0yrLwh/Z/fWKkfb6SyysROL8y6s8u3dpFX1YHSg0BR6i913h4aoZw9B2BG27cafLLTwKYsp2dFo1PWl4O6u9giFJIeqwloZHLKKrwh0cBFhB7RH0I58asxkZpCH6uWjJierahmHe7iS+E6i+9oCHkOZ59hmCYNimIs3hM=
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										1
									
								
								vendor/github.com/go-openapi/loads/README.md
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/go-openapi/loads/README.md
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
# Loads OAI specs  [](https://travis-ci.org/go-openapi/loads) [](https://codecov.io/gh/go-openapi/loads) [](https://slackin.goswagger.io)
 | 
			
		||||
 | 
			
		||||
[](https://raw.githubusercontent.com/go-openapi/loads/master/LICENSE) [](http://godoc.org/github.com/go-openapi/loads)
 | 
			
		||||
[](https://golangci.com)
 | 
			
		||||
[](https://goreportcard.com/report/github.com/go-openapi/loads)
 | 
			
		||||
 | 
			
		||||
Loading of OAI specification documents from local or remote locations. Supports JSON and YAML documents.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										14
									
								
								vendor/github.com/go-openapi/loads/go.mod
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								vendor/github.com/go-openapi/loads/go.mod
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,11 +1,15 @@
 | 
			
		|||
module github.com/go-openapi/loads
 | 
			
		||||
 | 
			
		||||
require (
 | 
			
		||||
	github.com/go-openapi/analysis v0.19.10
 | 
			
		||||
	github.com/go-openapi/spec v0.19.6
 | 
			
		||||
	github.com/go-openapi/swag v0.19.7
 | 
			
		||||
	github.com/stretchr/testify v1.3.0
 | 
			
		||||
	gopkg.in/yaml.v2 v2.2.8
 | 
			
		||||
	github.com/go-openapi/analysis v0.19.16
 | 
			
		||||
	github.com/go-openapi/spec v0.20.0
 | 
			
		||||
	github.com/go-openapi/strfmt v0.19.11
 | 
			
		||||
	github.com/go-openapi/swag v0.19.12
 | 
			
		||||
	github.com/go-openapi/validate v0.19.15
 | 
			
		||||
	github.com/stretchr/testify v1.6.1
 | 
			
		||||
	go.mongodb.org/mongo-driver v1.4.4 // indirect
 | 
			
		||||
	golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb // indirect
 | 
			
		||||
	gopkg.in/yaml.v2 v2.4.0
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
go 1.13
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										146
									
								
								vendor/github.com/go-openapi/loads/go.sum
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										146
									
								
								vendor/github.com/go-openapi/loads/go.sum
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -4,47 +4,121 @@ github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tN
 | 
			
		|||
github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
 | 
			
		||||
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
 | 
			
		||||
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
 | 
			
		||||
github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM=
 | 
			
		||||
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
 | 
			
		||||
github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
 | 
			
		||||
github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a h1:idn718Q4B6AGu/h5Sxe66HYVdqdGu2l9Iebqhi/AEoA=
 | 
			
		||||
github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
 | 
			
		||||
github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496 h1:zV3ejI06GQ59hwDQAvmK1qxOQGB3WuVTRoY0okPTAv0=
 | 
			
		||||
github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg=
 | 
			
		||||
github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535 h1:4daAzAu0S6Vi7/lbWECcX0j45yZReDZ56BQsrVBOEEY=
 | 
			
		||||
github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg=
 | 
			
		||||
github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef h1:46PFijGLmAjMPwCCCo7Jf0W6f9slllCkkv7vyc1yOSg=
 | 
			
		||||
github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
 | 
			
		||||
github.com/aws/aws-sdk-go v1.34.28/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48=
 | 
			
		||||
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 | 
			
		||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 | 
			
		||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 | 
			
		||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 | 
			
		||||
github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
 | 
			
		||||
github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
 | 
			
		||||
github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q=
 | 
			
		||||
github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q=
 | 
			
		||||
github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI=
 | 
			
		||||
github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik=
 | 
			
		||||
github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik=
 | 
			
		||||
github.com/go-openapi/analysis v0.19.2/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk=
 | 
			
		||||
github.com/go-openapi/analysis v0.19.4/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk=
 | 
			
		||||
github.com/go-openapi/analysis v0.19.5/go.mod h1:hkEAkxagaIvIP7VTn8ygJNkd4kAYON2rCu0v0ObL0AU=
 | 
			
		||||
github.com/go-openapi/analysis v0.19.10 h1:5BHISBAXOc/aJK25irLZnx2D3s6WyYaY9D4gmuz9fdE=
 | 
			
		||||
github.com/go-openapi/analysis v0.19.10/go.mod h1:qmhS3VNFxBlquFJ0RGoDtylO9y4pgTAUNE9AEEMdlJQ=
 | 
			
		||||
github.com/go-openapi/analysis v0.19.16 h1:Ub9e++M8sDwtHD+S587TYi+6ANBG1NRYGZDihqk0SaY=
 | 
			
		||||
github.com/go-openapi/analysis v0.19.16/go.mod h1:GLInF007N83Ad3m8a/CbQ5TPzdnGT7workfHwuVjNVk=
 | 
			
		||||
github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0=
 | 
			
		||||
github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0=
 | 
			
		||||
github.com/go-openapi/errors v0.19.2 h1:a2kIyV3w+OS3S97zxUndRVD46+FhGOUBDFY7nmu4CsY=
 | 
			
		||||
github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94=
 | 
			
		||||
github.com/go-openapi/errors v0.19.3 h1:7MGZI1ibQDLasvAz8HuhvYk9eNJbJkCOXWsSjjMS+Zc=
 | 
			
		||||
github.com/go-openapi/errors v0.19.3/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94=
 | 
			
		||||
github.com/go-openapi/errors v0.19.6/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M=
 | 
			
		||||
github.com/go-openapi/errors v0.19.7 h1:Lcq+o0mSwCLKACMxZhreVHigB9ebghJ/lrmeaqASbjo=
 | 
			
		||||
github.com/go-openapi/errors v0.19.7/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M=
 | 
			
		||||
github.com/go-openapi/errors v0.19.8 h1:doM+tQdZbUm9gydV9yR+iQNmztbjj7I3sW4sIcAwIzc=
 | 
			
		||||
github.com/go-openapi/errors v0.19.8/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M=
 | 
			
		||||
github.com/go-openapi/errors v0.19.9 h1:9SnKdGhiPZHF3ttwFMiCBEb8jQ4IDdrK+5+a0oTygA4=
 | 
			
		||||
github.com/go-openapi/errors v0.19.9/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M=
 | 
			
		||||
github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M=
 | 
			
		||||
github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M=
 | 
			
		||||
github.com/go-openapi/jsonpointer v0.19.2 h1:A9+F4Dc/MCNB5jibxf6rRvOvR/iFgQdyNx9eIhnGqq0=
 | 
			
		||||
github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg=
 | 
			
		||||
github.com/go-openapi/jsonpointer v0.19.3 h1:gihV7YNZK1iK6Tgwwsxo2rJbD1GTbdm72325Bq8FI3w=
 | 
			
		||||
github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
 | 
			
		||||
github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY=
 | 
			
		||||
github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
 | 
			
		||||
github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I=
 | 
			
		||||
github.com/go-openapi/jsonreference v0.19.2 h1:o20suLFB4Ri0tuzpWtyHlh7E7HnkqTNLq6aR6WVNS1w=
 | 
			
		||||
github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I=
 | 
			
		||||
github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc=
 | 
			
		||||
github.com/go-openapi/jsonreference v0.19.3 h1:5cxNfTy0UVC3X8JL5ymxzyoUZmo8iZb+jeTWn7tUa8o=
 | 
			
		||||
github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8=
 | 
			
		||||
github.com/go-openapi/jsonreference v0.19.5 h1:1WJP/wi4OjB4iV8KVbH73rQaoialJrqv8gitZLxGLtM=
 | 
			
		||||
github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg=
 | 
			
		||||
github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU=
 | 
			
		||||
github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU=
 | 
			
		||||
github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU=
 | 
			
		||||
github.com/go-openapi/loads v0.19.2/go.mod h1:QAskZPMX5V0C2gvfkGZzJlINuP7Hx/4+ix5jWFxsNPs=
 | 
			
		||||
github.com/go-openapi/loads v0.19.3/go.mod h1:YVfqhUCdahYwR3f3iiwQLhicVRvLlU/WO5WPaZvcvSI=
 | 
			
		||||
github.com/go-openapi/loads v0.19.5/go.mod h1:dswLCAdonkRufe/gSUC3gN8nTSaB9uaS2es0x5/IbjY=
 | 
			
		||||
github.com/go-openapi/loads v0.19.6/go.mod h1:brCsvE6j8mnbmGBh103PT/QLHfbyDxA4hsKvYBNEGVc=
 | 
			
		||||
github.com/go-openapi/loads v0.19.7/go.mod h1:brCsvE6j8mnbmGBh103PT/QLHfbyDxA4hsKvYBNEGVc=
 | 
			
		||||
github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA=
 | 
			
		||||
github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64=
 | 
			
		||||
github.com/go-openapi/runtime v0.19.4/go.mod h1:X277bwSUBxVlCYR3r7xgZZGKVvBd/29gLDlFGtJ8NL4=
 | 
			
		||||
github.com/go-openapi/runtime v0.19.15/go.mod h1:dhGWCTKRXlAfGnQG0ONViOZpjfg0m2gUt9nTQPQZuoo=
 | 
			
		||||
github.com/go-openapi/runtime v0.19.16 h1:tQMAY5s5BfmmCC31+ufDCsGrr8iO1A8UIdYfDo5ADvs=
 | 
			
		||||
github.com/go-openapi/runtime v0.19.16/go.mod h1:5P9104EJgYcizotuXhEuUrzVc+j1RiSjahULvYmlv98=
 | 
			
		||||
github.com/go-openapi/runtime v0.19.24 h1:TqagMVlRAOTwllE/7hNKx6rQ10O6T8ZzeJdMjSTKaD4=
 | 
			
		||||
github.com/go-openapi/runtime v0.19.24/go.mod h1:Lm9YGCeecBnUUkFTxPC4s1+lwrkJ0pthx8YvyjCfkgk=
 | 
			
		||||
github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI=
 | 
			
		||||
github.com/go-openapi/spec v0.19.6 h1:rMMMj8cV38KVXK7SFc+I2MWClbEfbK705+j+dyqun5g=
 | 
			
		||||
github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI=
 | 
			
		||||
github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY=
 | 
			
		||||
github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo=
 | 
			
		||||
github.com/go-openapi/spec v0.19.6/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk=
 | 
			
		||||
github.com/go-openapi/spec v0.19.8/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk=
 | 
			
		||||
github.com/go-openapi/spec v0.19.15/go.mod h1:+81FIL1JwC5P3/Iuuozq3pPE9dXdIEGxFutcFKaVbmU=
 | 
			
		||||
github.com/go-openapi/spec v0.20.0 h1:HGLc8AJ7ynOxwv0Lq4TsnwLsWMawHAYiJIFzbcML86I=
 | 
			
		||||
github.com/go-openapi/spec v0.20.0/go.mod h1:+81FIL1JwC5P3/Iuuozq3pPE9dXdIEGxFutcFKaVbmU=
 | 
			
		||||
github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU=
 | 
			
		||||
github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU=
 | 
			
		||||
github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY=
 | 
			
		||||
github.com/go-openapi/strfmt v0.19.2/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU=
 | 
			
		||||
github.com/go-openapi/strfmt v0.19.3/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU=
 | 
			
		||||
github.com/go-openapi/strfmt v0.19.4 h1:eRvaqAhpL0IL6Trh5fDsGnGhiXndzHFuA05w6sXH6/g=
 | 
			
		||||
github.com/go-openapi/strfmt v0.19.4/go.mod h1:eftuHTlB/dI8Uq8JJOyRlieZf+WkkxUuk0dgdHXr2Qk=
 | 
			
		||||
github.com/go-openapi/strfmt v0.19.5 h1:0utjKrw+BAh8s57XE9Xz8DUBsVvPmRUB6styvl9wWIM=
 | 
			
		||||
github.com/go-openapi/strfmt v0.19.5/go.mod h1:eftuHTlB/dI8Uq8JJOyRlieZf+WkkxUuk0dgdHXr2Qk=
 | 
			
		||||
github.com/go-openapi/strfmt v0.19.11 h1:0+YvbNh05rmBkgztd6zHp4OCFn7Mtu30bn46NQo2ZRw=
 | 
			
		||||
github.com/go-openapi/strfmt v0.19.11/go.mod h1:UukAYgTaQfqJuAFlNxxMWNvMYiwiXtLsF2VwmoFtbtc=
 | 
			
		||||
github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg=
 | 
			
		||||
github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg=
 | 
			
		||||
github.com/go-openapi/swag v0.19.2 h1:jvO6bCMBEilGwMfHhrd61zIID4oIFdwb76V17SM88dE=
 | 
			
		||||
github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
 | 
			
		||||
github.com/go-openapi/swag v0.19.5 h1:lTz6Ys4CmqqCQmZPBlbQENR1/GucA2bzYTE12Pw4tFY=
 | 
			
		||||
github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
 | 
			
		||||
github.com/go-openapi/swag v0.19.7 h1:VRuXN2EnMSsZdauzdss6JBC29YotDqG59BZ+tdlIL1s=
 | 
			
		||||
github.com/go-openapi/swag v0.19.7/go.mod h1:ao+8BpOPyKdpQz3AOJfbeEVpLmWAvlT1IfTe5McPyhY=
 | 
			
		||||
github.com/go-openapi/swag v0.19.9 h1:1IxuqvBUU3S2Bi4YC7tlP9SJF1gVpCvqN0T2Qof4azE=
 | 
			
		||||
github.com/go-openapi/swag v0.19.9/go.mod h1:ao+8BpOPyKdpQz3AOJfbeEVpLmWAvlT1IfTe5McPyhY=
 | 
			
		||||
github.com/go-openapi/swag v0.19.12 h1:Bc0bnY2c3AoF7Gc+IMIAQQsD8fLHjHpc19wXvYuayQI=
 | 
			
		||||
github.com/go-openapi/swag v0.19.12/go.mod h1:eFdyEBkTdoAf/9RXBvj4cr1nH7GD8Kzo5HTt47gr72M=
 | 
			
		||||
github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4=
 | 
			
		||||
github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA=
 | 
			
		||||
github.com/go-openapi/validate v0.19.3/go.mod h1:90Vh6jjkTn+OT1Eefm0ZixWNFjhtOH7vS9k0lo6zwJo=
 | 
			
		||||
github.com/go-openapi/validate v0.19.10/go.mod h1:RKEZTUWDkxKQxN2jDT7ZnZi2bhZlbNMAuKvKB+IaGx8=
 | 
			
		||||
github.com/go-openapi/validate v0.19.12 h1:mPLM/bfbd00PGOCJlU0yJL7IulkZ+q9VjPv7U11RMQQ=
 | 
			
		||||
github.com/go-openapi/validate v0.19.12/go.mod h1:Rzou8hA/CBw8donlS6WNEUQupNvUZ0waH08tGe6kAQ4=
 | 
			
		||||
github.com/go-openapi/validate v0.19.15 h1:oUHZO8jD7p5oRLANlXF0U8ic9ePBUkDQyRZdN0EhL6M=
 | 
			
		||||
github.com/go-openapi/validate v0.19.15/go.mod h1:tbn/fdOwYHgrhPBzidZfJC2MIVvs9GA7monOmWBbeCI=
 | 
			
		||||
github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
 | 
			
		||||
github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
 | 
			
		||||
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
 | 
			
		||||
github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0=
 | 
			
		||||
| 
						 | 
				
			
			@ -75,11 +149,17 @@ github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEW
 | 
			
		|||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
 | 
			
		||||
github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY=
 | 
			
		||||
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
 | 
			
		||||
github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM=
 | 
			
		||||
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 | 
			
		||||
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 | 
			
		||||
github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
 | 
			
		||||
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 | 
			
		||||
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
 | 
			
		||||
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
 | 
			
		||||
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
 | 
			
		||||
github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
 | 
			
		||||
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
 | 
			
		||||
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
 | 
			
		||||
github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4=
 | 
			
		||||
github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA=
 | 
			
		||||
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
 | 
			
		||||
| 
						 | 
				
			
			@ -92,27 +172,43 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
 | 
			
		|||
github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA=
 | 
			
		||||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
 | 
			
		||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 | 
			
		||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
 | 
			
		||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
 | 
			
		||||
github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
 | 
			
		||||
github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
 | 
			
		||||
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63 h1:nTT4s92Dgz2HlrB2NaMgvlfqHH39OgMhA7z3PK7PGD4=
 | 
			
		||||
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
 | 
			
		||||
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e h1:hB2xlXdHp/pmPZq0y3QnmWAArdw9PqbmotexnWx/FU8=
 | 
			
		||||
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
 | 
			
		||||
github.com/mailru/easyjson v0.7.1 h1:mdxE1MF9o53iCb2Ghj1VfWvh7ZOwHpnVG/xwXrV90U8=
 | 
			
		||||
github.com/mailru/easyjson v0.7.1/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs=
 | 
			
		||||
github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA=
 | 
			
		||||
github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
 | 
			
		||||
github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE=
 | 
			
		||||
github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0=
 | 
			
		||||
github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=
 | 
			
		||||
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
 | 
			
		||||
github.com/mitchellh/mapstructure v1.3.2 h1:mRS76wmkOn3KkKAyXDu42V+6ebnXWIztFSYGN7GeoRg=
 | 
			
		||||
github.com/mitchellh/mapstructure v1.3.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
 | 
			
		||||
github.com/mitchellh/mapstructure v1.3.3 h1:SzB1nHZ2Xi+17FP0zVQBHIZqvwRN9408fJO8h+eeNA8=
 | 
			
		||||
github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
 | 
			
		||||
github.com/mitchellh/mapstructure v1.4.0 h1:7ks8ZkOP5/ujthUsT07rNv+nkLXCQWKNHuwzOAesEks=
 | 
			
		||||
github.com/mitchellh/mapstructure v1.4.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
 | 
			
		||||
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
 | 
			
		||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
 | 
			
		||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
 | 
			
		||||
github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
 | 
			
		||||
github.com/pelletier/go-toml v1.4.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo=
 | 
			
		||||
github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE=
 | 
			
		||||
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 | 
			
		||||
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 | 
			
		||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 | 
			
		||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 | 
			
		||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 | 
			
		||||
github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
 | 
			
		||||
github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
 | 
			
		||||
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
 | 
			
		||||
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
 | 
			
		||||
github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
 | 
			
		||||
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
 | 
			
		||||
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
 | 
			
		||||
| 
						 | 
				
			
			@ -120,56 +216,91 @@ github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3
 | 
			
		|||
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 | 
			
		||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 | 
			
		||||
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 | 
			
		||||
github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48=
 | 
			
		||||
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
 | 
			
		||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
 | 
			
		||||
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
 | 
			
		||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
 | 
			
		||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
 | 
			
		||||
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
 | 
			
		||||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
 | 
			
		||||
github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4=
 | 
			
		||||
github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
 | 
			
		||||
github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw=
 | 
			
		||||
github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I=
 | 
			
		||||
github.com/xdg/stringprep v0.0.0-20180714160509-73f8eece6fdc/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y=
 | 
			
		||||
go.mongodb.org/mongo-driver v1.0.3 h1:GKoji1ld3tw2aC+GX1wbr/J2fX13yNacEYoJ8Nhr0yU=
 | 
			
		||||
go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM=
 | 
			
		||||
go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM=
 | 
			
		||||
go.mongodb.org/mongo-driver v1.3.0 h1:ew6uUIeJOo+qdUUv7LxFCUhtWmVv7ZV/Xuy4FAUsw2E=
 | 
			
		||||
go.mongodb.org/mongo-driver v1.3.0/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE=
 | 
			
		||||
go.mongodb.org/mongo-driver v1.3.4 h1:zs/dKNwX0gYUtzwrN9lLiR15hCO0nDwQj5xXx+vjCdE=
 | 
			
		||||
go.mongodb.org/mongo-driver v1.3.4/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE=
 | 
			
		||||
go.mongodb.org/mongo-driver v1.4.3 h1:moga+uhicpVshTyaqY9L23E6QqwcHRUv1sqyOsoyOO8=
 | 
			
		||||
go.mongodb.org/mongo-driver v1.4.3/go.mod h1:WcMNYLx/IlOxLe6JRJiv2uXuCz6zBLndR4SoGjYphSc=
 | 
			
		||||
go.mongodb.org/mongo-driver v1.4.4 h1:bsPHfODES+/yx2PCWzUYMH8xj6PVniPI8DQrsJuSXSs=
 | 
			
		||||
go.mongodb.org/mongo-driver v1.4.4/go.mod h1:WcMNYLx/IlOxLe6JRJiv2uXuCz6zBLndR4SoGjYphSc=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
			
		||||
golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
			
		||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 | 
			
		||||
golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 | 
			
		||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 | 
			
		||||
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980 h1:dfGZHvZk057jK2MCeWus/TowKpJ8y4AmooUzdBSR9GU=
 | 
			
		||||
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
			
		||||
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297 h1:k7pJ2yAPLPgbskkFdhRCsA77k2fySZ1zf2zCjvQCiIM=
 | 
			
		||||
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
			
		||||
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
			
		||||
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b h1:0mm1VjtFUOIlE1SbDlwjYaDxZVDP2S5ou6y0gSgXHu8=
 | 
			
		||||
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
			
		||||
golang.org/x/net v0.0.0-20200602114024-627f9648deb9 h1:pNX+40auqi2JqRfOP1akLGtYcn15TUbkhwuCO3foqqM=
 | 
			
		||||
golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
			
		||||
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b h1:uwuIcX0g4Yl1NC5XAz37xsr2lTtcqevgzYNVt49waME=
 | 
			
		||||
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
 | 
			
		||||
golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb h1:eBmm0M9fYhWpKZLjQUUKka/LtIxf46G4fxeEz5KJr9U=
 | 
			
		||||
golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
 | 
			
		||||
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
			
		||||
golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
			
		||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
			
		||||
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
			
		||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
			
		||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
			
		||||
golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 | 
			
		||||
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
 | 
			
		||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
 | 
			
		||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 | 
			
		||||
golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc=
 | 
			
		||||
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 | 
			
		||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 | 
			
		||||
golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 | 
			
		||||
golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 | 
			
		||||
golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 | 
			
		||||
golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 | 
			
		||||
golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 | 
			
		||||
golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
 | 
			
		||||
golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
 | 
			
		||||
golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
 | 
			
		||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
 | 
			
		||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 | 
			
		||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 | 
			
		||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
 | 
			
		||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 | 
			
		||||
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
 | 
			
		||||
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 | 
			
		||||
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
 | 
			
		||||
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 | 
			
		||||
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
 | 
			
		||||
| 
						 | 
				
			
			@ -178,3 +309,12 @@ gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
 | 
			
		|||
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 | 
			
		||||
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
 | 
			
		||||
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 | 
			
		||||
gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
 | 
			
		||||
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 | 
			
		||||
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
 | 
			
		||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
 | 
			
		||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 | 
			
		||||
gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c h1:grhR+C34yXImVGp7EzNk+DTIk+323eIUWOmEevy6bDo=
 | 
			
		||||
gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 | 
			
		||||
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ=
 | 
			
		||||
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										137
									
								
								vendor/github.com/go-openapi/loads/loaders.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										137
									
								
								vendor/github.com/go-openapi/loads/loaders.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,137 @@
 | 
			
		|||
package loads
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"errors"
 | 
			
		||||
	"net/url"
 | 
			
		||||
 | 
			
		||||
	"github.com/go-openapi/spec"
 | 
			
		||||
	"github.com/go-openapi/swag"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	// Default chain of loaders, defined at the package level.
 | 
			
		||||
	//
 | 
			
		||||
	// By default this matches json and yaml documents.
 | 
			
		||||
	//
 | 
			
		||||
	// May be altered with AddLoader().
 | 
			
		||||
	loaders *loader
 | 
			
		||||
 | 
			
		||||
	// Default loader. This expects json documents over local or http/https (no matching).
 | 
			
		||||
	defaultLoader *loader
 | 
			
		||||
 | 
			
		||||
	defaultMatcher DocMatcher
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	defaultMatcher = func(_ string) bool { return true }
 | 
			
		||||
 | 
			
		||||
	defaultLoader = &loader{
 | 
			
		||||
		DocLoaderWithMatch: DocLoaderWithMatch{
 | 
			
		||||
			Match: defaultMatcher,
 | 
			
		||||
			Fn:    JSONDoc,
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	loaders = defaultLoader
 | 
			
		||||
 | 
			
		||||
	AddLoader(swag.YAMLMatcher, swag.YAMLDoc)
 | 
			
		||||
 | 
			
		||||
	// sets the global default loader for go-openapi/spec
 | 
			
		||||
	spec.PathLoader = loaders.Load
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// DocLoader represents a doc loader type
 | 
			
		||||
type DocLoader func(string) (json.RawMessage, error)
 | 
			
		||||
 | 
			
		||||
// DocMatcher represents a predicate to check if a loader matches
 | 
			
		||||
type DocMatcher func(string) bool
 | 
			
		||||
 | 
			
		||||
// DocLoaderWithMatch describes a loading function for a given extension match.
 | 
			
		||||
type DocLoaderWithMatch struct {
 | 
			
		||||
	Fn    DocLoader
 | 
			
		||||
	Match DocMatcher
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NewDocLoaderWithMatch builds a DocLoaderWithMatch to be used in load options
 | 
			
		||||
func NewDocLoaderWithMatch(fn DocLoader, matcher DocMatcher) DocLoaderWithMatch {
 | 
			
		||||
	return DocLoaderWithMatch{
 | 
			
		||||
		Fn:    fn,
 | 
			
		||||
		Match: matcher,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type loader struct {
 | 
			
		||||
	DocLoaderWithMatch
 | 
			
		||||
	Next *loader
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// WithHead adds a loader at the head of the current stack
 | 
			
		||||
func (l *loader) WithHead(head *loader) *loader {
 | 
			
		||||
	if head == nil {
 | 
			
		||||
		return l
 | 
			
		||||
	}
 | 
			
		||||
	head.Next = l
 | 
			
		||||
	return head
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// WithNext adds a loader at the trail of the current stack
 | 
			
		||||
func (l *loader) WithNext(next *loader) *loader {
 | 
			
		||||
	l.Next = next
 | 
			
		||||
	return next
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Load the raw document from path
 | 
			
		||||
func (l *loader) Load(path string) (json.RawMessage, error) {
 | 
			
		||||
	specURL, erp := url.Parse(path)
 | 
			
		||||
	if erp != nil {
 | 
			
		||||
		return nil, erp
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var lastErr error = errors.New("no loader matched") // default error if no match was found
 | 
			
		||||
	for ldr := l; ldr != nil; ldr = ldr.Next {
 | 
			
		||||
		if ldr.Match != nil && !ldr.Match(specURL.Path) {
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// try then move to next one if there is an error
 | 
			
		||||
		b, err := ldr.Fn(path)
 | 
			
		||||
		if err == nil {
 | 
			
		||||
			return b, nil
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		lastErr = err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil, lastErr
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// JSONDoc loads a json document from either a file or a remote url
 | 
			
		||||
func JSONDoc(path string) (json.RawMessage, error) {
 | 
			
		||||
	data, err := swag.LoadFromFileOrHTTP(path)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return json.RawMessage(data), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// AddLoader for a document, executed before other previously set loaders.
 | 
			
		||||
//
 | 
			
		||||
// This sets the configuration at the package level.
 | 
			
		||||
//
 | 
			
		||||
// The default initial loader at the package level assumes a JSON document.
 | 
			
		||||
//
 | 
			
		||||
// NOTE:
 | 
			
		||||
//  * this updates the default loader used by github.com/go-openapi/spec
 | 
			
		||||
//  * since this sets package level globals, you shouln't call this concurrently
 | 
			
		||||
//
 | 
			
		||||
func AddLoader(predicate DocMatcher, load DocLoader) {
 | 
			
		||||
	loaders = loaders.WithHead(&loader{
 | 
			
		||||
		DocLoaderWithMatch: DocLoaderWithMatch{
 | 
			
		||||
			Match: predicate,
 | 
			
		||||
			Fn:    load,
 | 
			
		||||
		},
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	// sets the global default loader for go-openapi/spec
 | 
			
		||||
	spec.PathLoader = loaders.Load
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										60
									
								
								vendor/github.com/go-openapi/loads/options.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								vendor/github.com/go-openapi/loads/options.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,60 @@
 | 
			
		|||
package loads
 | 
			
		||||
 | 
			
		||||
type options struct {
 | 
			
		||||
	loader *loader
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func defaultOptions() *options {
 | 
			
		||||
	return &options{
 | 
			
		||||
		loader: loaders,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func loaderFromOptions(options []LoaderOption) *loader {
 | 
			
		||||
	opts := defaultOptions()
 | 
			
		||||
	for _, apply := range options {
 | 
			
		||||
		apply(opts)
 | 
			
		||||
	}
 | 
			
		||||
	return opts.loader
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// LoaderOption allows to fine-tune the spec loader behavior
 | 
			
		||||
type LoaderOption func(*options)
 | 
			
		||||
 | 
			
		||||
// WithDocLoader sets a custom loader for loading specs
 | 
			
		||||
func WithDocLoader(l DocLoader) LoaderOption {
 | 
			
		||||
	return func(opt *options) {
 | 
			
		||||
		if l == nil {
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		opt.loader = &loader{
 | 
			
		||||
			DocLoaderWithMatch: DocLoaderWithMatch{
 | 
			
		||||
				Fn: l,
 | 
			
		||||
			},
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// WithDocLoaderMatches sets a chain of custom loaders for loading specs
 | 
			
		||||
// for different extension matches.
 | 
			
		||||
//
 | 
			
		||||
// Loaders are executed in the order of provided DocLoaderWithMatch'es.
 | 
			
		||||
func WithDocLoaderMatches(l ...DocLoaderWithMatch) LoaderOption {
 | 
			
		||||
	return func(opt *options) {
 | 
			
		||||
		var final, prev *loader
 | 
			
		||||
		for _, ldr := range l {
 | 
			
		||||
			if ldr.Fn == nil {
 | 
			
		||||
				continue
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if prev == nil {
 | 
			
		||||
				final = &loader{DocLoaderWithMatch: ldr}
 | 
			
		||||
				prev = final
 | 
			
		||||
				continue
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			prev = prev.WithNext(&loader{DocLoaderWithMatch: ldr})
 | 
			
		||||
		}
 | 
			
		||||
		opt.loader = final
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										184
									
								
								vendor/github.com/go-openapi/loads/spec.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										184
									
								
								vendor/github.com/go-openapi/loads/spec.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -19,69 +19,16 @@ import (
 | 
			
		|||
	"encoding/gob"
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"net/url"
 | 
			
		||||
 | 
			
		||||
	"github.com/go-openapi/analysis"
 | 
			
		||||
	"github.com/go-openapi/spec"
 | 
			
		||||
	"github.com/go-openapi/swag"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// JSONDoc loads a json document from either a file or a remote url
 | 
			
		||||
func JSONDoc(path string) (json.RawMessage, error) {
 | 
			
		||||
	data, err := swag.LoadFromFileOrHTTP(path)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return json.RawMessage(data), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// DocLoader represents a doc loader type
 | 
			
		||||
type DocLoader func(string) (json.RawMessage, error)
 | 
			
		||||
 | 
			
		||||
// DocMatcher represents a predicate to check if a loader matches
 | 
			
		||||
type DocMatcher func(string) bool
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	loaders       *loader
 | 
			
		||||
	defaultLoader *loader
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	defaultLoader = &loader{Match: func(_ string) bool { return true }, Fn: JSONDoc}
 | 
			
		||||
	loaders = defaultLoader
 | 
			
		||||
	spec.PathLoader = loaders.Fn
 | 
			
		||||
	AddLoader(swag.YAMLMatcher, swag.YAMLDoc)
 | 
			
		||||
 | 
			
		||||
	gob.Register(map[string]interface{}{})
 | 
			
		||||
	gob.Register([]interface{}{})
 | 
			
		||||
	//gob.Register(spec.Refable{})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// AddLoader for a document
 | 
			
		||||
func AddLoader(predicate DocMatcher, load DocLoader) {
 | 
			
		||||
	prev := loaders
 | 
			
		||||
	loaders = &loader{
 | 
			
		||||
		Match: predicate,
 | 
			
		||||
		Fn:    load,
 | 
			
		||||
		Next:  prev,
 | 
			
		||||
	}
 | 
			
		||||
	spec.PathLoader = loaders.Fn
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type loader struct {
 | 
			
		||||
	Fn    DocLoader
 | 
			
		||||
	Match DocMatcher
 | 
			
		||||
	Next  *loader
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// JSONSpec loads a spec from a json document
 | 
			
		||||
func JSONSpec(path string) (*Document, error) {
 | 
			
		||||
	data, err := JSONDoc(path)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	// convert to json
 | 
			
		||||
	return Analyzed(data, "")
 | 
			
		||||
	// gob.Register(spec.Refable{})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Document represents a swagger spec document
 | 
			
		||||
| 
						 | 
				
			
			@ -93,10 +40,21 @@ type Document struct {
 | 
			
		|||
	origSpec     *spec.Swagger
 | 
			
		||||
	schema       *spec.Schema
 | 
			
		||||
	raw          json.RawMessage
 | 
			
		||||
	pathLoader   *loader
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// JSONSpec loads a spec from a json document
 | 
			
		||||
func JSONSpec(path string, options ...LoaderOption) (*Document, error) {
 | 
			
		||||
	data, err := JSONDoc(path)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	// convert to json
 | 
			
		||||
	return Analyzed(data, "", options...)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Embedded returns a Document based on embedded specs. No analysis is required
 | 
			
		||||
func Embedded(orig, flat json.RawMessage) (*Document, error) {
 | 
			
		||||
func Embedded(orig, flat json.RawMessage, options ...LoaderOption) (*Document, error) {
 | 
			
		||||
	var origSpec, flatSpec spec.Swagger
 | 
			
		||||
	if err := json.Unmarshal(orig, &origSpec); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
| 
						 | 
				
			
			@ -105,45 +63,26 @@ func Embedded(orig, flat json.RawMessage) (*Document, error) {
 | 
			
		|||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return &Document{
 | 
			
		||||
		raw:      orig,
 | 
			
		||||
		origSpec: &origSpec,
 | 
			
		||||
		spec:     &flatSpec,
 | 
			
		||||
		raw:        orig,
 | 
			
		||||
		origSpec:   &origSpec,
 | 
			
		||||
		spec:       &flatSpec,
 | 
			
		||||
		pathLoader: loaderFromOptions(options),
 | 
			
		||||
	}, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Spec loads a new spec document
 | 
			
		||||
func Spec(path string) (*Document, error) {
 | 
			
		||||
	specURL, err := url.Parse(path)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	var lastErr error
 | 
			
		||||
	for l := loaders.Next; l != nil; l = l.Next {
 | 
			
		||||
		if loaders.Match(specURL.Path) {
 | 
			
		||||
			b, err2 := loaders.Fn(path)
 | 
			
		||||
			if err2 != nil {
 | 
			
		||||
				lastErr = err2
 | 
			
		||||
				continue
 | 
			
		||||
			}
 | 
			
		||||
			doc, err3 := Analyzed(b, "")
 | 
			
		||||
			if err3 != nil {
 | 
			
		||||
				return nil, err3
 | 
			
		||||
			}
 | 
			
		||||
			if doc != nil {
 | 
			
		||||
				doc.specFilePath = path
 | 
			
		||||
			}
 | 
			
		||||
			return doc, nil
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if lastErr != nil {
 | 
			
		||||
		return nil, lastErr
 | 
			
		||||
	}
 | 
			
		||||
	b, err := defaultLoader.Fn(path)
 | 
			
		||||
// Spec loads a new spec document from a local or remote path
 | 
			
		||||
func Spec(path string, options ...LoaderOption) (*Document, error) {
 | 
			
		||||
 | 
			
		||||
	b, err := loaderFromOptions(options).Load(path)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	document, err := Analyzed(b, "", options...)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	document, err := Analyzed(b, "")
 | 
			
		||||
	if document != nil {
 | 
			
		||||
		document.specFilePath = path
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -151,8 +90,8 @@ func Spec(path string) (*Document, error) {
 | 
			
		|||
	return document, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Analyzed creates a new analyzed spec document
 | 
			
		||||
func Analyzed(data json.RawMessage, version string) (*Document, error) {
 | 
			
		||||
// Analyzed creates a new analyzed spec document for a root json.RawMessage.
 | 
			
		||||
func Analyzed(data json.RawMessage, version string, options ...LoaderOption) (*Document, error) {
 | 
			
		||||
	if version == "" {
 | 
			
		||||
		version = "2.0"
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -160,24 +99,13 @@ func Analyzed(data json.RawMessage, version string) (*Document, error) {
 | 
			
		|||
		return nil, fmt.Errorf("spec version %q is not supported", version)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	raw := data
 | 
			
		||||
	trimmed := bytes.TrimSpace(data)
 | 
			
		||||
	if len(trimmed) > 0 {
 | 
			
		||||
		if trimmed[0] != '{' && trimmed[0] != '[' {
 | 
			
		||||
			yml, err := swag.BytesToYAMLDoc(trimmed)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("analyzed: %v", err)
 | 
			
		||||
			}
 | 
			
		||||
			d, err := swag.YAMLToJSON(yml)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("analyzed: %v", err)
 | 
			
		||||
			}
 | 
			
		||||
			raw = d
 | 
			
		||||
		}
 | 
			
		||||
	raw, err := trimData(data) // trim blanks, then convert yaml docs into json
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	swspec := new(spec.Swagger)
 | 
			
		||||
	if err := json.Unmarshal(raw, swspec); err != nil {
 | 
			
		||||
	if err = json.Unmarshal(raw, swspec); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -187,12 +115,38 @@ func Analyzed(data json.RawMessage, version string) (*Document, error) {
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	d := &Document{
 | 
			
		||||
		Analyzer: analysis.New(swspec),
 | 
			
		||||
		schema:   spec.MustLoadSwagger20Schema(),
 | 
			
		||||
		spec:     swspec,
 | 
			
		||||
		raw:      raw,
 | 
			
		||||
		origSpec: origsqspec,
 | 
			
		||||
		Analyzer:   analysis.New(swspec),
 | 
			
		||||
		schema:     spec.MustLoadSwagger20Schema(),
 | 
			
		||||
		spec:       swspec,
 | 
			
		||||
		raw:        raw,
 | 
			
		||||
		origSpec:   origsqspec,
 | 
			
		||||
		pathLoader: loaderFromOptions(options),
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return d, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func trimData(in json.RawMessage) (json.RawMessage, error) {
 | 
			
		||||
	trimmed := bytes.TrimSpace(in)
 | 
			
		||||
	if len(trimmed) == 0 {
 | 
			
		||||
		return in, nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if trimmed[0] == '{' || trimmed[0] == '[' {
 | 
			
		||||
		return trimmed, nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// assume yaml doc: convert it to json
 | 
			
		||||
	yml, err := swag.BytesToYAMLDoc(trimmed)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, fmt.Errorf("analyzed: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	d, err := swag.YAMLToJSON(yml)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, fmt.Errorf("analyzed: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return d, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -212,6 +166,16 @@ func (d *Document) Expanded(options ...*spec.ExpandOptions) (*Document, error) {
 | 
			
		|||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if expandOptions.PathLoader == nil {
 | 
			
		||||
		if d.pathLoader != nil {
 | 
			
		||||
			// use loader from Document options
 | 
			
		||||
			expandOptions.PathLoader = d.pathLoader.Load
 | 
			
		||||
		} else {
 | 
			
		||||
			// use package level loader
 | 
			
		||||
			expandOptions.PathLoader = loaders.Load
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if err := spec.ExpandSpec(swspec, expandOptions); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -262,7 +226,7 @@ func (d *Document) OrigSpec() *spec.Swagger {
 | 
			
		|||
	return d.origSpec
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ResetDefinitions gives a shallow copy with the models reset
 | 
			
		||||
// ResetDefinitions gives a shallow copy with the models reset to the original spec
 | 
			
		||||
func (d *Document) ResetDefinitions() *Document {
 | 
			
		||||
	defs := make(map[string]spec.Schema, len(d.origSpec.Definitions))
 | 
			
		||||
	for k, v := range d.origSpec.Definitions {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										42
									
								
								vendor/github.com/go-openapi/runtime/.golangci.yml
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								vendor/github.com/go-openapi/runtime/.golangci.yml
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,42 @@
 | 
			
		|||
linters-settings:
 | 
			
		||||
  govet:
 | 
			
		||||
    check-shadowing: true
 | 
			
		||||
  golint:
 | 
			
		||||
    min-confidence: 0
 | 
			
		||||
  gocyclo:
 | 
			
		||||
    min-complexity: 30
 | 
			
		||||
  maligned:
 | 
			
		||||
    suggest-new: true
 | 
			
		||||
  dupl:
 | 
			
		||||
    threshold: 100
 | 
			
		||||
  goconst:
 | 
			
		||||
    min-len: 2
 | 
			
		||||
    min-occurrences: 4
 | 
			
		||||
linters:
 | 
			
		||||
  enable-all: true
 | 
			
		||||
  disable:
 | 
			
		||||
    - maligned
 | 
			
		||||
    - lll
 | 
			
		||||
    - gochecknoglobals
 | 
			
		||||
    - godox
 | 
			
		||||
    - gocognit
 | 
			
		||||
    - whitespace
 | 
			
		||||
    - wsl
 | 
			
		||||
    - funlen
 | 
			
		||||
    - gochecknoglobals
 | 
			
		||||
    - gochecknoinits
 | 
			
		||||
    - scopelint
 | 
			
		||||
    - wrapcheck
 | 
			
		||||
    - exhaustivestruct
 | 
			
		||||
    - exhaustive
 | 
			
		||||
    - nlreturn
 | 
			
		||||
    - testpackage
 | 
			
		||||
    - gci
 | 
			
		||||
    - gofumpt
 | 
			
		||||
    - goerr113
 | 
			
		||||
    - gomnd
 | 
			
		||||
    - tparallel
 | 
			
		||||
    - nestif
 | 
			
		||||
    - godot
 | 
			
		||||
    - errorlint
 | 
			
		||||
    - noctx
 | 
			
		||||
							
								
								
									
										11
									
								
								vendor/github.com/go-openapi/runtime/.travis.yml
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								vendor/github.com/go-openapi/runtime/.travis.yml
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,10 +1,19 @@
 | 
			
		|||
after_success:
 | 
			
		||||
- bash <(curl -s https://codecov.io/bash)
 | 
			
		||||
go:
 | 
			
		||||
- 1.13.x
 | 
			
		||||
- 1.14.x
 | 
			
		||||
- 1.x
 | 
			
		||||
install:
 | 
			
		||||
- GO111MODULE=off go get -u gotest.tools/gotestsum
 | 
			
		||||
jobs:
 | 
			
		||||
  include:
 | 
			
		||||
  # include linting job, but only for latest go version and amd64 arch
 | 
			
		||||
  - go: 1.x
 | 
			
		||||
    arch: amd64
 | 
			
		||||
    install:
 | 
			
		||||
      go get github.com/golangci/golangci-lint/cmd/golangci-lint
 | 
			
		||||
    script:
 | 
			
		||||
    - golangci-lint run --new-from-rev master
 | 
			
		||||
language: go
 | 
			
		||||
notifications:
 | 
			
		||||
  slack:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										50
									
								
								vendor/github.com/go-openapi/runtime/client_request.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										50
									
								
								vendor/github.com/go-openapi/runtime/client_request.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -101,3 +101,53 @@ func (n *namedReadCloser) Read(p []byte) (int, error) {
 | 
			
		|||
func (n *namedReadCloser) Name() string {
 | 
			
		||||
	return n.name
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type TestClientRequest struct {
 | 
			
		||||
	Headers http.Header
 | 
			
		||||
	Body    interface{}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *TestClientRequest) SetHeaderParam(name string, values ...string) error {
 | 
			
		||||
	if t.Headers == nil {
 | 
			
		||||
		t.Headers = make(http.Header)
 | 
			
		||||
	}
 | 
			
		||||
	t.Headers.Set(name, values[0])
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *TestClientRequest) SetQueryParam(_ string, _ ...string) error { return nil }
 | 
			
		||||
 | 
			
		||||
func (t *TestClientRequest) SetFormParam(_ string, _ ...string) error { return nil }
 | 
			
		||||
 | 
			
		||||
func (t *TestClientRequest) SetPathParam(_ string, _ string) error { return nil }
 | 
			
		||||
 | 
			
		||||
func (t *TestClientRequest) SetFileParam(_ string, _ ...NamedReadCloser) error { return nil }
 | 
			
		||||
 | 
			
		||||
func (t *TestClientRequest) SetBodyParam(body interface{}) error {
 | 
			
		||||
	t.Body = body
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *TestClientRequest) SetTimeout(time.Duration) error {
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *TestClientRequest) GetQueryParams() url.Values { return nil }
 | 
			
		||||
 | 
			
		||||
func (t *TestClientRequest) GetMethod() string { return "" }
 | 
			
		||||
 | 
			
		||||
func (t *TestClientRequest) GetPath() string { return "" }
 | 
			
		||||
 | 
			
		||||
func (t *TestClientRequest) GetBody() []byte { return nil }
 | 
			
		||||
 | 
			
		||||
func (t *TestClientRequest) GetBodyParam() interface{} {
 | 
			
		||||
	return t.Body
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *TestClientRequest) GetFileParam() map[string][]NamedReadCloser {
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *TestClientRequest) GetHeaderParams() http.Header {
 | 
			
		||||
	return t.Headers
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										1
									
								
								vendor/github.com/go-openapi/runtime/go.mod
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/go-openapi/runtime/go.mod
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -9,6 +9,7 @@ require (
 | 
			
		|||
	github.com/go-openapi/strfmt v0.19.5
 | 
			
		||||
	github.com/go-openapi/swag v0.19.9
 | 
			
		||||
	github.com/go-openapi/validate v0.19.10
 | 
			
		||||
	github.com/opentracing/opentracing-go v1.2.0
 | 
			
		||||
	github.com/stretchr/testify v1.6.1
 | 
			
		||||
	gopkg.in/yaml.v2 v2.3.0
 | 
			
		||||
	gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 // indirect
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										2
									
								
								vendor/github.com/go-openapi/runtime/go.sum
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/go-openapi/runtime/go.sum
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -168,6 +168,8 @@ github.com/mitchellh/mapstructure v1.3.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RR
 | 
			
		|||
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
 | 
			
		||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
 | 
			
		||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
 | 
			
		||||
github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs=
 | 
			
		||||
github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
 | 
			
		||||
github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
 | 
			
		||||
github.com/pelletier/go-toml v1.4.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo=
 | 
			
		||||
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										9
									
								
								vendor/github.com/go-openapi/runtime/interfaces.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								vendor/github.com/go-openapi/runtime/interfaces.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -15,6 +15,7 @@
 | 
			
		|||
package runtime
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"io"
 | 
			
		||||
	"net/http"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -101,3 +102,11 @@ type Authorizer interface {
 | 
			
		|||
type Validatable interface {
 | 
			
		||||
	Validate(strfmt.Registry) error
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ContextValidatable types implementing this interface allow customizing their validation
 | 
			
		||||
// this will be used instead of the reflective validation based on the spec document.
 | 
			
		||||
// the implementations are assumed to have been generated by the swagger tool so they should
 | 
			
		||||
// contain all the context validations obtained from the spec
 | 
			
		||||
type ContextValidatable interface {
 | 
			
		||||
	ContextValidate(context.Context, strfmt.Registry) error
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										4
									
								
								vendor/github.com/go-openapi/runtime/middleware/context.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/github.com/go-openapi/runtime/middleware/context.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -435,6 +435,10 @@ func (c *Context) Authorize(request *http.Request, route *MatchedRoute) (interfa
 | 
			
		|||
	}
 | 
			
		||||
	if route.Authorizer != nil {
 | 
			
		||||
		if err := route.Authorizer.Authorize(request, usr); err != nil {
 | 
			
		||||
			if _, ok := err.(errors.Error); ok {
 | 
			
		||||
				return nil, nil, err
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			return nil, nil, errors.New(http.StatusForbidden, err.Error())
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										6
									
								
								vendor/github.com/go-openapi/runtime/middleware/denco/router.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								vendor/github.com/go-openapi/runtime/middleware/denco/router.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -20,6 +20,9 @@ const (
 | 
			
		|||
	// SeparatorCharacter separates path segments.
 | 
			
		||||
	SeparatorCharacter = '/'
 | 
			
		||||
 | 
			
		||||
	// PathParamCharacter indicates a RESTCONF path param
 | 
			
		||||
	PathParamCharacter = '='
 | 
			
		||||
 | 
			
		||||
	// MaxSize is max size of records and internal slice.
 | 
			
		||||
	MaxSize = (1 << 22) - 1
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			@ -426,8 +429,9 @@ func makeRecords(srcs []Record) (statics, params []*record) {
 | 
			
		|||
	termChar := string(TerminationCharacter)
 | 
			
		||||
	paramPrefix := string(SeparatorCharacter) + string(ParamCharacter)
 | 
			
		||||
	wildcardPrefix := string(SeparatorCharacter) + string(WildcardCharacter)
 | 
			
		||||
	restconfPrefix := string(PathParamCharacter) + string(ParamCharacter)
 | 
			
		||||
	for _, r := range srcs {
 | 
			
		||||
		if strings.Contains(r.Key, paramPrefix) || strings.Contains(r.Key, wildcardPrefix) {
 | 
			
		||||
		if strings.Contains(r.Key, paramPrefix) || strings.Contains(r.Key, wildcardPrefix) ||strings.Contains(r.Key, restconfPrefix){
 | 
			
		||||
			r.Key += termChar
 | 
			
		||||
			params = append(params, &record{Record: r})
 | 
			
		||||
		} else {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										90
									
								
								vendor/github.com/go-openapi/runtime/middleware/rapidoc.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								vendor/github.com/go-openapi/runtime/middleware/rapidoc.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,90 @@
 | 
			
		|||
package middleware
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"html/template"
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"path"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// RapiDocOpts configures the RapiDoc middlewares
 | 
			
		||||
type RapiDocOpts struct {
 | 
			
		||||
	// BasePath for the UI path, defaults to: /
 | 
			
		||||
	BasePath string
 | 
			
		||||
	// Path combines with BasePath for the full UI path, defaults to: docs
 | 
			
		||||
	Path string
 | 
			
		||||
	// SpecURL the url to find the spec for
 | 
			
		||||
	SpecURL string
 | 
			
		||||
	// RapiDocURL for the js that generates the rapidoc site, defaults to: https://cdn.jsdelivr.net/npm/rapidoc/bundles/rapidoc.standalone.js
 | 
			
		||||
	RapiDocURL string
 | 
			
		||||
	// Title for the documentation site, default to: API documentation
 | 
			
		||||
	Title string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// EnsureDefaults in case some options are missing
 | 
			
		||||
func (r *RapiDocOpts) EnsureDefaults() {
 | 
			
		||||
	if r.BasePath == "" {
 | 
			
		||||
		r.BasePath = "/"
 | 
			
		||||
	}
 | 
			
		||||
	if r.Path == "" {
 | 
			
		||||
		r.Path = "docs"
 | 
			
		||||
	}
 | 
			
		||||
	if r.SpecURL == "" {
 | 
			
		||||
		r.SpecURL = "/swagger.json"
 | 
			
		||||
	}
 | 
			
		||||
	if r.RapiDocURL == "" {
 | 
			
		||||
		r.RapiDocURL = rapidocLatest
 | 
			
		||||
	}
 | 
			
		||||
	if r.Title == "" {
 | 
			
		||||
		r.Title = "API documentation"
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// RapiDoc creates a middleware to serve a documentation site for a swagger spec.
 | 
			
		||||
// This allows for altering the spec before starting the http listener.
 | 
			
		||||
//
 | 
			
		||||
func RapiDoc(opts RapiDocOpts, next http.Handler) http.Handler {
 | 
			
		||||
	opts.EnsureDefaults()
 | 
			
		||||
 | 
			
		||||
	pth := path.Join(opts.BasePath, opts.Path)
 | 
			
		||||
	tmpl := template.Must(template.New("rapidoc").Parse(rapidocTemplate))
 | 
			
		||||
 | 
			
		||||
	buf := bytes.NewBuffer(nil)
 | 
			
		||||
	_ = tmpl.Execute(buf, opts)
 | 
			
		||||
	b := buf.Bytes()
 | 
			
		||||
 | 
			
		||||
	return http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) {
 | 
			
		||||
		if r.URL.Path == pth {
 | 
			
		||||
			rw.Header().Set("Content-Type", "text/html; charset=utf-8")
 | 
			
		||||
			rw.WriteHeader(http.StatusOK)
 | 
			
		||||
 | 
			
		||||
			_, _ = rw.Write(b)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if next == nil {
 | 
			
		||||
			rw.Header().Set("Content-Type", "text/plain")
 | 
			
		||||
			rw.WriteHeader(http.StatusNotFound)
 | 
			
		||||
			_, _ = rw.Write([]byte(fmt.Sprintf("%q not found", pth)))
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		next.ServeHTTP(rw, r)
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	rapidocLatest   = "https://unpkg.com/rapidoc/dist/rapidoc-min.js"
 | 
			
		||||
	rapidocTemplate = `<!doctype html>
 | 
			
		||||
<html>
 | 
			
		||||
<head>
 | 
			
		||||
  <title>{{ .Title }}</title>
 | 
			
		||||
  <meta charset="utf-8"> <!-- Important: rapi-doc uses utf8 charecters -->
 | 
			
		||||
  <script type="module" src="{{ .RapiDocURL }}"></script>
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
  <rapi-doc spec-url="{{ .SpecURL }}"></rapi-doc>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
`
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										10
									
								
								vendor/github.com/go-openapi/runtime/middleware/router.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								vendor/github.com/go-openapi/runtime/middleware/router.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -22,6 +22,7 @@ import (
 | 
			
		|||
	"strings"
 | 
			
		||||
 | 
			
		||||
	"github.com/go-openapi/runtime/security"
 | 
			
		||||
	"github.com/go-openapi/swag"
 | 
			
		||||
 | 
			
		||||
	"github.com/go-openapi/analysis"
 | 
			
		||||
	"github.com/go-openapi/errors"
 | 
			
		||||
| 
						 | 
				
			
			@ -418,6 +419,15 @@ func (d *defaultRouteBuilder) AddRoute(method, path string, operation *spec.Oper
 | 
			
		|||
		produces := d.analyzer.ProducesFor(operation)
 | 
			
		||||
		parameters := d.analyzer.ParamsFor(method, strings.TrimPrefix(path, bp))
 | 
			
		||||
 | 
			
		||||
		// add API defaults if not part of the spec
 | 
			
		||||
		if defConsumes := d.api.DefaultConsumes(); defConsumes != "" && !swag.ContainsStringsCI(consumes, defConsumes) {
 | 
			
		||||
			consumes = append(consumes, defConsumes)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if defProduces := d.api.DefaultProduces(); defProduces != "" && !swag.ContainsStringsCI(produces, defProduces) {
 | 
			
		||||
			produces = append(produces, defProduces)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		record := denco.NewRecord(pathConverter.ReplaceAllString(path, ":$1"), &routeEntry{
 | 
			
		||||
			BasePath:       bp,
 | 
			
		||||
			PathPattern:    path,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										11
									
								
								vendor/github.com/go-openapi/spec/.golangci.yml
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								vendor/github.com/go-openapi/spec/.golangci.yml
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -26,3 +26,14 @@ linters:
 | 
			
		|||
    - gocognit
 | 
			
		||||
    - whitespace
 | 
			
		||||
    - wsl
 | 
			
		||||
    - wrapcheck
 | 
			
		||||
    - testpackage
 | 
			
		||||
    - nlreturn
 | 
			
		||||
    - gomnd
 | 
			
		||||
    - exhaustivestruct
 | 
			
		||||
    - goerr113
 | 
			
		||||
    - errorlint
 | 
			
		||||
    - nestif
 | 
			
		||||
    - godot
 | 
			
		||||
    - gofumpt
 | 
			
		||||
    - paralleltest
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										20
									
								
								vendor/github.com/go-openapi/spec/.travis.yml
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								vendor/github.com/go-openapi/spec/.travis.yml
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,8 +1,26 @@
 | 
			
		|||
after_success:
 | 
			
		||||
- bash <(curl -s https://codecov.io/bash)
 | 
			
		||||
go:
 | 
			
		||||
- 1.13.x
 | 
			
		||||
- 1.14.x
 | 
			
		||||
- 1.x
 | 
			
		||||
arch:
 | 
			
		||||
  - amd64
 | 
			
		||||
jobs:
 | 
			
		||||
  include:
 | 
			
		||||
  # only run fast tests on ppc64le
 | 
			
		||||
  - go: 1.x
 | 
			
		||||
    arch: ppc64le
 | 
			
		||||
    script:
 | 
			
		||||
    - gotestsum -f short-verbose -- ./...
 | 
			
		||||
 | 
			
		||||
  # include linting job, but only for latest go version and amd64 arch
 | 
			
		||||
  - go: 1.x
 | 
			
		||||
    arch: amd64
 | 
			
		||||
    install:
 | 
			
		||||
      go get github.com/golangci/golangci-lint/cmd/golangci-lint
 | 
			
		||||
    script:
 | 
			
		||||
    - golangci-lint run --new-from-rev master
 | 
			
		||||
 | 
			
		||||
install:
 | 
			
		||||
- GO111MODULE=off go get -u gotest.tools/gotestsum
 | 
			
		||||
language: go
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										24
									
								
								vendor/github.com/go-openapi/spec/README.md
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										24
									
								
								vendor/github.com/go-openapi/spec/README.md
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -2,9 +2,29 @@
 | 
			
		|||
 | 
			
		||||
[](https://raw.githubusercontent.com/go-openapi/spec/master/LICENSE)
 | 
			
		||||
[](http://godoc.org/github.com/go-openapi/spec)
 | 
			
		||||
[](https://golangci.com)
 | 
			
		||||
[](https://goreportcard.com/report/github.com/go-openapi/spec)
 | 
			
		||||
 | 
			
		||||
The object model for OpenAPI specification documents.
 | 
			
		||||
 | 
			
		||||
Currently supports Swagger 2.0.
 | 
			
		||||
### FAQ
 | 
			
		||||
 | 
			
		||||
* What does this do?
 | 
			
		||||
 | 
			
		||||
> 1. This package knows how to marshal and unmarshal Swagger API specifications into a golang object model
 | 
			
		||||
> 2. It knows how to resolve $ref and expand them to make a single root documment
 | 
			
		||||
 | 
			
		||||
* How does it play with the rest of the go-openapi packages ?
 | 
			
		||||
 | 
			
		||||
> 1. This package is at the core of the go-openapi suite of packages and [code generator](https://github.com/go-swagger/go-swagger)
 | 
			
		||||
> 2. There is a [spec loading package](https://github.com/go-openapi/loads) to fetch specs as JSON or YAML from local or remote locations
 | 
			
		||||
> 3. There is a [spec validation package](https://github.com/go-openapi/validate) built on top of it
 | 
			
		||||
> 4. There is a [spec analysis package](https://github.com/go-openapi/analysis) built on top of it, to analyze, flatten, fix and merge spec documents
 | 
			
		||||
 | 
			
		||||
* Does this library support OpenAPI 3?
 | 
			
		||||
 | 
			
		||||
> No.
 | 
			
		||||
> This package currently only supports OpenAPI 2.0 (aka Swagger 2.0).
 | 
			
		||||
> There is no plan to make it evolve toward supporting OpenAPI 3.x.
 | 
			
		||||
> This [discussion thread](https://github.com/go-openapi/spec/issues/21) relates the full story.
 | 
			
		||||
>
 | 
			
		||||
> An early attempt to support Swagger 3 may be found at: https://github.com/go-openapi/spec3
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										34
									
								
								vendor/github.com/go-openapi/spec/appveyor.yml
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								vendor/github.com/go-openapi/spec/appveyor.yml
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,34 @@
 | 
			
		|||
version: "0.1.{build}"
 | 
			
		||||
 | 
			
		||||
clone_folder: C:\go-openapi\spec
 | 
			
		||||
shallow_clone: true # for startup speed
 | 
			
		||||
pull_requests:
 | 
			
		||||
  do_not_increment_build_number: true
 | 
			
		||||
 | 
			
		||||
#skip_tags: true
 | 
			
		||||
#skip_branch_with_pr: true
 | 
			
		||||
 | 
			
		||||
# appveyor.yml
 | 
			
		||||
build: off
 | 
			
		||||
 | 
			
		||||
environment:
 | 
			
		||||
  GOPATH: c:\gopath
 | 
			
		||||
 | 
			
		||||
stack: go 1.12
 | 
			
		||||
 | 
			
		||||
test_script:
 | 
			
		||||
  - echo "test disabled for now"
 | 
			
		||||
  #- go test -v -timeout 20m ./...
 | 
			
		||||
#artifacts:
 | 
			
		||||
#  - path: '%GOPATH%\bin\*.exe'
 | 
			
		||||
deploy: off
 | 
			
		||||
 | 
			
		||||
notifications:
 | 
			
		||||
  - provider: Slack
 | 
			
		||||
    incoming_webhook: https://hooks.slack.com/services/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
 | 
			
		||||
    auth_token:
 | 
			
		||||
      secure: Sf7kZf7ZGbnwWUMpffHwMu5A0cHkLK2MYY32LNTPj4+/3qC3Ghl7+9v4TSLOqOlCwdRNjOGblAq7s+GDJed6/xgRQl1JtCi1klzZNrYX4q01pgTPvvGcwbBkIYgeMaPeIRcK9OZnud7sRXdttozgTOpytps2U6Js32ip7uj5mHSg2ub0FwoSJwlS6dbezZ8+eDhoha0F/guY99BEwx8Bd+zROrT2TFGsSGOFGN6wFc7moCqTHO/YkWib13a2QNXqOxCCVBy/lt76Wp+JkeFppjHlzs/2lP3EAk13RIUAaesdEUHvIHrzCyNJEd3/+KO2DzsWOYfpktd+KBCvgaYOsoo7ubdT3IROeAegZdCgo/6xgCEsmFc9ZcqCfN5yNx2A+BZ2Vwmpws+bQ1E1+B5HDzzaiLcYfG4X2O210QVGVDLWsv1jqD+uPYeHY2WRfh5ZsIUFvaqgUEnwHwrK44/8REAhQavt1QAj5uJpsRd7CkRVPWRNK+yIky+wgbVUFEchRNmS55E7QWf+W4+4QZkQi7vUTMc9nbTUu2Es9NfvfudOpM2wZbn98fjpb/qq/nRv6Bk+ca+7XD5/IgNLMbWp2ouDdzbiHLCOfDUiHiDJhLfFZx9Bwo7ZwfzeOlbrQX66bx7xRKYmOe4DLrXhNcpbsMa8qbfxlZRCmYbubB/Y8h4=
 | 
			
		||||
    channel: bots
 | 
			
		||||
    on_build_success: false
 | 
			
		||||
    on_build_failure: true
 | 
			
		||||
    on_build_status_changed: true
 | 
			
		||||
							
								
								
									
										6
									
								
								vendor/github.com/go-openapi/spec/bindata.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								vendor/github.com/go-openapi/spec/bindata.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -247,9 +247,9 @@ type bintree struct {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
var _bintree = &bintree{nil, map[string]*bintree{
 | 
			
		||||
	"jsonschema-draft-04.json": &bintree{jsonschemaDraft04Json, map[string]*bintree{}},
 | 
			
		||||
	"v2": &bintree{nil, map[string]*bintree{
 | 
			
		||||
		"schema.json": &bintree{v2SchemaJson, map[string]*bintree{}},
 | 
			
		||||
	"jsonschema-draft-04.json": {jsonschemaDraft04Json, map[string]*bintree{}},
 | 
			
		||||
	"v2": {nil, map[string]*bintree{
 | 
			
		||||
		"schema.json": {v2SchemaJson, map[string]*bintree{}},
 | 
			
		||||
	}},
 | 
			
		||||
}}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										54
									
								
								vendor/github.com/go-openapi/spec/cache.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										54
									
								
								vendor/github.com/go-openapi/spec/cache.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -14,7 +14,9 @@
 | 
			
		|||
 | 
			
		||||
package spec
 | 
			
		||||
 | 
			
		||||
import "sync"
 | 
			
		||||
import (
 | 
			
		||||
	"sync"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// ResolutionCache a cache for resolving urls
 | 
			
		||||
type ResolutionCache interface {
 | 
			
		||||
| 
						 | 
				
			
			@ -27,12 +29,23 @@ type simpleCache struct {
 | 
			
		|||
	store map[string]interface{}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *simpleCache) ShallowClone() ResolutionCache {
 | 
			
		||||
	store := make(map[string]interface{}, len(s.store))
 | 
			
		||||
	s.lock.RLock()
 | 
			
		||||
	for k, v := range s.store {
 | 
			
		||||
		store[k] = v
 | 
			
		||||
	}
 | 
			
		||||
	s.lock.RUnlock()
 | 
			
		||||
 | 
			
		||||
	return &simpleCache{
 | 
			
		||||
		store: store,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Get retrieves a cached URI
 | 
			
		||||
func (s *simpleCache) Get(uri string) (interface{}, bool) {
 | 
			
		||||
	debugLog("getting %q from resolution cache", uri)
 | 
			
		||||
	s.lock.RLock()
 | 
			
		||||
	v, ok := s.store[uri]
 | 
			
		||||
	debugLog("got %q from resolution cache: %t", uri, ok)
 | 
			
		||||
 | 
			
		||||
	s.lock.RUnlock()
 | 
			
		||||
	return v, ok
 | 
			
		||||
| 
						 | 
				
			
			@ -45,16 +58,41 @@ func (s *simpleCache) Set(uri string, data interface{}) {
 | 
			
		|||
	s.lock.Unlock()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var resCache ResolutionCache
 | 
			
		||||
var (
 | 
			
		||||
	// resCache is a package level cache for $ref resolution and expansion.
 | 
			
		||||
	// It is initialized lazily by methods that have the need for it: no
 | 
			
		||||
	// memory is allocated unless some expander methods are called.
 | 
			
		||||
	//
 | 
			
		||||
	// It is initialized with JSON schema and swagger schema,
 | 
			
		||||
	// which do not mutate during normal operations.
 | 
			
		||||
	//
 | 
			
		||||
	// All subsequent utilizations of this cache are produced from a shallow
 | 
			
		||||
	// clone of this initial version.
 | 
			
		||||
	resCache  *simpleCache
 | 
			
		||||
	onceCache sync.Once
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	resCache = initResolutionCache()
 | 
			
		||||
	_ ResolutionCache = &simpleCache{}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// initResolutionCache initializes the URI resolution cache. To be wrapped in a sync.Once.Do call.
 | 
			
		||||
func initResolutionCache() {
 | 
			
		||||
	resCache = defaultResolutionCache()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// initResolutionCache initializes the URI resolution cache
 | 
			
		||||
func initResolutionCache() ResolutionCache {
 | 
			
		||||
func defaultResolutionCache() *simpleCache {
 | 
			
		||||
	return &simpleCache{store: map[string]interface{}{
 | 
			
		||||
		"http://swagger.io/v2/schema.json":       MustLoadSwagger20Schema(),
 | 
			
		||||
		"http://json-schema.org/draft-04/schema": MustLoadJSONSchemaDraft04(),
 | 
			
		||||
	}}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func cacheOrDefault(cache ResolutionCache) ResolutionCache {
 | 
			
		||||
	onceCache.Do(initResolutionCache)
 | 
			
		||||
 | 
			
		||||
	if cache != nil {
 | 
			
		||||
		return cache
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// get a shallow clone of the base cache with swagger and json schema
 | 
			
		||||
	return resCache.ShallowClone()
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										3
									
								
								vendor/github.com/go-openapi/spec/contact_info.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/github.com/go-openapi/spec/contact_info.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -28,12 +28,14 @@ type ContactInfo struct {
 | 
			
		|||
	VendorExtensible
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ContactInfoProps hold the properties of a ContactInfo object
 | 
			
		||||
type ContactInfoProps struct {
 | 
			
		||||
	Name  string `json:"name,omitempty"`
 | 
			
		||||
	URL   string `json:"url,omitempty"`
 | 
			
		||||
	Email string `json:"email,omitempty"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UnmarshalJSON hydrates ContactInfo from json
 | 
			
		||||
func (c *ContactInfo) UnmarshalJSON(data []byte) error {
 | 
			
		||||
	if err := json.Unmarshal(data, &c.ContactInfoProps); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
| 
						 | 
				
			
			@ -41,6 +43,7 @@ func (c *ContactInfo) UnmarshalJSON(data []byte) error {
 | 
			
		|||
	return json.Unmarshal(data, &c.VendorExtensible)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// MarshalJSON produces ContactInfo as json
 | 
			
		||||
func (c ContactInfo) MarshalJSON() ([]byte, error) {
 | 
			
		||||
	b1, err := json.Marshal(c.ContactInfoProps)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										18
									
								
								vendor/github.com/go-openapi/spec/errors.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								vendor/github.com/go-openapi/spec/errors.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,18 @@
 | 
			
		|||
package spec
 | 
			
		||||
 | 
			
		||||
import "errors"
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	// ErrUnknownTypeForReference indicates that a resolved reference was found in an unsupported container type
 | 
			
		||||
	ErrUnknownTypeForReference = errors.New("unknown type for the resolved reference")
 | 
			
		||||
 | 
			
		||||
	// ErrResolveRefNeedsAPointer indicates that a $ref target must be a valid JSON pointer
 | 
			
		||||
	ErrResolveRefNeedsAPointer = errors.New("resolve ref: target needs to be a pointer")
 | 
			
		||||
 | 
			
		||||
	// ErrDerefUnsupportedType indicates that a resolved reference was found in an unsupported container type.
 | 
			
		||||
	// At the moment, $ref are supported only inside: schemas, parameters, responses, path items
 | 
			
		||||
	ErrDerefUnsupportedType = errors.New("deref: unsupported type")
 | 
			
		||||
 | 
			
		||||
	// ErrExpandUnsupportedType indicates that $ref expansion is attempted on some invalid type
 | 
			
		||||
	ErrExpandUnsupportedType = errors.New("expand: unsupported type. Input should be of type *Parameter or *Response")
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										512
									
								
								vendor/github.com/go-openapi/spec/expander.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										512
									
								
								vendor/github.com/go-openapi/spec/expander.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -17,140 +17,21 @@ package spec
 | 
			
		|||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"strings"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// ExpandOptions provides options for spec expand
 | 
			
		||||
// ExpandOptions provides options for the spec expander.
 | 
			
		||||
type ExpandOptions struct {
 | 
			
		||||
	RelativeBase        string
 | 
			
		||||
	SkipSchemas         bool
 | 
			
		||||
	ContinueOnError     bool
 | 
			
		||||
	RelativeBase    string
 | 
			
		||||
	SkipSchemas     bool
 | 
			
		||||
	ContinueOnError bool
 | 
			
		||||
	PathLoader      func(string) (json.RawMessage, error) `json:"-"`
 | 
			
		||||
 | 
			
		||||
	AbsoluteCircularRef bool
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ResolveRefWithBase resolves a reference against a context root with preservation of base path
 | 
			
		||||
func ResolveRefWithBase(root interface{}, ref *Ref, opts *ExpandOptions) (*Schema, error) {
 | 
			
		||||
	resolver, err := defaultSchemaLoader(root, opts, nil, nil)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	specBasePath := ""
 | 
			
		||||
	if opts != nil && opts.RelativeBase != "" {
 | 
			
		||||
		specBasePath, _ = absPath(opts.RelativeBase)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	result := new(Schema)
 | 
			
		||||
	if err := resolver.Resolve(ref, result, specBasePath); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return result, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ResolveRef resolves a reference against a context root
 | 
			
		||||
// ref is guaranteed to be in root (no need to go to external files)
 | 
			
		||||
// ResolveRef is ONLY called from the code generation module
 | 
			
		||||
func ResolveRef(root interface{}, ref *Ref) (*Schema, error) {
 | 
			
		||||
	res, _, err := ref.GetPointer().Get(root)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
	switch sch := res.(type) {
 | 
			
		||||
	case Schema:
 | 
			
		||||
		return &sch, nil
 | 
			
		||||
	case *Schema:
 | 
			
		||||
		return sch, nil
 | 
			
		||||
	case map[string]interface{}:
 | 
			
		||||
		b, _ := json.Marshal(sch)
 | 
			
		||||
		newSch := new(Schema)
 | 
			
		||||
		_ = json.Unmarshal(b, newSch)
 | 
			
		||||
		return newSch, nil
 | 
			
		||||
	default:
 | 
			
		||||
		return nil, fmt.Errorf("unknown type for the resolved reference")
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ResolveParameter resolves a parameter reference against a context root
 | 
			
		||||
func ResolveParameter(root interface{}, ref Ref) (*Parameter, error) {
 | 
			
		||||
	return ResolveParameterWithBase(root, ref, nil)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ResolveParameterWithBase resolves a parameter reference against a context root and base path
 | 
			
		||||
func ResolveParameterWithBase(root interface{}, ref Ref, opts *ExpandOptions) (*Parameter, error) {
 | 
			
		||||
	resolver, err := defaultSchemaLoader(root, opts, nil, nil)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	result := new(Parameter)
 | 
			
		||||
	if err := resolver.Resolve(&ref, result, ""); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return result, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ResolveResponse resolves response a reference against a context root
 | 
			
		||||
func ResolveResponse(root interface{}, ref Ref) (*Response, error) {
 | 
			
		||||
	return ResolveResponseWithBase(root, ref, nil)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ResolveResponseWithBase resolves response a reference against a context root and base path
 | 
			
		||||
func ResolveResponseWithBase(root interface{}, ref Ref, opts *ExpandOptions) (*Response, error) {
 | 
			
		||||
	resolver, err := defaultSchemaLoader(root, opts, nil, nil)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	result := new(Response)
 | 
			
		||||
	if err := resolver.Resolve(&ref, result, ""); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return result, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ResolveItems resolves parameter items reference against a context root and base path.
 | 
			
		||||
//
 | 
			
		||||
// NOTE: stricly speaking, this construct is not supported by Swagger 2.0.
 | 
			
		||||
// Similarly, $ref are forbidden in response headers.
 | 
			
		||||
func ResolveItems(root interface{}, ref Ref, opts *ExpandOptions) (*Items, error) {
 | 
			
		||||
	resolver, err := defaultSchemaLoader(root, opts, nil, nil)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	basePath := ""
 | 
			
		||||
	if opts.RelativeBase != "" {
 | 
			
		||||
		basePath = opts.RelativeBase
 | 
			
		||||
	}
 | 
			
		||||
	result := new(Items)
 | 
			
		||||
	if err := resolver.Resolve(&ref, result, basePath); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return result, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ResolvePathItem resolves response a path item against a context root and base path
 | 
			
		||||
func ResolvePathItem(root interface{}, ref Ref, opts *ExpandOptions) (*PathItem, error) {
 | 
			
		||||
	resolver, err := defaultSchemaLoader(root, opts, nil, nil)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	basePath := ""
 | 
			
		||||
	if opts.RelativeBase != "" {
 | 
			
		||||
		basePath = opts.RelativeBase
 | 
			
		||||
	}
 | 
			
		||||
	result := new(PathItem)
 | 
			
		||||
	if err := resolver.Resolve(&ref, result, basePath); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return result, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ExpandSpec expands the references in a swagger spec
 | 
			
		||||
func ExpandSpec(spec *Swagger, options *ExpandOptions) error {
 | 
			
		||||
	resolver, err := defaultSchemaLoader(spec, options, nil, nil)
 | 
			
		||||
	// Just in case this ever returns an error.
 | 
			
		||||
	if resolver.shouldStopOnError(err) {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	resolver := defaultSchemaLoader(spec, options, nil, nil)
 | 
			
		||||
 | 
			
		||||
	// getting the base path of the spec to adjust all subsequent reference resolutions
 | 
			
		||||
	specBasePath := ""
 | 
			
		||||
| 
						 | 
				
			
			@ -160,9 +41,10 @@ func ExpandSpec(spec *Swagger, options *ExpandOptions) error {
 | 
			
		|||
 | 
			
		||||
	if options == nil || !options.SkipSchemas {
 | 
			
		||||
		for key, definition := range spec.Definitions {
 | 
			
		||||
			var def *Schema
 | 
			
		||||
			var err error
 | 
			
		||||
			if def, err = expandSchema(definition, []string{fmt.Sprintf("#/definitions/%s", key)}, resolver, specBasePath); resolver.shouldStopOnError(err) {
 | 
			
		||||
			parentRefs := make([]string, 0, 10)
 | 
			
		||||
			parentRefs = append(parentRefs, fmt.Sprintf("#/definitions/%s", key))
 | 
			
		||||
			def, err := expandSchema(definition, parentRefs, resolver, specBasePath)
 | 
			
		||||
			if resolver.shouldStopOnError(err) {
 | 
			
		||||
				return err
 | 
			
		||||
			}
 | 
			
		||||
			if def != nil {
 | 
			
		||||
| 
						 | 
				
			
			@ -189,157 +71,140 @@ func ExpandSpec(spec *Swagger, options *ExpandOptions) error {
 | 
			
		|||
 | 
			
		||||
	if spec.Paths != nil {
 | 
			
		||||
		for key := range spec.Paths.Paths {
 | 
			
		||||
			path := spec.Paths.Paths[key]
 | 
			
		||||
			if err := expandPathItem(&path, resolver, specBasePath); resolver.shouldStopOnError(err) {
 | 
			
		||||
			pth := spec.Paths.Paths[key]
 | 
			
		||||
			if err := expandPathItem(&pth, resolver, specBasePath); resolver.shouldStopOnError(err) {
 | 
			
		||||
				return err
 | 
			
		||||
			}
 | 
			
		||||
			spec.Paths.Paths[key] = path
 | 
			
		||||
			spec.Paths.Paths[key] = pth
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const rootBase = "root"
 | 
			
		||||
// baseForRoot loads in the cache the root document and produces a fake "root" base path entry
 | 
			
		||||
const rootBase = ".root"
 | 
			
		||||
 | 
			
		||||
// baseForRoot loads in the cache the root document and produces a fake ".root" base path entry
 | 
			
		||||
// for further $ref resolution
 | 
			
		||||
//
 | 
			
		||||
// Setting the cache is optional and this parameter may safely be left to nil.
 | 
			
		||||
func baseForRoot(root interface{}, cache ResolutionCache) string {
 | 
			
		||||
	// cache the root document to resolve $ref's
 | 
			
		||||
	if root != nil {
 | 
			
		||||
		base, _ := absPath(rootBase)
 | 
			
		||||
		normalizedBase := normalizeAbsPath(base)
 | 
			
		||||
		debugLog("setting root doc in cache at: %s", normalizedBase)
 | 
			
		||||
		if cache == nil {
 | 
			
		||||
			cache = resCache
 | 
			
		||||
		}
 | 
			
		||||
		cache.Set(normalizedBase, root)
 | 
			
		||||
		return rootBase
 | 
			
		||||
	if root == nil {
 | 
			
		||||
		return ""
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
 | 
			
		||||
	// cache the root document to resolve $ref's
 | 
			
		||||
	base, _ := absPath(rootBase)
 | 
			
		||||
	normalizedBase := normalizeAbsPath(base)
 | 
			
		||||
	cache.Set(normalizedBase, root)
 | 
			
		||||
 | 
			
		||||
	return normalizedBase
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ExpandSchema expands the refs in the schema object with reference to the root object
 | 
			
		||||
// go-openapi/validate uses this function
 | 
			
		||||
// notice that it is impossible to reference a json schema in a different file other than root
 | 
			
		||||
// ExpandSchema expands the refs in the schema object with reference to the root object.
 | 
			
		||||
//
 | 
			
		||||
// go-openapi/validate uses this function.
 | 
			
		||||
//
 | 
			
		||||
// Notice that it is impossible to reference a json schema in a different document other than root
 | 
			
		||||
// (use ExpandSchemaWithBasePath to resolve external references).
 | 
			
		||||
//
 | 
			
		||||
// Setting the cache is optional and this parameter may safely be left to nil.
 | 
			
		||||
func ExpandSchema(schema *Schema, root interface{}, cache ResolutionCache) error {
 | 
			
		||||
	cache = cacheOrDefault(cache)
 | 
			
		||||
	if root == nil {
 | 
			
		||||
		root = schema
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	opts := &ExpandOptions{
 | 
			
		||||
		// when a root is specified, cache the root as an in-memory document for $ref retrieval
 | 
			
		||||
		RelativeBase:    baseForRoot(root, cache),
 | 
			
		||||
		SkipSchemas:     false,
 | 
			
		||||
		ContinueOnError: false,
 | 
			
		||||
		// when no base path is specified, remaining $ref (circular) are rendered with an absolute path
 | 
			
		||||
		AbsoluteCircularRef: true,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return ExpandSchemaWithBasePath(schema, cache, opts)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ExpandSchemaWithBasePath expands the refs in the schema object, base path configured through expand options
 | 
			
		||||
// ExpandSchemaWithBasePath expands the refs in the schema object, base path configured through expand options.
 | 
			
		||||
//
 | 
			
		||||
// Setting the cache is optional and this parameter may safely be left to nil.
 | 
			
		||||
func ExpandSchemaWithBasePath(schema *Schema, cache ResolutionCache, opts *ExpandOptions) error {
 | 
			
		||||
	if schema == nil {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	cache = cacheOrDefault(cache)
 | 
			
		||||
 | 
			
		||||
	var basePath string
 | 
			
		||||
	if opts.RelativeBase != "" {
 | 
			
		||||
		basePath, _ = absPath(opts.RelativeBase)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	resolver, err := defaultSchemaLoader(nil, opts, cache, nil)
 | 
			
		||||
	resolver := defaultSchemaLoader(nil, opts, cache, nil)
 | 
			
		||||
 | 
			
		||||
	parentRefs := make([]string, 0, 10)
 | 
			
		||||
	s, err := expandSchema(*schema, parentRefs, resolver, basePath)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	refs := []string{""}
 | 
			
		||||
	var s *Schema
 | 
			
		||||
	if s, err = expandSchema(*schema, refs, resolver, basePath); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	if s != nil {
 | 
			
		||||
		// guard for when continuing on error
 | 
			
		||||
		*schema = *s
 | 
			
		||||
	}
 | 
			
		||||
	*schema = *s
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func expandItems(target Schema, parentRefs []string, resolver *schemaLoader, basePath string) (*Schema, error) {
 | 
			
		||||
	if target.Items != nil {
 | 
			
		||||
		if target.Items.Schema != nil {
 | 
			
		||||
			t, err := expandSchema(*target.Items.Schema, parentRefs, resolver, basePath)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return nil, err
 | 
			
		||||
			}
 | 
			
		||||
			*target.Items.Schema = *t
 | 
			
		||||
		}
 | 
			
		||||
		for i := range target.Items.Schemas {
 | 
			
		||||
			t, err := expandSchema(target.Items.Schemas[i], parentRefs, resolver, basePath)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return nil, err
 | 
			
		||||
			}
 | 
			
		||||
			target.Items.Schemas[i] = *t
 | 
			
		||||
		}
 | 
			
		||||
	if target.Items == nil {
 | 
			
		||||
		return &target, nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// array
 | 
			
		||||
	if target.Items.Schema != nil {
 | 
			
		||||
		t, err := expandSchema(*target.Items.Schema, parentRefs, resolver, basePath)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
		*target.Items.Schema = *t
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// tuple
 | 
			
		||||
	for i := range target.Items.Schemas {
 | 
			
		||||
		t, err := expandSchema(target.Items.Schemas[i], parentRefs, resolver, basePath)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
		target.Items.Schemas[i] = *t
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return &target, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func expandSchema(target Schema, parentRefs []string, resolver *schemaLoader, basePath string) (*Schema, error) {
 | 
			
		||||
	if target.Ref.String() == "" && target.Ref.IsRoot() {
 | 
			
		||||
		// normalizing is important
 | 
			
		||||
		newRef := normalizeFileRef(&target.Ref, basePath)
 | 
			
		||||
		target.Ref = *newRef
 | 
			
		||||
		return &target, nil
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// change the base path of resolution when an ID is encountered
 | 
			
		||||
	// otherwise the basePath should inherit the parent's
 | 
			
		||||
	// important: ID can be relative path
 | 
			
		||||
	if target.ID != "" {
 | 
			
		||||
		debugLog("schema has ID: %s", target.ID)
 | 
			
		||||
		// handling the case when id is a folder
 | 
			
		||||
		// remember that basePath has to be a file
 | 
			
		||||
		refPath := target.ID
 | 
			
		||||
		if strings.HasSuffix(target.ID, "/") {
 | 
			
		||||
			// path.Clean here would not work correctly if basepath is http
 | 
			
		||||
			refPath = fmt.Sprintf("%s%s", refPath, "placeholder.json")
 | 
			
		||||
		}
 | 
			
		||||
		basePath = normalizePaths(refPath, basePath)
 | 
			
		||||
		basePath, _ = resolver.setSchemaID(target, target.ID, basePath)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var t *Schema
 | 
			
		||||
	// if Ref is found, everything else doesn't matter
 | 
			
		||||
	// Ref also changes the resolution scope of children expandSchema
 | 
			
		||||
	if target.Ref.String() != "" {
 | 
			
		||||
		// here the resolution scope is changed because a $ref was encountered
 | 
			
		||||
		normalizedRef := normalizeFileRef(&target.Ref, basePath)
 | 
			
		||||
		normalizedBasePath := normalizedRef.RemoteURI()
 | 
			
		||||
		return expandSchemaRef(target, parentRefs, resolver, basePath)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
		if resolver.isCircular(normalizedRef, basePath, parentRefs...) {
 | 
			
		||||
			// this means there is a cycle in the recursion tree: return the Ref
 | 
			
		||||
			// - circular refs cannot be expanded. We leave them as ref.
 | 
			
		||||
			// - denormalization means that a new local file ref is set relative to the original basePath
 | 
			
		||||
			debugLog("shortcut circular ref: basePath: %s, normalizedPath: %s, normalized ref: %s",
 | 
			
		||||
				basePath, normalizedBasePath, normalizedRef.String())
 | 
			
		||||
			if !resolver.options.AbsoluteCircularRef {
 | 
			
		||||
				target.Ref = *denormalizeFileRef(normalizedRef, normalizedBasePath, resolver.context.basePath)
 | 
			
		||||
			} else {
 | 
			
		||||
				target.Ref = *normalizedRef
 | 
			
		||||
			}
 | 
			
		||||
			return &target, nil
 | 
			
		||||
	for k := range target.Definitions {
 | 
			
		||||
		tt, err := expandSchema(target.Definitions[k], parentRefs, resolver, basePath)
 | 
			
		||||
		if resolver.shouldStopOnError(err) {
 | 
			
		||||
			return &target, err
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		debugLog("basePath: %s: calling Resolve with target: %#v", basePath, target)
 | 
			
		||||
		if err := resolver.Resolve(&target.Ref, &t, basePath); resolver.shouldStopOnError(err) {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if t != nil {
 | 
			
		||||
			parentRefs = append(parentRefs, normalizedRef.String())
 | 
			
		||||
			var err error
 | 
			
		||||
			transitiveResolver, err := resolver.transitiveResolver(basePath, target.Ref)
 | 
			
		||||
			if transitiveResolver.shouldStopOnError(err) {
 | 
			
		||||
				return nil, err
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			basePath = resolver.updateBasePath(transitiveResolver, normalizedBasePath)
 | 
			
		||||
 | 
			
		||||
			return expandSchema(*t, parentRefs, transitiveResolver, basePath)
 | 
			
		||||
		if tt != nil {
 | 
			
		||||
			target.Definitions[k] = *tt
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -356,15 +221,21 @@ func expandSchema(target Schema, parentRefs []string, resolver *schemaLoader, ba
 | 
			
		|||
		if resolver.shouldStopOnError(err) {
 | 
			
		||||
			return &target, err
 | 
			
		||||
		}
 | 
			
		||||
		target.AllOf[i] = *t
 | 
			
		||||
		if t != nil {
 | 
			
		||||
			target.AllOf[i] = *t
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for i := range target.AnyOf {
 | 
			
		||||
		t, err := expandSchema(target.AnyOf[i], parentRefs, resolver, basePath)
 | 
			
		||||
		if resolver.shouldStopOnError(err) {
 | 
			
		||||
			return &target, err
 | 
			
		||||
		}
 | 
			
		||||
		target.AnyOf[i] = *t
 | 
			
		||||
		if t != nil {
 | 
			
		||||
			target.AnyOf[i] = *t
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for i := range target.OneOf {
 | 
			
		||||
		t, err := expandSchema(target.OneOf[i], parentRefs, resolver, basePath)
 | 
			
		||||
		if resolver.shouldStopOnError(err) {
 | 
			
		||||
| 
						 | 
				
			
			@ -374,6 +245,7 @@ func expandSchema(target Schema, parentRefs []string, resolver *schemaLoader, ba
 | 
			
		|||
			target.OneOf[i] = *t
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if target.Not != nil {
 | 
			
		||||
		t, err := expandSchema(*target.Not, parentRefs, resolver, basePath)
 | 
			
		||||
		if resolver.shouldStopOnError(err) {
 | 
			
		||||
| 
						 | 
				
			
			@ -383,6 +255,7 @@ func expandSchema(target Schema, parentRefs []string, resolver *schemaLoader, ba
 | 
			
		|||
			*target.Not = *t
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for k := range target.Properties {
 | 
			
		||||
		t, err := expandSchema(target.Properties[k], parentRefs, resolver, basePath)
 | 
			
		||||
		if resolver.shouldStopOnError(err) {
 | 
			
		||||
| 
						 | 
				
			
			@ -392,6 +265,7 @@ func expandSchema(target Schema, parentRefs []string, resolver *schemaLoader, ba
 | 
			
		|||
			target.Properties[k] = *t
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if target.AdditionalProperties != nil && target.AdditionalProperties.Schema != nil {
 | 
			
		||||
		t, err := expandSchema(*target.AdditionalProperties.Schema, parentRefs, resolver, basePath)
 | 
			
		||||
		if resolver.shouldStopOnError(err) {
 | 
			
		||||
| 
						 | 
				
			
			@ -401,6 +275,7 @@ func expandSchema(target Schema, parentRefs []string, resolver *schemaLoader, ba
 | 
			
		|||
			*target.AdditionalProperties.Schema = *t
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for k := range target.PatternProperties {
 | 
			
		||||
		t, err := expandSchema(target.PatternProperties[k], parentRefs, resolver, basePath)
 | 
			
		||||
		if resolver.shouldStopOnError(err) {
 | 
			
		||||
| 
						 | 
				
			
			@ -410,6 +285,7 @@ func expandSchema(target Schema, parentRefs []string, resolver *schemaLoader, ba
 | 
			
		|||
			target.PatternProperties[k] = *t
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for k := range target.Dependencies {
 | 
			
		||||
		if target.Dependencies[k].Schema != nil {
 | 
			
		||||
			t, err := expandSchema(*target.Dependencies[k].Schema, parentRefs, resolver, basePath)
 | 
			
		||||
| 
						 | 
				
			
			@ -421,6 +297,7 @@ func expandSchema(target Schema, parentRefs []string, resolver *schemaLoader, ba
 | 
			
		|||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if target.AdditionalItems != nil && target.AdditionalItems.Schema != nil {
 | 
			
		||||
		t, err := expandSchema(*target.AdditionalItems.Schema, parentRefs, resolver, basePath)
 | 
			
		||||
		if resolver.shouldStopOnError(err) {
 | 
			
		||||
| 
						 | 
				
			
			@ -430,42 +307,73 @@ func expandSchema(target Schema, parentRefs []string, resolver *schemaLoader, ba
 | 
			
		|||
			*target.AdditionalItems.Schema = *t
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	for k := range target.Definitions {
 | 
			
		||||
		t, err := expandSchema(target.Definitions[k], parentRefs, resolver, basePath)
 | 
			
		||||
		if resolver.shouldStopOnError(err) {
 | 
			
		||||
			return &target, err
 | 
			
		||||
		}
 | 
			
		||||
		if t != nil {
 | 
			
		||||
			target.Definitions[k] = *t
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return &target, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func expandSchemaRef(target Schema, parentRefs []string, resolver *schemaLoader, basePath string) (*Schema, error) {
 | 
			
		||||
	// if a Ref is found, all sibling fields are skipped
 | 
			
		||||
	// Ref also changes the resolution scope of children expandSchema
 | 
			
		||||
 | 
			
		||||
	// here the resolution scope is changed because a $ref was encountered
 | 
			
		||||
	normalizedRef := normalizeFileRef(&target.Ref, basePath)
 | 
			
		||||
	normalizedBasePath := normalizedRef.RemoteURI()
 | 
			
		||||
 | 
			
		||||
	if resolver.isCircular(normalizedRef, basePath, parentRefs...) {
 | 
			
		||||
		// this means there is a cycle in the recursion tree: return the Ref
 | 
			
		||||
		// - circular refs cannot be expanded. We leave them as ref.
 | 
			
		||||
		// - denormalization means that a new local file ref is set relative to the original basePath
 | 
			
		||||
		debugLog("short circuit circular ref: basePath: %s, normalizedPath: %s, normalized ref: %s",
 | 
			
		||||
			basePath, normalizedBasePath, normalizedRef.String())
 | 
			
		||||
		if !resolver.options.AbsoluteCircularRef {
 | 
			
		||||
			target.Ref = *denormalizeFileRef(normalizedRef, normalizedBasePath, resolver.context.basePath)
 | 
			
		||||
		} else {
 | 
			
		||||
			target.Ref = *normalizedRef
 | 
			
		||||
		}
 | 
			
		||||
		return &target, nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var t *Schema
 | 
			
		||||
	err := resolver.Resolve(&target.Ref, &t, basePath)
 | 
			
		||||
	if resolver.shouldStopOnError(err) {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if t == nil {
 | 
			
		||||
		// guard for when continuing on error
 | 
			
		||||
		return &target, nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	parentRefs = append(parentRefs, normalizedRef.String())
 | 
			
		||||
	transitiveResolver := resolver.transitiveResolver(basePath, target.Ref)
 | 
			
		||||
 | 
			
		||||
	basePath = resolver.updateBasePath(transitiveResolver, normalizedBasePath)
 | 
			
		||||
 | 
			
		||||
	return expandSchema(*t, parentRefs, transitiveResolver, basePath)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func expandPathItem(pathItem *PathItem, resolver *schemaLoader, basePath string) error {
 | 
			
		||||
	if pathItem == nil {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	parentRefs := []string{}
 | 
			
		||||
	parentRefs := make([]string, 0, 10)
 | 
			
		||||
	if err := resolver.deref(pathItem, parentRefs, basePath); resolver.shouldStopOnError(err) {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if pathItem.Ref.String() != "" {
 | 
			
		||||
		transitiveResolver, err := resolver.transitiveResolver(basePath, pathItem.Ref)
 | 
			
		||||
		if transitiveResolver.shouldStopOnError(err) {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
		transitiveResolver := resolver.transitiveResolver(basePath, pathItem.Ref)
 | 
			
		||||
		basePath = transitiveResolver.updateBasePath(resolver, basePath)
 | 
			
		||||
		resolver = transitiveResolver
 | 
			
		||||
	}
 | 
			
		||||
	pathItem.Ref = Ref{}
 | 
			
		||||
 | 
			
		||||
	for idx := range pathItem.Parameters {
 | 
			
		||||
		if err := expandParameterOrResponse(&(pathItem.Parameters[idx]), resolver, basePath); resolver.shouldStopOnError(err) {
 | 
			
		||||
	pathItem.Ref = Ref{}
 | 
			
		||||
	for i := range pathItem.Parameters {
 | 
			
		||||
		if err := expandParameterOrResponse(&(pathItem.Parameters[i]), resolver, basePath); resolver.shouldStopOnError(err) {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ops := []*Operation{
 | 
			
		||||
		pathItem.Get,
 | 
			
		||||
		pathItem.Head,
 | 
			
		||||
| 
						 | 
				
			
			@ -480,6 +388,7 @@ func expandPathItem(pathItem *PathItem, resolver *schemaLoader, basePath string)
 | 
			
		|||
			return err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -496,42 +405,47 @@ func expandOperation(op *Operation, resolver *schemaLoader, basePath string) err
 | 
			
		|||
		op.Parameters[i] = param
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if op.Responses != nil {
 | 
			
		||||
		responses := op.Responses
 | 
			
		||||
		if err := expandParameterOrResponse(responses.Default, resolver, basePath); resolver.shouldStopOnError(err) {
 | 
			
		||||
	if op.Responses == nil {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	responses := op.Responses
 | 
			
		||||
	if err := expandParameterOrResponse(responses.Default, resolver, basePath); resolver.shouldStopOnError(err) {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for code := range responses.StatusCodeResponses {
 | 
			
		||||
		response := responses.StatusCodeResponses[code]
 | 
			
		||||
		if err := expandParameterOrResponse(&response, resolver, basePath); resolver.shouldStopOnError(err) {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
		for code := range responses.StatusCodeResponses {
 | 
			
		||||
			response := responses.StatusCodeResponses[code]
 | 
			
		||||
			if err := expandParameterOrResponse(&response, resolver, basePath); resolver.shouldStopOnError(err) {
 | 
			
		||||
				return err
 | 
			
		||||
			}
 | 
			
		||||
			responses.StatusCodeResponses[code] = response
 | 
			
		||||
		}
 | 
			
		||||
		responses.StatusCodeResponses[code] = response
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ExpandResponseWithRoot expands a response based on a root document, not a fetchable document
 | 
			
		||||
//
 | 
			
		||||
// Notice that it is impossible to reference a json schema in a different document other than root
 | 
			
		||||
// (use ExpandResponse to resolve external references).
 | 
			
		||||
//
 | 
			
		||||
// Setting the cache is optional and this parameter may safely be left to nil.
 | 
			
		||||
func ExpandResponseWithRoot(response *Response, root interface{}, cache ResolutionCache) error {
 | 
			
		||||
	cache = cacheOrDefault(cache)
 | 
			
		||||
	opts := &ExpandOptions{
 | 
			
		||||
		RelativeBase:    baseForRoot(root, cache),
 | 
			
		||||
		SkipSchemas:     false,
 | 
			
		||||
		ContinueOnError: false,
 | 
			
		||||
		// when no base path is specified, remaining $ref (circular) are rendered with an absolute path
 | 
			
		||||
		AbsoluteCircularRef: true,
 | 
			
		||||
	}
 | 
			
		||||
	resolver, err := defaultSchemaLoader(root, opts, nil, nil)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	resolver := defaultSchemaLoader(root, opts, cache, nil)
 | 
			
		||||
 | 
			
		||||
	return expandParameterOrResponse(response, resolver, opts.RelativeBase)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ExpandResponse expands a response based on a basepath
 | 
			
		||||
// This is the exported version of expandResponse
 | 
			
		||||
// all refs inside response will be resolved relative to basePath
 | 
			
		||||
//
 | 
			
		||||
// All refs inside response will be resolved relative to basePath
 | 
			
		||||
func ExpandResponse(response *Response, basePath string) error {
 | 
			
		||||
	var specBasePath string
 | 
			
		||||
	if basePath != "" {
 | 
			
		||||
| 
						 | 
				
			
			@ -540,27 +454,23 @@ func ExpandResponse(response *Response, basePath string) error {
 | 
			
		|||
	opts := &ExpandOptions{
 | 
			
		||||
		RelativeBase: specBasePath,
 | 
			
		||||
	}
 | 
			
		||||
	resolver, err := defaultSchemaLoader(nil, opts, nil, nil)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	resolver := defaultSchemaLoader(nil, opts, nil, nil)
 | 
			
		||||
 | 
			
		||||
	return expandParameterOrResponse(response, resolver, opts.RelativeBase)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ExpandParameterWithRoot expands a parameter based on a root document, not a fetchable document
 | 
			
		||||
// ExpandParameterWithRoot expands a parameter based on a root document, not a fetchable document.
 | 
			
		||||
//
 | 
			
		||||
// Notice that it is impossible to reference a json schema in a different document other than root
 | 
			
		||||
// (use ExpandParameter to resolve external references).
 | 
			
		||||
func ExpandParameterWithRoot(parameter *Parameter, root interface{}, cache ResolutionCache) error {
 | 
			
		||||
	cache = cacheOrDefault(cache)
 | 
			
		||||
	opts := &ExpandOptions{
 | 
			
		||||
		RelativeBase:    baseForRoot(root, cache),
 | 
			
		||||
		SkipSchemas:     false,
 | 
			
		||||
		ContinueOnError: false,
 | 
			
		||||
		// when no base path is specified, remaining $ref (circular) are rendered with an absolute path
 | 
			
		||||
		AbsoluteCircularRef: true,
 | 
			
		||||
	}
 | 
			
		||||
	resolver, err := defaultSchemaLoader(root, opts, nil, nil)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	resolver := defaultSchemaLoader(root, opts, cache, nil)
 | 
			
		||||
 | 
			
		||||
	return expandParameterOrResponse(parameter, resolver, opts.RelativeBase)
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -576,17 +486,17 @@ func ExpandParameter(parameter *Parameter, basePath string) error {
 | 
			
		|||
	opts := &ExpandOptions{
 | 
			
		||||
		RelativeBase: specBasePath,
 | 
			
		||||
	}
 | 
			
		||||
	resolver, err := defaultSchemaLoader(nil, opts, nil, nil)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	resolver := defaultSchemaLoader(nil, opts, nil, nil)
 | 
			
		||||
 | 
			
		||||
	return expandParameterOrResponse(parameter, resolver, opts.RelativeBase)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func getRefAndSchema(input interface{}) (*Ref, *Schema, error) {
 | 
			
		||||
	var ref *Ref
 | 
			
		||||
	var sch *Schema
 | 
			
		||||
	var (
 | 
			
		||||
		ref *Ref
 | 
			
		||||
		sch *Schema
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	switch refable := input.(type) {
 | 
			
		||||
	case *Parameter:
 | 
			
		||||
		if refable == nil {
 | 
			
		||||
| 
						 | 
				
			
			@ -601,8 +511,9 @@ func getRefAndSchema(input interface{}) (*Ref, *Schema, error) {
 | 
			
		|||
		ref = &refable.Ref
 | 
			
		||||
		sch = refable.Schema
 | 
			
		||||
	default:
 | 
			
		||||
		return nil, nil, fmt.Errorf("expand: unsupported type %T. Input should be of type *Parameter or *Response", input)
 | 
			
		||||
		return nil, nil, fmt.Errorf("unsupported type: %T: %w", input, ErrExpandUnsupportedType)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return ref, sch, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -611,41 +522,70 @@ func expandParameterOrResponse(input interface{}, resolver *schemaLoader, basePa
 | 
			
		|||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if ref == nil {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
	parentRefs := []string{}
 | 
			
		||||
	if err := resolver.deref(input, parentRefs, basePath); resolver.shouldStopOnError(err) {
 | 
			
		||||
 | 
			
		||||
	parentRefs := make([]string, 0, 10)
 | 
			
		||||
	if err = resolver.deref(input, parentRefs, basePath); resolver.shouldStopOnError(err) {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ref, sch, _ := getRefAndSchema(input)
 | 
			
		||||
	if ref.String() != "" {
 | 
			
		||||
		transitiveResolver, err := resolver.transitiveResolver(basePath, *ref)
 | 
			
		||||
		if transitiveResolver.shouldStopOnError(err) {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
		transitiveResolver := resolver.transitiveResolver(basePath, *ref)
 | 
			
		||||
		basePath = resolver.updateBasePath(transitiveResolver, basePath)
 | 
			
		||||
		resolver = transitiveResolver
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if sch != nil && sch.Ref.String() != "" {
 | 
			
		||||
		// schema expanded to a $ref in another root
 | 
			
		||||
		var ern error
 | 
			
		||||
		sch.Ref, ern = NewRef(normalizePaths(sch.Ref.String(), ref.RemoteURI()))
 | 
			
		||||
	if sch == nil {
 | 
			
		||||
		// nothing to be expanded
 | 
			
		||||
		if ref != nil {
 | 
			
		||||
			*ref = Ref{}
 | 
			
		||||
		}
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if sch.Ref.String() != "" {
 | 
			
		||||
		rebasedRef, ern := NewRef(normalizePaths(sch.Ref.String(), basePath))
 | 
			
		||||
		if ern != nil {
 | 
			
		||||
			return ern
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		switch {
 | 
			
		||||
		case resolver.isCircular(&rebasedRef, basePath, parentRefs...):
 | 
			
		||||
			// this is a circular $ref: stop expansion
 | 
			
		||||
			if !resolver.options.AbsoluteCircularRef {
 | 
			
		||||
				sch.Ref = *denormalizeFileRef(&rebasedRef, basePath, resolver.context.basePath)
 | 
			
		||||
			} else {
 | 
			
		||||
				sch.Ref = rebasedRef
 | 
			
		||||
			}
 | 
			
		||||
		case !resolver.options.SkipSchemas:
 | 
			
		||||
			// schema expanded to a $ref in another root
 | 
			
		||||
			sch.Ref = rebasedRef
 | 
			
		||||
		default:
 | 
			
		||||
			// skip schema expansion but rebase $ref to schema
 | 
			
		||||
			sch.Ref = *denormalizeFileRef(&rebasedRef, basePath, resolver.context.basePath)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if ref != nil {
 | 
			
		||||
		*ref = Ref{}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if !resolver.options.SkipSchemas && sch != nil {
 | 
			
		||||
	// expand schema
 | 
			
		||||
	if !resolver.options.SkipSchemas {
 | 
			
		||||
		s, err := expandSchema(*sch, parentRefs, resolver, basePath)
 | 
			
		||||
		if resolver.shouldStopOnError(err) {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
		if s == nil {
 | 
			
		||||
			// guard for when continuing on error
 | 
			
		||||
			return nil
 | 
			
		||||
		}
 | 
			
		||||
		*sch = *s
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										13
									
								
								vendor/github.com/go-openapi/spec/go.mod
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								vendor/github.com/go-openapi/spec/go.mod
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,12 +1,13 @@
 | 
			
		|||
module github.com/go-openapi/spec
 | 
			
		||||
 | 
			
		||||
require (
 | 
			
		||||
	github.com/go-openapi/jsonpointer v0.19.3
 | 
			
		||||
	github.com/go-openapi/jsonreference v0.19.2
 | 
			
		||||
	github.com/go-openapi/swag v0.19.5
 | 
			
		||||
	github.com/stretchr/testify v1.3.0
 | 
			
		||||
	golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297 // indirect
 | 
			
		||||
	gopkg.in/yaml.v2 v2.2.4
 | 
			
		||||
	github.com/go-openapi/jsonpointer v0.19.5
 | 
			
		||||
	github.com/go-openapi/jsonreference v0.19.5
 | 
			
		||||
	github.com/go-openapi/swag v0.19.12
 | 
			
		||||
	github.com/stretchr/testify v1.6.1
 | 
			
		||||
	golang.org/x/net v0.0.0-20201224014010-6772e930b67b // indirect
 | 
			
		||||
	golang.org/x/text v0.3.4 // indirect
 | 
			
		||||
	gopkg.in/yaml.v2 v2.4.0
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
go 1.13
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										47
									
								
								vendor/github.com/go-openapi/spec/go.sum
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										47
									
								
								vendor/github.com/go-openapi/spec/go.sum
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -2,48 +2,71 @@ github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tN
 | 
			
		|||
github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
 | 
			
		||||
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
 | 
			
		||||
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
 | 
			
		||||
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 | 
			
		||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 | 
			
		||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 | 
			
		||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 | 
			
		||||
github.com/go-openapi/jsonpointer v0.19.2 h1:A9+F4Dc/MCNB5jibxf6rRvOvR/iFgQdyNx9eIhnGqq0=
 | 
			
		||||
github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg=
 | 
			
		||||
github.com/go-openapi/jsonpointer v0.19.3 h1:gihV7YNZK1iK6Tgwwsxo2rJbD1GTbdm72325Bq8FI3w=
 | 
			
		||||
github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
 | 
			
		||||
github.com/go-openapi/jsonreference v0.19.2 h1:o20suLFB4Ri0tuzpWtyHlh7E7HnkqTNLq6aR6WVNS1w=
 | 
			
		||||
github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc=
 | 
			
		||||
github.com/go-openapi/swag v0.19.2 h1:jvO6bCMBEilGwMfHhrd61zIID4oIFdwb76V17SM88dE=
 | 
			
		||||
github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
 | 
			
		||||
github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY=
 | 
			
		||||
github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
 | 
			
		||||
github.com/go-openapi/jsonreference v0.19.5 h1:1WJP/wi4OjB4iV8KVbH73rQaoialJrqv8gitZLxGLtM=
 | 
			
		||||
github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg=
 | 
			
		||||
github.com/go-openapi/swag v0.19.5 h1:lTz6Ys4CmqqCQmZPBlbQENR1/GucA2bzYTE12Pw4tFY=
 | 
			
		||||
github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
 | 
			
		||||
github.com/go-openapi/swag v0.19.12 h1:Bc0bnY2c3AoF7Gc+IMIAQQsD8fLHjHpc19wXvYuayQI=
 | 
			
		||||
github.com/go-openapi/swag v0.19.12/go.mod h1:eFdyEBkTdoAf/9RXBvj4cr1nH7GD8Kzo5HTt47gr72M=
 | 
			
		||||
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
 | 
			
		||||
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
 | 
			
		||||
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
 | 
			
		||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
 | 
			
		||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
 | 
			
		||||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
 | 
			
		||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 | 
			
		||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
 | 
			
		||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
 | 
			
		||||
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63 h1:nTT4s92Dgz2HlrB2NaMgvlfqHH39OgMhA7z3PK7PGD4=
 | 
			
		||||
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
 | 
			
		||||
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e h1:hB2xlXdHp/pmPZq0y3QnmWAArdw9PqbmotexnWx/FU8=
 | 
			
		||||
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
 | 
			
		||||
github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA=
 | 
			
		||||
github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
 | 
			
		||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
 | 
			
		||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
 | 
			
		||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 | 
			
		||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 | 
			
		||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 | 
			
		||||
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
 | 
			
		||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
 | 
			
		||||
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
 | 
			
		||||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 | 
			
		||||
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980 h1:dfGZHvZk057jK2MCeWus/TowKpJ8y4AmooUzdBSR9GU=
 | 
			
		||||
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
			
		||||
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297 h1:k7pJ2yAPLPgbskkFdhRCsA77k2fySZ1zf2zCjvQCiIM=
 | 
			
		||||
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
			
		||||
golang.org/x/net v0.0.0-20201224014010-6772e930b67b h1:iFwSg7t5GZmB/Q5TjiEAsdoLDrdJRC1RiF2WhuV29Qw=
 | 
			
		||||
golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
 | 
			
		||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
			
		||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 | 
			
		||||
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
 | 
			
		||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 | 
			
		||||
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
 | 
			
		||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
 | 
			
		||||
golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
 | 
			
		||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 | 
			
		||||
golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc=
 | 
			
		||||
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 | 
			
		||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 | 
			
		||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 | 
			
		||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
 | 
			
		||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 | 
			
		||||
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
 | 
			
		||||
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 | 
			
		||||
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
 | 
			
		||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 | 
			
		||||
gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
 | 
			
		||||
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 | 
			
		||||
gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
 | 
			
		||||
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 | 
			
		||||
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
 | 
			
		||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
 | 
			
		||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
 | 
			
		||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 | 
			
		||||
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ=
 | 
			
		||||
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										6
									
								
								vendor/github.com/go-openapi/spec/header.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								vendor/github.com/go-openapi/spec/header.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -141,6 +141,12 @@ func (h *Header) AllowDuplicates() *Header {
 | 
			
		|||
	return h
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// WithValidations is a fluent method to set header validations
 | 
			
		||||
func (h *Header) WithValidations(val CommonValidations) *Header {
 | 
			
		||||
	h.SetValidations(SchemaValidations{CommonValidations: val})
 | 
			
		||||
	return h
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// MarshalJSON marshal this to JSON
 | 
			
		||||
func (h Header) MarshalJSON() ([]byte, error) {
 | 
			
		||||
	b1, err := json.Marshal(h.CommonValidations)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										22
									
								
								vendor/github.com/go-openapi/spec/items.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										22
									
								
								vendor/github.com/go-openapi/spec/items.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -53,22 +53,6 @@ func (s *SimpleSchema) ItemsTypeName() string {
 | 
			
		|||
	return s.Items.TypeName()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CommonValidations describe common JSON-schema validations
 | 
			
		||||
type CommonValidations struct {
 | 
			
		||||
	Maximum          *float64      `json:"maximum,omitempty"`
 | 
			
		||||
	ExclusiveMaximum bool          `json:"exclusiveMaximum,omitempty"`
 | 
			
		||||
	Minimum          *float64      `json:"minimum,omitempty"`
 | 
			
		||||
	ExclusiveMinimum bool          `json:"exclusiveMinimum,omitempty"`
 | 
			
		||||
	MaxLength        *int64        `json:"maxLength,omitempty"`
 | 
			
		||||
	MinLength        *int64        `json:"minLength,omitempty"`
 | 
			
		||||
	Pattern          string        `json:"pattern,omitempty"`
 | 
			
		||||
	MaxItems         *int64        `json:"maxItems,omitempty"`
 | 
			
		||||
	MinItems         *int64        `json:"minItems,omitempty"`
 | 
			
		||||
	UniqueItems      bool          `json:"uniqueItems,omitempty"`
 | 
			
		||||
	MultipleOf       *float64      `json:"multipleOf,omitempty"`
 | 
			
		||||
	Enum             []interface{} `json:"enum,omitempty"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Items a limited subset of JSON-Schema's items object.
 | 
			
		||||
// It is used by parameter definitions that are not located in "body".
 | 
			
		||||
//
 | 
			
		||||
| 
						 | 
				
			
			@ -180,6 +164,12 @@ func (i *Items) AllowDuplicates() *Items {
 | 
			
		|||
	return i
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// WithValidations is a fluent method to set Items validations
 | 
			
		||||
func (i *Items) WithValidations(val CommonValidations) *Items {
 | 
			
		||||
	i.SetValidations(SchemaValidations{CommonValidations: val})
 | 
			
		||||
	return i
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UnmarshalJSON hydrates this items instance with the data from JSON
 | 
			
		||||
func (i *Items) UnmarshalJSON(data []byte) error {
 | 
			
		||||
	var validations CommonValidations
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										3
									
								
								vendor/github.com/go-openapi/spec/license.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/github.com/go-openapi/spec/license.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -28,11 +28,13 @@ type License struct {
 | 
			
		|||
	VendorExtensible
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// LicenseProps holds the properties of a License object
 | 
			
		||||
type LicenseProps struct {
 | 
			
		||||
	Name string `json:"name,omitempty"`
 | 
			
		||||
	URL  string `json:"url,omitempty"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UnmarshalJSON hydrates License from json
 | 
			
		||||
func (l *License) UnmarshalJSON(data []byte) error {
 | 
			
		||||
	if err := json.Unmarshal(data, &l.LicenseProps); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
| 
						 | 
				
			
			@ -40,6 +42,7 @@ func (l *License) UnmarshalJSON(data []byte) error {
 | 
			
		|||
	return json.Unmarshal(data, &l.VendorExtensible)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// MarshalJSON produces License as json
 | 
			
		||||
func (l License) MarshalJSON() ([]byte, error) {
 | 
			
		||||
	b1, err := json.Marshal(l.LicenseProps)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										41
									
								
								vendor/github.com/go-openapi/spec/normalizer.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										41
									
								
								vendor/github.com/go-openapi/spec/normalizer.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -20,9 +20,12 @@ import (
 | 
			
		|||
	"os"
 | 
			
		||||
	"path"
 | 
			
		||||
	"path/filepath"
 | 
			
		||||
	"runtime"
 | 
			
		||||
	"strings"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const windowsOS = "windows"
 | 
			
		||||
 | 
			
		||||
// normalize absolute path for cache.
 | 
			
		||||
// on Windows, drive letters should be converted to lower as scheme in net/url.URL
 | 
			
		||||
func normalizeAbsPath(path string) string {
 | 
			
		||||
| 
						 | 
				
			
			@ -71,27 +74,51 @@ func normalizePaths(refPath, base string) string {
 | 
			
		|||
	return baseURL.String()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// isRoot is a temporary hack to discern windows file ref for ref.IsRoot().
 | 
			
		||||
// TODO: a more thorough change is needed to handle windows file refs.
 | 
			
		||||
func isRoot(ref *Ref) bool {
 | 
			
		||||
	if runtime.GOOS != windowsOS {
 | 
			
		||||
		return ref.IsRoot()
 | 
			
		||||
	}
 | 
			
		||||
	return !filepath.IsAbs(ref.String())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// isAbs is a temporary hack to discern windows file ref for url IsAbs().
 | 
			
		||||
// TODO: a more thorough change is needed to handle windows file refs.
 | 
			
		||||
func isAbs(u *url.URL) bool {
 | 
			
		||||
	if runtime.GOOS != windowsOS {
 | 
			
		||||
		return u.IsAbs()
 | 
			
		||||
	}
 | 
			
		||||
	if len(u.Scheme) <= 1 {
 | 
			
		||||
		// drive letter got caught as URI scheme
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
	return u.IsAbs()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// denormalizePaths returns to simplest notation on file $ref,
 | 
			
		||||
// i.e. strips the absolute path and sets a path relative to the base path.
 | 
			
		||||
//
 | 
			
		||||
// This is currently used when we rewrite ref after a circular ref has been detected
 | 
			
		||||
func denormalizeFileRef(ref *Ref, relativeBase, originalRelativeBase string) *Ref {
 | 
			
		||||
	debugLog("denormalizeFileRef for: %s", ref.String())
 | 
			
		||||
	debugLog("denormalizeFileRef for: %s (relative: %s, original: %s)", ref.String(),
 | 
			
		||||
		relativeBase, originalRelativeBase)
 | 
			
		||||
 | 
			
		||||
	if ref.String() == "" || ref.IsRoot() || ref.HasFragmentOnly {
 | 
			
		||||
	// log.Printf("denormalize: %s, IsRoot: %t,HasFragmentOnly: %t, HasFullURL: %t", ref.String(), ref.IsRoot(), ref.HasFragmentOnly, ref.HasFullURL)
 | 
			
		||||
	if ref.String() == "" || isRoot(ref) || ref.HasFragmentOnly {
 | 
			
		||||
		return ref
 | 
			
		||||
	}
 | 
			
		||||
	// strip relativeBase from URI
 | 
			
		||||
	relativeBaseURL, _ := url.Parse(relativeBase)
 | 
			
		||||
	relativeBaseURL.Fragment = ""
 | 
			
		||||
 | 
			
		||||
	if relativeBaseURL.IsAbs() && strings.HasPrefix(ref.String(), relativeBase) {
 | 
			
		||||
	if isAbs(relativeBaseURL) && strings.HasPrefix(ref.String(), relativeBase) {
 | 
			
		||||
		// this should work for absolute URI (e.g. http://...): we have an exact match, just trim prefix
 | 
			
		||||
		r, _ := NewRef(strings.TrimPrefix(ref.String(), relativeBase))
 | 
			
		||||
		return &r
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if relativeBaseURL.IsAbs() {
 | 
			
		||||
	if isAbs(relativeBaseURL) {
 | 
			
		||||
		// other absolute URL get unchanged (i.e. with a non-empty scheme)
 | 
			
		||||
		return ref
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -111,7 +138,7 @@ func denormalizeFileRef(ref *Ref, relativeBase, originalRelativeBase string) *Re
 | 
			
		|||
	//   my normalized ref points to: /mypath/item.json#/target
 | 
			
		||||
	//   expected result: item.json#/target
 | 
			
		||||
	parts := strings.Split(ref.String(), "#")
 | 
			
		||||
	relativePath, err := filepath.Rel(path.Dir(originalRelativeBaseURL.String()), parts[0])
 | 
			
		||||
	relativePath, err := filepath.Rel(filepath.Dir(originalRelativeBaseURL.String()), parts[0])
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		// there is no common ancestor (e.g. different drives on windows)
 | 
			
		||||
		// leaves the ref unchanged
 | 
			
		||||
| 
						 | 
				
			
			@ -132,8 +159,6 @@ func normalizeFileRef(ref *Ref, relativeBase string) *Ref {
 | 
			
		|||
		return &r
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	debugLog("normalizing %s against %s", ref.String(), relativeBase)
 | 
			
		||||
 | 
			
		||||
	s := normalizePaths(ref.String(), relativeBase)
 | 
			
		||||
	r, _ := NewRef(s)
 | 
			
		||||
	return &r
 | 
			
		||||
| 
						 | 
				
			
			@ -148,5 +173,5 @@ func absPath(fname string) (string, error) {
 | 
			
		|||
		return fname, nil
 | 
			
		||||
	}
 | 
			
		||||
	wd, err := os.Getwd()
 | 
			
		||||
	return filepath.Join(wd, fname), err
 | 
			
		||||
	return normalizeAbsPath(filepath.Join(wd, fname)), err
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										1
									
								
								vendor/github.com/go-openapi/spec/operation.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/go-openapi/spec/operation.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -25,7 +25,6 @@ import (
 | 
			
		|||
)
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	//gob.Register(map[string][]interface{}{})
 | 
			
		||||
	gob.Register(map[string]interface{}{})
 | 
			
		||||
	gob.Register([]interface{}{})
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										11
									
								
								vendor/github.com/go-openapi/spec/parameter.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								vendor/github.com/go-openapi/spec/parameter.go
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -39,8 +39,7 @@ func PathParam(name string) *Parameter {
 | 
			
		|||
 | 
			
		||||
// BodyParam creates a body parameter
 | 
			
		||||
func BodyParam(name string, schema *Schema) *Parameter {
 | 
			
		||||
	return &Parameter{ParamProps: ParamProps{Name: name, In: "body", Schema: schema},
 | 
			
		||||
		SimpleSchema: SimpleSchema{Type: "object"}}
 | 
			
		||||
	return &Parameter{ParamProps: ParamProps{Name: name, In: "body", Schema: schema}}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// FormDataParam creates a body parameter
 | 
			
		||||
| 
						 | 
				
			
			@ -58,7 +57,7 @@ func FileParam(name string) *Parameter {
 | 
			
		|||
func SimpleArrayParam(name, tpe, fmt string) *Parameter {
 | 
			
		||||
	return &Parameter{ParamProps: ParamProps{Name: name},
 | 
			
		||||
		SimpleSchema: SimpleSchema{Type: jsonArray, CollectionFormat: "csv",
 | 
			
		||||
			Items: &Items{SimpleSchema: SimpleSchema{Type: "string", Format: fmt}}}}
 | 
			
		||||
			Items: &Items{SimpleSchema: SimpleSchema{Type: tpe, Format: fmt}}}}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ParamRef creates a parameter that's a json reference
 | 
			
		||||
| 
						 | 
				
			
			@ -278,6 +277,12 @@ func (p *Parameter) AllowDuplicates() *Parameter {
 | 
			
		|||
	return p
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// WithValidations is a fluent method to set parameter validations
 | 
			
		||||
func (p *Parameter) WithValidations(val CommonValidations) *Parameter {
 | 
			
		||||
	p.SetValidations(SchemaValidations{CommonValidations: val})
 | 
			
		||||
	return p
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UnmarshalJSON hydrates this items instance with the data from JSON
 | 
			
		||||
func (p *Parameter) UnmarshalJSON(data []byte) error {
 | 
			
		||||
	if err := json.Unmarshal(data, &p.CommonValidations); err != nil {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
Some files were not shown because too many files have changed in this diff Show more
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue