mirror of
https://github.com/jumpserver/jumpserver.git
synced 2025-07-21 18:12:13 +00:00
Merge branch 'dev'
fix download error static file lost
This commit is contained in:
commit
58bb3cc84f
21
connect.py
21
connect.py
@ -29,7 +29,7 @@ from django.contrib.sessions.models import Session
|
|||||||
from jumpserver.api import ServerError, User, Asset, PermRole, AssetGroup, get_object, mkdir, get_asset_info
|
from jumpserver.api import ServerError, User, Asset, PermRole, AssetGroup, get_object, mkdir, get_asset_info
|
||||||
from jumpserver.api import logger, Log, TtyLog, get_role_key, CRYPTOR, bash, get_tmp_dir
|
from jumpserver.api import logger, Log, TtyLog, get_role_key, CRYPTOR, bash, get_tmp_dir
|
||||||
from jperm.perm_api import gen_resource, get_group_asset_perm, get_group_user_perm, user_have_perm, PermRole
|
from jperm.perm_api import gen_resource, get_group_asset_perm, get_group_user_perm, user_have_perm, PermRole
|
||||||
from jumpserver.settings import LOG_DIR
|
from jumpserver.settings import LOG_DIR, NAV_SORT_BY
|
||||||
from jperm.ansible_api import MyRunner
|
from jperm.ansible_api import MyRunner
|
||||||
# from jlog.log_api import escapeString
|
# from jlog.log_api import escapeString
|
||||||
from jlog.models import ExecLog, FileLog
|
from jlog.models import ExecLog, FileLog
|
||||||
@ -437,11 +437,21 @@ class Nav(object):
|
|||||||
def __init__(self, user):
|
def __init__(self, user):
|
||||||
self.user = user
|
self.user = user
|
||||||
self.user_perm = get_group_user_perm(self.user)
|
self.user_perm = get_group_user_perm(self.user)
|
||||||
self.perm_assets = sorted(self.user_perm.get('asset', []).keys(),
|
if NAV_SORT_BY == 'ip':
|
||||||
key=lambda x: [int(num) for num in x.ip.split('.') if num.isdigit()])
|
self.perm_assets = sorted(self.user_perm.get('asset', []).keys(),
|
||||||
|
key=lambda x: [int(num) for num in x.ip.split('.') if num.isdigit()])
|
||||||
|
elif NAV_SORT_BY == 'hostname':
|
||||||
|
self.perm_assets = self.natural_sort_hostname(self.user_perm.get('asset', []).keys())
|
||||||
|
else:
|
||||||
|
self.perm_assets = tuple(self.user_perm.get('asset', []))
|
||||||
self.search_result = self.perm_assets
|
self.search_result = self.perm_assets
|
||||||
self.perm_asset_groups = self.user_perm.get('asset_group', [])
|
self.perm_asset_groups = self.user_perm.get('asset_group', [])
|
||||||
|
|
||||||
|
def natural_sort_hostname(self, list):
|
||||||
|
convert = lambda text: int(text) if text.isdigit() else text.lower()
|
||||||
|
alphanum_key = lambda x: [ convert(c) for c in re.split('([0-9]+)', x.hostname) ]
|
||||||
|
return sorted(list, key = alphanum_key)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def print_nav():
|
def print_nav():
|
||||||
"""
|
"""
|
||||||
@ -490,8 +500,9 @@ class Nav(object):
|
|||||||
except (ValueError, TypeError):
|
except (ValueError, TypeError):
|
||||||
# 匹配 ip, hostname, 备注
|
# 匹配 ip, hostname, 备注
|
||||||
str_r = str_r.lower()
|
str_r = str_r.lower()
|
||||||
self.search_result = [asset for asset in self.perm_assets if str_r in str(asset.ip).lower()
|
self.search_result = [asset for asset in self.perm_assets if str_r == str(asset.ip).lower()] or \
|
||||||
or str_r in str(asset.hostname).lower()
|
[asset for asset in self.perm_assets if str_r in str(asset.ip).lower() \
|
||||||
|
or str_r in str(asset.hostname).lower() \
|
||||||
or str_r in str(asset.comment).lower()]
|
or str_r in str(asset.comment).lower()]
|
||||||
else:
|
else:
|
||||||
# 如果没有输入就展现所有
|
# 如果没有输入就展现所有
|
||||||
|
@ -26,7 +26,7 @@ class PermSudo(models.Model):
|
|||||||
class PermRole(models.Model):
|
class PermRole(models.Model):
|
||||||
name = models.CharField(max_length=100, unique=True)
|
name = models.CharField(max_length=100, unique=True)
|
||||||
comment = models.CharField(max_length=100, null=True, blank=True, default='')
|
comment = models.CharField(max_length=100, null=True, blank=True, default='')
|
||||||
password = models.CharField(max_length=128)
|
password = models.CharField(max_length=512)
|
||||||
key_path = models.CharField(max_length=100)
|
key_path = models.CharField(max_length=100)
|
||||||
date_added = models.DateTimeField(auto_now=True)
|
date_added = models.DateTimeField(auto_now=True)
|
||||||
sudo = models.ManyToManyField(PermSudo, related_name='perm_role')
|
sudo = models.ManyToManyField(PermSudo, related_name='perm_role')
|
||||||
|
@ -290,6 +290,8 @@ def perm_role_add(request):
|
|||||||
if name == "root":
|
if name == "root":
|
||||||
raise ServerError(u'禁止使用root用户作为系统用户,这样非常危险!')
|
raise ServerError(u'禁止使用root用户作为系统用户,这样非常危险!')
|
||||||
default = get_object(Setting, name='default')
|
default = get_object(Setting, name='default')
|
||||||
|
if len(password) > 64:
|
||||||
|
raise ServerError(u'密码长度不能超过64位!')
|
||||||
|
|
||||||
if password:
|
if password:
|
||||||
encrypt_pass = CRYPTOR.encrypt(password)
|
encrypt_pass = CRYPTOR.encrypt(password)
|
||||||
@ -446,6 +448,8 @@ def perm_role_edit(request):
|
|||||||
role_sudo_names = request.POST.getlist("sudo_name")
|
role_sudo_names = request.POST.getlist("sudo_name")
|
||||||
role_sudos = [PermSudo.objects.get(id=sudo_id) for sudo_id in role_sudo_names]
|
role_sudos = [PermSudo.objects.get(id=sudo_id) for sudo_id in role_sudo_names]
|
||||||
key_content = request.POST.get("role_key", "")
|
key_content = request.POST.get("role_key", "")
|
||||||
|
if len(role_password) > 64:
|
||||||
|
raise ServerError(u'密码长度不能超过64位!')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if not role:
|
if not role:
|
||||||
|
@ -20,3 +20,6 @@ email_host_user =
|
|||||||
email_host_password =
|
email_host_password =
|
||||||
email_use_tls = True
|
email_use_tls = True
|
||||||
email_use_ssl = False
|
email_use_ssl = False
|
||||||
|
|
||||||
|
[connect]
|
||||||
|
nav_sort_by = ip
|
||||||
|
@ -49,6 +49,12 @@ LOG_LEVEL = config.get('base', 'log')
|
|||||||
IP = config.get('base', 'ip')
|
IP = config.get('base', 'ip')
|
||||||
PORT = config.get('base', 'port')
|
PORT = config.get('base', 'port')
|
||||||
|
|
||||||
|
# ======== Connect ==========
|
||||||
|
try:
|
||||||
|
NAV_SORT_BY = config.get('connect', 'nav_sort_by')
|
||||||
|
except (ConfigParser.NoSectionError, ConfigParser.NoOptionError):
|
||||||
|
NAV_SORT_BY = 'ip'
|
||||||
|
|
||||||
# Quick-start development settings - unsuitable for production
|
# Quick-start development settings - unsuitable for production
|
||||||
# See https://docs.djangoproject.com/en/1.7/howto/deployment/checklist/
|
# See https://docs.djangoproject.com/en/1.7/howto/deployment/checklist/
|
||||||
|
|
||||||
|
@ -326,11 +326,10 @@ def download(request):
|
|||||||
FileLog(user=request.user.username, host=' '.join([asset.hostname for asset in asset_select]),
|
FileLog(user=request.user.username, host=' '.join([asset.hostname for asset in asset_select]),
|
||||||
filename=file_path, type='download', remote_ip=remote_ip, result=runner.results).save()
|
filename=file_path, type='download', remote_ip=remote_ip, result=runner.results).save()
|
||||||
logger.debug(runner.results)
|
logger.debug(runner.results)
|
||||||
# os.chdir('/tmp')
|
|
||||||
tmp_dir_name = os.path.basename(upload_dir)
|
tmp_dir_name = os.path.basename(upload_dir)
|
||||||
tar_file = '%s.tar.gz' % upload_dir
|
tar_file = '%s.tar.gz' % tmp_dir_name
|
||||||
bash('tar czf %s %s' % (tar_file, tmp_dir_name))
|
bash('cd /tmp && tar czf %s %s' % (tar_file, tmp_dir_name))
|
||||||
f = open(tar_file)
|
f = open('/tmp/%s' % tar_file)
|
||||||
data = f.read()
|
data = f.read()
|
||||||
f.close()
|
f.close()
|
||||||
response = HttpResponse(data, content_type='application/octet-stream')
|
response = HttpResponse(data, content_type='application/octet-stream')
|
||||||
|
@ -66,12 +66,10 @@ function openTerminal(options) {
|
|||||||
} else {
|
} else {
|
||||||
rowHeight = 35
|
rowHeight = 35
|
||||||
}
|
}
|
||||||
;
|
|
||||||
if (colWidth) {
|
if (colWidth) {
|
||||||
} else {
|
} else {
|
||||||
colWidth = 100
|
colWidth = 100
|
||||||
}
|
}
|
||||||
;
|
|
||||||
|
|
||||||
var term = new Terminal({
|
var term = new Terminal({
|
||||||
rows: rowHeight,
|
rows: rowHeight,
|
||||||
|
Loading…
Reference in New Issue
Block a user