|  | # Copyright 2020 The Chromium Authors. All rights reserved. | 
|  | # Use of this source code is governed by a BSD-style license that can be | 
|  | # found in the LICENSE file. | 
|  |  | 
|  | from recipe_engine import recipe_api | 
|  |  | 
|  |  | 
|  | class TokenUtilApi(recipe_api.RecipeApi): | 
|  | """Utilities to generate tokens for communicating data.""" | 
|  |  | 
|  | def metric_center_token(self): | 
|  | """Generate a token to interact with GCS. | 
|  |  | 
|  | Returns the path to the written token. | 
|  | """ | 
|  | service_account = self.m.service_account.default() | 
|  | metrics_center_access_token = service_account.get_access_token( | 
|  | scopes=[ | 
|  | 'https://www.googleapis.com/auth/cloud-platform', | 
|  | 'https://www.googleapis.com/auth/datastore' | 
|  | ] | 
|  | ) | 
|  | metrics_center_token_path = self.m.path.mkstemp() | 
|  | self.m.file.write_text( | 
|  | "write metric center token", | 
|  | metrics_center_token_path, | 
|  | metrics_center_access_token, | 
|  | include_log=False | 
|  | ) | 
|  | return metrics_center_token_path | 
|  |  | 
|  | def cocoon_token(self): | 
|  | """Generate a token to interact with Cocoon backend APIs. | 
|  |  | 
|  | Returns the path to the written token. | 
|  | """ | 
|  | service_account = self.m.service_account.default() | 
|  | cocoon_access_token = service_account.get_access_token() | 
|  |  | 
|  | cocoon_access_token_path = self.m.path.mkstemp() | 
|  | self.m.file.write_text( | 
|  | "write cocoon token", | 
|  | cocoon_access_token_path, | 
|  | cocoon_access_token, | 
|  | include_log=False | 
|  | ) | 
|  | return cocoon_access_token_path | 
|  |  |