Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(262)

Side by Side Diff: appengine/swarming/swarming_bot/bot_code/bot_auth.py

Issue 2024313003: Send authorization headers when calling Swarming backend. (Closed) Base URL: https://chromium.googlesource.com/external/github.com/luci/luci-py@master
Patch Set: keep it as part of environ Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(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)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698