Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 # Copyright 2016 The LUCI Authors. All rights reserved. | |
| 2 # Use of this source code is governed under the Apache License, Version 2.0 | |
| 3 # that can be found in the LICENSE file. | |
| 4 | |
| 5 import collections | |
| 6 | |
| 7 | |
| 8 # Parsed value of JSON at path specified by 'SWARMING_AUTH_PARAMS' env var. | |
| 9 AuthParams = collections.namedtuple('AuthParams', [ | |
|
Vadim Sh.
2016/06/07 22:22:59
This is expected to grow in the future to include:
| |
| 10 # Dict with HTTP headers to use when calling Swarming backend (specifically). | |
| 11 # They identify the bot to the Swarming backend. Ultimately generated by | |
| 12 # 'get_authentication_headers' in bot_config.py. | |
| 13 'swarming_http_headers', | |
| 14 ]) | |
| 15 | |
| 16 | |
| 17 def prepare_auth_params_json(bot): | |
| 18 """Returns a dict to put into JSON file at SWARMING_AUTH_PARAMS. | |
| 19 | |
| 20 This JSON file contains various tokens and configuration parameters that allow | |
| 21 Swarming tasks to make authenticated calls to backends using security context | |
| 22 of whoever posted the task. | |
| 23 | |
| 24 The file is managed by bot_main.py (main Swarming bot process) and consumed by | |
| 25 task_running.py and its subprocesses that are aware of Swarming bot | |
| 26 authentication. | |
| 27 | |
| 28 It lives it the task work directory. | |
| 29 | |
| 30 Args: | |
| 31 bot: instance of bot.Bot. | |
| 32 """ | |
| 33 return { | |
| 34 'swarming_http_headers': bot.remote.get_authentication_headers(), | |
| 35 } | |
| 36 | |
| 37 | |
| 38 def process_auth_params_json(val): | |
| 39 """Takes a dict loaded from SWARMING_AUTH_PARAMS and validates it. | |
| 40 | |
| 41 Args: | |
| 42 val: decoded JSON value read from SWARMING_AUTH_PARAMS file. | |
| 43 | |
| 44 Returns: | |
| 45 AuthParams tuple. | |
| 46 | |
| 47 Raises: | |
| 48 ValueError if val has invalid format. | |
| 49 """ | |
| 50 if not isinstance(val, dict): | |
| 51 raise ValueError('Expecting dict, got %r' % (val,)) | |
| 52 | |
| 53 headers = val.get('swarming_http_headers') or {} | |
| 54 if not isinstance(headers, dict): | |
| 55 raise ValueError( | |
| 56 'Expecting "swarming_http_headers" to be dict, got %r' % (headers,)) | |
| 57 | |
| 58 # The headers must be ASCII for sure, so don't bother with picking the | |
| 59 # correct unicode encoding, default would work. If not, it'll raise | |
| 60 # UnicodeEncodeError, which is subclass of ValueError. | |
| 61 headers = {str(k): str(v) for k, v in headers.iteritems()} | |
| 62 | |
| 63 return AuthParams(headers) | |
| OLD | NEW |