From c8444ef73ac97069e0bd35a809abe10ba2001712 Mon Sep 17 00:00:00 2001
From: guanghongwei <hongwei.guang@yolu-inc.com>
Date: Fri, 3 Oct 2014 22:04:36 +0800
Subject: [PATCH] =?UTF-8?q?=E6=BE=A7=E7=82=B2=E5=A7=9E=E9=8D=92=E5=97=99?=
 =?UTF-8?q?=E7=B2=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 webroot/AutoSa/AutoSa/urls.py           |   2 +
 webroot/AutoSa/AutoSa/views.py          | 158 ++++++++++++++++--------
 webroot/AutoSa/templates/addGroup.html  |  30 +++++
 webroot/AutoSa/templates/base.html      |   3 +
 webroot/AutoSa/templates/chgGroup.html  |  41 ++++++
 webroot/AutoSa/templates/chgPass.html   |  10 +-
 webroot/AutoSa/templates/chgUser.html   |   2 +-
 webroot/AutoSa/templates/error.html     |   2 +-
 webroot/AutoSa/templates/info.html      |  47 +++++++
 webroot/AutoSa/templates/showGroup.html |  32 +++++
 10 files changed, 270 insertions(+), 57 deletions(-)
 create mode 100644 webroot/AutoSa/templates/addGroup.html
 create mode 100644 webroot/AutoSa/templates/chgGroup.html
 create mode 100644 webroot/AutoSa/templates/info.html
 create mode 100644 webroot/AutoSa/templates/showGroup.html

