[Update] 修改users public_key等字段

pull/2874/head
ibuler 2019-06-25 11:22:17 +08:00
parent 824ba433f6
commit e08d542c87
5 changed files with 71 additions and 37 deletions

View File

@ -76,14 +76,14 @@ class AssetUser(OrgModelMixin):
def set_auth(self, password=None, private_key=None, public_key=None): def set_auth(self, password=None, private_key=None, public_key=None):
update_fields = [] update_fields = []
if password: if password:
self._password = signer.sign(password) self.password = password
update_fields.append('_password') update_fields.append('password')
if private_key: if private_key:
self._private_key = signer.sign(private_key) self.private_key = private_key
update_fields.append('_private_key') update_fields.append('private_key')
if public_key: if public_key:
self._public_key = signer.sign(public_key) self.public_key = public_key
update_fields.append('_public_key') update_fields.append('public_key')
if update_fields: if update_fields:
self.save(update_fields=update_fields) self.save(update_fields=update_fields)

View File

@ -54,7 +54,7 @@ class UserViewSet(IDInCacheFilterMixin, BulkModelViewSet):
self.send_created_signal(users) self.send_created_signal(users)
def get_queryset(self): def get_queryset(self):
queryset = current_org.get_org_users() queryset = current_org.get_org_users().prefetch_related('groups')
return queryset return queryset
def get_permissions(self): def get_permissions(self):

View File

@ -0,0 +1,29 @@
# Generated by Django 2.1.7 on 2019-06-25 03:04
import common.fields.model
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('users', '0020_auto_20190612_1825'),
]
operations = [
migrations.AlterField(
model_name='user',
name='_otp_secret_key',
field=common.fields.model.EncryptCharField(blank=True, max_length=128, null=True),
),
migrations.AlterField(
model_name='user',
name='_private_key',
field=common.fields.model.EncryptTextField(blank=True, max_length=5000, verbose_name='Private key'),
),
migrations.AlterField(
model_name='user',
name='_public_key',
field=common.fields.model.EncryptTextField(blank=True, max_length=5000, verbose_name='Public key'),
),
]

View File

@ -0,0 +1,28 @@
# Generated by Django 2.1.7 on 2019-06-25 03:05
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('users', '0021_auto_20190625_1104'),
]
operations = [
migrations.RenameField(
model_name='user',
old_name='_otp_secret_key',
new_name='otp_secret_key',
),
migrations.RenameField(
model_name='user',
old_name='_private_key',
new_name='private_key',
),
migrations.RenameField(
model_name='user',
old_name='_public_key',
new_name='public_key',
),
]

View File

@ -17,6 +17,7 @@ from django.utils import timezone
from django.shortcuts import reverse from django.shortcuts import reverse
from common.utils import get_signer, date_expired_default, get_logger from common.utils import get_signer, date_expired_default, get_logger
from common import fields
__all__ = ['User'] __all__ = ['User']
@ -84,12 +85,12 @@ class User(AbstractUser):
otp_level = models.SmallIntegerField( otp_level = models.SmallIntegerField(
default=0, choices=OTP_LEVEL_CHOICES, verbose_name=_('MFA') default=0, choices=OTP_LEVEL_CHOICES, verbose_name=_('MFA')
) )
_otp_secret_key = models.CharField(max_length=128, blank=True, null=True) otp_secret_key = fields.EncryptCharField(max_length=128, blank=True, null=True)
# Todo: Auto generate key, let user download # Todo: Auto generate key, let user download
_private_key = models.CharField( private_key = fields.EncryptTextField(
max_length=5000, blank=True, verbose_name=_('Private key') max_length=5000, blank=True, verbose_name=_('Private key')
) )
_public_key = models.CharField( public_key = fields.EncryptTextField(
max_length=5000, blank=True, verbose_name=_('Public key') max_length=5000, blank=True, verbose_name=_('Public key')
) )
comment = models.TextField( comment = models.TextField(
@ -141,14 +142,6 @@ class User(AbstractUser):
def can_update_password(self): def can_update_password(self):
return self.is_local return self.is_local
@property
def otp_secret_key(self):
return signer.unsign(self._otp_secret_key)
@otp_secret_key.setter
def otp_secret_key(self, item):
self._otp_secret_key = signer.sign(item)
def check_otp(self, code): def check_otp(self, code):
from ..utils import check_otp_code from ..utils import check_otp_code
return check_otp_code(self.otp_secret_key, code) return check_otp_code(self.otp_secret_key, code)
@ -161,13 +154,13 @@ class User(AbstractUser):
Check if the user's ssh public key is valid. Check if the user's ssh public key is valid.
This function is used in base.html. This function is used in base.html.
""" """
if self._public_key: if self.public_key:
return True return True
return False return False
@property @property
def groups_display(self): def groups_display(self):
return ' '.join(self.groups.all().values_list('name', flat=True)) return ' '.join([group.name for group in self.groups.all()])
@property @property
def role_display(self): def role_display(self):
@ -190,22 +183,6 @@ class User(AbstractUser):
return True return True
return False return False
@property
def private_key(self):
return signer.unsign(self._private_key)
@private_key.setter
def private_key(self, private_key_raw):
self._private_key = signer.sign(private_key_raw)
@property
def public_key(self):
return signer.unsign(self._public_key)
@public_key.setter
def public_key(self, public_key_raw):
self._public_key = signer.sign(public_key_raw)
@property @property
def public_key_obj(self): def public_key_obj(self):
class PubKey(object): class PubKey(object):
@ -364,7 +341,7 @@ class User(AbstractUser):
def generate_reset_token(self): def generate_reset_token(self):
letter = string.ascii_letters + string.digits letter = string.ascii_letters + string.digits
token =''.join([random.choice(letter) for _ in range(50)]) token = ''.join([random.choice(letter) for _ in range(50)])
self.set_cache(token) self.set_cache(token)
return token return token