perf: 修改 migrations, 修改 Connect token

This commit is contained in:
ibuler
2022-12-05 12:42:15 +08:00
parent d25d580ba4
commit 38b1701b33
12 changed files with 117 additions and 97 deletions

View File

@@ -28,7 +28,7 @@ class ConnectionToken(OrgModelMixin, JMSBaseModel):
'assets.Asset', on_delete=models.SET_NULL, null=True, blank=True,
related_name='connection_tokens', verbose_name=_('Asset'),
)
account_name = models.CharField(max_length=128, verbose_name=_("Account name")) # 登录账号Name
account = models.CharField(max_length=128, verbose_name=_("Account name")) # 登录账号Name
input_username = models.CharField(max_length=128, default='', blank=True, verbose_name=_("Input username"))
input_secret = EncryptCharField(max_length=64, default='', blank=True, verbose_name=_("Input secret"))
protocol = models.CharField(max_length=16, default=Protocol.ssh, verbose_name=_("Protocol"))
@@ -74,7 +74,7 @@ class ConnectionToken(OrgModelMixin, JMSBaseModel):
def permed_account(self):
from perms.utils import PermAccountUtil
permed_account = PermAccountUtil().validate_permission(
self.user, self.asset, self.account_name
self.user, self.asset, self.account
)
return permed_account
@@ -86,6 +86,12 @@ class ConnectionToken(OrgModelMixin, JMSBaseModel):
def expire_at(self):
return self.permed_account.date_expired.timestamp()
@lazyproperty
def connect_method_object(self):
from terminal.const import TerminalType
method = TerminalType.get_connect_method(self.connect_method, protocol=self.protocol)
return method
def is_valid(self):
if self.is_expired:
error = _('Connection token expired at: {}').format(as_current_tz(self.date_expired))
@@ -97,13 +103,13 @@ class ConnectionToken(OrgModelMixin, JMSBaseModel):
is_valid = False
error = _('No asset or inactive asset')
return is_valid, error
if not self.account_name:
if not self.account:
error = _('No account')
raise PermissionDenied(error)
if not self.permed_account or not self.permed_account.actions:
msg = 'user `{}` not has asset `{}` permission for login `{}`'.format(
self.user, self.asset, self.account_name
self.user, self.asset, self.account
)
raise PermissionDenied(msg)
@@ -116,15 +122,15 @@ class ConnectionToken(OrgModelMixin, JMSBaseModel):
return self.asset.platform
@lazyproperty
def account(self):
def account_object(self):
from assets.models import Account
if not self.asset:
return None
account = self.asset.accounts.filter(name=self.account_name).first()
if self.account_name == '@INPUT' or not account:
account = self.asset.accounts.filter(name=self.account).first()
if self.account == '@INPUT' or not account:
data = {
'name': self.account_name,
'name': self.account,
'username': self.input_username,
'secret_type': 'password',
'secret': self.input_secret,