mirror of https://github.com/jumpserver/jumpserver
refactor: ConnectionToken 修改表字段名称 account -> account_username
parent
bd9afaba1e
commit
2b5b4ad605
|
@ -16,9 +16,9 @@ def migrate_system_user_to_account(apps, schema_editor):
|
||||||
count += len(connection_tokens)
|
count += len(connection_tokens)
|
||||||
updated = []
|
updated = []
|
||||||
for connection_token in connection_tokens:
|
for connection_token in connection_tokens:
|
||||||
connection_token.account = connection_token.system_user.username
|
connection_token.account_username = connection_token.system_user.username
|
||||||
updated.append(connection_token)
|
updated.append(connection_token)
|
||||||
connection_token_model.objects.bulk_update(updated, ['account'])
|
connection_token_model.objects.bulk_update(updated, ['account_username'])
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
@ -42,7 +42,7 @@ class Migration(migrations.Migration):
|
||||||
),
|
),
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='connectiontoken',
|
model_name='connectiontoken',
|
||||||
name='account',
|
name='account_username',
|
||||||
field=models.CharField(default='', max_length=128, verbose_name='Account'),
|
field=models.CharField(default='', max_length=128, verbose_name='Account'),
|
||||||
),
|
),
|
||||||
migrations.RunPython(migrate_system_user_to_account),
|
migrations.RunPython(migrate_system_user_to_account),
|
||||||
|
|
|
@ -25,12 +25,12 @@ class ConnectionToken(OrgModelMixin, JMSBaseModel):
|
||||||
'assets.Asset', on_delete=models.SET_NULL, null=True, blank=True,
|
'assets.Asset', on_delete=models.SET_NULL, null=True, blank=True,
|
||||||
related_name='connection_tokens', verbose_name=_('Asset'),
|
related_name='connection_tokens', verbose_name=_('Asset'),
|
||||||
)
|
)
|
||||||
user_display = models.CharField(max_length=128, default='', verbose_name=_("User display"))
|
|
||||||
asset_display = models.CharField(max_length=128, default='', verbose_name=_("Asset display"))
|
|
||||||
account = models.CharField(max_length=128, default='', verbose_name=_("Account"))
|
|
||||||
protocol = models.CharField(
|
protocol = models.CharField(
|
||||||
choices=Protocol.choices, max_length=16, default=Protocol.ssh, verbose_name=_("Protocol")
|
choices=Protocol.choices, max_length=16, default=Protocol.ssh, verbose_name=_("Protocol")
|
||||||
)
|
)
|
||||||
|
user_display = models.CharField(max_length=128, default='', verbose_name=_("User display"))
|
||||||
|
asset_display = models.CharField(max_length=128, default='', verbose_name=_("Asset display"))
|
||||||
|
account_username = models.CharField(max_length=128, default='', verbose_name=_("Account"))
|
||||||
secret = models.CharField(max_length=64, default='', verbose_name=_("Secret"))
|
secret = models.CharField(max_length=64, default='', verbose_name=_("Secret"))
|
||||||
date_expired = models.DateTimeField(
|
date_expired = models.DateTimeField(
|
||||||
default=date_expired_default, verbose_name=_("Date expired")
|
default=date_expired_default, verbose_name=_("Date expired")
|
||||||
|
@ -43,6 +43,10 @@ class ConnectionToken(OrgModelMixin, JMSBaseModel):
|
||||||
('view_connectiontokensecret', _('Can view connection token secret'))
|
('view_connectiontokensecret', _('Can view connection token secret'))
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_valid(self):
|
||||||
|
return not self.is_expired
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def is_expired(self):
|
def is_expired(self):
|
||||||
return self.date_expired < timezone.now()
|
return self.date_expired < timezone.now()
|
||||||
|
@ -55,10 +59,6 @@ class ConnectionToken(OrgModelMixin, JMSBaseModel):
|
||||||
seconds = 0
|
seconds = 0
|
||||||
return int(seconds)
|
return int(seconds)
|
||||||
|
|
||||||
@property
|
|
||||||
def is_valid(self):
|
|
||||||
return not self.is_expired
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_default_date_expired(cls):
|
def get_default_date_expired(cls):
|
||||||
return date_expired_default()
|
return date_expired_default()
|
||||||
|
@ -81,30 +81,21 @@ class ConnectionToken(OrgModelMixin, JMSBaseModel):
|
||||||
is_valid = False
|
is_valid = False
|
||||||
error = _('Connection token expired at: {}').format(as_current_tz(self.date_expired))
|
error = _('Connection token expired at: {}').format(as_current_tz(self.date_expired))
|
||||||
return is_valid, error
|
return is_valid, error
|
||||||
if not self.user:
|
if not self.user or not self.user.is_valid:
|
||||||
is_valid = False
|
is_valid = False
|
||||||
error = _('User not exists')
|
error = _('No user or invalid user')
|
||||||
return is_valid, error
|
return is_valid, error
|
||||||
if not self.user.is_valid:
|
if not self.asset or self.asset.is_active:
|
||||||
is_valid = False
|
is_valid = False
|
||||||
error = _('User invalid, disabled or expired')
|
error = _('No asset or inactive asset')
|
||||||
return is_valid, error
|
|
||||||
if not self.asset:
|
|
||||||
is_valid = False
|
|
||||||
error = _('Asset not exists')
|
|
||||||
return is_valid, error
|
|
||||||
if not self.asset.is_active:
|
|
||||||
is_valid = False
|
|
||||||
error = _('Asset inactive')
|
|
||||||
return is_valid, error
|
return is_valid, error
|
||||||
if not self.account:
|
if not self.account:
|
||||||
is_valid = False
|
is_valid = False
|
||||||
error = _('Account not exists')
|
error = _('No account')
|
||||||
return is_valid, error
|
return is_valid, error
|
||||||
|
|
||||||
actions, expire_at = PermAccountUtil().validate_permission(
|
account_util = PermAccountUtil()
|
||||||
self.user, self.asset, self.account
|
actions, expire_at = account_util.validate_permission(self.user, self.asset, self.account)
|
||||||
)
|
|
||||||
if not actions or expire_at < time.time():
|
if not actions or expire_at < time.time():
|
||||||
is_valid = False
|
is_valid = False
|
||||||
error = _('User has no permission to access asset or permission expired')
|
error = _('User has no permission to access asset or permission expired')
|
||||||
|
|
Loading…
Reference in New Issue