Exemple #1
0
    def on_post(self, req, resp, tenant_id):
        body = json.loads(req.stream.read().decode())
        try:
            name = body['keypair']['name']
            key = body['keypair'].get('public_key', generate_random_key())
        except (KeyError, TypeError):
            return bad_request(resp, 'Not all fields exist to create keypair.')

        validate_result = validate_keypair_name(resp, name)
        if not validate_result:
            return

        client = req.env['sl_client']
        mgr = SshKeyManager(client)

        # Make sure the key with that label doesn't already exist
        existing_keys = mgr.list_keys(label=name)
        if existing_keys:
            return duplicate(resp, 'Duplicate key by that name')

        try:
            keypair = mgr.add_key(key, name)
            resp.body = {'keypair': format_keypair(keypair)}
        except SoftLayerAPIError as e:
            if 'Unable to generate a fingerprint' in e.faultString:
                return bad_request(resp, e.faultString)
            if 'SSH key already exists' in e.faultString:
                return duplicate(resp, e.faultString)
            raise
Exemple #2
0
    def execute(self, args):
        if args.get('--key'):
            key = args['--key']
        else:
            key_file = open(expanduser(args['--file']), 'rU')
            key = key_file.read().strip()
            key_file.close()

        mgr = SshKeyManager(self.client)
        result = mgr.add_key(key, args['<label>'], args.get('--notes'))

        return "SSH key added: %s" % result.get('fingerprint')
    def execute(self, args):
        if args.get('--key'):
            key = args['--key']
        else:
            f = open(expanduser(args['--file']), 'rU')
            key = f.read().strip()
            f.close()

        mgr = SshKeyManager(self.client)
        result = mgr.add_key(key, args['<label>'], args.get('--notes'))

        if type(result) is dict and result.get('fingerprint'):
            return "SSH key added."
    def execute(self, args):
        if args.get("--key"):
            key = args["--key"]
        else:
            f = open(expanduser(args["--file"]), "rU")
            key = f.read().strip()
            f.close()

        mgr = SshKeyManager(self.client)
        result = mgr.add_key(key, args["<label>"], args.get("--notes"))

        if type(result) is dict and result.get("fingerprint"):
            return "SSH key added."
class SshKeyTests(unittest.TestCase):

    def setUp(self):
        self.client = FixtureClient()
        self.sshkey = SshKeyManager(self.client)

    def test_add_key(self):
        key = 'pretend this is a public SSH key'
        label = 'Test label'
        notes = 'My notes'

        data = {
            'key': key,
            'label': label,
            'notes': notes,
        }
        mcall = call(data)
        service = self.client['Security_Ssh_Key']

        self.sshkey.add_key(key=key, label=label, notes=notes)
        service.createObject.assert_has_calls(mcall)

    def test_delete_key(self):
        id = 1234
        mcall = call(id=id)
        service = self.client['Security_Ssh_Key']

        self.sshkey.delete_key(id)
        service.deleteObject.assert_has_calls(mcall)

    def test_edit_key(self):
        id = 1234
        label = 'Test label'
        notes = 'My notes'

        data = {
            'label': label,
            'notes': notes,
        }
        mcall = call(data, id=id)
        service = self.client['Security_Ssh_Key']

        self.sshkey.edit_key(id, label=label, notes=notes)
        service.editObject.assert_has_calls(mcall)

    def test_get_key(self):
        id = 1234
        mcall = call(id=id)
        service = self.client['Security_Ssh_Key']

        self.sshkey.get_key(id)
        service.getObject.assert_has_calls(mcall)

    def test_list_keys(self):
        service = self.client['Account']
        self.sshkey.list_keys(label='some label')
        service.getSshKeys.assert_called_with(
            filter={'sshKeys': {'label': {'operation': '_= some label'}}})

    def test_resolve_ids_label(self):
        _id = self.sshkey._get_ids_from_label('Test 1')
        self.assertEqual(_id, ['100'])

        _id = self.sshkey._get_ids_from_label('nope')
        self.assertEqual(_id, [])