merge: with dev

This commit is contained in:
ibuler
2023-07-28 10:46:34 +08:00
17 changed files with 282 additions and 83 deletions

View File

@@ -0,0 +1,18 @@
# Generated by Django 4.1.10 on 2023-07-26 10:55
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('terminal', '0063_auto_20230621_1133'),
]
operations = [
migrations.AddField(
model_name='sessionsharing',
name='origin',
field=models.URLField(blank=True, null=True, verbose_name='Origin'),
),
]

View File

@@ -3,6 +3,7 @@ import datetime
from django.db import models
from django.utils import timezone
from django.utils.translation import gettext_lazy as _
from django.utils.functional import cached_property
from common.db.models import JMSBaseModel
from orgs.mixins.models import OrgModelMixin
@@ -30,10 +31,10 @@ class SessionSharing(JMSBaseModel, OrgModelMixin):
default=0, verbose_name=_('Expired time (min)'), db_index=True
)
users = models.TextField(blank=True, verbose_name=_("User"))
action_permission = models.CharField(
max_length=16, verbose_name=_('Action permission'), default='writable'
)
origin = models.URLField(blank=True, null=True, verbose_name=_('Origin'))
class Meta:
ordering = ('-date_created',)
@@ -45,15 +46,24 @@ class SessionSharing(JMSBaseModel, OrgModelMixin):
def __str__(self):
return 'Creator: {}'.format(self.creator)
@cached_property
def url(self):
return '%s/koko/share/%s/' % (self.origin, self.id)
@cached_property
def users_display(self):
if not self.users:
return []
with tmp_to_root_org():
user_ids = self.users.split(',')
users = User.objects.filter(id__in=user_ids)
users = self.users_queryset
users = [str(user) for user in users]
return users
@cached_property
def users_queryset(self):
user_ids = self.users.split(',')
return User.objects.filter(id__in=user_ids)
@property
def date_expired(self):
return self.date_created + datetime.timedelta(minutes=self.expired_time)

View File

@@ -255,3 +255,27 @@ class StorageConnectivityMessage(SystemMessage):
'subject': subject,
'message': message
}
class SessionSharingMessage(UserMessage):
message_type_label = _('Session sharing')
def __init__(self, user, instance):
super().__init__(user)
self.instance = instance
def get_html_msg(self) -> dict:
instance = self.instance
context = {
'asset': instance.session.asset,
'created_by': instance.created_by,
'account': instance.session.account,
'url': instance.url,
'verify_code': instance.verify_code,
'org': instance.org_name,
}
message = render_to_string('terminal/_msg_session_sharing.html', context)
return {
'subject': self.message_type_label + ' ' + self.instance.created_by,
'message': message
}

View File

@@ -26,7 +26,7 @@ class SessionSharingSerializer(OrgResourceModelSerializerMixin):
fields_small = fields_mini + [
'verify_code', 'is_active', 'expired_time', 'created_by',
'date_created', 'date_updated', 'users', 'users_display',
'action_permission'
'action_permission', 'origin', 'url',
]
fields_fk = ['session', 'creator']
fields = fields_small + fields_fk

View File

@@ -1,3 +1,4 @@
from .applet import *
from .db_port import *
from .terminal import *
from .session_sharing import *

View File

@@ -0,0 +1,13 @@
from django.db.models.signals import post_save
from django.dispatch import receiver
from terminal.models import SessionSharing
from terminal.notifications import SessionSharingMessage
@receiver(post_save, sender=SessionSharing)
def on_session_sharing_created(sender, instance: SessionSharing, created, **kwargs):
if not created:
return
for user in instance.users_queryset:
SessionSharingMessage(user, instance).publish_async()

View File

@@ -0,0 +1,16 @@
{% load i18n %}
<div>
<b>{% trans 'Asset' %}: </b> <span>{{ asset }}</span>
<br/>
<b>{% trans 'User' %}: </b> <span>{{ created_by }}</span>
<br/>
<b>{% trans 'Account' %}: </b> <span>{{ account }}</span>
<br/>
<b>{% trans 'Session sharing URL' %}: </b><a href="{{ url }}" target="_blank">{% trans 'View' %}</a>
<br/>
<b>{% trans 'Verify code' %}: </b> <span>{{ verify_code }}</span>
<br/>
<b>{% trans 'Organization' %}: </b> <span>{{ org }}</span>
<br/>
</div>