#!/usr/bin/python3 # Copyright 2017 Lars Wirzenius # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . import sys import cliapp import ick2 class Icktool(cliapp.Application): _default_scopes = [ 'uapi_version_get', ] def add_settings(self): self.settings.string( ['controller'], 'use URL as the controller base URL', metavar='URL', ) self.settings.string( ['token-private-key-cmd'], 'run CMD to print private key for token signing', metavar='CMD', ) self.settings.string_list( ['scope'], 'add SCOPE to the list of scope in generated token', metavar='SCOPE', default=self._default_scopes, ) def cmd_token(self, args): uri = self.settings['controller'] if not uri: raise cliapp.AppException('no --controller specified') cmd = self.settings['token-private-key-cmd'] if not cmd: raise cliapp.AppException('no --token-private-cmd specified') scopes = self.settings['scope'] privkey = cliapp.runcmd(['sh', '-c', cmd]) token = cliapp.runcmd(['./create-token', ' '.join(scopes)], feed_stdin=privkey) sys.stdout.write(token.decode('ascii')) sys.stdout.write('\n') Icktool(version=ick2.__version__).run()