Commit 58bb3cc8 authored by ibuler's avatar ibuler

Merge branch 'dev'

fix download error

static file lost
parents e2eb9b72 c2ff0520
...@@ -29,7 +29,7 @@ from django.contrib.sessions.models import Session ...@@ -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): ...@@ -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): ...@@ -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): ...@@ -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): ...@@ -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): ...@@ -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 = ...@@ -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') ...@@ -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): ...@@ -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) { ...@@ -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,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment