perf: 优化用户个人 ssh 公钥校验

pull/11201/head
Eric 2023-08-07 17:00:01 +08:00 committed by Bryan
parent e939776da0
commit a261b2de3c
1 changed files with 11 additions and 11 deletions

View File

@ -8,6 +8,7 @@ import string
import uuid import uuid
from typing import Callable from typing import Callable
import sshpubkeys
from django.conf import settings from django.conf import settings
from django.contrib.auth.hashers import check_password from django.contrib.auth.hashers import check_password
from django.contrib.auth.models import AbstractUser from django.contrib.auth.models import AbstractUser
@ -105,7 +106,6 @@ class AuthMixin:
return '' return ''
if self.public_key: if self.public_key:
import sshpubkeys
try: try:
return sshpubkeys.SSHKey(self.public_key) return sshpubkeys.SSHKey(self.public_key)
except (TabError, TypeError): except (TabError, TypeError):
@ -153,21 +153,21 @@ class AuthMixin:
return False return False
@staticmethod @staticmethod
def get_public_key_body(key): def get_public_key_md5(key):
for i in key.split(): try:
if len(i) > 256: key_obj = sshpubkeys.SSHKey(key)
return i return key_obj.hash_md5()
return key except Exception as e:
return ''
def check_public_key(self, key): def check_public_key(self, key):
if not self.public_key: if not self.public_key:
return False return False
key = self.get_public_key_body(key) key_md5 = self.get_public_key_md5(key)
key_saved = self.get_public_key_body(self.public_key) if not key_md5:
if key == key_saved:
return True
else:
return False return False
self_key_md5 = self.get_public_key_md5(self.public_key)
return key_md5 == self_key_md5
class RoleManager(models.Manager): class RoleManager(models.Manager):