Merge branch 'dev' of git.coding.net:jumpserver/jumpserver into dev

pull/26/head
ibuler 2015-12-10 14:42:03 +08:00
commit affd9aadb5
1 changed files with 31 additions and 10 deletions

View File

@ -3,18 +3,21 @@
from django.db.models import Q from django.db.models import Q
from paramiko import SSHException from paramiko import SSHException
from jperm.perm_api import * from jperm.perm_api import *
from juser.user_api import gen_ssh_key
from juser.models import User, UserGroup from juser.models import User, UserGroup
from jasset.models import Asset, AssetGroup from jasset.models import Asset, AssetGroup
from jperm.models import PermRole, PermRule, PermSudo, PermPush from jperm.models import PermRole, PermRule, PermSudo, PermPush
from jumpserver.models import Setting from jumpserver.models import Setting
from jperm.utils import updates_dict, gen_keys, get_rand_pass from jperm.utils import gen_keys
from jperm.ansible_api import MyTask from jperm.ansible_api import MyTask
from jperm.perm_api import get_role_info, get_role_push_host from jperm.perm_api import get_role_info, get_role_push_host
from jumpserver.api import my_render, get_object, CRYPTOR from jumpserver.api import my_render, get_object, CRYPTOR
# 设置PERM APP Log
from jumpserver.settings import LOG_LEVEL
logger = set_log(LOG_LEVEL, filename='jumpserver_perm.log')
@require_role('admin') @require_role('admin')
def perm_rule_list(request): def perm_rule_list(request):
@ -89,6 +92,7 @@ def perm_rule_add(request):
try: try:
rule = get_object(PermRule, name=rule_name) rule = get_object(PermRule, name=rule_name)
if rule: if rule:
raise ServerError(u'授权规则 %s 已存在' % rule_name) raise ServerError(u'授权规则 %s 已存在' % rule_name)
@ -106,8 +110,6 @@ def perm_rule_add(request):
# 获取需要授权的用户列表 # 获取需要授权的用户列表
users_obj = [User.objects.get(id=user_id) for user_id in users_select] users_obj = [User.objects.get(id=user_id) for user_id in users_select]
user_groups_obj = [UserGroup.objects.get(id=group_id) for group_id in user_groups_select] user_groups_obj = [UserGroup.objects.get(id=group_id) for group_id in user_groups_select]
# group_users_obj = [user for user in [group.user_set.all() for group in user_groups_obj]]
# calc_users = set(group_users_obj) | set(users_obj)
# 获取授予的角色列表 # 获取授予的角色列表
roles_obj = [PermRole.objects.get(id=role_id) for role_id in roles_select] roles_obj = [PermRole.objects.get(id=role_id) for role_id in roles_select]
@ -304,20 +306,31 @@ def perm_role_delete(request):
if request.method == "POST": if request.method == "POST":
# 获取参数删除的role对象 # 获取参数删除的role对象
role_id = request.POST.get("id") role_id = request.POST.get("id")
role = PermRole.objects.get(id=role_id) role = get_object(PermRole, id=role_id)
role_key = role.key_path role_key = role.key_path
# 删除推送到主机上的role
recycle_assets = [push.asset for push in role.perm_push.all() if push.success]
logger.debug(u"delete role %s - delete_assets: %s" % (role.name, recycle_assets))
if recycle_assets:
recycle_resource = gen_resource(recycle_assets)
task = MyTask(recycle_resource)
msg = task.del_user(get_object(PermRole, id=role_id).name)
logger.info(u"delete role %s - execute delete user: %s" % (role.name, msg))
# TODO: 判断返回结果,处理异常
# 删除存储的秘钥,以及目录 # 删除存储的秘钥,以及目录
key_files = os.listdir(role_key) key_files = os.listdir(role_key)
for key_file in key_files: for key_file in key_files:
os.remove(os.path.join(role_key, key_file)) os.remove(os.path.join(role_key, key_file))
os.rmdir(role_key) os.rmdir(role_key)
# 数据库里删除记录 logger.info(u"delete role %s - delete role key directory: %s" % (role.name, role_key))
# 数据库里删除记录 TODO: 判断返回结果,处理异常
role.delete() role.delete()
return HttpResponse(u"删除角色: %s" % role.name) return HttpResponse(u"删除角色: %s" % role.name)
else: else:
return HttpResponse(u"不支持该操作") return HttpResponse(u"不支持该操作")
@require_role('admin') @require_role('admin')
def perm_role_detail(request): def perm_role_detail(request):
""" """
@ -609,16 +622,24 @@ def perm_sudo_delete(request):
def perm_role_recycle(request): def perm_role_recycle(request):
role_id = request.GET.get('role_id') role_id = request.GET.get('role_id')
asset_ids = request.GET.get('asset_id').split(',') asset_ids = request.GET.get('asset_id').split(',')
assets = []
# 仅有推送的角色才回收
assets = [get_object(Asset, id=asset_id) for asset_id in asset_ids]
recycle_assets = []
for asset in assets:
if True in [push.success for push in asset.perm_push.all()]:
recycle_assets.append(asset)
recycle_resource = gen_resource(recycle_assets)
task = MyTask(recycle_resource)
# TODO: 判断返回结果,处理异常
msg = task.del_user(get_object(PermRole, id=role_id).name)
for asset_id in asset_ids: for asset_id in asset_ids:
asset = get_object(Asset, id=asset_id) asset = get_object(Asset, id=asset_id)
assets.append(asset) assets.append(asset)
role = get_object(PermRole, id=role_id) role = get_object(PermRole, id=role_id)
PermPush.objects.filter(asset=asset, role=role).delete() PermPush.objects.filter(asset=asset, role=role).delete()
res = gen_resource(assets)
task = MyTask(res)
return HttpResponse('删除成功') return HttpResponse('删除成功')