def test_fingerprint(self): test_object = models.CryptographyObject() self.assertEqual(len(test_object.fingerprint), 92) test_object = models.CryptographyObject( cipher=models.Cipher.objects.filter(is_asymmetric=False).first()) self.assertEqual(test_object.fingerprint, False)
def test_validate(self): test_object = models.CryptographyObject() test_form = forms.CryptographyObjectForm(instance=test_object) self.assertIs(test_form.is_valid(), False) test_form = forms.CryptographyObjectForm(data={'name': 'test'}, instance=test_object) self.assertIs(test_form.is_valid(), True) test_object.private_key = '123' test_form = forms.CryptographyObjectForm(data={'name': 'test'}, instance=test_object) self.assertIs(test_form.is_valid(), False) self.assertEqual(len(test_form.errors), 1) test_object = models.CryptographyObject() test_object.public_key = None test_form = forms.CryptographyObjectForm(data={'name': 'test'}, instance=test_object) self.assertIs(test_form.is_valid(), False) self.assertEqual(len(test_form.errors), 1) test_object = models.CryptographyObject( cipher=models.Cipher.objects.filter(is_asymmetric=False).first()) test_object.public_key = None test_form = forms.CryptographyObjectForm(data={'name': 'test'}, instance=test_object) self.assertIs(test_form.is_valid(), True) test_object.private_key = None test_form = forms.CryptographyObjectForm(data={'name': 'test'}, instance=test_object) self.assertIs(test_form.is_valid(), False) self.assertEqual(len(test_form.errors), 1)
def test_export_to_file(self): test_object = models.CryptographyObject() test_object.name = 'test' response = test_object.export_to_file() self.assertEqual(response.status_code, 200) response = test_object.export_to_file(public_key=True) self.assertEqual(response.status_code, 200)
def test_cryptography_object_page(self): sample_object = models.CryptographyObject(name='test') sample_object.save() response = self.client.get( 'http://127.0.0.1:8000' + reverse('main:cryptography_object', kwargs={'object_id': sample_object.id})) self.assertEqual(response.status_code, 200) response = self.client.get( 'http://127.0.0.1:8000' + reverse('main:cryptography_object', kwargs={'object_id': 99})) self.assertEqual(response.status_code, 404)
def test_export_key(self): sample_object = models.CryptographyObject(name='test') sample_object.save() response = self.client.get( 'http://127.0.0.1:8000' + reverse('main:export_key', kwargs={'object_id': sample_object.id})) self.assertIsInstance(response, HttpResponse) self.assertEqual(response.status_code, 200) response = self.client.get('http://127.0.0.1:8000' + reverse('main:export_key', kwargs={ 'object_id': sample_object.id, 'public_key': 1 })) self.assertIsInstance(response, HttpResponse) self.assertEqual(response.status_code, 200)
def __init__(self, *args, **kwargs): if 'instance' not in kwargs or not kwargs['instance']: kwargs['instance'] = models.CryptographyObject() instance = kwargs['instance'] files = kwargs.get('files') file_error = False if files: old_state = copy.deepcopy(instance) for field_name in files: file_data = next(files[field_name].chunks()) try: instance.parse_file(file_data) except Exception as error: file_error = error if not file_error: try: instance.full_clean(exclude=['name']) except (ValidationError, ValueError) as error: file_error = error instance = old_state else: instance = old_state if 'data' in kwargs: kwargs['data'] = copy.deepcopy(kwargs['data']) for field in self.base_fields: if field not in kwargs['data'] or not kwargs['data'][field]: kwargs['data'][field] = getattr(instance, field) super(CryptographyObjectForm, self).__init__(*args, **kwargs) if file_error: self.add_error(field=None, error=file_error) self.fields['key_length'].queryset = models.CipherKeyLengthRelation.objects.filter(cipher_id=self['cipher'].value()) for visible_field in self.visible_fields(): visible_field.field.widget.attrs['class'] = 'form-control'
def get_context_data(self, **kwargs): context_data = super(IndexView, self).get_context_data(**kwargs) symmetric_queryset = models.Cipher.objects.filter(is_asymmetric=False) symmetric_cryptography_object_form = forms.CryptographyObjectForm( instance=models.CryptographyObject( cipher=symmetric_queryset.first())) symmetric_cryptography_object_form.fields[ 'cipher'].queryset = symmetric_queryset context_data['cryptography_object_form'] = context_data['form'] context_data['cryptography_object_form'].fields[ 'cipher'].queryset = models.Cipher.objects.filter( is_asymmetric=True) context_data[ 'symmetric_cryptography_object_form'] = symmetric_cryptography_object_form context_data[ 'cryptography_object_list'] = models.CryptographyObject.objects.all( ) return context_data
def cipher_defaults(request): """ Returns cipher available key lengths and new random keys for it. Used by AJAX when a user changes a cipher in the select element. """ if request.method != "GET" or not request.is_ajax(): return HttpResponseNotFound() cipher_id = int(request.GET.get('cipher_id')) cipher = models.Cipher.objects.filter(id=cipher_id).first() if not cipher: return HttpResponseNotFound('Шифр с данным ID не найден.') form = forms.CryptographyObjectForm(instance=models.CryptographyObject( cipher=cipher)) return JsonResponse({ 'key_length': str(form['key_length'].label) + ": " + str(form['key_length']), 'private_key': str(form['private_key'].label) + "<br>" + str(form['private_key']), 'public_key': str(form['public_key'].label) + "<br>" + str(form['public_key']), 'fingerprint': str(form.instance.fingerprint) })