예제 #1
0
 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')
예제 #2
0
 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])
예제 #3
0
 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])
예제 #4
0
 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:'))
예제 #5
0
 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)
예제 #6
0
 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)
예제 #7
0
 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)
예제 #8
0
 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()
예제 #9
0
 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)
예제 #10
0
 def test_invalid_key_fails(self):
     key = UserKey(
         user=self.user1,
         name='name',
         key='ssh-rsa invalid',
     )
     self.assertRaises(ValidationError, key.full_clean)
예제 #11
0
 def test_ws_key_fails(self):
     key = UserKey(
         user=self.user1,
         name='name1',
         key='     ',
     )
     self.assertRaises(ValidationError, key.full_clean)
예제 #12
0
 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)
예제 #13
0
 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)
예제 #14
0
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),
    )
예제 #15
0
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),
  )
예제 #16
0
    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)
예제 #17
0
 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')
예제 #18
0
 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])
예제 #19
0
 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])
예제 #20
0
 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)
예제 #21
0
 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)
예제 #22
0
 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])
예제 #23
0
 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])
예제 #24
0
 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()
예제 #25
0
 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)
예제 #26
0
 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()
예제 #27
0
 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()