diff --git a/webroot/AutoSa/AutoSa/urls.py b/webroot/AutoSa/AutoSa/urls.py
index 37885677..874a24cf 100644
--- a/webroot/AutoSa/AutoSa/urls.py
+++ b/webroot/AutoSa/AutoSa/urls.py
@@ -17,6 +17,8 @@ urlpatterns = patterns('',
     (r'^showUser/$', views.showUser),
     (r'^addUser/$', views.addUser),
     (r'^chgUser/$', views.chgUser),
+    (r'^showGroup/$', views.showGroup),
+    (r'^addGroup/$', views.addGroup),
     (r'^showAssets/$', views.showAssets),
     (r'^addAssets/$', views.addAssets),
     (r'^showPerm/$', views.showPerm),
diff --git a/webroot/AutoSa/AutoSa/views.py b/webroot/AutoSa/AutoSa/views.py
index 80b84067..a2367e82 100644
--- a/webroot/AutoSa/AutoSa/views.py
+++ b/webroot/AutoSa/AutoSa/views.py
@@ -218,10 +218,11 @@ def is_super_user(request):
 def install(request):
     user = User.objects.filter(username='admin')
     if user:
-        return HttpResponseRedirect('/login/')
+        error = '已经安装,请出重复安装.'
+        return render_to_response('info.html', {'error': error})
     else:
         u = User(
-            id=700,
+            id=800,
             username='admin',
             password=md5_crypt('admin'),
             key_pass=md5_crypt('admin'),
@@ -230,7 +231,8 @@ def install(request):
             is_superuser=True,
             ldap_password=md5_crypt('admin'))
         u.save()
-        return HttpResponse('Install successfully, please refresh this page.')
+        msg = '安装成功'
+        return render_to_response('info.html', {'msg': msg})
 
 
 def login(request):
@@ -466,7 +468,6 @@ def chgUser(request):
     """修改用户信息"""
     error = ''
     msg = ''
-    jm = PyCrypt(key)
 
     if request.method == "GET":
         username = request.GET.get('username')
@@ -489,11 +490,6 @@ def chgUser(request):
         group_post = request.REQUEST.getlist('group')
         groups = []
         user = User.objects.get(username=username)
-        all_groups = Group.objects.all()
-
-        # 获得原来的,然设为初始值
-        ori_is_admin = "checked" if user.is_admin else ''
-        ori_is_superuser = 'checked' if user.is_superuser else ''
 
         # 属组的获取
         for group_name in group_post:
@@ -511,10 +507,7 @@ def chgUser(request):
             error = u'带*内容不能为空'
 
         if error:
-            return render_to_response('chgUser.html',
-                                      {'user': user, 'user_menu': 'active', 'is_admin': ori_is_admin,
-                                       'is_superuser': ori_is_superuser, 'groups': all_groups, 'error': error},
-                                      context_instance=RequestContext(request))
+            return render_to_response('info.html', {'error': error})
 
         u = User.objects.get(username=username)
         u.name = name
@@ -524,10 +517,63 @@ def chgUser(request):
 
         u.save()
         msg = u'修改用户信息成功'
-        return render_to_response('chgUser.html',
-                                  {'user': user, 'user_menu': 'active', 'is_admin': is_admin,
-                                   'is_superuser': is_superuser, 'groups': all_groups, 'msg': msg},
-                                  context_instance=RequestContext(request))
+        return render_to_response('info.html', {'msg': msg})
+
+
+@superuser_required
+def addGroup(request):
+    error = ''
+    msg = ''
+    if request.method == 'POST':
+        group_name = request.POST.get('name')
+        if not group_name:
+            group = Group(name=group_name)
+            group.save()
+            msg = u'%s 属组添加成功' % group_name
+        else:
+            error = u'不能为空'
+    return render_to_response('addGroup.html',
+                              {'error': error, 'msg': msg},
+                              context_instance=RequestContext(request))
+
+
+@superuser_required
+def showGroup(request):
+    groups = Group.objects.all()
+    if request.method == 'POST':
+        selected_group = request.REQUEST.getlist('selected')
+        if selected_group:
+            for group_id in selected_group:
+                group = Group.objects.get(id=group_id)
+                group.delete()
+                msg = '删除成功'
+        else:
+            error = '请选择删除的组'
+
+    return render_to_response('showGroup.html', {'error': error, 'msg': msg},
+                              context_instance=RequestContext(request))
+
+
+@superuser_required
+def chgGroup(request):
+    error = ''
+    msg = ''
+    if request.method == 'GET':
+        group_id = request.GET.get(id)
+        group = Group.objects.get(id=group_id)
+    else:
+        group_id = request.POST.get(id)
+        group_name = request.POST.get(name)
+        if not group_name:
+            error = u'不能为空'
+        else:
+            group = Group.objects.get(id=group_id)
+            group['name'] = group_name
+            group.save()
+            msg = u'修改成功'
+
+    return render_to_response('chgGroup.html', {'group': group, 'error': error, 'msg': msg},
+                              context_instance=RequestContext(request))
 
 
 @admin_required
@@ -600,8 +646,8 @@ def showPerm(request):
     elif request.method == 'GET':
         if request.GET.get('username'):
             username = request.GET.get('username')
-            user = User.objects.filter(username=username)[0]
-            assets_user = AssetsUser.objects.filter(uid=user.id)
+            user = User.objects.get(username=username)
+            assets_user = AssetsUser.objects.filter(uid=user.id).order_by()
             return render_to_response('perms.html',
                                       {'user': user, 'assets': assets_user, 'perm_menu': 'active'},
                                       context_instance=RequestContext(request))
@@ -655,28 +701,42 @@ def addPerm(request):
 
 @login_required
 def chgPass(request):
-    """修改登录系统的密码"""
+    """修改登录密码"""
     error = ''
     msg = ''
-    if request.method == 'POST':
-        username = request.session.get('username')
-        oldpass = request.POST.get('oldpass')
+    is_self = False
+
+    if request.method == 'GET':
+        if is_admin_user(request):
+            username = request.GET.get('username')
+        else:
+            username = request.session.get('username')
+            is_self = True
+
+        return render_to_response('chgKey.html',
+                                  {'username': username, 'is_self': is_self},
+                                  context_instance=RequestContext(request))
+    else:
+        username = request.POST.get('username')
+        user = User.objects.get(username=username)
         password = request.POST.get('password')
-        password_confirm = request.POST.get('password_confirm')
-        user = User.objects.get(username)
-        if '' in [oldpass, password, password_confirm]:
-            error = '带*内容不能为空'
-        elif md5_crypt(oldpass) != user.password:
-            error = '密码不正确'
-        elif password != password_confirm:
-            error = '两次密码不匹配'
+        password_again = request.POST.get('password_again')
 
-        if not error:
-            user.password = md5_crypt(password)
-            user.save()
+        if not is_admin_user(request):
+            oldpass = request.POST.get('oldpass')
+            if oldpass != user.password:
+                error = '原来密码不正确'
 
-    return render_to_response('chgPass.html', {'msg': msg, 'error': error, 'pass_menu': 'active'},
-                              context_instance=RequestContext(request))
+        if password != password_again:
+            error = '密码不匹配'
+
+        if error:
+            return render_to_response('info.html', {'error': error})
+
+        user['password'] = password
+        user.save()
+
+        return render_to_response('info.html', {'msg': '修改密码成功'})
 
 
 @login_required
@@ -687,8 +747,9 @@ def chgKey(request):
     is_self = False
 
     if request.method == 'GET':
-        username = request.GET.get('username')
-        if not username:
+        if is_admin_user(request):
+            username = request.GET.get('username')
+        else:
             username = request.session.get('username')
             is_self = True
 
@@ -696,35 +757,30 @@ def chgKey(request):
                                   {'username': username, 'is_self': is_self},
                                   context_instance=RequestContext(request))
     else:
