diff options
Diffstat (limited to 'build/moz.configure/keyfiles.configure')
-rw-r--r-- | build/moz.configure/keyfiles.configure | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/build/moz.configure/keyfiles.configure b/build/moz.configure/keyfiles.configure new file mode 100644 index 000000000..5a71fd4b2 --- /dev/null +++ b/build/moz.configure/keyfiles.configure @@ -0,0 +1,68 @@ +# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- +# vim: set filetype=python: +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +@template +def keyfile(desc, help=None, callback=lambda x: x): + help = help or ('Use the secret key contained in the given keyfile ' + 'for %s requests' % desc) + name = desc.lower().replace(' ', '-') + no_key = callback('no-%s-key' % name) + + option('--with-%s-keyfile' % name, nargs=1, help=help) + + @depends('--with-%s-keyfile' % name) + @checking('for the %s key' % desc, lambda x: x and x is not no_key) + @imports(_from='__builtin__', _import='open') + @imports(_from='__builtin__', _import='IOError') + def keyfile(value): + if value: + try: + with open(value[0]) as fh: + result = fh.read().strip() + if result: + return callback(result) + raise FatalCheckError("'%s' is empty." % value[0]) + except IOError as e: + raise FatalCheckError("'%s': %s." % (value[0], e.strerror)) + return no_key + + return keyfile + + +@template +def simple_keyfile(desc): + value = keyfile(desc) + set_config('MOZ_%s_KEY' % desc.upper().replace(' ', '_'), value) + # Only really required for MOZ_ADJUST_SDK_KEY currently still used in + # old-configure. + add_old_configure_assignment('MOZ_%s_KEY' % desc.upper().replace(' ', '_'), + value) + + +@template +def id_and_secret_keyfile(desc): + def id_and_secret(value): + if value.startswith('no-') and value.endswith('-key'): + id = value[:-3] + 'clientid' + secret = value + elif ' ' in value: + id, secret = value.split(' ', 1) + else: + raise FatalCheckError('%s key file has an invalid format.' % desc) + return namespace( + id=id, + secret=secret, + ) + + content = keyfile(desc, help='Use the client id and secret key contained ' + 'in the given keyfile for %s requests' % desc, + callback=id_and_secret) + + + name = desc.upper().replace(' ', '_') + set_config('MOZ_%s_CLIENTID' % name, delayed_getattr(content, 'id')) + set_config('MOZ_%s_KEY' % name, delayed_getattr(content, 'secret')) |