def test_without_name_with_comment(self): key = UserKey( user=self.user1, key=open(self.key1_path + '.pub').read(), ) key.full_clean() key.save() self.assertEqual(key.name, 'comment')
def test_import_without_comment(self): key = UserKey( user = self.user1, name = 'name', key = open(self.key2_rfc4716_path).read(), ) key.full_clean() key.save() self.assertEqual(key.key.split()[:2], open(self.key2_path+'.pub').read().split()[:2])
def test_import(self): key = UserKey( user = self.user1, name = 'name', key = open(self.key1_pem_path).read(), ) key.full_clean() key.save() self.assertEqual(key.key.split()[:2], open(self.key1_path+'.pub').read().split()[:2])
def test_fingerprint_md5(self): settings.SSHKEY_DEFAULT_HASH = 'md5' key = UserKey( user=self.user1, name='name', key=open(self.key1_path + '.pub').read(), ) key.full_clean() key.save() self.assertTrue(key.fingerprint.startswith('MD5:'))
def test_fingerprint(self): fingerprint = ssh_fingerprint(self.key1_path+'.pub') key = UserKey( user = self.user1, name = 'name', key = open(self.key1_path+'.pub').read(), ) key.full_clean() key.save() self.assertEqual(key.fingerprint, fingerprint)
def test_fingerprint_legacy(self): settings.SSHKEY_DEFAULT_HASH = 'legacy' fingerprint = ssh_fingerprint(self.key1_path + '.pub', hash='legacy') key = UserKey( user=self.user1, name='name', key=open(self.key1_path + '.pub').read(), ) key.full_clean() key.save() self.assertEqual(key.fingerprint, fingerprint)
def test_same_key_different_user(self): key1 = UserKey( user=self.user1, name='name1', key=open(self.key1_path + '.pub').read(), ) key1.full_clean() key1.save() key2 = UserKey( user=self.user2, name='name2', key=open(self.key1_path + '.pub').read(), ) self.assertRaises(ValidationError, key2.full_clean)
def test_same_name_different_user(self): key1 = UserKey( user=self.user1, name='name', key=open(self.key1_path + '.pub').read(), ) key1.full_clean() key1.save() key2 = UserKey( user=self.user2, name='name', key=open(self.key2_path + '.pub').read(), ) key2.full_clean() key2.save()
def test_private_key_fails(self): key = UserKey( user=self.user1, name='name', key=open(self.key1_path).read(), ) self.assertRaises(ValidationError, key.full_clean)
def test_invalid_key_fails(self): key = UserKey( user=self.user1, name='name', key='ssh-rsa invalid', ) self.assertRaises(ValidationError, key.full_clean)
def test_ws_key_fails(self): key = UserKey( user=self.user1, name='name1', key=' ', ) self.assertRaises(ValidationError, key.full_clean)
def test_key_with_options_fails(self): key = UserKey( user=self.user1, name='name', key='command="foobar" ' + open(self.key1_path + '.pub').read(), ) self.assertRaises(ValidationError, key.full_clean)
def test_multiple_keys_fails(self): key = UserKey( user=self.user1, name='name', key=open(self.key1_path + '.pub').read() + open(self.key2_path + '.pub').read(), ) self.assertRaises(ValidationError, key.full_clean)
def userkey_add(request): if request.method == 'POST': userkey = UserKey(user=request.user) userkey.request = request form = UserKeyForm(request.POST, instance=userkey) if form.is_valid(): form.save() default_redirect = reverse('django_sshkey.views.userkey_list') url = request.GET.get('next', default_redirect) if not is_safe_url(url=url, host=request.get_host()): url = default_redirect message = 'SSH public key %s was added.' % userkey.name messages.success(request, message, fail_silently=True) return HttpResponseRedirect(url) else: form = UserKeyForm() return render_to_response( 'sshkey/userkey_detail.html', {'form': form, 'action': 'add'}, context_instance=RequestContext(request), )
def userkey_add(request): if request.method == 'POST': userkey = UserKey(user=request.user) userkey.request = request form = UserKeyForm(request.POST, instance=userkey) if form.is_valid(): form.save() default_redirect = reverse('django_sshkey.views.userkey_list') url = request.GET.get('next', default_redirect) if not is_safe_url(url=url, host=request.get_host()): url = default_redirect message = 'SSH public key %s was added.' % userkey.name messages.success(request, message, fail_silently=True) return HttpResponseRedirect(url) else: form = UserKeyForm() return render_to_response( 'sshkey/userkey_detail.html', { 'form': form, 'action': 'add' }, context_instance = RequestContext(request), )
def setUpClass(cls): super(UserKeyLookupTestCase, cls).setUpClass() cls.original_options = settings.SSHKEY_AUTHORIZED_KEYS_OPTIONS settings.SSHKEY_AUTHORIZED_KEYS_OPTIONS = \ 'command="{username} {key_id}"' cls.user1 = User.objects.create(username='******') cls.user2 = User.objects.create(username='******') cls.key1_path = os.path.join(cls.key_dir, 'key1') ssh_keygen(file=cls.key1_path) cls.key1 = UserKey( user=cls.user1, name='key1', key=open(cls.key1_path + '.pub').read(), ) cls.key1.full_clean() cls.key1.save() cls.key2_path = os.path.join(cls.key_dir, 'key2') ssh_keygen(file=cls.key2_path) cls.key2 = UserKey( user=cls.user1, name='key2', key=open(cls.key2_path + '.pub').read(), ) cls.key2.full_clean() cls.key2.save() cls.key3_path = os.path.join(cls.key_dir, 'key3') ssh_keygen(file=cls.key3_path) cls.key3 = UserKey( user=cls.user2, name='key3', key=open(cls.key3_path + '.pub').read(), ) cls.key3.full_clean() cls.key3.save() cls.key4_path = os.path.join(cls.key_dir, 'key4') ssh_keygen(file=cls.key4_path)
def test_import(self): key = UserKey( user=self.user1, name='name', key=open(self.key1_pem_path).read(), ) key.full_clean() key.save() self.assertEqual(key.key.split()[:2], open(self.key1_path + '.pub').read().split()[:2])
def test_import_without_comment(self): key = UserKey( user=self.user1, name='name', key=open(self.key2_rfc4716_path).read(), ) key.full_clean() key.save() self.assertEqual(key.key.split()[:2], open(self.key2_path + '.pub').read().split()[:2])
def test_fingerprint(self): fingerprint = ssh_fingerprint(self.key1_path + '.pub') key = UserKey( user=self.user1, name='name', key=open(self.key1_path + '.pub').read(), ) key.full_clean() key.save() self.assertEqual(key.fingerprint, fingerprint)
def test_export(self): key = UserKey( user=self.user1, name='name', key=open(self.key1_path + '.pub').read(), ) key.full_clean() key.save() export_path = os.path.join(self.key_dir, 'export') import_path = os.path.join(self.key_dir, 'import') with open(export_path, 'w') as f: f.write(key.export('PEM')) ssh_key_import(export_path, import_path, 'PEM') self.assertEqual( open(import_path).read().split()[:2], open(self.key1_path + '.pub').read().split()[:2])
def test_export(self): key = UserKey( user = self.user1, name = 'name', key = open(self.key1_path+'.pub').read(), ) key.full_clean() key.save() export_path = os.path.join(self.key_dir, 'export') import_path = os.path.join(self.key_dir, 'import') with open(export_path, 'w') as f: f.write(key.export('PEM')) ssh_key_import(export_path, import_path, 'PEM') self.assertEqual(open(import_path).read().split()[:2], open(self.key1_path+'.pub').read().split()[:2])
def test_without_name_without_comment_fails(self): key = UserKey( user=self.user1, key=open(self.key2_path + '.pub').read(), ) self.assertRaises(ValidationError, key.full_clean)
def test_touch(self): import datetime key = UserKey( user=self.user1, name='name', key=open(self.key1_path + '.pub').read(), ) key.full_clean() key.save() self.assertIsNone(key.last_used) key.touch() key.save() self.assertIsInstance(key.last_used, datetime.datetime) key.touch()