Commit 4d844548 authored by yumaojun's avatar yumaojun

fixed merge...

parents b241d6d1 29e1090d
...@@ -46,12 +46,12 @@ def scriptToJSON(scriptf, timing=None): ...@@ -46,12 +46,12 @@ def scriptToJSON(scriptf, timing=None):
ret = [] ret = []
with closing(scriptf): with closing(scriptf):
print "# %s #" % scriptf.readline() # ignore first header line from script file scriptf.readline() # ignore first header line from script file
offset = 0 offset = 0
for t in timing: for t in timing:
dt = scriptf.read(t[1]) dt = scriptf.read(t[1])
data = escapeString(dt) data = escapeString(dt)
print ('###### (%s, %s)' % (t[1], repr(data))) # print ('###### (%s, %s)' % (t[1], repr(data)))
offset += t[0] offset += t[0]
ret.append((data, offset)) ret.append((data, offset))
return dumps(ret) return dumps(ret)
......
...@@ -326,7 +326,7 @@ class Tasks(Command): ...@@ -326,7 +326,7 @@ class Tasks(Command):
module_args = 'name=%s shell=/bin/bash password=%s' % (username, encrypt_pass) module_args = 'name=%s shell=/bin/bash password=%s' % (username, encrypt_pass)
self.__run(module_args, "user") self.__run(module_args, "user")
return {"status": "failed","msg": self.msg} if self.msg else {"status": "ok"} return {"status": "failed", "msg": self.msg} if self.msg else {"status": "ok"}
def add_multi_user(self, **user_info): def add_multi_user(self, **user_info):
""" """
...@@ -457,6 +457,7 @@ class Tasks(Command): ...@@ -457,6 +457,7 @@ class Tasks(Command):
return result return result
class CustomAggregateStats(callbacks.AggregateStats): class CustomAggregateStats(callbacks.AggregateStats):
""" """
Holds stats about per-host activity during playbook runs. Holds stats about per-host activity during playbook runs.
......
...@@ -22,6 +22,7 @@ class SysUser(models.Model): ...@@ -22,6 +22,7 @@ class SysUser(models.Model):
class PermSudo(models.Model): class PermSudo(models.Model):
name = models.CharField(max_length=100, unique=True) name = models.CharField(max_length=100, unique=True)
date_added = models.DateTimeField(auto_now=True) date_added = models.DateTimeField(auto_now=True)
runas = models.CharField(max_length=200, default='root')
commands = models.TextField() commands = models.TextField()
comment = models.CharField(max_length=100, null=True, blank=True, default='') comment = models.CharField(max_length=100, null=True, blank=True, default='')
......
...@@ -96,23 +96,21 @@ def gen_sudo(role_custom, role_name, role_chosen): ...@@ -96,23 +96,21 @@ def gen_sudo(role_custom, role_name, role_chosen):
return sudo_file_path return sudo_file_path
def get_add_sudo_script(sudo_chosen_aliase, sudo_chosen_obj): def get_add_sudo_script(role_chosen_aliase, sudo_alias):
""" """
get the sudo file get the sudo file
:param kwargs: :param kwargs:
:return: :return:
""" """
sudo_j2 = get_template('jperm/role_sudo.j2') sudo_j2 = get_template('jperm/role_sudo.j2')
sudo_content = sudo_j2.render(Context({"sudo_chosen_aliase": sudo_chosen_aliase, sudo_content = sudo_j2.render(Context({"role_chosen_aliase": role_chosen_aliase,
"sudo_chosen_obj": sudo_chosen_obj})) "sudo_alias": sudo_alias}))
sudo_file = NamedTemporaryFile(delete=False) sudo_file = NamedTemporaryFile(delete=False)
sudo_file.write(sudo_content) sudo_file.write(sudo_content)
sudo_file.close() sudo_file.close()
print(sudo_file.name) print(sudo_file.name)
return sudo_file.name return sudo_file.name
if __name__ == "__main__": if __name__ == "__main__":
print gen_keys() print gen_keys()
......
This diff is collapsed.
...@@ -250,6 +250,7 @@ class WebTerminalHandler(tornado.websocket.WebSocketHandler): ...@@ -250,6 +250,7 @@ class WebTerminalHandler(tornado.websocket.WebSocketHandler):
if asset: if asset:
roles = user_have_perm(self.user, asset) roles = user_have_perm(self.user, asset)
logger.debug(roles) logger.debug(roles)
logger.debug('rolename: %s' % role_name)
login_role = '' login_role = ''
for role in roles: for role in roles:
if role.name == role_name: if role.name == role_name:
......
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
<div class="col-sm-7" style="padding-left: 0px"> <div class="col-sm-7" style="padding-left: 0px">
<label> <label>
<select name="idc" class="form-control m-b" onchange="change_info()"> <select name="idc" class="form-control m-b" onchange="change_info()">
<option value="">IDC机房</option> <option value="">机房</option>
{% for idc in idc_all %} {% for idc in idc_all %}
{% ifequal idc.name idc_name %} {% ifequal idc.name idc_name %}
<option value="{{idc.name}}" selected> {{ idc.name }}</option> <option value="{{idc.name}}" selected> {{ idc.name }}</option>
...@@ -57,7 +57,7 @@ ...@@ -57,7 +57,7 @@
<label> <label>
<select name="asset_type" class="form-control m-b" onchange="change_info()"> <select name="asset_type" class="form-control m-b" onchange="change_info()">
<option value="">所有类型</option> <option value="">资产类型</option>
{% for type in asset_types %} {% for type in asset_types %}
{% ifequal type.0|int2str asset_type %} {% ifequal type.0|int2str asset_type %}
<option value="{{ type.0 }}" selected> {{ type.1 }}</option> <option value="{{ type.0 }}" selected> {{ type.1 }}</option>
...@@ -70,7 +70,7 @@ ...@@ -70,7 +70,7 @@
<label> <label>
<select name="status" class="form-control m-b" onchange="change_info()"> <select name="status" class="form-control m-b" onchange="change_info()">
<option value="">所有状态</option> <option value="">资产状态</option>
{% for s in asset_status %} {% for s in asset_status %}
{% ifequal s.0|int2str status %} {% ifequal s.0|int2str status %}
<option value="{{ s.0 }}" selected> {{ s.1 }}</option> <option value="{{ s.0 }}" selected> {{ s.1 }}</option>
...@@ -215,7 +215,7 @@ ...@@ -215,7 +215,7 @@
maxmin: true, maxmin: true,
shade: false, shade: false,
area: ['628px', '452px'], area: ['628px', '452px'],
content: new_url content: new_url+data
}); });
//window.open(new_url + data, '', 'location=no, resizeable=no, height=410, width=625, top=89px, left=99px,toolbar=no,menubar=no,scrollbars=auto,status=no'); //window.open(new_url + data, '', 'location=no, resizeable=no, height=410, width=625, top=89px, left=99px,toolbar=no,menubar=no,scrollbars=auto,status=no');
} else if (dataArray.length == '1' && data == 'error'){ } else if (dataArray.length == '1' && data == 'error'){
......
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
</div> </div>
<div class="ibox-content"> <div class="ibox-content">
<div class=""> <div class="">
<a target="_blank" href="/jasset/idc_add" class="btn btn-sm btn-primary "> 添加IDC </a> <a target="_blank" href="/jasset/idc_add" class="btn btn-sm btn-primary "> 添加机房 </a>
<input type="button" id="del_check" class="btn btn-danger btn-sm" name="del_button" value="删除所选"/> <input type="button" id="del_check" class="btn btn-danger btn-sm" name="del_button" value="删除所选"/>
<form id="search_form" method="get" action="" class="pull-right mail-search"> <form id="search_form" method="get" action="" class="pull-right mail-search">
<div class="input-group"> <div class="input-group">
......
...@@ -97,7 +97,7 @@ ...@@ -97,7 +97,7 @@
<td class="text-center"> {{ post.login_type }} </td> <td class="text-center"> {{ post.login_type }} </td>
<td class="text-center"><a href="/jlog/history/?id={{ post.id }}" class="log_command"> 统计 </a></td> <td class="text-center"><a href="/jlog/history/?id={{ post.id }}" class="log_command"> 统计 </a></td>
<td class="text-center"><a class="monitor" file_path="{{ post.log_path }}"> 监控 </a></td> <td class="text-center"><a class="monitor" file_path="{{ post.log_path }}"> 监控 </a></td>
<td class="text-center"><input type="button" id="cut" class="btn btn-danger btn-xs" name="cut" value="阻断" onclick='cut("{{ post.pid }}", "{{ post.remote_ip }}")' /></td> <td class="text-center"><input type="button" id="cut" class="btn btn-danger btn-xs" name="cut" value="阻断" onclick='cut("{{ post.pid }}", "{{ post.login_type }}")' /></td>
<td class="text-center" id="start_time"> {{ post.start_time|date:"Y-m-d H:i:s" }} </td> <td class="text-center" id="start_time"> {{ post.start_time|date:"Y-m-d H:i:s" }} </td>
</tr> </tr>
{% endfor %} {% endfor %}
...@@ -189,9 +189,9 @@ ...@@ -189,9 +189,9 @@
}); });
}); });
function cut(num, host){ function cut(num, login_type){
console.log(host); console.log(login_type);
if (host=='Web'){ if (login_type=='web'){
var g_url = '{{ web_kill_uri }}' + '?id=' + num; var g_url = '{{ web_kill_uri }}' + '?id=' + num;
} else { } else {
var g_url = "/jlog/log_kill/?id=" + num; var g_url = "/jlog/log_kill/?id=" + num;
......
...@@ -56,11 +56,11 @@ ...@@ -56,11 +56,11 @@
</div> </div>
<div class="hr-line-dashed"></div> <div class="hr-line-dashed"></div>
<div class="form-group"> <div class="form-group">
<label for="sudo" class="col-sm-2 control-label">角色Sudo命令<span class="red-fonts">*</span></label> <label for="sudo" class="col-sm-2 control-label">角色Sudo命令</label>
<div class="col-sm-8" id="sudo_name"> <div class="col-sm-8" id="sudo_name">
<select name="sudo_name" data-placeholder="请选择Sudo别名" class="chosen-select form-control m-b" multiple tabindex="2"> <select name="sudo_name" data-placeholder="请选择Sudo别名" class="chosen-select form-control m-b" multiple tabindex="2">
{% for sudo in sudos %} {% for sudo in sudos %}
<option >{{ sudo.name }}</option> <option value="{{ sudo.id }}">{{ sudo.name }}</option>
{% endfor %} {% endfor %}
</select> </select>
</div> </div>
...@@ -93,9 +93,9 @@ $('#roleForm').validator({ ...@@ -93,9 +93,9 @@ $('#roleForm').validator({
theme: "yellow_right_effect", theme: "yellow_right_effect",
rules: { rules: {
check_name: [/^\w{2,20}$/, '大小写字母数字和下划线,2-20位'], check_name: [/^\w{2,20}$/, '大小写字母数字和下划线,2-20位'],
either: function(){ {# either: function(){#}
return $('#role_password').val() == '' {# return $('#role_password').val() == ''#}
} {# }#}
}, },
fields: { fields: {
...@@ -105,12 +105,12 @@ $('#roleForm').validator({ ...@@ -105,12 +105,12 @@ $('#roleForm').validator({
ok: "", ok: "",
msg: {required: "角色名称必填"} msg: {required: "角色名称必填"}
}, },
"role_key": { {# "role_key": {#}
rule: "required(either)", {# rule: "required(either)",#}
tip: "输入密钥", {# tip: "输入密钥",#}
ok: "", {# ok: "",#}
msg: {required: "密码和密钥必填一个!"} {# msg: {required: "密码和密钥必填一个!"}#}
} {# }#}
}, },
valid: function(form) { valid: function(form) {
form.submit(); form.submit();
......
...@@ -61,7 +61,7 @@ ...@@ -61,7 +61,7 @@
<div class="col-sm-8"> <div class="col-sm-8">
<select name="sudo_name" data-placeholder="请选择Sudo别名" class="chosen-select form-control m-b" multiple tabindex="2"> <select name="sudo_name" data-placeholder="请选择Sudo别名" class="chosen-select form-control m-b" multiple tabindex="2">
{% for sudo in sudo_all %} {% for sudo in sudo_all %}
<option value="{{ sudo.name }}" {% if sudo in role_sudos %} selected {% endif %}>{{ sudo.name }}</option> <option value="{{ sudo.id }}" {% if sudo in role_sudos %} selected {% endif %}>{{ sudo.name }}</option>
{% endfor %} {% endfor %}
</select> </select>
</div> </div>
......
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
<div class="ibox-content"> <div class="ibox-content">
<div class=""> <div class="">
<a href="/jperm/role/perm_role_add/" class="btn btn-sm btn-primary "> 添加角色 </a> <a href="/jperm/role/perm_role_add/" class="btn btn-sm btn-primary "> 添加角色 </a>
<a href="/jperm/role/perm_role_push/" class="btn btn-sm btn-primary "> 推送角色 </a> <a href="/jperm/role/perm_role_push/" class="btn btn-sm btn-danger "> 推送角色 </a>
<form id="search_form" method="get" action="" class="pull-right mail-search"> <form id="search_form" method="get" action="" class="pull-right mail-search">
<div class="input-group"> <div class="input-group">
<input type="text" class="form-control input-sm" id="search_input" name="search" placeholder="Search"> <input type="text" class="form-control input-sm" id="search_input" name="search" placeholder="Search">
......
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
</div> </div>
</div> </div>
<div class="ibox-content"> <div class="ibox-content">
<form method="post" id="userForm" class="form-horizontal" action=""> <form method="post" id="pushForm" class="form-horizontal" action="">
{% if error %} {% if error %}
<div class="alert alert-warning text-center">{{ error }}</div> <div class="alert alert-warning text-center">{{ error }}</div>
{% endif %} {% endif %}
...@@ -34,22 +34,22 @@ ...@@ -34,22 +34,22 @@
<div class="alert alert-success text-center">{{ msg }}</div> <div class="alert alert-success text-center">{{ msg }}</div>
{% endif %} {% endif %}
<div class="form-group"> <div class="form-group">
<label for="asset" class="col-sm-2 control-label">资产<span class="red-fonts">*</span></label> <label for="asset" class="col-sm-2 control-label">资产</label>
<div class="col-sm-8"> <div class="col-sm-8">
<select name="assets" data-placeholder="请选择资产" class="chosen-select form-control m-b" multiple tabindex="2"> <select name="assets" id="assets" data-placeholder="请选择资产" class="chosen-select form-control m-b" multiple tabindex="2">
{% for asset in assets %} {% for asset in assets %}
<option value="{{ asset.ip }}">{{ asset.ip }}</option> <option value="{{ asset.id }}">{{ asset.ip }}</option>
{% endfor %} {% endfor %}
</select> </select>
</div> </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="assetgroup" class="col-sm-2 control-label">资产组<span class="red-fonts">*</span></label> <label for="assetgroup" class="col-sm-2 control-label">资产组</label>
<div class="col-sm-8"> <div class="col-sm-8">
<select name="asset_groups" data-placeholder="请选择资产组" class="chosen-select form-control m-b" multiple tabindex="2"> <select name="asset_groups" data-placeholder="请选择资产组" class="chosen-select form-control m-b" multiple tabindex="2">
{% for asset_group in asset_groups %} {% for asset_group in asset_groups %}
<option value="{{ asset_group.name }}">{{ asset_group.name }}</option> <option value="{{ asset_group.id }}">{{ asset_group.name }}</option>
{% endfor %} {% endfor %}
</select> </select>
</div> </div>
...@@ -60,7 +60,7 @@ ...@@ -60,7 +60,7 @@
<div class="col-sm-8"> <div class="col-sm-8">
<select name="roles" data-placeholder="请选择角色" class="chosen-select form-control m-b" multiple tabindex="2"> <select name="roles" data-placeholder="请选择角色" class="chosen-select form-control m-b" multiple tabindex="2">
{% for role in roles %} {% for role in roles %}
<option value="{{ role.name }}">{{ role.name }}</option> <option value="{{ role.id }}">{{ role.name }}</option>
{% endfor %} {% endfor %}
</select> </select>
</div> </div>
...@@ -68,11 +68,11 @@ ...@@ -68,11 +68,11 @@
<div class="hr-line-dashed"></div> <div class="hr-line-dashed"></div>
<div class="row"> <div class="row">
<div class="form-group"> <div class="form-group">
<label for="j_group" class="col-sm-2 control-label">使用</label> <label for="j_group" class="col-sm-2 control-label">使用</label>
<div class="col-sm-1"> <div class="col-sm-1">
<div class="radio i-checks"> <div class="radio i-checks">
<label> <label>
<input type="checkbox" value="1" id="use_publicKey" name="use_publicKey"> <input type="checkbox" value="1" id="use_publicKey" name="use_publicKey" checked>
</label> </label>
</div> </div>
</div> </div>
...@@ -111,37 +111,33 @@ ...@@ -111,37 +111,33 @@
{% endblock %} {% endblock %}
{% block self_footer_js %} {% block self_footer_js %}
<script> <script>
$(document).ready(function(){ $('#pushForm').validator({
$("input.role").click(function(){ timely: 2,
if($("input.role[value=GA]").is( ":checked" )){ theme: "yellow_right_effect",
$("#admin_groups").css("display", 'none'); rules: {
check_name: [/^\w{2,20}$/, '大小写字母数字和下划线,2-20位'],
check_asset: function(){
return $('#assets').val() == null
} }
else { },
fields: {
$("#admin_groups").css("display", 'block'); "asset_groups": {
} rule: "required(check_asset)",
}); tip: "输入资产组",
msg: {required: "资产和资产组必选一个!"}
$('#use_password').click(function(){ },
if ($(this).is(':checked')){ "roles": {
$('#admin_account_password').css('display', 'block') rule: "required",
tip: "请选择角色",
msg: {required: "必须选择角色"}
} }
else { },
valid: function(form) {
$('#admin_account_password').css('display', 'none') form.submit();
} }
}); });
$('#use_publicKey').click(function(){
if ($(this).is(':checked')){
$('#admin_account_publicKey').css('display', 'block')
}
else {
$('#admin_account_publicKey').css('display', 'none')
}
});
});
var config = { var config = {
'.chosen-select' : {}, '.chosen-select' : {},
......
...@@ -44,9 +44,8 @@ ...@@ -44,9 +44,8 @@
<label for="user" class="col-sm-2 control-label">用户</label> <label for="user" class="col-sm-2 control-label">用户</label>
<div class="col-sm-8"> <div class="col-sm-8">
<select name="user" id="user" data-placeholder="用户名" class="chosen-select form-control m-b" multiple tabindex="2"> <select name="user" id="user" data-placeholder="用户名" class="chosen-select form-control m-b" multiple tabindex="2">
{% for user in users %} {% for user in users %}
<option>{{ user.name }}</option> <option value="{{ user.id }}">{{ user.name }}</option>
{% endfor %} {% endfor %}
</select> </select>
<span class="help-block m-b-none">用户和用户组必选一个</span> <span class="help-block m-b-none">用户和用户组必选一个</span>
...@@ -58,7 +57,7 @@ ...@@ -58,7 +57,7 @@
<select name="usergroup" id="usergroup" data-placeholder="请选择用户组" class="chosen-select form-control m-b" multiple tabindex="2"> <select name="usergroup" id="usergroup" data-placeholder="请选择用户组" class="chosen-select form-control m-b" multiple tabindex="2">
{% for user_group in user_groups %} {% for user_group in user_groups %}
<option value="{{ user_group.name }}">{{ user_group.name }}</option> <option value="{{ user_group.id }}">{{ user_group.name }}</option>
{% endfor %} {% endfor %}
</select> </select>
</div> </div>
...@@ -69,7 +68,7 @@ ...@@ -69,7 +68,7 @@
<div class="col-sm-8"> <div class="col-sm-8">
<select name="asset" id="asset" data-placeholder="请选择资产" class="chosen-select form-control m-b" multiple tabindex="2"> <select name="asset" id="asset" data-placeholder="请选择资产" class="chosen-select form-control m-b" multiple tabindex="2">
{% for asset in assets %} {% for asset in assets %}
<option value="{{ asset.ip }}">{{ asset.ip }}</option> <option value="{{ asset.id }}">{{ asset.ip }}</option>
{% endfor %} {% endfor %}
</select> </select>
<span class="help-block m-b-none">资产和资产组必选一个</span> <span class="help-block m-b-none">资产和资产组必选一个</span>
...@@ -80,7 +79,7 @@ ...@@ -80,7 +79,7 @@
<div class="col-sm-8"> <div class="col-sm-8">
<select name="assetgroup" data-placeholder="请选择资产组" class="chosen-select form-control m-b" multiple tabindex="2"> <select name="assetgroup" data-placeholder="请选择资产组" class="chosen-select form-control m-b" multiple tabindex="2">
{% for asset_group in asset_groups %} {% for asset_group in asset_groups %}
<option value="{{ asset_group.name }}">{{ asset_group.name }}</option> <option value="{{ asset_group.id }}">{{ asset_group.name }}</option>
{% endfor %} {% endfor %}
</select> </select>
</div> </div>
...@@ -91,7 +90,7 @@ ...@@ -91,7 +90,7 @@
<div class="col-sm-8" id="role_name"> <div class="col-sm-8" id="role_name">
<select name="role" data-placeholder="请选择角色" class="chosen-select form-control m-b" multiple tabindex="2"> <select name="role" data-placeholder="请选择角色" class="chosen-select form-control m-b" multiple tabindex="2">
{% for role in roles %} {% for role in roles %}
<option value="{{ role.name }}">{{ role.name }}</option> <option value="{{ role.id }}">{{ role.name }}</option>
{% endfor %} {% endfor %}
</select> </select>
</div> </div>
......
...@@ -45,7 +45,7 @@ ...@@ -45,7 +45,7 @@
<div class="col-sm-8"> <div class="col-sm-8">
<select name="user" data-placeholder="用户名" class="chosen-select form-control m-b" multiple tabindex="2"> <select name="user" data-placeholder="用户名" class="chosen-select form-control m-b" multiple tabindex="2">
{% for user in users %} {% for user in users %}
<option value="{{ user.name }}" {% if user in users_select %} selected {% endif %}>{{ user.name }}</option> <option value="{{ user.id }}" {% if user in users_select %} selected {% endif %}>{{ user.name }}</option>
{% endfor %} {% endfor %}
</select> </select>
</div> </div>
...@@ -56,7 +56,7 @@ ...@@ -56,7 +56,7 @@
<div class="col-sm-8"> <div class="col-sm-8">
<select name="usergroup" data-placeholder="请选择用户组" class="chosen-select form-control m-b" multiple tabindex="2"> <select name="usergroup" data-placeholder="请选择用户组" class="chosen-select form-control m-b" multiple tabindex="2">
{% for user_group in user_groups %} {% for user_group in user_groups %}
<option value="{{ user_group.name }}"{% if user_group in users_groups_select %} selected {% endif %}>{{ user_group.name }}</option> <option value="{{ user_group.id }}"{% if user_group in user_groups_select %} selected {% endif %}>{{ user_group.name }}</option>
{% endfor %} {% endfor %}
</select> </select>
</div> </div>
...@@ -67,7 +67,7 @@ ...@@ -67,7 +67,7 @@
<div class="col-sm-8"> <div class="col-sm-8">
<select name="asset" data-placeholder="请选择资产" class="chosen-select form-control m-b" multiple tabindex="2"> <select name="asset" data-placeholder="请选择资产" class="chosen-select form-control m-b" multiple tabindex="2">
{% for asset in assets %} {% for asset in assets %}
<option value="{{ asset.ip }}"{% if asset in assets_select %} selected {% endif %}>{{ asset.ip }}</option> <option value="{{ asset.id }}"{% if asset in assets_select %} selected {% endif %}>{{ asset.ip }}</option>
{% endfor %} {% endfor %}
</select> </select>
</div> </div>
...@@ -78,7 +78,7 @@ ...@@ -78,7 +78,7 @@
<div class="col-sm-8"> <div class="col-sm-8">
<select name="assetgroup" data-placeholder="请选择资产组" class="chosen-select form-control m-b" multiple tabindex="2"> <select name="assetgroup" data-placeholder="请选择资产组" class="chosen-select form-control m-b" multiple tabindex="2">
{% for asset_group in asset_groups %} {% for asset_group in asset_groups %}
<option value="{{ asset_group.name }}"{% if asset_group in asset_groups_select %} selected {% endif %}>{{ asset_group.name }}</option> <option value="{{ asset_group.id }}"{% if asset_group in asset_groups_select %} selected {% endif %}>{{ asset_group.name }}</option>
{% endfor %} {% endfor %}
</select> </select>
</div> </div>
...@@ -89,7 +89,7 @@ ...@@ -89,7 +89,7 @@
<div class="col-sm-8"> <div class="col-sm-8">
<select name="role" data-placeholder="请选择角色" class="chosen-select form-control m-b" multiple tabindex="2"> <select name="role" data-placeholder="请选择角色" class="chosen-select form-control m-b" multiple tabindex="2">
{% for role in roles %} {% for role in roles %}
<option value="{{ role.name }}"{% if role in roles_select %} selected {% endif %}>{{ role.name }}</option> <option value="{{ role.id }}"{% if role in roles_select %} selected {% endif %}>{{ role.name }}</option>
{% endfor %} {% endfor %}
</select> </select>
</div> </div>
...@@ -118,37 +118,6 @@ ...@@ -118,37 +118,6 @@
{% endblock %} {% endblock %}
{% block self_footer_js %} {% block self_footer_js %}
<script> <script>
$(document).ready(function(){
$("input.role").click(function(){
if($("input.role[value=GA]").is( ":checked" )){
$("#admin_groups").css("display", 'none');
}
else {
$("#admin_groups").css("display", 'block');
}
});
$('#use_password').click(function(){
if ($(this).is(':checked')){
$('#admin_account_password').css('display', 'block')
}
else {
$('#admin_account_password').css('display', 'none')
}
});
$('#use_publicKey').click(function(){
if ($(this).is(':checked')){
$('#admin_account_publicKey').css('display', 'block')
}
else {
$('#admin_account_publicKey').css('display', 'none')
}
});
});
var config = { var config = {
'.chosen-select' : {}, '.chosen-select' : {},
......
...@@ -36,9 +36,17 @@ ...@@ -36,9 +36,17 @@
</div> </div>
<div class="hr-line-dashed"></div> <div class="hr-line-dashed"></div>
<div class="form-group"> <div class="form-group">
<label for="sudo_commands_label" class="col-sm-2 control-label">系统命令<span class="red-fonts">*</span></label> <label for="sudo_runas" class="col-sm-2 control-label">RunAs<span class="red-fonts">*</span></label>
<div class="col-sm-8"> <div class="col-sm-8">
<textarea id="sudo_commands" name="sudo_commands" class="form-control" rows="3"></textarea> <input id="sudo_runas" name="sudo_runas" placeholder="Sudo RunAs User" type="text" class="form-control">
</div>
</div>
<div class="hr-line-dashed"></div>
<div class="form-group">
<label for="sudo_commands" class="col-sm-2 control-label">系统命令<span class="red-fonts">*</span></label>
<div class="col-sm-8">
<textarea id="sudo_commands" name="sudo_commands" class="form-control" rows="3" placeholder="/bin/grep, /bin/find"></textarea>
<span class="help-block m-b-none">sudo命令,逗号分隔, 不支持换行</span>
</div> </div>
</div> </div>
<div class="hr-line-dashed"></div> <div class="hr-line-dashed"></div>
...@@ -64,7 +72,28 @@ ...@@ -64,7 +72,28 @@
{% endblock %} {% endblock %}
{% block self_footer_js %} {% block self_footer_js %}
<script> <script>
$('#sudoForm').validator({
timely: 2,
theme: "yellow_right_effect",
rules: {
check_name: [/^\w{2,20}$/, '大小写字母数字和下划线,2-20位']
},
fields: {
"sudo_name": {
rule: "required;check_name"
},
"sudo_runas": {
rule: "required;check_name"
},
"sudo_commands": {
rule: "required"
}
},
valid: function(form) {
form.submit();
}
});
</script> </script>
{% endblock %} {% endblock %}
...@@ -40,6 +40,13 @@ ...@@ -40,6 +40,13 @@
</div> </div>
</div> </div>
<div class="hr-line-dashed"></div> <div class="hr-line-dashed"></div>
<div class="form-group">
<label for="sudo_runas" class="col-sm-2 control-label">RunAs<span class="red-fonts">*</span></label>
<div class="col-sm-8">
<input id="sudo_runas" name="sudo_runas" placeholder="Sudo RunAs User" type="text" class="form-control" value="{{ sudo.runas }}">
</div>
</div>
<div class="hr-line-dashed"></div>
<div class="form-group"> <div class="form-group">
<label for="sudo_commands_label" class="col-sm-2 control-label">系统命令<span class="red-fonts">*</span></label> <label for="sudo_commands_label" class="col-sm-2 control-label">系统命令<span class="red-fonts">*</span></label>
<div class="col-sm-8"> <div class="col-sm-8">
......
...@@ -6,7 +6,7 @@ sudo_file=/etc/sudoers ...@@ -6,7 +6,7 @@ sudo_file=/etc/sudoers
# Add Command Aliases # Add Command Aliases
add_cmd_alias() { add_cmd_alias() {
{% for sudo in sudo_chosen_obj %} {% for sudo in sudo_alias %}
if $(grep '^Cmnd_Alias {{ sudo.name }}' ${sudo_file} &> /dev/null); then if $(grep '^Cmnd_Alias {{ sudo.name }}' ${sudo_file} &> /dev/null); then
sed -i 's@^Cmnd_Alias.*{{ sudo.name }}.*@Cmnd_Alias {{ sudo.name }} = {{ sudo.commands }}@g' ${sudo_file} sed -i 's@^Cmnd_Alias.*{{ sudo.name }}.*@Cmnd_Alias {{ sudo.name }} = {{ sudo.commands }}@g' ${sudo_file}
else else
...@@ -17,12 +17,14 @@ add_cmd_alias() { ...@@ -17,12 +17,14 @@ add_cmd_alias() {
add_role_chosen() { add_role_chosen() {
{% for role, alias in sudo_chosen_aliase.items %} {% for role, sudos in role_chosen_aliase.items %}
if $(grep '^{{ role }}' ${sudo_file} &> /dev/null); then {% for sudo in sudos %}
sed -i 's@^{{ role }}.*@{{ role }} ALL = {{ alias }}@g' ${sudo_file} if $(grep '^{{ role }}.*sudo.name' ${sudo_file} &> /dev/null); then
else sed -i 's@^{{ role }}.*sudo.name@{{ role }} ALL = ({{ sudo.runas }}) NOPASSWD: {{ sudo.name }}@g' ${sudo_file}
echo "{{ role }} ALL = {{ alias }}" >> ${sudo_file} else
fi echo "{{ role }} ALL = ({{ sudo.runas }}) NOPASSWD: {{ sudo.name }}" >> ${sudo_file}
fi
{% endfor %}
{% endfor %} {% endfor %}
} }
......
...@@ -28,14 +28,12 @@ ...@@ -28,14 +28,12 @@
<a href="/jperm/rule/">授权规则</a> <a href="/jperm/rule/">授权规则</a>
</li> </li>
<li class="sudo_list sudo_edit sudo_add cmd_list cmd_edit cmd_add sudo_detail"> <li class="role">
<a href="/jperm/role/">系统角色</a> <a href="/jperm/role/">系统角色</a>
</li> </li>
<li class="sudo_list sudo_edit sudo_add cmd_list cmd_edit cmd_add sudo_detail"> <li class="sudo">
<a href="/jperm/sudo/">Sudo命令</a> <a href="/jperm/sudo/">Sudo命令</a>
</li> </li>
<li class="apply_show online"><a href="/jperm/apply_show/online/">权限审批</a></li>
<li class="apply_show online"><a href="/jperm/log/">授权记录</a></li>
</ul> </ul>
</li> </li>
......
...@@ -45,25 +45,26 @@ ...@@ -45,25 +45,26 @@
<div class="alert alert-success text-center">{{ msg }}</div> <div class="alert alert-success text-center">{{ msg }}</div>
{% endif %} {% endif %}
<div class="form-group"> <div class="form-group">
<label for="username" class="col-sm-2 control-label">默认用户名<span class="red-fonts">*</span></label> <label for="username" class="col-sm-2 control-label">默认管理用户<span class="red-fonts">*</span></label>
<input name="setting" value="default" style="display: none"> <input name="setting" value="default" style="display: none">
<div class="col-sm-8"> <div class="col-sm-8">
<input id="username" name="username" placeholder="Username" type="text" value="{{ setting_default.field1 }}" class="form-control"> <input id="username" name="username" placeholder="Username" type="text" value="{{ setting_default.field1 }}" class="form-control">
<span class="help-block m-b-none">该用户为root或用户NOPASS:ALL sudo权限的用户</span>
</div> </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="port" class="col-sm-2 control-label">默认ssh端口<span class="red-fonts">*</span></label> <label for="key" class="col-sm-2 control-label">默认密码</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input id="port" name="port" placeholder="Port" type="text" value="{{ setting_default.field2 }}" class="form-control"> <input id="password" name="password" placeholder="Password" type="password" class="form-control">
<span class="help-block m-b-none">如果不修改密码,请留空</span>
</div> </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="key" class="col-sm-2 control-label">默认密码</label> <label for="port" class="col-sm-2 control-label">默认ssh端口<span class="red-fonts">*</span></label>
<div class="col-sm-8"> <div class="col-sm-8">
<input id="password" name="password" placeholder="Password" type="password" class="form-control"> <input id="port" name="port" placeholder="Port" type="text" value="{{ setting_default.field2 }}" class="form-control">
<span class="help-block m-b-none">如果不修改密码,请留空</span>
</div> </div>
</div> </div>
<div class="hr-line-dashed"></div> <div class="hr-line-dashed"></div>
...@@ -118,7 +119,7 @@ ...@@ -118,7 +119,7 @@
fields: { fields: {
"username": { "username": {
rule: "required;check_name", rule: "required;check_name",
tip: "输入用户名", tip: "输入管理用户名",
ok: "", ok: "",
msg: {required: "用户名称必填"} msg: {required: "用户名称必填"}
}, },
......
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