mirror of
				https://github.com/k3s-io/kubernetes.git
				synced 2025-10-31 05:40:42 +00:00 
			
		
		
		
	Update vendor package github.com/coreos/...
This commit is contained in:
		
							
								
								
									
										202
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										202
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,202 @@ | ||||
| # Created by .ignore support plugin (hsz.mobi) | ||||
| ### Go template | ||||
| # Compiled Object files, Static and Dynamic libs (Shared Objects) | ||||
| *.o | ||||
| *.a | ||||
| *.so | ||||
|  | ||||
| # Folders | ||||
| _obj | ||||
| _test | ||||
|  | ||||
| # Architecture specific extensions/prefixes | ||||
| *.[568vq] | ||||
| [568vq].out | ||||
|  | ||||
| *.cgo1.go | ||||
| *.cgo2.c | ||||
| _cgo_defun.c | ||||
| _cgo_gotypes.go | ||||
| _cgo_export.* | ||||
|  | ||||
| _testmain.go | ||||
|  | ||||
| *.exe | ||||
| *.test | ||||
| *.prof | ||||
| ### Windows template | ||||
| # Windows image file caches | ||||
| Thumbs.db | ||||
| ehthumbs.db | ||||
|  | ||||
| # Folder config file | ||||
| Desktop.ini | ||||
|  | ||||
| # Recycle Bin used on file shares | ||||
| $RECYCLE.BIN/ | ||||
|  | ||||
| # Windows Installer files | ||||
| *.cab | ||||
| *.msi | ||||
| *.msm | ||||
| *.msp | ||||
|  | ||||
| # Windows shortcuts | ||||
| *.lnk | ||||
| ### Kate template | ||||
| # Swap Files # | ||||
| .*.kate-swp | ||||
| .swp.* | ||||
| ### SublimeText template | ||||
| # cache files for sublime text | ||||
| *.tmlanguage.cache | ||||
| *.tmPreferences.cache | ||||
| *.stTheme.cache | ||||
|  | ||||
| # workspace files are user-specific | ||||
| *.sublime-workspace | ||||
|  | ||||
| # project files should be checked into the repository, unless a significant | ||||
| # proportion of contributors will probably not be using SublimeText | ||||
| # *.sublime-project | ||||
|  | ||||
| # sftp configuration file | ||||
| sftp-config.json | ||||
| ### Linux template | ||||
| *~ | ||||
|  | ||||
| # temporary files which can be created if a process still has a handle open of a deleted file | ||||
| .fuse_hidden* | ||||
|  | ||||
| # KDE directory preferences | ||||
| .directory | ||||
|  | ||||
| # Linux trash folder which might appear on any partition or disk | ||||
| .Trash-* | ||||
| ### JetBrains template | ||||
| # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm | ||||
| # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 | ||||
|  | ||||
| # User-specific stuff: | ||||
| .idea | ||||
| .idea/tasks.xml | ||||
| .idea/dictionaries | ||||
| .idea/vcs.xml | ||||
| .idea/jsLibraryMappings.xml | ||||
|  | ||||
| # Sensitive or high-churn files: | ||||
| .idea/dataSources.ids | ||||
| .idea/dataSources.xml | ||||
| .idea/dataSources.local.xml | ||||
| .idea/sqlDataSources.xml | ||||
| .idea/dynamic.xml | ||||
| .idea/uiDesigner.xml | ||||
|  | ||||
| # Gradle: | ||||
| .idea/gradle.xml | ||||
| .idea/libraries | ||||
|  | ||||
| # Mongo Explorer plugin: | ||||
| .idea/mongoSettings.xml | ||||
|  | ||||
| ## File-based project format: | ||||
| *.iws | ||||
|  | ||||
| ## Plugin-specific files: | ||||
|  | ||||
| # IntelliJ | ||||
| /out/ | ||||
|  | ||||
| # mpeltonen/sbt-idea plugin | ||||
| .idea_modules/ | ||||
|  | ||||
| # JIRA plugin | ||||
| atlassian-ide-plugin.xml | ||||
|  | ||||
| # Crashlytics plugin (for Android Studio and IntelliJ) | ||||
| com_crashlytics_export_strings.xml | ||||
| crashlytics.properties | ||||
| crashlytics-build.properties | ||||
| fabric.properties | ||||
| ### Xcode template | ||||
| # Xcode | ||||
| # | ||||
| # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore | ||||
|  | ||||
| ## Build generated | ||||
| build/ | ||||
| DerivedData/ | ||||
|  | ||||
| ## Various settings | ||||
| *.pbxuser | ||||
| !default.pbxuser | ||||
| *.mode1v3 | ||||
| !default.mode1v3 | ||||
| *.mode2v3 | ||||
| !default.mode2v3 | ||||
| *.perspectivev3 | ||||
| !default.perspectivev3 | ||||
| xcuserdata/ | ||||
|  | ||||
| ## Other | ||||
| *.moved-aside | ||||
| *.xccheckout | ||||
| *.xcscmblueprint | ||||
| ### Eclipse template | ||||
|  | ||||
| .metadata | ||||
| bin/ | ||||
| tmp/ | ||||
| *.tmp | ||||
| *.bak | ||||
| *.swp | ||||
| *~.nib | ||||
| local.properties | ||||
| .settings/ | ||||
| .loadpath | ||||
| .recommenders | ||||
|  | ||||
| # Eclipse Core | ||||
| .project | ||||
|  | ||||
| # External tool builders | ||||
| .externalToolBuilders/ | ||||
|  | ||||
| # Locally stored "Eclipse launch configurations" | ||||
| *.launch | ||||
|  | ||||
| # PyDev specific (Python IDE for Eclipse) | ||||
| *.pydevproject | ||||
|  | ||||
| # CDT-specific (C/C++ Development Tooling) | ||||
| .cproject | ||||
|  | ||||
| # JDT-specific (Eclipse Java Development Tools) | ||||
| .classpath | ||||
|  | ||||
| # Java annotation processor (APT) | ||||
| .factorypath | ||||
|  | ||||
| # PDT-specific (PHP Development Tools) | ||||
| .buildpath | ||||
|  | ||||
| # sbteclipse plugin | ||||
| .target | ||||
|  | ||||
| # Tern plugin | ||||
| .tern-project | ||||
|  | ||||
| # TeXlipse plugin | ||||
| .texlipse | ||||
|  | ||||
| # STS (Spring Tool Suite) | ||||
| .springBeans | ||||
|  | ||||
| # Code Recommenders | ||||
| .recommenders/ | ||||
|  | ||||
|  | ||||
| coverage.txt | ||||
|  | ||||
| #vendor | ||||
| vendor/ | ||||
							
								
								
									
										22
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| sudo: false | ||||
| language: go | ||||
| go: | ||||
|   - 1.8.x | ||||
| env: | ||||
|   - DEP_VERSION="0.3.2" | ||||
|  | ||||
| before_install: | ||||
|   # Download the binary to bin folder in $GOPATH | ||||
|   - curl -L -s https://github.com/golang/dep/releases/download/v${DEP_VERSION}/dep-linux-amd64 -o $GOPATH/bin/dep | ||||
|   # Make the binary executable | ||||
|   - chmod +x $GOPATH/bin/dep | ||||
|  | ||||
| install: | ||||
|   - dep ensure | ||||
|  | ||||
| script: | ||||
|  - make checkdocs | ||||
|  - make test | ||||
|   | ||||
| after_success: | ||||
|   - bash <(curl -s https://codecov.io/bash) | ||||
							
								
								
									
										31
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/BUILD
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/BUILD
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,31 @@ | ||||
| load("@io_bazel_rules_go//go:def.bzl", "go_library") | ||||
|  | ||||
| go_library( | ||||
|     name = "go_default_library", | ||||
|     srcs = [ | ||||
|         "chain.go", | ||||
|         "doc.go", | ||||
|         "wrappers.go", | ||||
|     ], | ||||
|     importmap = "k8s.io/kubernetes/vendor/github.com/grpc-ecosystem/go-grpc-middleware", | ||||
|     importpath = "github.com/grpc-ecosystem/go-grpc-middleware", | ||||
|     visibility = ["//visibility:public"], | ||||
|     deps = [ | ||||
|         "//vendor/golang.org/x/net/context:go_default_library", | ||||
|         "//vendor/google.golang.org/grpc:go_default_library", | ||||
|     ], | ||||
| ) | ||||
|  | ||||
| filegroup( | ||||
|     name = "package-srcs", | ||||
|     srcs = glob(["**"]), | ||||
|     tags = ["automanaged"], | ||||
|     visibility = ["//visibility:private"], | ||||
| ) | ||||
|  | ||||
| filegroup( | ||||
|     name = "all-srcs", | ||||
|     srcs = [":package-srcs"], | ||||
|     tags = ["automanaged"], | ||||
|     visibility = ["//visibility:public"], | ||||
| ) | ||||
							
								
								
									
										30
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/CHANGELOG.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/CHANGELOG.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | ||||
| # Changelog | ||||
| All notable changes to this project will be documented in this file. | ||||
|  | ||||
| The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) | ||||
| and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). | ||||
|  | ||||
| Types of changes: | ||||
| - `Added` for new features. | ||||
| - `Changed` for changes in existing functionality. | ||||
| - `Deprecated` for soon-to-be removed features. | ||||
| - `Removed` for now removed features. | ||||
| - `Fixed` for any bug fixes. | ||||
| - `Security` in case of vulnerabilities. | ||||
|  | ||||
| ## [Unreleased] | ||||
| ### Added | ||||
| - This CHANGELOG file to keep track of changes. | ||||
|  | ||||
| ## 1.0.0 - 2018-05-08 | ||||
| ### Added | ||||
| - grpc_auth  | ||||
| - grpc_ctxtags | ||||
| - grpc_zap | ||||
| - grpc_logrus | ||||
| - grpc_opentracing | ||||
| - grpc_retry | ||||
| - grpc_validator | ||||
| - grpc_recovery | ||||
|  | ||||
| [Unreleased]: https://github.com/grpc-ecosystem/go-grpc-middleware/compare/v1.0.0...HEAD  | ||||
							
								
								
									
										20
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/CONTRIBUTING.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/CONTRIBUTING.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| # Contributing | ||||
|  | ||||
| We would love to have people submit pull requests and help make `grpc-ecosystem/go-grpc-middleware` even better 👍. | ||||
|  | ||||
| Fork, then clone the repo: | ||||
|  | ||||
| ```bash | ||||
| git clone git@github.com:your-username/go-grpc-middleware.git | ||||
| ```     | ||||
|  | ||||
| Before checking in please run the following: | ||||
|  | ||||
| ```bash | ||||
| make all | ||||
| ``` | ||||
|  | ||||
| This will `vet`, `fmt`, regenerate documentation and run all tests. | ||||
|  | ||||
|  | ||||
| Push to your fork and open a pull request. | ||||
							
								
								
									
										166
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/DOC.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										166
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/DOC.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,166 @@ | ||||
| # grpc_middleware | ||||
| `import "github.com/grpc-ecosystem/go-grpc-middleware"` | ||||
|  | ||||
| * [Overview](#pkg-overview) | ||||
| * [Imported Packages](#pkg-imports) | ||||
| * [Index](#pkg-index) | ||||
|  | ||||
| ## <a name="pkg-overview">Overview</a> | ||||
| `grpc_middleware` is a collection of gRPC middleware packages: interceptors, helpers and tools. | ||||
|  | ||||
| ### Middleware | ||||
| gRPC is a fantastic RPC middleware, which sees a lot of adoption in the Golang world. However, the | ||||
| upstream gRPC codebase is relatively bare bones. | ||||
|  | ||||
| This package, and most of its child packages provides commonly needed middleware for gRPC: | ||||
| client-side interceptors for retires, server-side interceptors for input validation and auth, | ||||
| functions for chaining said interceptors, metadata convenience methods and more. | ||||
|  | ||||
| ### Chaining | ||||
| By default, gRPC doesn't allow one to have more than one interceptor either on the client nor on | ||||
| the server side. `grpc_middleware` provides convenient chaining methods | ||||
|  | ||||
| Simple way of turning a multiple interceptors into a single interceptor. Here's an example for | ||||
| server chaining: | ||||
|  | ||||
| 	myServer := grpc.NewServer( | ||||
| 	    grpc.StreamInterceptor(grpc_middleware.ChainStreamServer(loggingStream, monitoringStream, authStream)), | ||||
| 	    grpc.UnaryInterceptor(grpc_middleware.ChainUnaryServer(loggingUnary, monitoringUnary, authUnary), | ||||
| 	) | ||||
|  | ||||
| These interceptors will be executed from left to right: logging, monitoring and auth. | ||||
|  | ||||
| Here's an example for client side chaining: | ||||
|  | ||||
| 	clientConn, err = grpc.Dial( | ||||
| 	    address, | ||||
| 	        grpc.WithUnaryInterceptor(grpc_middleware.ChainUnaryClient(monitoringClientUnary, retryUnary)), | ||||
| 	        grpc.WithStreamInterceptor(grpc_middleware.ChainStreamClient(monitoringClientStream, retryStream)), | ||||
| 	) | ||||
| 	client = pb_testproto.NewTestServiceClient(clientConn) | ||||
| 	resp, err := client.PingEmpty(s.ctx, &myservice.Request{Msg: "hello"}) | ||||
|  | ||||
| These interceptors will be executed from left to right: monitoring and then retry logic. | ||||
|  | ||||
| The retry interceptor will call every interceptor that follows it whenever when a retry happens. | ||||
|  | ||||
| ### Writing Your Own | ||||
| Implementing your own interceptor is pretty trivial: there are interfaces for that. But the interesting | ||||
| bit exposing common data to handlers (and other middleware), similarly to HTTP Middleware design. | ||||
| For example, you may want to pass the identity of the caller from the auth interceptor all the way | ||||
| to the handling function. | ||||
|  | ||||
| For example, a client side interceptor example for auth looks like: | ||||
|  | ||||
| 	func FakeAuthUnaryInterceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { | ||||
| 	   newCtx := context.WithValue(ctx, "user_id", "john@example.com") | ||||
| 	   return handler(newCtx, req) | ||||
| 	} | ||||
|  | ||||
| Unfortunately, it's not as easy for streaming RPCs. These have the `context.Context` embedded within | ||||
| the `grpc.ServerStream` object. To pass values through context, a wrapper (`WrappedServerStream`) is | ||||
| needed. For example: | ||||
|  | ||||
| 	func FakeAuthStreamingInterceptor(srv interface{}, stream grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error { | ||||
| 	   newStream := grpc_middleware.WrapServerStream(stream) | ||||
| 	   newStream.WrappedContext = context.WithValue(ctx, "user_id", "john@example.com") | ||||
| 	   return handler(srv, stream) | ||||
| 	} | ||||
|  | ||||
| ## <a name="pkg-imports">Imported Packages</a> | ||||
|  | ||||
| - [golang.org/x/net/context](https://godoc.org/golang.org/x/net/context) | ||||
| - [google.golang.org/grpc](https://godoc.org/google.golang.org/grpc) | ||||
|  | ||||
| ## <a name="pkg-index">Index</a> | ||||
| * [func ChainStreamClient(interceptors ...grpc.StreamClientInterceptor) grpc.StreamClientInterceptor](#ChainStreamClient) | ||||
| * [func ChainStreamServer(interceptors ...grpc.StreamServerInterceptor) grpc.StreamServerInterceptor](#ChainStreamServer) | ||||
| * [func ChainUnaryClient(interceptors ...grpc.UnaryClientInterceptor) grpc.UnaryClientInterceptor](#ChainUnaryClient) | ||||
| * [func ChainUnaryServer(interceptors ...grpc.UnaryServerInterceptor) grpc.UnaryServerInterceptor](#ChainUnaryServer) | ||||
| * [func WithStreamServerChain(interceptors ...grpc.StreamServerInterceptor) grpc.ServerOption](#WithStreamServerChain) | ||||
| * [func WithUnaryServerChain(interceptors ...grpc.UnaryServerInterceptor) grpc.ServerOption](#WithUnaryServerChain) | ||||
| * [type WrappedServerStream](#WrappedServerStream) | ||||
|   * [func WrapServerStream(stream grpc.ServerStream) \*WrappedServerStream](#WrapServerStream) | ||||
|   * [func (w \*WrappedServerStream) Context() context.Context](#WrappedServerStream.Context) | ||||
|  | ||||
| #### <a name="pkg-files">Package files</a> | ||||
| [chain.go](./chain.go) [doc.go](./doc.go) [wrappers.go](./wrappers.go)  | ||||
|  | ||||
| ## <a name="ChainStreamClient">func</a> [ChainStreamClient](./chain.go#L136) | ||||
| ``` go | ||||
| func ChainStreamClient(interceptors ...grpc.StreamClientInterceptor) grpc.StreamClientInterceptor | ||||
| ``` | ||||
| ChainStreamClient creates a single interceptor out of a chain of many interceptors. | ||||
|  | ||||
| Execution is done in left-to-right order, including passing of context. | ||||
| For example ChainStreamClient(one, two, three) will execute one before two before three. | ||||
|  | ||||
| ## <a name="ChainStreamServer">func</a> [ChainStreamServer](./chain.go#L58) | ||||
| ``` go | ||||
| func ChainStreamServer(interceptors ...grpc.StreamServerInterceptor) grpc.StreamServerInterceptor | ||||
| ``` | ||||
| ChainStreamServer creates a single interceptor out of a chain of many interceptors. | ||||
|  | ||||
| Execution is done in left-to-right order, including passing of context. | ||||
| For example ChainUnaryServer(one, two, three) will execute one before two before three. | ||||
| If you want to pass context between interceptors, use WrapServerStream. | ||||
|  | ||||
| ## <a name="ChainUnaryClient">func</a> [ChainUnaryClient](./chain.go#L97) | ||||
| ``` go | ||||
| func ChainUnaryClient(interceptors ...grpc.UnaryClientInterceptor) grpc.UnaryClientInterceptor | ||||
| ``` | ||||
| ChainUnaryClient creates a single interceptor out of a chain of many interceptors. | ||||
|  | ||||
| Execution is done in left-to-right order, including passing of context. | ||||
| For example ChainUnaryClient(one, two, three) will execute one before two before three. | ||||
|  | ||||
| ## <a name="ChainUnaryServer">func</a> [ChainUnaryServer](./chain.go#L18) | ||||
| ``` go | ||||
| func ChainUnaryServer(interceptors ...grpc.UnaryServerInterceptor) grpc.UnaryServerInterceptor | ||||
| ``` | ||||
| ChainUnaryServer creates a single interceptor out of a chain of many interceptors. | ||||
|  | ||||
| Execution is done in left-to-right order, including passing of context. | ||||
| For example ChainUnaryServer(one, two, three) will execute one before two before three, and three | ||||
| will see context changes of one and two. | ||||
|  | ||||
| ## <a name="WithStreamServerChain">func</a> [WithStreamServerChain](./chain.go#L181) | ||||
| ``` go | ||||
| func WithStreamServerChain(interceptors ...grpc.StreamServerInterceptor) grpc.ServerOption | ||||
| ``` | ||||
| WithStreamServerChain is a grpc.Server config option that accepts multiple stream interceptors. | ||||
| Basically syntactic sugar. | ||||
|  | ||||
| ## <a name="WithUnaryServerChain">func</a> [WithUnaryServerChain](./chain.go#L175) | ||||
| ``` go | ||||
| func WithUnaryServerChain(interceptors ...grpc.UnaryServerInterceptor) grpc.ServerOption | ||||
| ``` | ||||
| Chain creates a single interceptor out of a chain of many interceptors. | ||||
|  | ||||
| WithUnaryServerChain is a grpc.Server config option that accepts multiple unary interceptors. | ||||
| Basically syntactic sugar. | ||||
|  | ||||
| ## <a name="WrappedServerStream">type</a> [WrappedServerStream](./wrappers.go#L12-L16) | ||||
| ``` go | ||||
| type WrappedServerStream struct { | ||||
|     grpc.ServerStream | ||||
|     // WrappedContext is the wrapper's own Context. You can assign it. | ||||
|     WrappedContext context.Context | ||||
| } | ||||
| ``` | ||||
| WrappedServerStream is a thin wrapper around grpc.ServerStream that allows modifying context. | ||||
|  | ||||
| ### <a name="WrapServerStream">func</a> [WrapServerStream](./wrappers.go#L24) | ||||
| ``` go | ||||
| func WrapServerStream(stream grpc.ServerStream) *WrappedServerStream | ||||
| ``` | ||||
| WrapServerStream returns a ServerStream that has the ability to overwrite context. | ||||
|  | ||||
| ### <a name="WrappedServerStream.Context">func</a> (\*WrappedServerStream) [Context](./wrappers.go#L19) | ||||
| ``` go | ||||
| func (w *WrappedServerStream) Context() context.Context | ||||
| ``` | ||||
| Context returns the wrapper's WrappedContext, overwriting the nested grpc.ServerStream.Context() | ||||
|  | ||||
| - - - | ||||
| Generated by [godoc2ghmd](https://github.com/GandalfUK/godoc2ghmd) | ||||
							
								
								
									
										123
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/Gopkg.lock
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										123
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/Gopkg.lock
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,123 @@ | ||||
| # This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. | ||||
|  | ||||
|  | ||||
| [[projects]] | ||||
|   name = "cloud.google.com/go" | ||||
|   packages = ["compute/metadata"] | ||||
|   revision = "2d3a6656c17a60b0815b7e06ab0be04eacb6e613" | ||||
|   version = "v0.16.0" | ||||
|  | ||||
| [[projects]] | ||||
|   name = "github.com/davecgh/go-spew" | ||||
|   packages = ["spew"] | ||||
|   revision = "346938d642f2ec3594ed81d874461961cd0faa76" | ||||
|   version = "v1.1.0" | ||||
|  | ||||
| [[projects]] | ||||
|   name = "github.com/gogo/protobuf" | ||||
|   packages = ["gogoproto","proto","protoc-gen-gogo/descriptor"] | ||||
|   revision = "342cbe0a04158f6dcb03ca0079991a51a4248c02" | ||||
|   version = "v0.5" | ||||
|  | ||||
| [[projects]] | ||||
|   branch = "master" | ||||
|   name = "github.com/golang/protobuf" | ||||
|   packages = ["jsonpb","proto","ptypes","ptypes/any","ptypes/duration","ptypes/struct","ptypes/timestamp"] | ||||
|   revision = "1e59b77b52bf8e4b449a57e6f79f21226d571845" | ||||
|  | ||||
| [[projects]] | ||||
|   name = "github.com/opentracing/opentracing-go" | ||||
|   packages = [".","ext","log","mocktracer"] | ||||
|   revision = "1949ddbfd147afd4d964a9f00b24eb291e0e7c38" | ||||
|   version = "v1.0.2" | ||||
|  | ||||
| [[projects]] | ||||
|   name = "github.com/pmezard/go-difflib" | ||||
|   packages = ["difflib"] | ||||
|   revision = "792786c7400a136282c1664665ae0a8db921c6c2" | ||||
|   version = "v1.0.0" | ||||
|  | ||||
| [[projects]] | ||||
|   name = "github.com/sirupsen/logrus" | ||||
|   packages = ["."] | ||||
|   revision = "f006c2ac4710855cf0f916dd6b77acf6b048dc6e" | ||||
|   version = "v1.0.3" | ||||
|  | ||||
| [[projects]] | ||||
|   name = "github.com/stretchr/testify" | ||||
|   packages = ["assert","require","suite"] | ||||
|   revision = "69483b4bd14f5845b5a1e55bca19e954e827f1d0" | ||||
|   version = "v1.1.4" | ||||
|  | ||||
| [[projects]] | ||||
|   name = "go.uber.org/atomic" | ||||
|   packages = ["."] | ||||
|   revision = "8474b86a5a6f79c443ce4b2992817ff32cf208b8" | ||||
|   version = "v1.3.1" | ||||
|  | ||||
| [[projects]] | ||||
|   name = "go.uber.org/multierr" | ||||
|   packages = ["."] | ||||
|   revision = "3c4937480c32f4c13a875a1829af76c98ca3d40a" | ||||
|   version = "v1.1.0" | ||||
|  | ||||
| [[projects]] | ||||
|   name = "go.uber.org/zap" | ||||
|   packages = [".","buffer","internal/bufferpool","internal/color","internal/exit","zapcore"] | ||||
|   revision = "35aad584952c3e7020db7b839f6b102de6271f89" | ||||
|   version = "v1.7.1" | ||||
|  | ||||
| [[projects]] | ||||
|   branch = "master" | ||||
|   name = "golang.org/x/crypto" | ||||
|   packages = ["ssh/terminal"] | ||||
|   revision = "94eea52f7b742c7cbe0b03b22f0c4c8631ece122" | ||||
|  | ||||
| [[projects]] | ||||
|   branch = "master" | ||||
|   name = "golang.org/x/net" | ||||
|   packages = ["context","context/ctxhttp","http2","http2/hpack","idna","internal/timeseries","lex/httplex","trace"] | ||||
|   revision = "a8b9294777976932365dabb6640cf1468d95c70f" | ||||
|  | ||||
| [[projects]] | ||||
|   branch = "master" | ||||
|   name = "golang.org/x/oauth2" | ||||
|   packages = [".","google","internal","jws","jwt"] | ||||
|   revision = "f95fa95eaa936d9d87489b15d1d18b97c1ba9c28" | ||||
|  | ||||
| [[projects]] | ||||
|   branch = "master" | ||||
|   name = "golang.org/x/sys" | ||||
|   packages = ["unix","windows"] | ||||
|   revision = "13fcbd661c8ececa8807a29b48407d674b1d8ed8" | ||||
|  | ||||
| [[projects]] | ||||
|   branch = "master" | ||||
|   name = "golang.org/x/text" | ||||
|   packages = ["collate","collate/build","internal/colltab","internal/gen","internal/tag","internal/triegen","internal/ucd","language","secure/bidirule","transform","unicode/bidi","unicode/cldr","unicode/norm","unicode/rangetable"] | ||||
|   revision = "75cc3cad82b5f47d3fb229ddda8c5167da14f294" | ||||
|  | ||||
| [[projects]] | ||||
|   name = "google.golang.org/appengine" | ||||
|   packages = [".","internal","internal/app_identity","internal/base","internal/datastore","internal/log","internal/modules","internal/remote_api","internal/urlfetch","urlfetch"] | ||||
|   revision = "150dc57a1b433e64154302bdc40b6bb8aefa313a" | ||||
|   version = "v1.0.0" | ||||
|  | ||||
| [[projects]] | ||||
|   branch = "master" | ||||
|   name = "google.golang.org/genproto" | ||||
|   packages = ["googleapis/rpc/status"] | ||||
|   revision = "7f0da29060c682909f650ad8ed4e515bd74fa12a" | ||||
|  | ||||
| [[projects]] | ||||
|   name = "google.golang.org/grpc" | ||||
|   packages = [".","balancer","balancer/roundrobin","codes","connectivity","credentials","credentials/oauth","encoding","grpclb/grpc_lb_v1/messages","grpclog","internal","keepalive","metadata","naming","peer","resolver","resolver/dns","resolver/passthrough","stats","status","tap","transport"] | ||||
|   revision = "5a9f7b402fe85096d2e1d0383435ee1876e863d0" | ||||
|   version = "v1.8.0" | ||||
|  | ||||
| [solve-meta] | ||||
|   analyzer-name = "dep" | ||||
|   analyzer-version = 1 | ||||
|   inputs-digest = "b24c6670412eb0bc44ed1db77fecc52333f8725f3e3272bdc568f5683a63031f" | ||||
|   solver-name = "gps-cdcl" | ||||
|   solver-version = 1 | ||||
							
								
								
									
										35
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/Gopkg.toml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/Gopkg.toml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | ||||
| [[constraint]] | ||||
|   name = "github.com/gogo/protobuf" | ||||
|   version = "0.5.0" | ||||
|  | ||||
| [[constraint]] | ||||
|   branch = "master" | ||||
|   name = "github.com/golang/protobuf" | ||||
|  | ||||
| [[constraint]] | ||||
|   name = "github.com/opentracing/opentracing-go" | ||||
|   version = "1.0.2" | ||||
|  | ||||
| [[constraint]] | ||||
|   name = "github.com/sirupsen/logrus" | ||||
|   version = "1.0.3" | ||||
|  | ||||
| [[constraint]] | ||||
|   name = "github.com/stretchr/testify" | ||||
|   version = "1.1.4" | ||||
|  | ||||
| [[constraint]] | ||||
|   name = "go.uber.org/zap" | ||||
|   version = "1.7.1" | ||||
|  | ||||
| [[constraint]] | ||||
|   branch = "master" | ||||
|   name = "golang.org/x/net" | ||||
|  | ||||
| [[constraint]] | ||||
|   branch = "master" | ||||
|   name = "golang.org/x/oauth2" | ||||
|  | ||||
| [[constraint]] | ||||
|   name = "google.golang.org/grpc" | ||||
|   version = "1.8.0" | ||||
							
								
								
									
										201
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										201
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,201 @@ | ||||
|                  Apache License | ||||
|                            Version 2.0, January 2004 | ||||
|                         http://www.apache.org/licenses/ | ||||
|  | ||||
|    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION | ||||
|  | ||||
|    1. Definitions. | ||||
|  | ||||
|       "License" shall mean the terms and conditions for use, reproduction, | ||||
|       and distribution as defined by Sections 1 through 9 of this document. | ||||
|  | ||||
|       "Licensor" shall mean the copyright owner or entity authorized by | ||||
|       the copyright owner that is granting the License. | ||||
|  | ||||
|       "Legal Entity" shall mean the union of the acting entity and all | ||||
|       other entities that control, are controlled by, or are under common | ||||
|       control with that entity. For the purposes of this definition, | ||||
|       "control" means (i) the power, direct or indirect, to cause the | ||||
|       direction or management of such entity, whether by contract or | ||||
|       otherwise, or (ii) ownership of fifty percent (50%) or more of the | ||||
|       outstanding shares, or (iii) beneficial ownership of such entity. | ||||
|  | ||||
|       "You" (or "Your") shall mean an individual or Legal Entity | ||||
|       exercising permissions granted by this License. | ||||
|  | ||||
|       "Source" form shall mean the preferred form for making modifications, | ||||
|       including but not limited to software source code, documentation | ||||
|       source, and configuration files. | ||||
|  | ||||
|       "Object" form shall mean any form resulting from mechanical | ||||
|       transformation or translation of a Source form, including but | ||||
|       not limited to compiled object code, generated documentation, | ||||
|       and conversions to other media types. | ||||
|  | ||||
|       "Work" shall mean the work of authorship, whether in Source or | ||||
|       Object form, made available under the License, as indicated by a | ||||
|       copyright notice that is included in or attached to the work | ||||
|       (an example is provided in the Appendix below). | ||||
|  | ||||
|       "Derivative Works" shall mean any work, whether in Source or Object | ||||
|       form, that is based on (or derived from) the Work and for which the | ||||
|       editorial revisions, annotations, elaborations, or other modifications | ||||
|       represent, as a whole, an original work of authorship. For the purposes | ||||
|       of this License, Derivative Works shall not include works that remain | ||||
|       separable from, or merely link (or bind by name) to the interfaces of, | ||||
|       the Work and Derivative Works thereof. | ||||
|  | ||||
|       "Contribution" shall mean any work of authorship, including | ||||
|       the original version of the Work and any modifications or additions | ||||
|       to that Work or Derivative Works thereof, that is intentionally | ||||
|       submitted to Licensor for inclusion in the Work by the copyright owner | ||||
|       or by an individual or Legal Entity authorized to submit on behalf of | ||||
|       the copyright owner. For the purposes of this definition, "submitted" | ||||
|       means any form of electronic, verbal, or written communication sent | ||||
|       to the Licensor or its representatives, including but not limited to | ||||
|       communication on electronic mailing lists, source code control systems, | ||||
|       and issue tracking systems that are managed by, or on behalf of, the | ||||
|       Licensor for the purpose of discussing and improving the Work, but | ||||
|       excluding communication that is conspicuously marked or otherwise | ||||
|       designated in writing by the copyright owner as "Not a Contribution." | ||||
|  | ||||
|       "Contributor" shall mean Licensor and any individual or Legal Entity | ||||
|       on behalf of whom a Contribution has been received by Licensor and | ||||
|       subsequently incorporated within the Work. | ||||
|  | ||||
|    2. Grant of Copyright License. Subject to the terms and conditions of | ||||
|       this License, each Contributor hereby grants to You a perpetual, | ||||
|       worldwide, non-exclusive, no-charge, royalty-free, irrevocable | ||||
|       copyright license to reproduce, prepare Derivative Works of, | ||||
|       publicly display, publicly perform, sublicense, and distribute the | ||||
|       Work and such Derivative Works in Source or Object form. | ||||
|  | ||||
|    3. Grant of Patent License. Subject to the terms and conditions of | ||||
|       this License, each Contributor hereby grants to You a perpetual, | ||||
|       worldwide, non-exclusive, no-charge, royalty-free, irrevocable | ||||
|       (except as stated in this section) patent license to make, have made, | ||||
|       use, offer to sell, sell, import, and otherwise transfer the Work, | ||||
|       where such license applies only to those patent claims licensable | ||||
|       by such Contributor that are necessarily infringed by their | ||||
|       Contribution(s) alone or by combination of their Contribution(s) | ||||
|       with the Work to which such Contribution(s) was submitted. If You | ||||
|       institute patent litigation against any entity (including a | ||||
|       cross-claim or counterclaim in a lawsuit) alleging that the Work | ||||
|       or a Contribution incorporated within the Work constitutes direct | ||||
|       or contributory patent infringement, then any patent licenses | ||||
|       granted to You under this License for that Work shall terminate | ||||
|       as of the date such litigation is filed. | ||||
|  | ||||
|    4. Redistribution. You may reproduce and distribute copies of the | ||||
|       Work or Derivative Works thereof in any medium, with or without | ||||
|       modifications, and in Source or Object form, provided that You | ||||
|       meet the following conditions: | ||||
|  | ||||
|       (a) You must give any other recipients of the Work or | ||||
|           Derivative Works a copy of this License; and | ||||
|  | ||||
|       (b) You must cause any modified files to carry prominent notices | ||||
|           stating that You changed the files; and | ||||
|  | ||||
|       (c) You must retain, in the Source form of any Derivative Works | ||||
|           that You distribute, all copyright, patent, trademark, and | ||||
|           attribution notices from the Source form of the Work, | ||||
|           excluding those notices that do not pertain to any part of | ||||
|           the Derivative Works; and | ||||
|  | ||||
|       (d) If the Work includes a "NOTICE" text file as part of its | ||||
|           distribution, then any Derivative Works that You distribute must | ||||
|           include a readable copy of the attribution notices contained | ||||
|           within such NOTICE file, excluding those notices that do not | ||||
|           pertain to any part of the Derivative Works, in at least one | ||||
|           of the following places: within a NOTICE text file distributed | ||||
|           as part of the Derivative Works; within the Source form or | ||||
|           documentation, if provided along with the Derivative Works; or, | ||||
|           within a display generated by the Derivative Works, if and | ||||
|           wherever such third-party notices normally appear. The contents | ||||
|           of the NOTICE file are for informational purposes only and | ||||
|           do not modify the License. You may add Your own attribution | ||||
|           notices within Derivative Works that You distribute, alongside | ||||
|           or as an addendum to the NOTICE text from the Work, provided | ||||
|           that such additional attribution notices cannot be construed | ||||
|           as modifying the License. | ||||
|  | ||||
|       You may add Your own copyright statement to Your modifications and | ||||
|       may provide additional or different license terms and conditions | ||||
|       for use, reproduction, or distribution of Your modifications, or | ||||
|       for any such Derivative Works as a whole, provided Your use, | ||||
|       reproduction, and distribution of the Work otherwise complies with | ||||
|       the conditions stated in this License. | ||||
|  | ||||
|    5. Submission of Contributions. Unless You explicitly state otherwise, | ||||
|       any Contribution intentionally submitted for inclusion in the Work | ||||
|       by You to the Licensor shall be under the terms and conditions of | ||||
|       this License, without any additional terms or conditions. | ||||
|       Notwithstanding the above, nothing herein shall supersede or modify | ||||
|       the terms of any separate license agreement you may have executed | ||||
|       with Licensor regarding such Contributions. | ||||
|  | ||||
|    6. Trademarks. This License does not grant permission to use the trade | ||||
|       names, trademarks, service marks, or product names of the Licensor, | ||||
|       except as required for reasonable and customary use in describing the | ||||
|       origin of the Work and reproducing the content of the NOTICE file. | ||||
|  | ||||
|    7. Disclaimer of Warranty. Unless required by applicable law or | ||||
|       agreed to in writing, Licensor provides the Work (and each | ||||
|       Contributor provides its Contributions) on an "AS IS" BASIS, | ||||
|       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or | ||||
|       implied, including, without limitation, any warranties or conditions | ||||
|       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A | ||||
|       PARTICULAR PURPOSE. You are solely responsible for determining the | ||||
|       appropriateness of using or redistributing the Work and assume any | ||||
|       risks associated with Your exercise of permissions under this License. | ||||
|  | ||||
|    8. Limitation of Liability. In no event and under no legal theory, | ||||
|       whether in tort (including negligence), contract, or otherwise, | ||||
|       unless required by applicable law (such as deliberate and grossly | ||||
|       negligent acts) or agreed to in writing, shall any Contributor be | ||||
|       liable to You for damages, including any direct, indirect, special, | ||||
|       incidental, or consequential damages of any character arising as a | ||||
|       result of this License or out of the use or inability to use the | ||||
|       Work (including but not limited to damages for loss of goodwill, | ||||
|       work stoppage, computer failure or malfunction, or any and all | ||||
|       other commercial damages or losses), even if such Contributor | ||||
|       has been advised of the possibility of such damages. | ||||
|  | ||||
|    9. Accepting Warranty or Additional Liability. While redistributing | ||||
|       the Work or Derivative Works thereof, You may choose to offer, | ||||
|       and charge a fee for, acceptance of support, warranty, indemnity, | ||||
|       or other liability obligations and/or rights consistent with this | ||||
|       License. However, in accepting such obligations, You may act only | ||||
|       on Your own behalf and on Your sole responsibility, not on behalf | ||||
|       of any other Contributor, and only if You agree to indemnify, | ||||
|       defend, and hold each Contributor harmless for any liability | ||||
|       incurred by, or claims asserted against, such Contributor by reason | ||||
|       of your accepting any such warranty or additional liability. | ||||
|  | ||||
|    END OF TERMS AND CONDITIONS | ||||
|  | ||||
|    APPENDIX: How to apply the Apache License to your work. | ||||
|  | ||||
|       To apply the Apache License to your work, attach the following | ||||
|       boilerplate notice, with the fields enclosed by brackets "[]" | ||||
|       replaced with your own identifying information. (Don't include | ||||
|       the brackets!)  The text should be enclosed in the appropriate | ||||
|       comment syntax for the file format. We also recommend that a | ||||
|       file or class name and description of purpose be included on the | ||||
|       same "printed page" as the copyright notice for easier | ||||
|       identification within third-party archives. | ||||
|  | ||||
|    Copyright [yyyy] [name of copyright owner] | ||||
|  | ||||
|    Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|    you may not use this file except in compliance with the License. | ||||
|    You may obtain a copy of the License at | ||||
|  | ||||
|        http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  | ||||
|    Unless required by applicable law or agreed to in writing, software | ||||
|    distributed under the License is distributed on an "AS IS" BASIS, | ||||
|    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|    See the License for the specific language governing permissions and | ||||
|    limitations under the License. | ||||
							
								
								
									
										86
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,86 @@ | ||||
| # Go gRPC Middleware | ||||
|  | ||||
| [](https://travis-ci.org/grpc-ecosystem/go-grpc-middleware) | ||||
| [](https://goreportcard.com/report/github.com/grpc-ecosystem/go-grpc-middleware) | ||||
| [](https://godoc.org/github.com/grpc-ecosystem/go-grpc-middleware) | ||||
| [](https://sourcegraph.com/github.com/grpc-ecosystem/go-grpc-middleware/?badge) | ||||
| [](https://codecov.io/gh/grpc-ecosystem/go-grpc-middleware) | ||||
| [](LICENSE) | ||||
| [](#status) | ||||
| [](https://join.slack.com/t/improbable-eng/shared_invite/enQtMzQ1ODcyMzQ5MjM4LWY5ZWZmNGM2ODc5MmViNmQ3ZTA3ZTY3NzQwOTBlMTkzZmIxZTIxODk0OWU3YjZhNWVlNDU3MDlkZGViZjhkMjc) | ||||
|  | ||||
| [gRPC Go](https://github.com/grpc/grpc-go) Middleware: interceptors, helpers, utilities. | ||||
|  | ||||
| **Important** The repo recently moved to `github.com/grpc-ecosystem/go-grpc-middleware`, please update your import paths. | ||||
|  | ||||
| ## Middleware | ||||
|  | ||||
| [gRPC Go](https://github.com/grpc/grpc-go) recently acquired support for | ||||
| Interceptors, i.e. [middleware](https://medium.com/@matryer/writing-middleware-in-golang-and-how-go-makes-it-so-much-fun-4375c1246e81#.gv7tdlghs)  | ||||
| that is executed either on the gRPC Server before the request is passed onto the user's application logic, or on the gRPC client either around the user call. It is a perfect way to implement | ||||
| common patterns: auth, logging, message, validation, retries or monitoring. | ||||
|  | ||||
| These are generic building blocks that make it easy to build multiple microservices easily. | ||||
| The purpose of this repository is to act as a go-to point for such reusable functionality. It contains | ||||
| some of them itself, but also will link to useful external repos. | ||||
|  | ||||
| `grpc_middleware` itself provides support for chaining interceptors. See [Documentation](DOC.md), but here's an example: | ||||
|  | ||||
| ```go | ||||
| import "github.com/grpc-ecosystem/go-grpc-middleware" | ||||
|  | ||||
| myServer := grpc.NewServer( | ||||
|     grpc.StreamInterceptor(grpc_middleware.ChainStreamServer( | ||||
|         grpc_ctxtags.StreamServerInterceptor(), | ||||
|         grpc_opentracing.StreamServerInterceptor(), | ||||
|         grpc_prometheus.StreamServerInterceptor, | ||||
|         grpc_zap.StreamServerInterceptor(zapLogger), | ||||
|         grpc_auth.StreamServerInterceptor(myAuthFunction), | ||||
|         grpc_recovery.StreamServerInterceptor(), | ||||
|     )), | ||||
|     grpc.UnaryInterceptor(grpc_middleware.ChainUnaryServer( | ||||
|         grpc_ctxtags.UnaryServerInterceptor(), | ||||
|         grpc_opentracing.UnaryServerInterceptor(), | ||||
|         grpc_prometheus.UnaryServerInterceptor, | ||||
|         grpc_zap.UnaryServerInterceptor(zapLogger), | ||||
|         grpc_auth.UnaryServerInterceptor(myAuthFunction), | ||||
|         grpc_recovery.UnaryServerInterceptor(), | ||||
|     )), | ||||
| ) | ||||
| ``` | ||||
|  | ||||
| ## Interceptors | ||||
|  | ||||
| *Please send a PR to add new interceptors or middleware to this list* | ||||
|  | ||||
| #### Auth | ||||
|    * [`grpc_auth`](auth) - a customizable (via `AuthFunc`) piece of auth middleware  | ||||
|  | ||||
| #### Logging | ||||
|    * [`grpc_ctxtags`](tags/) - a library that adds a `Tag` map to context, with data populated from request body | ||||
|    * [`grpc_zap`](logging/zap/) - integration of [zap](https://github.com/uber-go/zap) logging library into gRPC handlers. | ||||
|    * [`grpc_logrus`](logging/logrus/) - integration of [logrus](https://github.com/sirupsen/logrus) logging library into gRPC handlers. | ||||
|  | ||||
|  | ||||
| #### Monitoring | ||||
|    * [`grpc_prometheus`⚡](https://github.com/grpc-ecosystem/go-grpc-prometheus) - Prometheus client-side and server-side monitoring middleware | ||||
|    * [`otgrpc`⚡](https://github.com/grpc-ecosystem/grpc-opentracing/tree/master/go/otgrpc) - [OpenTracing](http://opentracing.io/) client-side and server-side interceptors | ||||
|    * [`grpc_opentracing`](tracing/opentracing) - [OpenTracing](http://opentracing.io/) client-side and server-side interceptors with support for streaming and handler-returned tags | ||||
|  | ||||
| #### Client | ||||
|    * [`grpc_retry`](retry/) - a generic gRPC response code retry mechanism, client-side middleware | ||||
|  | ||||
| #### Server | ||||
|    * [`grpc_validator`](validator/) - codegen inbound message validation from `.proto` options | ||||
|    * [`grpc_recovery`](recovery/) - turn panics into gRPC errors | ||||
|  | ||||
|  | ||||
| ## Status | ||||
|  | ||||
| This code has been running in *production* since May 2016 as the basis of the gRPC micro services stack at [Improbable](https://improbable.io). | ||||
|  | ||||
| Additional tooling will be added, and contributions are welcome. | ||||
|  | ||||
| ## License | ||||
|  | ||||
| `go-grpc-middleware` is released under the Apache 2.0 license. See the [LICENSE](LICENSE) file for details. | ||||
							
								
								
									
										183
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/chain.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										183
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/chain.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,183 @@ | ||||
| // Copyright 2016 Michal Witkowski. All Rights Reserved. | ||||
| // See LICENSE for licensing terms. | ||||
|  | ||||
| // gRPC Server Interceptor chaining middleware. | ||||
|  | ||||
| package grpc_middleware | ||||
|  | ||||
| import ( | ||||
| 	"golang.org/x/net/context" | ||||
| 	"google.golang.org/grpc" | ||||
| ) | ||||
|  | ||||
| // ChainUnaryServer creates a single interceptor out of a chain of many interceptors. | ||||
| // | ||||
| // Execution is done in left-to-right order, including passing of context. | ||||
| // For example ChainUnaryServer(one, two, three) will execute one before two before three, and three | ||||
| // will see context changes of one and two. | ||||
| func ChainUnaryServer(interceptors ...grpc.UnaryServerInterceptor) grpc.UnaryServerInterceptor { | ||||
| 	n := len(interceptors) | ||||
|  | ||||
| 	if n > 1 { | ||||
| 		lastI := n - 1 | ||||
| 		return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { | ||||
| 			var ( | ||||
| 				chainHandler grpc.UnaryHandler | ||||
| 				curI         int | ||||
| 			) | ||||
|  | ||||
| 			chainHandler = func(currentCtx context.Context, currentReq interface{}) (interface{}, error) { | ||||
| 				if curI == lastI { | ||||
| 					return handler(currentCtx, currentReq) | ||||
| 				} | ||||
| 				curI++ | ||||
| 				resp, err := interceptors[curI](currentCtx, currentReq, info, chainHandler) | ||||
| 				curI-- | ||||
| 				return resp, err | ||||
| 			} | ||||
|  | ||||
| 			return interceptors[0](ctx, req, info, chainHandler) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if n == 1 { | ||||
| 		return interceptors[0] | ||||
| 	} | ||||
|  | ||||
| 	// n == 0; Dummy interceptor maintained for backward compatibility to avoid returning nil. | ||||
| 	return func(ctx context.Context, req interface{}, _ *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { | ||||
| 		return handler(ctx, req) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // ChainStreamServer creates a single interceptor out of a chain of many interceptors. | ||||
| // | ||||
| // Execution is done in left-to-right order, including passing of context. | ||||
| // For example ChainUnaryServer(one, two, three) will execute one before two before three. | ||||
| // If you want to pass context between interceptors, use WrapServerStream. | ||||
| func ChainStreamServer(interceptors ...grpc.StreamServerInterceptor) grpc.StreamServerInterceptor { | ||||
| 	n := len(interceptors) | ||||
|  | ||||
| 	if n > 1 { | ||||
| 		lastI := n - 1 | ||||
| 		return func(srv interface{}, stream grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error { | ||||
| 			var ( | ||||
| 				chainHandler grpc.StreamHandler | ||||
| 				curI         int | ||||
| 			) | ||||
|  | ||||
| 			chainHandler = func(currentSrv interface{}, currentStream grpc.ServerStream) error { | ||||
| 				if curI == lastI { | ||||
| 					return handler(currentSrv, currentStream) | ||||
| 				} | ||||
| 				curI++ | ||||
| 				err := interceptors[curI](currentSrv, currentStream, info, chainHandler) | ||||
| 				curI-- | ||||
| 				return err | ||||
| 			} | ||||
|  | ||||
| 			return interceptors[0](srv, stream, info, chainHandler) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if n == 1 { | ||||
| 		return interceptors[0] | ||||
| 	} | ||||
|  | ||||
| 	// n == 0; Dummy interceptor maintained for backward compatibility to avoid returning nil. | ||||
| 	return func(srv interface{}, stream grpc.ServerStream, _ *grpc.StreamServerInfo, handler grpc.StreamHandler) error { | ||||
| 		return handler(srv, stream) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // ChainUnaryClient creates a single interceptor out of a chain of many interceptors. | ||||
| // | ||||
| // Execution is done in left-to-right order, including passing of context. | ||||
| // For example ChainUnaryClient(one, two, three) will execute one before two before three. | ||||
| func ChainUnaryClient(interceptors ...grpc.UnaryClientInterceptor) grpc.UnaryClientInterceptor { | ||||
| 	n := len(interceptors) | ||||
|  | ||||
| 	if n > 1 { | ||||
| 		lastI := n - 1 | ||||
| 		return func(ctx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error { | ||||
| 			var ( | ||||
| 				chainHandler grpc.UnaryInvoker | ||||
| 				curI         int | ||||
| 			) | ||||
|  | ||||
| 			chainHandler = func(currentCtx context.Context, currentMethod string, currentReq, currentRepl interface{}, currentConn *grpc.ClientConn, currentOpts ...grpc.CallOption) error { | ||||
| 				if curI == lastI { | ||||
| 					return invoker(currentCtx, currentMethod, currentReq, currentRepl, currentConn, currentOpts...) | ||||
| 				} | ||||
| 				curI++ | ||||
| 				err := interceptors[curI](currentCtx, currentMethod, currentReq, currentRepl, currentConn, chainHandler, currentOpts...) | ||||
| 				curI-- | ||||
| 				return err | ||||
| 			} | ||||
|  | ||||
| 			return interceptors[0](ctx, method, req, reply, cc, chainHandler, opts...) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if n == 1 { | ||||
| 		return interceptors[0] | ||||
| 	} | ||||
|  | ||||
| 	// n == 0; Dummy interceptor maintained for backward compatibility to avoid returning nil. | ||||
| 	return func(ctx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error { | ||||
| 		return invoker(ctx, method, req, reply, cc, opts...) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // ChainStreamClient creates a single interceptor out of a chain of many interceptors. | ||||
| // | ||||
| // Execution is done in left-to-right order, including passing of context. | ||||
| // For example ChainStreamClient(one, two, three) will execute one before two before three. | ||||
| func ChainStreamClient(interceptors ...grpc.StreamClientInterceptor) grpc.StreamClientInterceptor { | ||||
| 	n := len(interceptors) | ||||
|  | ||||
| 	if n > 1 { | ||||
| 		lastI := n - 1 | ||||
| 		return func(ctx context.Context, desc *grpc.StreamDesc, cc *grpc.ClientConn, method string, streamer grpc.Streamer, opts ...grpc.CallOption) (grpc.ClientStream, error) { | ||||
| 			var ( | ||||
| 				chainHandler grpc.Streamer | ||||
| 				curI         int | ||||
| 			) | ||||
|  | ||||
| 			chainHandler = func(currentCtx context.Context, currentDesc *grpc.StreamDesc, currentConn *grpc.ClientConn, currentMethod string, currentOpts ...grpc.CallOption) (grpc.ClientStream, error) { | ||||
| 				if curI == lastI { | ||||
| 					return streamer(currentCtx, currentDesc, currentConn, currentMethod, currentOpts...) | ||||
| 				} | ||||
| 				curI++ | ||||
| 				stream, err := interceptors[curI](currentCtx, currentDesc, currentConn, currentMethod, chainHandler, currentOpts...) | ||||
| 				curI-- | ||||
| 				return stream, err | ||||
| 			} | ||||
|  | ||||
| 			return interceptors[0](ctx, desc, cc, method, chainHandler, opts...) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if n == 1 { | ||||
| 		return interceptors[0] | ||||
| 	} | ||||
|  | ||||
| 	// n == 0; Dummy interceptor maintained for backward compatibility to avoid returning nil. | ||||
| 	return func(ctx context.Context, desc *grpc.StreamDesc, cc *grpc.ClientConn, method string, streamer grpc.Streamer, opts ...grpc.CallOption) (grpc.ClientStream, error) { | ||||
| 		return streamer(ctx, desc, cc, method, opts...) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // Chain creates a single interceptor out of a chain of many interceptors. | ||||
| // | ||||
| // WithUnaryServerChain is a grpc.Server config option that accepts multiple unary interceptors. | ||||
| // Basically syntactic sugar. | ||||
| func WithUnaryServerChain(interceptors ...grpc.UnaryServerInterceptor) grpc.ServerOption { | ||||
| 	return grpc.UnaryInterceptor(ChainUnaryServer(interceptors...)) | ||||
| } | ||||
|  | ||||
| // WithStreamServerChain is a grpc.Server config option that accepts multiple stream interceptors. | ||||
| // Basically syntactic sugar. | ||||
| func WithStreamServerChain(interceptors ...grpc.StreamServerInterceptor) grpc.ServerOption { | ||||
| 	return grpc.StreamInterceptor(ChainStreamServer(interceptors...)) | ||||
| } | ||||
							
								
								
									
										69
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/doc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/doc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,69 @@ | ||||
| // Copyright 2016 Michal Witkowski. All Rights Reserved. | ||||
| // See LICENSE for licensing terms. | ||||
|  | ||||
| /* | ||||
| `grpc_middleware` is a collection of gRPC middleware packages: interceptors, helpers and tools. | ||||
|  | ||||
| Middleware | ||||
|  | ||||
| gRPC is a fantastic RPC middleware, which sees a lot of adoption in the Golang world. However, the | ||||
| upstream gRPC codebase is relatively bare bones. | ||||
|  | ||||
| This package, and most of its child packages provides commonly needed middleware for gRPC: | ||||
| client-side interceptors for retires, server-side interceptors for input validation and auth, | ||||
| functions for chaining said interceptors, metadata convenience methods and more. | ||||
|  | ||||
| Chaining | ||||
|  | ||||
| By default, gRPC doesn't allow one to have more than one interceptor either on the client nor on | ||||
| the server side. `grpc_middleware` provides convenient chaining methods | ||||
|  | ||||
| Simple way of turning a multiple interceptors into a single interceptor. Here's an example for | ||||
| server chaining: | ||||
|  | ||||
| 	myServer := grpc.NewServer( | ||||
| 	    grpc.StreamInterceptor(grpc_middleware.ChainStreamServer(loggingStream, monitoringStream, authStream)), | ||||
| 	    grpc.UnaryInterceptor(grpc_middleware.ChainUnaryServer(loggingUnary, monitoringUnary, authUnary), | ||||
| 	) | ||||
|  | ||||
| These interceptors will be executed from left to right: logging, monitoring and auth. | ||||
|  | ||||
| Here's an example for client side chaining: | ||||
|  | ||||
| 	clientConn, err = grpc.Dial( | ||||
| 	    address, | ||||
| 	        grpc.WithUnaryInterceptor(grpc_middleware.ChainUnaryClient(monitoringClientUnary, retryUnary)), | ||||
| 	        grpc.WithStreamInterceptor(grpc_middleware.ChainStreamClient(monitoringClientStream, retryStream)), | ||||
| 	) | ||||
| 	client = pb_testproto.NewTestServiceClient(clientConn) | ||||
| 	resp, err := client.PingEmpty(s.ctx, &myservice.Request{Msg: "hello"}) | ||||
|  | ||||
| These interceptors will be executed from left to right: monitoring and then retry logic. | ||||
|  | ||||
| The retry interceptor will call every interceptor that follows it whenever when a retry happens. | ||||
|  | ||||
| Writing Your Own | ||||
|  | ||||
| Implementing your own interceptor is pretty trivial: there are interfaces for that. But the interesting | ||||
| bit exposing common data to handlers (and other middleware), similarly to HTTP Middleware design. | ||||
| For example, you may want to pass the identity of the caller from the auth interceptor all the way | ||||
| to the handling function. | ||||
|  | ||||
| For example, a client side interceptor example for auth looks like: | ||||
|  | ||||
| 	func FakeAuthUnaryInterceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { | ||||
| 	   newCtx := context.WithValue(ctx, "user_id", "john@example.com") | ||||
| 	   return handler(newCtx, req) | ||||
| 	} | ||||
|  | ||||
| Unfortunately, it's not as easy for streaming RPCs. These have the `context.Context` embedded within | ||||
| the `grpc.ServerStream` object. To pass values through context, a wrapper (`WrappedServerStream`) is | ||||
| needed. For example: | ||||
|  | ||||
| 	func FakeAuthStreamingInterceptor(srv interface{}, stream grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error { | ||||
| 	   newStream := grpc_middleware.WrapServerStream(stream) | ||||
| 	   newStream.WrappedContext = context.WithValue(ctx, "user_id", "john@example.com") | ||||
| 	   return handler(srv, stream) | ||||
| 	} | ||||
| */ | ||||
| package grpc_middleware | ||||
							
								
								
									
										22
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/makefile
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/makefile
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| SHELL="/bin/bash" | ||||
|  | ||||
| GOFILES_NOVENDOR = $(shell go list ./... | grep -v /vendor/) | ||||
|  | ||||
| all: vet fmt docs test | ||||
|  | ||||
| docs: | ||||
| 	./scripts/docs.sh generate | ||||
|  | ||||
| checkdocs: | ||||
| 	./scripts/docs.sh check | ||||
|  | ||||
| fmt: | ||||
| 	go fmt $(GOFILES_NOVENDOR) | ||||
|  | ||||
| vet: | ||||
| 	go vet $(GOFILES_NOVENDOR) | ||||
|  | ||||
| test: vet | ||||
| 	./scripts/test_all.sh | ||||
|  | ||||
| .PHONY: all docs validate test | ||||
							
								
								
									
										
											BIN
										
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/slack.png
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/slack.png
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 5.0 KiB | 
							
								
								
									
										29
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/wrappers.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								vendor/github.com/grpc-ecosystem/go-grpc-middleware/wrappers.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | ||||
| // Copyright 2016 Michal Witkowski. All Rights Reserved. | ||||
| // See LICENSE for licensing terms. | ||||
|  | ||||
| package grpc_middleware | ||||
|  | ||||
| import ( | ||||
| 	"golang.org/x/net/context" | ||||
| 	"google.golang.org/grpc" | ||||
| ) | ||||
|  | ||||
| // WrappedServerStream is a thin wrapper around grpc.ServerStream that allows modifying context. | ||||
| type WrappedServerStream struct { | ||||
| 	grpc.ServerStream | ||||
| 	// WrappedContext is the wrapper's own Context. You can assign it. | ||||
| 	WrappedContext context.Context | ||||
| } | ||||
|  | ||||
| // Context returns the wrapper's WrappedContext, overwriting the nested grpc.ServerStream.Context() | ||||
| func (w *WrappedServerStream) Context() context.Context { | ||||
| 	return w.WrappedContext | ||||
| } | ||||
|  | ||||
| // WrapServerStream returns a ServerStream that has the ability to overwrite context. | ||||
| func WrapServerStream(stream grpc.ServerStream) *WrappedServerStream { | ||||
| 	if existing, ok := stream.(*WrappedServerStream); ok { | ||||
| 		return existing | ||||
| 	} | ||||
| 	return &WrappedServerStream{ServerStream: stream, WrappedContext: stream.Context()} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user