diff options
Diffstat (limited to 'src/python/grpcio/grpc/_auth.py')
-rw-r--r-- | src/python/grpcio/grpc/_auth.py | 83 |
1 files changed, 42 insertions, 41 deletions
diff --git a/src/python/grpcio/grpc/_auth.py b/src/python/grpcio/grpc/_auth.py index dea3221c9d..e8a90cf504 100644 --- a/src/python/grpcio/grpc/_auth.py +++ b/src/python/grpcio/grpc/_auth.py @@ -26,7 +26,6 @@ # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - """GRPCAuthMetadataPlugins for standard authentication.""" import inspect @@ -36,51 +35,53 @@ import grpc def _sign_request(callback, token, error): - metadata = (('authorization', 'Bearer {}'.format(token)),) - callback(metadata, error) + metadata = (('authorization', 'Bearer {}'.format(token)),) + callback(metadata, error) class GoogleCallCredentials(grpc.AuthMetadataPlugin): - """Metadata wrapper for GoogleCredentials from the oauth2client library.""" - - def __init__(self, credentials): - self._credentials = credentials - self._pool = futures.ThreadPoolExecutor(max_workers=1) - - # Hack to determine if these are JWT creds and we need to pass - # additional_claims when getting a token - if 'additional_claims' in inspect.getargspec( - credentials.get_access_token).args: - self._is_jwt = True - else: - self._is_jwt = False - - def __call__(self, context, callback): - # MetadataPlugins cannot block (see grpc.beta.interfaces.py) - if self._is_jwt: - future = self._pool.submit(self._credentials.get_access_token, - additional_claims={'aud': context.service_url}) - else: - future = self._pool.submit(self._credentials.get_access_token) - future.add_done_callback(lambda x: self._get_token_callback(callback, x)) - - def _get_token_callback(self, callback, future): - try: - access_token = future.result().access_token - except Exception as e: - _sign_request(callback, None, e) - else: - _sign_request(callback, access_token, None) - - def __del__(self): - self._pool.shutdown(wait=False) + """Metadata wrapper for GoogleCredentials from the oauth2client library.""" + + def __init__(self, credentials): + self._credentials = credentials + self._pool = futures.ThreadPoolExecutor(max_workers=1) + + # Hack to determine if these are JWT creds and we need to pass + # additional_claims when getting a token + if 'additional_claims' in inspect.getargspec( + credentials.get_access_token).args: + self._is_jwt = True + else: + self._is_jwt = False + + def __call__(self, context, callback): + # MetadataPlugins cannot block (see grpc.beta.interfaces.py) + if self._is_jwt: + future = self._pool.submit( + self._credentials.get_access_token, + additional_claims={'aud': context.service_url}) + else: + future = self._pool.submit(self._credentials.get_access_token) + future.add_done_callback( + lambda x: self._get_token_callback(callback, x)) + + def _get_token_callback(self, callback, future): + try: + access_token = future.result().access_token + except Exception as e: + _sign_request(callback, None, e) + else: + _sign_request(callback, access_token, None) + + def __del__(self): + self._pool.shutdown(wait=False) class AccessTokenCallCredentials(grpc.AuthMetadataPlugin): - """Metadata wrapper for raw access token credentials.""" + """Metadata wrapper for raw access token credentials.""" - def __init__(self, access_token): - self._access_token = access_token + def __init__(self, access_token): + self._access_token = access_token - def __call__(self, context, callback): - _sign_request(callback, self._access_token, None) + def __call__(self, context, callback): + _sign_request(callback, self._access_token, None) |