-        try:
-            oldpass = request.POST.get('oldpass')
-        except KeyError:
-            pass
-        else:
-            username = request.POST.get('username')
-            user = User.objects.get(username=username)
-            if oldpass != user.key_pass:
-                error = '原来密码不正确'
-
         username = request.POST.get('username')
         user = User.objects.get(username=username)
         password = request.POST.get('password')
         password_again = request.POST.get('password_again')
 
+        if not is_admin_user(request):
+            oldpass = request.POST.get('oldpass')
+            if oldpass != user.key_pass:
+                error = '原来密码不正确'
+
         if password != password_again:
             error = '密码不匹配'
 
         if error:
-            return HttpResponse(error)
+            return render_to_response('info.html', {'error': error})
 
         keyfile = '%s/keys/%s' % (base_dir, username)
         jm = PyCrypt(key)
         ret = bash('ssh-keygen -p -P %s -N %s -f %s' % (jm.decrypt(user.key_pass), password, keyfile))
         if ret != 0:
             error = '更改私钥密码错误'
-            return HttpResponse(error)
+            return render_to_response('info.hmtl', {'error': error})
         user['keypass'] = password
         user.save()
 
-        return HttpResponse('修改密码成功')
+        return render_to_response('info.html', {'msg': '修改密码成功'})
 
diff --git a/webroot/AutoSa/templates/addGroup.html b/webroot/AutoSa/templates/addGroup.html
new file mode 100644
index 00000000..4bad03ec
--- /dev/null
+++ b/webroot/AutoSa/templates/addGroup.html
@@ -0,0 +1,30 @@
+{% extends 'base.html' %}
+{% block content %}
+    <form class="form-horizontal" role="form" method="post" action="" >
+        <fieldset >
+            <legend>添加属组</legend>
+            {% if error %}
+                <div class="alert alert-danger">
+                    {{ error }}
+                </div>
+            {% endif %}
+            {% if msg %}
+                <div class="alert alert-success">
+                    {{ msg }}
+                </div>
+            {% endif %}
+            <div class="form-group">
+                <label for="name" class="col-sm-2 control-label">属组<span style="color: red"> *</span></label>
+                <div class="col-sm-4">
+                    <input type="text" class="form-control" id="name" name="name" placeholder="属组">
+                </div>
+            </div>
+
+            <div class="form-group">
+                <div class="col-sm-offset-2 col-sm-4">
+                    <button class="btn btn-primary">添加</button>
+                </div>
+            </div>
+        </fieldset>
+    </form>
+{% endblock %}
\ No newline at end of file
diff --git a/webroot/AutoSa/templates/base.html b/webroot/AutoSa/templates/base.html
index aebc58d0..f7478c58 100644
--- a/webroot/AutoSa/templates/base.html
+++ b/webroot/AutoSa/templates/base.html
@@ -90,6 +90,9 @@
           <ul id="userMenu" class="nav nav-list navbar-collapse.in menu-second">
             <li><a href="/showUser/"><i class="glyphicon glyphicon-send"></i> 查看用户</a></li>
             <li><a href="/addUser/"><i class="glyphicon glyphicon-send"></i> 添加用户</a></li>
