mirror of https://github.com/jumpserver/jumpserver
commit
6d5bec1ef2
|
@ -127,7 +127,11 @@ def on_audits_log_create(sender, instance=None, **kwargs):
|
||||||
def get_login_backend(request):
|
def get_login_backend(request):
|
||||||
backend = request.session.get(BACKEND_SESSION_KEY, '')
|
backend = request.session.get(BACKEND_SESSION_KEY, '')
|
||||||
backend = backend.rsplit('.', maxsplit=1)[-1]
|
backend = backend.rsplit('.', maxsplit=1)[-1]
|
||||||
return LOGIN_BACKEND.get(backend, '')
|
if backend in LOGIN_BACKEND:
|
||||||
|
return LOGIN_BACKEND[backend]
|
||||||
|
else:
|
||||||
|
logger.warn(f'LOGIN_BACKEND_NOT_FOUND: {backend}')
|
||||||
|
return ''
|
||||||
|
|
||||||
|
|
||||||
def generate_data(username, request):
|
def generate_data(username, request):
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
from importlib import import_module
|
from importlib import import_module
|
||||||
|
|
||||||
|
from django.contrib.auth import BACKEND_SESSION_KEY
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.auth import user_logged_in
|
from django.contrib.auth import user_logged_in
|
||||||
from django.core.cache import cache
|
from django.core.cache import cache
|
||||||
|
@ -24,14 +25,17 @@ def on_user_auth_login_success(sender, user, request, **kwargs):
|
||||||
|
|
||||||
@receiver(openid_user_login_success)
|
@receiver(openid_user_login_success)
|
||||||
def on_oidc_user_login_success(sender, request, user, **kwargs):
|
def on_oidc_user_login_success(sender, request, user, **kwargs):
|
||||||
|
request.session[BACKEND_SESSION_KEY] = 'OIDCAuthCodeBackend'
|
||||||
post_auth_success.send(sender, user=user, request=request)
|
post_auth_success.send(sender, user=user, request=request)
|
||||||
|
|
||||||
|
|
||||||
@receiver(openid_user_login_failed)
|
@receiver(openid_user_login_failed)
|
||||||
def on_oidc_user_login_failed(sender, username, request, reason, **kwargs):
|
def on_oidc_user_login_failed(sender, username, request, reason, **kwargs):
|
||||||
|
request.session[BACKEND_SESSION_KEY] = 'OIDCAuthCodeBackend'
|
||||||
post_auth_failed.send(sender, username=username, request=request, reason=reason)
|
post_auth_failed.send(sender, username=username, request=request, reason=reason)
|
||||||
|
|
||||||
|
|
||||||
@receiver(cas_user_authenticated)
|
@receiver(cas_user_authenticated)
|
||||||
def on_cas_user_login_success(sender, request, user, **kwargs):
|
def on_cas_user_login_success(sender, request, user, **kwargs):
|
||||||
post_auth_success.send(sender, user=user, request=request)
|
request.session[BACKEND_SESSION_KEY] = 'CASBackend'
|
||||||
|
post_auth_success.send(sender, user=user, request=request)
|
||||||
|
|
|
@ -27,11 +27,13 @@ class BaseFileRenderer(BaseRenderer):
|
||||||
def set_response_disposition(self, response):
|
def set_response_disposition(self, response):
|
||||||
serializer = self.serializer
|
serializer = self.serializer
|
||||||
if response and hasattr(serializer, 'Meta') and hasattr(serializer.Meta, "model"):
|
if response and hasattr(serializer, 'Meta') and hasattr(serializer.Meta, "model"):
|
||||||
model_name = serializer.Meta.model.__name__.lower()
|
filename_prefix = serializer.Meta.model.__name__.lower()
|
||||||
now = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
|
else:
|
||||||
filename = "{}_{}.{}".format(model_name, now, self.format)
|
filename_prefix = 'download'
|
||||||
disposition = 'attachment; filename="{}"'.format(filename)
|
now = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
|
||||||
response['Content-Disposition'] = disposition
|
filename = "{}_{}.{}".format(filename_prefix, now, self.format)
|
||||||
|
disposition = 'attachment; filename="{}"'.format(filename)
|
||||||
|
response['Content-Disposition'] = disposition
|
||||||
|
|
||||||
def get_rendered_fields(self):
|
def get_rendered_fields(self):
|
||||||
fields = self.serializer.fields
|
fields = self.serializer.fields
|
||||||
|
|
Binary file not shown.
|
@ -1015,7 +1015,7 @@ msgstr "没有匹配到资产,结束任务"
|
||||||
#: users/templates/users/user_list.html:98
|
#: users/templates/users/user_list.html:98
|
||||||
#: users/templates/users/user_remote_app_permission.html:111
|
#: users/templates/users/user_remote_app_permission.html:111
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr "删除文件"
|
msgstr "删除"
|
||||||
|
|
||||||
#: audits/models.py:27
|
#: audits/models.py:27
|
||||||
msgid "Upload"
|
msgid "Upload"
|
||||||
|
|
|
@ -60,7 +60,7 @@ class CommandQueryMixin:
|
||||||
queryset = multi_command_storage.filter(
|
queryset = multi_command_storage.filter(
|
||||||
date_from=date_from, date_to=date_to,
|
date_from=date_from, date_to=date_to,
|
||||||
user=q.get("user"), asset=q.get("asset"), system_user=q.get("system_user"),
|
user=q.get("user"), asset=q.get("asset"), system_user=q.get("system_user"),
|
||||||
input=q.get("input"), session=q.get("session_id"),
|
input=q.get("input"), session=q.get("session_id", q.get('session')),
|
||||||
risk_level=self.get_query_risk_level(), org_id=self.get_org_id(),
|
risk_level=self.get_query_risk_level(), org_id=self.get_org_id(),
|
||||||
)
|
)
|
||||||
return queryset
|
return queryset
|
||||||
|
|
|
@ -132,7 +132,7 @@ class Session(OrgModelMixin):
|
||||||
return None, e
|
return None, e
|
||||||
|
|
||||||
if settings.SERVER_REPLAY_STORAGE:
|
if settings.SERVER_REPLAY_STORAGE:
|
||||||
from .tasks import upload_session_replay_to_external_storage
|
from ..tasks import upload_session_replay_to_external_storage
|
||||||
upload_session_replay_to_external_storage.delay(str(self.id))
|
upload_session_replay_to_external_storage.delay(str(self.id))
|
||||||
return name, None
|
return name, None
|
||||||
|
|
||||||
|
@ -146,10 +146,8 @@ class Session(OrgModelMixin):
|
||||||
return cls.objects.filter(is_finished=False)
|
return cls.objects.filter(is_finished=False)
|
||||||
|
|
||||||
def is_active(self):
|
def is_active(self):
|
||||||
if self.protocol in ['ssh', 'telnet', 'rdp', 'mysql']:
|
key = self.ACTIVE_CACHE_KEY_PREFIX.format(self.id)
|
||||||
key = self.ACTIVE_CACHE_KEY_PREFIX.format(self.id)
|
return bool(cache.get(key))
|
||||||
return bool(cache.get(key))
|
|
||||||
return True
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def command_amount(self):
|
def command_amount(self):
|
||||||
|
|
|
@ -6,17 +6,17 @@ from django.utils.translation import ugettext_lazy as _
|
||||||
class ComponentsStateSerializer(serializers.Serializer):
|
class ComponentsStateSerializer(serializers.Serializer):
|
||||||
# system
|
# system
|
||||||
system_cpu_load_1 = serializers.FloatField(
|
system_cpu_load_1 = serializers.FloatField(
|
||||||
required=False, default=0, label=_("System cpu load (1 minutes)")
|
required=False, label=_("System cpu load (1 minutes)")
|
||||||
)
|
)
|
||||||
system_memory_used_percent = serializers.FloatField(
|
system_memory_used_percent = serializers.FloatField(
|
||||||
required=False, default=0, label=_('System memory used percent')
|
required=False, label=_('System memory used percent')
|
||||||
)
|
)
|
||||||
system_disk_used_percent = serializers.FloatField(
|
system_disk_used_percent = serializers.FloatField(
|
||||||
required=False, default=0, label=_('System disk used percent')
|
required=False, label=_('System disk used percent')
|
||||||
)
|
)
|
||||||
# sessions
|
# sessions
|
||||||
session_active_count = serializers.IntegerField(
|
session_active_count = serializers.IntegerField(
|
||||||
required=False, default=0, label=_("Session active count")
|
required=False, label=_("Session active count")
|
||||||
)
|
)
|
||||||
|
|
||||||
def save(self, **kwargs):
|
def save(self, **kwargs):
|
||||||
|
|
|
@ -116,7 +116,8 @@ class ComponentsMetricsUtil(object):
|
||||||
|
|
||||||
def get_metrics(self, tp=None):
|
def get_metrics(self, tp=None):
|
||||||
components = self.get_components(tp)
|
components = self.get_components(tp)
|
||||||
total_count = normal_count = high_count = critical_count = session_active_total = 0
|
total_count = normal_count = high_count = critical_count = offline_count = \
|
||||||
|
session_active_total = 0
|
||||||
for component in components:
|
for component in components:
|
||||||
total_count += 1
|
total_count += 1
|
||||||
if component.is_alive:
|
if component.is_alive:
|
||||||
|
@ -129,12 +130,13 @@ class ComponentsMetricsUtil(object):
|
||||||
critical_count += 1
|
critical_count += 1
|
||||||
session_active_total += component.state.get('session_active_count', 0)
|
session_active_total += component.state.get('session_active_count', 0)
|
||||||
else:
|
else:
|
||||||
critical_count += 1
|
offline_count += 1
|
||||||
return {
|
return {
|
||||||
'total': total_count,
|
'total': total_count,
|
||||||
'normal': normal_count,
|
'normal': normal_count,
|
||||||
'high': high_count,
|
'high': high_count,
|
||||||
'critical': critical_count,
|
'critical': critical_count,
|
||||||
|
'offline': offline_count,
|
||||||
'session_active': session_active_total
|
'session_active': session_active_total
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -147,7 +149,8 @@ class ComponentsPrometheusMetricsUtil(ComponentsMetricsUtil):
|
||||||
'any': metrics['total'],
|
'any': metrics['total'],
|
||||||
'normal': metrics['normal'],
|
'normal': metrics['normal'],
|
||||||
'high': metrics['high'],
|
'high': metrics['high'],
|
||||||
'critical': metrics['critical']
|
'critical': metrics['critical'],
|
||||||
|
'offline': metrics['offline']
|
||||||
}
|
}
|
||||||
|
|
||||||
def get_prometheus_metrics_text(self):
|
def get_prometheus_metrics_text(self):
|
||||||
|
|
|
@ -28,3 +28,12 @@ class UserUserGroupRelationViewSet(JMSBulkRelationModelViewSet):
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def perform_create(self, serializer):
|
||||||
|
validated_data = []
|
||||||
|
for item in serializer.validated_data:
|
||||||
|
if item['user'].role == User.ROLE.AUDITOR:
|
||||||
|
continue
|
||||||
|
validated_data.append(item)
|
||||||
|
serializer._validated_data = validated_data
|
||||||
|
return super().perform_create(serializer)
|
||||||
|
|
Loading…
Reference in New Issue