Commit 913f93b9 authored by ibuler's avatar ibuler

删除部门前

parent c1facb93
...@@ -17,8 +17,8 @@ from multiprocessing import Pool ...@@ -17,8 +17,8 @@ from multiprocessing import Pool
os.environ['DJANGO_SETTINGS_MODULE'] = 'jumpserver.settings' os.environ['DJANGO_SETTINGS_MODULE'] = 'jumpserver.settings'
if django.get_version() != '1.6': if django.get_version() != '1.6':
django.setup() django.setup()
from jumpserver.api import BASE_DIR, ServerError, User, UserGroup, Asset, Jtty, get_object from jumpserver.api import ServerError, User, Asset, Jtty, get_object
from jumpserver.api import CRYPTOR, logger, is_dir from jumpserver.api import logger
from jumpserver.api import BisGroup as AssetGroup from jumpserver.api import BisGroup as AssetGroup
login_user = get_object(User, username=getpass.getuser()) login_user = get_object(User, username=getpass.getuser())
...@@ -27,7 +27,7 @@ login_user = get_object(User, username=getpass.getuser()) ...@@ -27,7 +27,7 @@ login_user = get_object(User, username=getpass.getuser())
def color_print(msg, color='red', exits=False): def color_print(msg, color='red', exits=False):
""" """
Print colorful string. Print colorful string.
颜色打印 颜色打印字符或者退出
""" """
color_msg = {'blue': '\033[1;36m%s\033[0m', color_msg = {'blue': '\033[1;36m%s\033[0m',
'green': '\033[1;32m%s\033[0m', 'green': '\033[1;32m%s\033[0m',
...@@ -40,7 +40,10 @@ def color_print(msg, color='red', exits=False): ...@@ -40,7 +40,10 @@ def color_print(msg, color='red', exits=False):
def verify_connect(user, option): def verify_connect(user, option):
"""鉴定用户是否有该主机权限 或 匹配到的ip是否唯一""" """
Check user was permed or not . Check ip is unique or not.
鉴定用户是否有该主机权限 或 匹配到的ip是否唯一
"""
ip_matched = [] ip_matched = []
try: try:
assets_info = login_user.get_asset_info() assets_info = login_user.get_asset_info()
...@@ -60,7 +63,7 @@ def verify_connect(user, option): ...@@ -60,7 +63,7 @@ def verify_connect(user, option):
logger.debug('%s matched input %s: %s' % (login_user.username, option, ip_matched)) logger.debug('%s matched input %s: %s' % (login_user.username, option, ip_matched))
ip_matched = list(set(ip_matched)) ip_matched = list(set(ip_matched))
if len(ip_matched) > 1: if len(ip_matched) > 1: # 如果匹配ip不唯一
ip_comment = {} ip_comment = {}
for ip in ip_matched: for ip in ip_matched:
ip_comment[ip] = assets_info[ip][2] ip_comment[ip] = assets_info[ip][2]
...@@ -71,15 +74,19 @@ def verify_connect(user, option): ...@@ -71,15 +74,19 @@ def verify_connect(user, option):
else: else:
print '%-15s' % ip print '%-15s' % ip
print '' print ''
elif len(ip_matched) < 1: elif len(ip_matched) < 1: # 如果没匹配到
color_print('没有该主机,或者您没有该主机的权限 No Permission or No host.', 'red') color_print('没有该主机,或者您没有该主机的权限 No Permission or No host.', 'red')
else: else: # 恰好是1个
asset = get_object(Asset, ip=ip_matched[0]) asset = get_object(Asset, ip=ip_matched[0])
jtty = Jtty(user, asset) jtty = Jtty(user, asset)
jtty.connect() jtty.connect()
def print_prompt(): def print_prompt():
"""
Print prompt
打印提示导航
"""
msg = """\033[1;32m### Welcome Use JumpServer To Login. ### \033[0m msg = """\033[1;32m### Welcome Use JumpServer To Login. ### \033[0m
1) Type \033[32mIP or Part IP, Host Alias or Comments \033[0m To Login. 1) Type \033[32mIP or Part IP, Host Alias or Comments \033[0m To Login.
2) Type \033[32mP/p\033[0m To Print The Servers You Available. 2) Type \033[32mP/p\033[0m To Print The Servers You Available.
...@@ -162,6 +169,10 @@ def print_prompt(): ...@@ -162,6 +169,10 @@ def print_prompt():
def main(): def main():
"""
he he
主程序
"""
if not login_user: # 判断用户是否存在 if not login_user: # 判断用户是否存在
color_print(u'没有该用户,或许你是以root运行的 No that user.', exits=True) color_print(u'没有该用户,或许你是以root运行的 No that user.', exits=True)
......
This diff is collapsed.
...@@ -14,10 +14,12 @@ def name_proc(request): ...@@ -14,10 +14,12 @@ def name_proc(request):
host_active_num = Asset.objects.filter(is_active=True).count() host_active_num = Asset.objects.filter(is_active=True).count()
else: else:
user, dept = get_session_user_dept(request) user, dept = get_session_user_dept(request)
print user, dept
user_total_num = dept.user_set.all().count() user_total_num = dept.user_set.all().count()
user_active_num = dept.user_set.filter(is_active=True).count() user_active_num = dept.user_set.filter(is_active=True).count()
host_total_num = dept.asset_set.all().count() host_total_num = dept.asset_set.all().count()
host_active_num = dept.asset_set.all().filter(is_active=True).count() host_active_num = dept.asset_set.all().filter(is_active=True).count()
pass
username = User.objects.get(id=user_id).name username = User.objects.get(id=user_id).name
apply_info = Apply.objects.filter(admin=username, status=0, read=0) apply_info = Apply.objects.filter(admin=username, status=0, read=0)
......
...@@ -56,9 +56,9 @@ INSTALLED_APPS = ( ...@@ -56,9 +56,9 @@ INSTALLED_APPS = (
'django.contrib.humanize', 'django.contrib.humanize',
'jumpserver', 'jumpserver',
'juser', 'juser',
'jasset', # 'jasset',
'jperm', # 'jperm',
'jlog', # 'jlog',
) )
MIDDLEWARE_CLASSES = ( MIDDLEWARE_CLASSES = (
......
...@@ -14,9 +14,9 @@ urlpatterns = patterns('', ...@@ -14,9 +14,9 @@ urlpatterns = patterns('',
(r'^file/download/$', 'jumpserver.views.download'), (r'^file/download/$', 'jumpserver.views.download'),
(r'^error/$', 'jumpserver.views.httperror'), (r'^error/$', 'jumpserver.views.httperror'),
(r'^juser/', include('juser.urls')), (r'^juser/', include('juser.urls')),
(r'^jasset/', include('jasset.urls')), # (r'^jasset/', include('jasset.urls')),
(r'^jlog/', include('jlog.urls')), # (r'^jlog/', include('jlog.urls')),
(r'^jperm/', include('jperm.urls')), # (r'^jperm/', include('jperm.urls')),
(r'^node_auth/', 'jumpserver.views.node_auth'), (r'^node_auth/', 'jumpserver.views.node_auth'),
) )
# coding: utf-8 # coding: utf-8
from __future__ import division from __future__ import division
import uuid
import urllib
from django.db.models import Count from django.db.models import Count
from django.shortcuts import render_to_response from django.shortcuts import render_to_response
from django.template import RequestContext from django.template import RequestContext
from django.http import HttpResponseNotFound from django.http import HttpResponseNotFound
from django.http import HttpResponse
from jperm.models import Apply from jperm.models import Apply
import paramiko import paramiko
from jumpserver.api import * from jumpserver.api import *
import uuid
import urllib
def getDaysByNum(num): def getDaysByNum(num):
...@@ -44,7 +47,7 @@ def get_data(data, items, option): ...@@ -44,7 +47,7 @@ def get_data(data, items, option):
return dic return dic
@require_login @require_role(role='user')
def index_cu(request): def index_cu(request):
user_id = request.session.get('user_id') user_id = request.session.get('user_id')
user = User.objects.filter(id=user_id) user = User.objects.filter(id=user_id)
...@@ -53,7 +56,7 @@ def index_cu(request): ...@@ -53,7 +56,7 @@ def index_cu(request):
login_types = {'L': 'LDAP', 'M': 'MAP'} login_types = {'L': 'LDAP', 'M': 'MAP'}
user_id = request.session.get('user_id') user_id = request.session.get('user_id')
username = User.objects.get(id=user_id).username username = User.objects.get(id=user_id).username
posts = user_perm_asset_api(username) posts = user.get_asset()
host_count = len(posts) host_count = len(posts)
new_posts = [] new_posts = []
post_five = [] post_five = []
...@@ -68,16 +71,16 @@ def index_cu(request): ...@@ -68,16 +71,16 @@ def index_cu(request):
return render_to_response('index_cu.html', locals(), context_instance=RequestContext(request)) return render_to_response('index_cu.html', locals(), context_instance=RequestContext(request))
@require_login @require_role(role='user')
def index(request): def index(request):
li_date, li_str = getDaysByNum(7) li_date, li_str = getDaysByNum(7)
today = datetime.datetime.now().day today = datetime.datetime.now().day
from_week = datetime.datetime.now() - datetime.timedelta(days=7) from_week = datetime.datetime.now() - datetime.timedelta(days=7)
if is_common_user(request): if is_role_request(request, 'user'):
return index_cu(request) return index_cu(request)
elif is_super_user(request): elif is_role_request(request, 'super'):
users = User.objects.all() users = User.objects.all()
hosts = Asset.objects.all() hosts = Asset.objects.all()
online = Log.objects.filter(is_finished=0) online = Log.objects.filter(is_finished=0)
...@@ -87,7 +90,7 @@ def index(request): ...@@ -87,7 +90,7 @@ def index(request):
active_hosts = Asset.objects.filter(is_active=1) active_hosts = Asset.objects.filter(is_active=1)
week_data = Log.objects.filter(start_time__range=[from_week, datetime.datetime.now()]) week_data = Log.objects.filter(start_time__range=[from_week, datetime.datetime.now()])
elif is_group_admin(request): elif is_role_request(request, 'admin'):
user = get_session_user_info(request)[2] user = get_session_user_info(request)[2]
dept_name, dept = get_session_user_info(request)[4:] dept_name, dept = get_session_user_info(request)[4:]
users = User.objects.filter(dept=dept) users = User.objects.filter(dept=dept)
...@@ -205,7 +208,7 @@ def login(request): ...@@ -205,7 +208,7 @@ def login(request):
user_filter = User.objects.filter(username=username) user_filter = User.objects.filter(username=username)
if user_filter: if user_filter:
user = user_filter[0] user = user_filter[0]
if md5_crypt(password) == user.password: if PyCrypt.md5_crypt(password) == user.password:
request.session['user_id'] = user.id request.session['user_id'] = user.id
user_filter.update(last_login=datetime.datetime.now()) user_filter.update(last_login=datetime.datetime.now())
if user.role == 'SU': if user.role == 'SU':
...@@ -216,7 +219,7 @@ def login(request): ...@@ -216,7 +219,7 @@ def login(request):
request.session['role_id'] = 0 request.session['role_id'] = 0
response = HttpResponseRedirect('/', ) response = HttpResponseRedirect('/', )
response.set_cookie('username', username, expires=604800) response.set_cookie('username', username, expires=604800)
response.set_cookie('seed', md5_crypt(password), expires=604800) response.set_cookie('seed', PyCrypt.md5_crypt(password), expires=604800)
return response return response
else: else:
error = '密码错误,请重新输入。' error = '密码错误,请重新输入。'
...@@ -248,7 +251,7 @@ def filter_ajax_api(request): ...@@ -248,7 +251,7 @@ def filter_ajax_api(request):
def install(request): def install(request):
from juser.models import DEPT, User from juser.models import DEPT, User
if User.objects.filter(id=5000): if User.objects.filter(id=5000):
return httperror(request, 'Jumpserver已初始化,不能重复安装!') return http_error(request, 'Jumpserver已初始化,不能重复安装!')
dept = DEPT(id=1, name="超管部", comment="超级管理部门") dept = DEPT(id=1, name="超管部", comment="超级管理部门")
dept.save() dept.save()
...@@ -257,7 +260,7 @@ def install(request): ...@@ -257,7 +260,7 @@ def install(request):
IDC(id=1, name="默认", comment="默认IDC").save() IDC(id=1, name="默认", comment="默认IDC").save()
BisGroup(id=1, name="ALL", dept=dept, comment="所有主机组").save() BisGroup(id=1, name="ALL", dept=dept, comment="所有主机组").save()
User(id=5000, username="admin", password=md5_crypt('admin'), User(id=5000, username="admin", password=PyCrypt.md5_crypt('admin'),
name='admin', email='admin@jumpserver.org', role='SU', is_active=True, dept=dept).save() name='admin', email='admin@jumpserver.org', role='SU', is_active=True, dept=dept).save()
return http_success(request, u'Jumpserver初始化成功') return http_success(request, u'Jumpserver初始化成功')
...@@ -278,55 +281,56 @@ def transfer(sftp, filenames): ...@@ -278,55 +281,56 @@ def transfer(sftp, filenames):
def upload(request): def upload(request):
user, dept = get_session_user_dept(request) pass
if request.method == 'POST': # user, dept = get_session_user_dept(request)
hosts = request.POST.get('hosts') # if request.method == 'POST':
upload_files = request.FILES.getlist('file[]', None) # hosts = request.POST.get('hosts')
upload_dir = "/tmp/%s" % user.username # upload_files = request.FILES.getlist('file[]', None)
is_dir(upload_dir) # upload_dir = "/tmp/%s" % user.username
date_now = datetime.datetime.now().strftime("%Y%m%d%H%M%S") # is_dir(upload_dir)
hosts_list = hosts.split(',') # date_now = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
user_hosts = get_user_host(user.username).keys() # hosts_list = hosts.split(',')
unperm_hosts = [] # user_hosts = [asset.ip for asset in user.get_asset()]
filenames = {} # unperm_hosts = []
for ip in hosts_list: # filenames = {}
if ip not in user_hosts: # for ip in hosts_list:
unperm_hosts.append(ip) # if ip not in user_hosts:
# unperm_hosts.append(ip)
if not hosts: #
return HttpResponseNotFound(u'地址不能为空') # if not hosts:
# return HttpResponseNotFound(u'地址不能为空')
if unperm_hosts: #
print hosts_list # if unperm_hosts:
return HttpResponseNotFound(u'%s 没有权限.' % ', '.join(unperm_hosts)) # print hosts_list
# return HttpResponseNotFound(u'%s 没有权限.' % ', '.join(unperm_hosts))
for upload_file in upload_files: #
file_path = '%s/%s.%s' % (upload_dir, upload_file.name, date_now) # for upload_file in upload_files:
filenames[upload_file.name] = file_path # file_path = '%s/%s.%s' % (upload_dir, upload_file.name, date_now)
f = open(file_path, 'w') # filenames[upload_file.name] = file_path
for chunk in upload_file.chunks(): # f = open(file_path, 'w')
f.write(chunk) # for chunk in upload_file.chunks():
f.close() # f.write(chunk)
# f.close()
sftps = [] #
for host in hosts_list: # sftps = []
username, password, host, port = get_connect_item(user.username, host) # for host in hosts_list:
try: # username, password, host, port = get_connect_item(user.username, host)
t = paramiko.Transport((host, port)) # try:
t.connect(username=username, password=password) # t = paramiko.Transport((host, port))
sftp = paramiko.SFTPClient.from_transport(t) # t.connect(username=username, password=password)
sftps.append(sftp) # sftp = paramiko.SFTPClient.from_transport(t)
except paramiko.AuthenticationException: # sftps.append(sftp)
return HttpResponseNotFound(u'%s 连接失败.' % host) # except paramiko.AuthenticationException:
# return HttpResponseNotFound(u'%s 连接失败.' % host)
# pool = Pool(processes=5) #
for sftp in sftps: # # pool = Pool(processes=5)
transfer(sftp, filenames) # for sftp in sftps:
# pool.close() # transfer(sftp, filenames)
# pool.join() # # pool.close()
return HttpResponse('传送成功') # # pool.join()
# return HttpResponse('传送成功')
return render_to_response('upload.html', locals(), context_instance=RequestContext(request)) #
# return render_to_response('upload.html', locals(), context_instance=RequestContext(request))
def node_auth(request): def node_auth(request):
......
This diff is collapsed.
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
<link rel="shortcut icon" href="/static/img/facio.ico" type="image/x-icon"> <link rel="shortcut icon" href="/static/img/facio.ico" type="image/x-icon">
{% include 'link_css.html' %} {% include 'link_css.html' %}
{% include 'head_script.html' %} {% include 'head_script.html' %}
{% block self_head_css_js %} {% endblock %}
</head> </head>
...@@ -30,4 +31,5 @@ ...@@ -30,4 +31,5 @@
</body> </body>
{% include 'foot_script.html' %} {% include 'foot_script.html' %}
{% block self_footer_js %} {% endblock %}
</html> </html>
...@@ -15,12 +15,7 @@ ...@@ -15,12 +15,7 @@
<a class="dropdown-toggle" data-toggle="dropdown" href="#"> <a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i> <i class="fa fa-wrench"></i>
</a> </a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">未启用 1</a>
</li>
<li><a href="#">未启用 2</a>
</li>
</ul>
<a class="close-link"> <a class="close-link">
<i class="fa fa-times"></i> <i class="fa fa-times"></i>
</a> </a>
...@@ -38,37 +33,13 @@ ...@@ -38,37 +33,13 @@
<label for="name" class="col-sm-2 control-label">部门名称<span class="red-fonts">*</span></label> <label for="name" class="col-sm-2 control-label">部门名称<span class="red-fonts">*</span></label>
<div class="col-sm-8"> <div class="col-sm-8">
{% if error %} {% if error %}
<input id="name" name="name" placeholder="Dept name" type="text" class="form-control" value="{{ name }}"> <input id="name" name="name" placeholder="Department name" type="text" class="form-control" value="{{ name }}">
{% else %} {% else %}
<input id="name" name="name" placeholder="Dept name" type="text" class="form-control"> <input id="name" name="name" placeholder="Department name" type="text" class="form-control">
{% endif %} {% endif %}
</div> </div>
</div> </div>
{# <div class="hr-line-dashed"></div>#}
{# <div class="form-group">#}
{# <label for="users" class="col-lg-2 control-label">管理员</label>#}
{# <div class="col-sm-3">#}
{# <select id="users" name="users" size="12" class="form-control m-b" multiple>#}
{# {% for user in users %}#}
{# <option value="{{ user.id }}">{{ user.name }}</option>#}
{# {% endfor %}#}
{# </select>#}
{# </div>#}
{# <div class="col-sm-1">#}
{# <div class="btn-group" style="margin-top: 50px;">#}
{# <button type="button" class="btn btn-white" onclick="move('users', 'users_selected')"><i class="fa fa-chevron-right"></i></button>#}
{# <button type="button" class="btn btn-white" onclick="move('users_selected', 'users')"><i class="fa fa-chevron-left"></i> </button>#}
{# </div>#}
{# </div>#}
{# <div class="col-sm-3">#}
{# <div>#}
{# <select id="users_selected" name="users_selected" class="form-control m-b" size="12" multiple>#}
{# </select>#}
{# </div>#}
{# </div>#}
{# </div>#}
<div class="hr-line-dashed"></div> <div class="hr-line-dashed"></div>
<div class="form-group"> <div class="form-group">
<label for="comment" class="col-sm-2 control-label">备注</label> <label for="comment" class="col-sm-2 control-label">备注</label>
...@@ -95,6 +66,9 @@ ...@@ -95,6 +66,9 @@
</div> </div>
</div> </div>
{% endblock %}
{% block self_footer_js %}
<script> <script>
$('#deptForm').validator({ $('#deptForm').validator({
timely: 2, timely: 2,
...@@ -104,7 +78,7 @@ $('#deptForm').validator({ ...@@ -104,7 +78,7 @@ $('#deptForm').validator({
rule: "required", rule: "required",
tip: "输入部门名称", tip: "输入部门名称",
ok: "", ok: "",
msg: {required: "必须填写!"} msg: {required: "必须填写!!"}
} }
}, },
valid: function(form) { valid: function(form) {
...@@ -112,13 +86,6 @@ $('#deptForm').validator({ ...@@ -112,13 +86,6 @@ $('#deptForm').validator({
} }
}); });
function change_type(type){
$.post('/juser/group_add_ajax/',
{'type': type},
function(data){
$('#users').html(data)
})
}
$(document).ready(function(){ $(document).ready(function(){
$("#submit_button").click(function(){ $("#submit_button").click(function(){
......
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