Verifying if a public key exists already

This commit is contained in:
PCoder 2017-09-13 06:57:15 +05:30
parent 94a5987985
commit 01795dcad0

View file

@ -1,6 +1,5 @@
import datetime import datetime
import logging import logging
import os
import subprocess import subprocess
import tempfile import tempfile
@ -9,6 +8,7 @@ from django.contrib.auth import authenticate
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from membership.models import CustomUser from membership.models import CustomUser
from utils.hosting_utils import get_all_public_keys
from .models import UserHostingKey from .models import UserHostingKey
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -88,7 +88,7 @@ class UserHostingKeyForm(forms.ModelForm):
def clean_public_key(self): def clean_public_key(self):
""" """
A function that validates a public ssh key using sshpubkeys module A function that validates a public ssh key using ssh-keygen
:return: :return:
""" """
if 'generate' in self.request.POST: if 'generate' in self.request.POST:
@ -96,6 +96,14 @@ class UserHostingKeyForm(forms.ModelForm):
KEY_ERROR_MESSAGE = _("Please input a proper SSH key") KEY_ERROR_MESSAGE = _("Please input a proper SSH key")
openssh_pubkey_str = self.data.get('public_key').strip() openssh_pubkey_str = self.data.get('public_key').strip()
if openssh_pubkey_str in get_all_public_keys(self.request.user):
key_name = UserHostingKey.objects.filter(
public_key=openssh_pubkey_str).first().name
KEY_EXISTS_MESSAGE = _(
"This key exists already with the name %(name)s") % {
'name': key_name}
raise forms.ValidationError(KEY_EXISTS_MESSAGE)
with tempfile.NamedTemporaryFile(delete=True) as tmp_public_key_file: with tempfile.NamedTemporaryFile(delete=True) as tmp_public_key_file:
tmp_public_key_file.write(openssh_pubkey_str.encode('utf-8')) tmp_public_key_file.write(openssh_pubkey_str.encode('utf-8'))
tmp_public_key_file.flush() tmp_public_key_file.flush()