+              <li><a href="/showGroup/"><i class="glyphicon glyphicon-send"></i> 查看属组</a></li>
+              <li><a href="/addGroup/"><i class="glyphicon glyphicon-send"></i> 添加属组</a></li>
+              <li><a href="/addUser/"><i class="glyphicon glyphicon-send"></i> Sudo管理</a></li>
           </ul>
           <!--<div class="menu-first" ><a href="#monitorMenu" data-toggle="collapse"><i class="glyphicon glyphicon-th"></i> 执行命令</a></div>
           <ul id="monitorMenu" class="nav nav-list navbar-collapse.in menu-second">
diff --git a/webroot/AutoSa/templates/chgGroup.html b/webroot/AutoSa/templates/chgGroup.html
new file mode 100644
index 00000000..f9cae1ec
--- /dev/null
+++ b/webroot/AutoSa/templates/chgGroup.html
@@ -0,0 +1,41 @@
+{% extends 'base.html' %}
+{% block content %}
+    <form class="form-horizontal" role="form" method="post" action="/chgGroup/" >
+        <fieldset >
+            <legend>修改用户信息</legend>
+            {% if error %}
+                <div class="alert alert-danger">
+                    {{ error }}
+                </div>
+            {% endif %}
+
+            {% if msg %}
+                <div class="alert alert-success">
+                    {{ msg }}
+                </div>
+            {% endif %}
+            <div class="form-group">
+                <div class="col-sm-4">
+                    <input type="text" id="oldname" name="oldname" class="form-control" value="{{ group.id }}" hidden="hidden">
+                </div>
+            </div>
+            <div class="form-group">
+                <label for="oldname" class="col-sm-2 control-label">原来属组<span style="color: red"> *</span></label>
+                <div class="col-sm-4">
+                    <input type="text" id="oldname" name="oldname" class="form-control" value="{{ group.name }}" readOnly="readOnly">
+                </div>
+            </div>
+            <div class="form-group">
+                <label for="name" class="col-sm-2 control-label">属组<span style="color: red"> *</span></label>
+                <div class="col-sm-4">
+                    <input type="text" id="name" name="name" class="form-control"  placeholder="属组">
+                </div>
+            </div>
+            <div class="form-group">
+                <div class="col-sm-offset-2 col-sm-4">
+                    <button class="btn btn-primary">修改</button>
+                </div>
+            </div>
+        </fieldset>
+    </form>
+{% endblock %}
\ No newline at end of file
diff --git a/webroot/AutoSa/templates/chgPass.html b/webroot/AutoSa/templates/chgPass.html
index e383a40e..d365acc3 100644
--- a/webroot/AutoSa/templates/chgPass.html
+++ b/webroot/AutoSa/templates/chgPass.html
@@ -13,12 +13,14 @@
                     {{ msg }}
                 </div>
             {% endif %}
+            {% if is_self %}
             <div class="form-group">
-                <label for="oldpass" class="col-sm-2 control-label">原来密码<span style="color: red"> *</span></label>
+                <label for="oldpass" class="col-sm-2 control-label">原来的密码<span style="color: red"> *</span></label>
                 <div class="col-sm-4">
-                    <input type="password" class="form-control" id="oldpass" name="oldpass" placeholder="用户名">
+                    <input type="password" class="form-control" id="oldpass" name="oldpass" placeholder="原来密码">
                 </div>
             </div>
+            {% endif %}
             <div class="form-group">
                 <label for="password" class="col-sm-2 control-label">新密码<span style="color: red"> *</span></label>
                 <div class="col-sm-4">
@@ -26,9 +28,9 @@
                 </div>
             </div>
             <div class="form-group">
-                <label for="password_confirm" class="col-sm-2 control-label">确认密码<span style="color: red"> *</span></label>
+                <label for="password_again" class="col-sm-2 control-label">确认密码<span style="color: red"> *</span></label>
                 <div class="col-sm-4">
