12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- # -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
- # 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)
- @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'))
|