-                    <input type="password" class="form-control" id="password_confirm" name="password_confirm" placeholder="确认密码">
+                    <input type="password" class="form-control" id="password_again" name="password_again" placeholder="确认密码">
                 </div>
             </div>
             <div class="form-group">
diff --git a/webroot/AutoSa/templates/chgUser.html b/webroot/AutoSa/templates/chgUser.html
index ec20fb45..a710fc8b 100644
--- a/webroot/AutoSa/templates/chgUser.html
+++ b/webroot/AutoSa/templates/chgUser.html
@@ -34,7 +34,7 @@
             </div>
             <div class="form-group">
                 <label for="key_pass" class="col-sm-2 control-label">密钥密码<span style="color: red"> *</span></label>
-                <a href="/chgKey/?username={{ user.username }}">修改密钥密码</a>
+                <a href="/chgKey/?username={{ user.username }}">修改密码</a>
             </div>
             <div class="form-group">
                 <label for="name" class="col-sm-2 control-label">姓名<span style="color: red"> *</span></label>
diff --git a/webroot/AutoSa/templates/error.html b/webroot/AutoSa/templates/error.html
index 60c44f49..82cbdf2a 100644
--- a/webroot/AutoSa/templates/error.html
+++ b/webroot/AutoSa/templates/error.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
-<title>错误页面</title>
+<title>通知</title>
 
 <style type="text/css">
 body{
diff --git a/webroot/AutoSa/templates/info.html b/webroot/AutoSa/templates/info.html
new file mode 100644
index 00000000..21707ca8
--- /dev/null
+++ b/webroot/AutoSa/templates/info.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+
+<title>信息</title>
+
+<style type="text/css">
+body{
+	font-family:"Hiragino Sans GB W3", "微软雅黑", "Helvetica Neue", Helvetica, Arial, "宋体", sans-serif;
+	color: #575757;
+        background: #444 url(/static/images/bg-login.gif)
+}
+
+</style>
+<script language="javascript">
+ var i=2;
+   window.setInterval("settime()",1000);
+   window.setTimeout("toload()",5000);
+    function settime(){
+        var divinner=document.getElementById("settime");
+            divinner.innerText=i;
+                i--;
+                 }
+    function toload(){
+        history.go(-1);
+        }
+</script>
+</head>
+
+<body>
+
+{% if msg %}
+<div class="alert alert-success"><b>成功:</b>{{ msg }}</div>
+{% endif %}
+
+{% if error %}
+<div class="alert alert-danger"><b>错误:</b>{{ error }}</div>
+{% endif %}
+</body>
+</html>
+
+
+
+
+
+
diff --git a/webroot/AutoSa/templates/showGroup.html b/webroot/AutoSa/templates/showGroup.html
new file mode 100644
index 00000000..8ce2cb6b
--- /dev/null
+++ b/webroot/AutoSa/templates/showGroup.html
@@ -0,0 +1,32 @@
+{% extends 'base.html' %}
+{% block content %}
+    <form method="post" action="">
+        {% if info %}
+            <p class="alert alert-success">
+                {{ info }}
+            </p>
+        {% endif %}
+        <table class="table table-striped table-hover table-condensed">
+        <thead>
+            <tr>
+                <th><input onclick="selectAll()" type="checkbox"  name="select_all" style="select_all" id="select_all"/></th>
+                <th>ID</th>
+                <th>属组</th>
+                <th>修改</th>
+            </tr>
+        </thead>
+        <tbody>
+            {% for group in groups %}
+            <tr>
+                <td><input type="checkbox" name="selected" value="{{ group.id }}"></td>
+                <td>{{ group.id }}</td>
+                <td>{{ group.name }}</td>
+                <td><a href="/chgGroup/?id={{ group.id }}">修改</a></td>
+            </tr>
+            {% endfor %}
+        </tbody>
+        </form>
+    </table>
+    <button class="btn btn-primary">删除</button>
+    </form>
+{% endblock %}
\ No newline at end of file
-- 
2.18.0