pull/109/head
Mr Chen 7 years ago
parent 176782954f
commit 7a7b8b4d3b
  1. 1
      .gitignore
  2. 15
      class/core/config.py
  3. 1
      data/port.pl
  4. 9
      plugins/csvn/js/csvn.js
  5. 23
      route/dashboard.py
  6. 5
      scripts/init.d/mw.sh
  7. 35
      scripts/init.d/mw.tpl
  8. 27
      setting.py
  9. 7
      start.sh
  10. 2
      task.py
  11. 362
      templates/default/login.html

1
.gitignore vendored

@ -112,3 +112,4 @@ data/json/index.json
*.zip
data/*.db
data/control.conf
scripts/init.d/mw

@ -31,6 +31,8 @@ class config:
__app = app
self.initDB()
self.initInitD()
return app
def initDB(self):
@ -43,6 +45,19 @@ class config:
except Exception, ex:
print str(ex)
def initUser(self):
pass
def initInitD(self):
script = public.getRunDir() + '/scripts/init.d/mw.tpl'
script_bin = public.getRunDir() + '/scripts/init.d/mw'
content = public.readFile(script)
content = content.replace("{$SERVER_PATH}", public.getRunDir())
public.writeFile(script_bin, content)
public.execShell('chmod +x ' + script_bin)
def getVersion(self):
return self.__version

@ -0,0 +1 @@
7200

@ -325,6 +325,10 @@ function csvnAclDel(pname, uname){
});
}
function csvnAclSet(pname){
}
function csvnAclProject(pname){
csvnPost('project_acl_list', {'name':pname}, function(data){
@ -335,6 +339,7 @@ function csvnAclProject(pname){
var list = '';
for (i in rdata) {
var user = rdata[i]['user'];
var acl = '';
if (rdata[i]['acl'] == 'r'){
acl += '<input type="checkbox" id="owner_r" checked="true"> 只读 | <input type="checkbox" id="owner_r"> 读写';
@ -342,8 +347,8 @@ function csvnAclProject(pname){
acl += '<input type="checkbox" id="owner_r"> 只读 | <input type="checkbox" id="owner_r" checked="true"> 读写';
}
list += '<tr><td>'+rdata[i]['user']+'</td><td>' + acl +'</td>'+
'<td><a class="btlink" onclick="csvnAclDel(\''+pname+'\',\''+rdata[i]['user']+'\')">删除</a></td>'+'</tr>';
list += '<tr><td>'+user+'</td><td>' + acl +'</td>'+
'<td><a class="btlink" onclick="csvnAclDel(\''+pname+'\',\''+user+'\')">删除</a></td>'+'</tr>';
}
var loadOpen = layer.open({

@ -79,8 +79,21 @@ def login():
@dashboard.route("/do_login", methods=['POST'])
def doLogin():
print request.args
# return "123"
# return public.returnJson(False, 'LOGIN_USER_EMPTY')
return public.returnJson(True, 'LOGIN_SUCCESS')
username = request.form.get('username', '').strip()
password = request.form.get('password', '').strip()
code = request.form.get('code', '').strip()
print session
if session.has_key('code'):
if session['code'] != public.md5(code):
return public.returnJson(False, '验证码错误,请重新输入!')
userInfo = public.M('users').where(
"id=?", (1,)).field('id,username,password').find()
password = public.md5(password)
if userInfo['username'] != username or userInfo['password'] != password:
public.writeLog('TYPE_LOGIN', public.getInfo(
"< a style='color: red'>密码错误</a>,帐号:{1},密码:{2},登录IP:{3}", (('****', '******', request.remote_addr))))
return public.returnJson(False, public.getInfo("用户名或密码错误,您还可以尝试[{1}]次!", ('1')))
return public.returnJson(True, '登录成功,正在跳转...')

@ -1,5 +0,0 @@
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
curPath=`pwd`
rootPath=$(dirname "$curPath")

@ -0,0 +1,35 @@
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
mw_path={$SERVER_PATH}
mw_start(){
isStart=`ps -ef|grep 'gunicorn -c setting.py app:app' |grep -v grep|awk '{print $2}'`
if [ "$isStart" == '' ];then
echo -e "Starting mw... \c"
cd $mw_path && gunicorn -c setting.py app:app &
sleep 0.1
port=$(cat ${mw_path}/data/port.pl)
isStart=$(lsof -i :$port|grep LISTEN)
if [ "$isStart" == '' ];then
echo -e "\033[31mfailed\033[0m"
echo '------------------------------------------------------'
tail -n 20 $panel_path/logs/error.log
echo '------------------------------------------------------'
echo -e "\033[31mError: mw service startup failed.\033[0m"
return;
fi
echo -e "\033[32mdone\033[0m"
else
echo "Starting mw... mw(pid $(echo $isStart)) already running"
fi
}
case "$1" in
'start')
mw_start
;;
esac

@ -0,0 +1,27 @@
import os
import time
import sys
sys.path.append(os.getcwd() + '/class/core')
import public
bt_port = public.readFile('data/port.pl')
bind = ['0.0.0.0:%s' % bt_port]
workers = 1
threads = 1
backlog = 512
reload = False
daemon = False
timeout = 7200
keepalive = 1
# worker_class = 'geventwebsocket.gunicorn.workers.GeventWebSocketWorker'
chdir = os.getcwd()
# capture_output = True
# access_log_format = '%(t)s %(p)s %(h)s "%(r)s" %(s)s %(L)s %(b)s %(f)s" "%(a)s"'
# loglevel = 'info'
# errorlog = chdir + '/logs/error.log'
# accesslog = chdir + '/logs/access.log'
# pidfile = chdir + '/logs/panel.pid'
# if os.path.exists(chdir + '/data/ssl.pl'):
# certfile = 'ssl/certificate.pem'
# keyfile = 'ssl/privateKey.pem'

@ -1,7 +1,4 @@
#!/bin/sh
gunicorn -b :7200 app:app &
python task.py &
#open "http://127.0.0.1:7200"
gunicorn -c setting.py app:app &
python task.py &

@ -7,7 +7,7 @@ import sys
import os
import json
import time
print sys.path
# print sys.path
sys.path.append("/usr/local/lib/python2.7/site-packages")
import psutil

@ -10,131 +10,129 @@
<title>mdserver-web</title>
<link rel="stylesheet" type="text/css" href="/static/css/site.css?v={{config.version}}">
<link rel="stylesheet" type="text/css" href="/static/css/login.css?v={{config.version}}">
<style type="text/css">
@media screen and (max-width: 640px) {
.scanCode{
display: none;
}
.account{
display: block !important;
}
.bg_img{
display: none;
}
}
.bg_img{
width: 60px;
height: 60px;
background-image: url('/static/img/qrCode.png');
background-size: 120px 120px;
background-repeat: no-repeat;
background-position: 0 0;
position: absolute;
top: 5px;
right: 5px;
}
.bg_img:hover{
background-position: -60px 0;
cursor: pointer;
/*transition: all 500ms;*/
}
.bg_img.pc{
background-position: 0 -60px;
}
.bg_img.pc:hover{
background-position: -60px -60px;
}
.qrCode{
text-align: center;
padding-top: 20px;
}
.scanCode .titles{
font-size: 23px;
margin-top: 25px;
color: #444;
text-align: center;
}
.list_scan{
width: 150px;
margin: 0 auto;
margin-top: 15px;
}
.list_scan>img{
width: 40px;
height: 40px;
float: left;
margin-right: 15px;
}
.list_scan span{
display: inline-block;
font-size: 13px;
margin-bottom: 5px;
}
.list_scan a:hover .weChatSamll{
display: block;
}
.list_scan .weChatSamll{
display: none;
width: 150px;
height: 150px;
position: absolute;
border: 1px solid #ececec;
border-radius: 5px;
bottom: 105px;
right: 80px;
padding: 20px;
background-color: #fff;
}
.list_scan .weChatSamll img{
width: 100%;
}
.list_scan .weChatSamll em{
position: absolute;
border: 7px solid #ececec;
border-color: #ececec transparent transparent transparent;
width: 0;
height: 0;
right: 87px;
bottom: -14px;
margin-left: -6px;
}
.tips{
width: 115px;
position: absolute;
top: 10px;
right: 65px;
color: rgb(32, 165, 58);
background: #dff0d8;
padding: 5px 10px;
text-align: center;
border-radius: 4px;
}
.tips em{
position: absolute;
border: 6px solid #dff0d8;
border-color:transparent transparent transparent #dff0d8;
width: 0;
height: 0;
right: -11px;
top: 8px;
margin-left: -6px;
}
.tips img{
height: 16px;
width: 16px;
vertical-align: middle;
margin-top: -1px;
margin-right: 4px;
}
.main .login .rlogo{
margin-top: 15px;
margin-bottom: 25px;
}
</style>
</head>
<body>
<style type="text/css">
@media screen and (max-width: 640px) {
.scanCode{
display: none;
}
.account{
display: block !important;
}
.bg_img{
display: none;
}
}
.bg_img{
width: 60px;
height: 60px;
background-image: url('/static/img/qrCode.png');
background-size: 120px 120px;
background-repeat: no-repeat;
background-position: 0 0;
position: absolute;
top: 5px;
right: 5px;
}
.bg_img:hover{
background-position: -60px 0;
cursor: pointer;
/*transition: all 500ms;*/
}
.bg_img.pc{
background-position: 0 -60px;
}
.bg_img.pc:hover{
background-position: -60px -60px;
}
.qrCode{
text-align: center;
padding-top: 20px;
}
.scanCode .titles{
font-size: 23px;
margin-top: 25px;
color: #444;
text-align: center;
}
.list_scan{
width: 150px;
margin: 0 auto;
margin-top: 15px;
}
.list_scan>img{
width: 40px;
height: 40px;
float: left;
margin-right: 15px;
}
.list_scan span{
display: inline-block;
font-size: 13px;
margin-bottom: 5px;
}
.list_scan a:hover .weChatSamll{
display: block;
}
.list_scan .weChatSamll{
display: none;
width: 150px;
height: 150px;
position: absolute;
border: 1px solid #ececec;
border-radius: 5px;
bottom: 105px;
right: 80px;
padding: 20px;
background-color: #fff;
}
.list_scan .weChatSamll img{
width: 100%;
}
.list_scan .weChatSamll em{
position: absolute;
border: 7px solid #ececec;
border-color: #ececec transparent transparent transparent;
width: 0;
height: 0;
right: 87px;
bottom: -14px;
margin-left: -6px;
}
.tips{
width: 115px;
position: absolute;
top: 10px;
right: 65px;
color: rgb(32, 165, 58);
background: #dff0d8;
padding: 5px 10px;
text-align: center;
border-radius: 4px;
}
.tips em{
position: absolute;
border: 6px solid #dff0d8;
border-color:transparent transparent transparent #dff0d8;
width: 0;
height: 0;
right: -11px;
top: 8px;
margin-left: -6px;
}
.tips img{
height: 16px;
width: 16px;
vertical-align: middle;
margin-top: -1px;
margin-right: 4px;
}
.main .login .rlogo{
margin-top: 15px;
margin-bottom: 25px;
}
</style>
<div class="main">
<div class="login">
<div class="account">
@ -162,72 +160,70 @@
<script type="text/javascript" src="/static/layer/layer.js?v={{config.version}}"></script>
<script type="text/javascript" src="/static/js/Validform_v5.3.2_min.js?v={{config.version}}"></script>
<script type="text/javascript">
function Wreset(){
var w = $(window).width();
var yzmw = $(".login .line").width() - 140;
if($(".yzm").is(":visible") && w > 640){
$(".login").css({"height":"365px","margin-top":"-230px"});
}
else{
$(".login").removeAttr("style")
}
$(".login .yzm .inputtxt").width(yzmw);
function Wreset(){
var w = $(window).width();
var yzmw = $(".login .line").width() - 140;
if($(".yzm").is(":visible") && w > 640){
$(".login").css({"height":"365px","margin-top":"-230px"});
}
$(function(){
Wreset();
})
window.onresize=function(){
Wreset();
else{
$(".login").removeAttr("style")
}
</script>
<script type="text/javascript">
$(function(){
$(".loginform").Validform({
tiptype:function(msg,o,cssctl){
if(!o.obj.is("form")){
var objtip=o.obj.siblings(".Validform_checktip");
cssctl(objtip,o.type);
objtip.text(msg);
}
$(".login .yzm .inputtxt").width(yzmw);
}
$(function(){
Wreset();
})
window.onresize=function(){
Wreset();
}
$(function(){
$(".loginform").Validform({
tiptype:function(msg,o,cssctl){
if(!o.obj.is("form")){
var objtip=o.obj.siblings(".Validform_checktip");
cssctl(objtip,o.type);
objtip.text(msg);
}
});
});
$('#login-button').click(function(){
var username = encodeURIComponent($("input[name='username']").val());
var password = encodeURIComponent($("input[name='password']").val());
var code = $("input[name='code']").val();
if(username == '' || password == ''){
layer.msg("表单错误,请重新输入!",{icon:2});
return;
}
var data = 'username='+username+'&password='+password+'&code='+code;
var loadT = layer.msg("正在登录中",{icon:16,time:0,shade: [0.3, '#000']});
$.post('/do_login',data,function(rdata){
console.log(rdata);
layer.close(loadT);
if(!rdata.status){
if(username == 'admin' && rdata.msg.indexOf('用户名') != -1) rdata.msg += ', <br>获取默认用户和密码命令: bt default';
$("#errorStr").html(rdata.msg);
$("input[name='password']").val('');
num = rdata.msg.substring(rdata.msg.indexOf('[')+1,rdata.msg.indexOf(']'))
if(num < 5){
$(".yzm").show();
$(".login").css("height","332px");
$("input[name='code']").val('');
$(".passcode").click();
}
});
});
$('#login-button').click(function(){
var username = encodeURIComponent($("input[name='username']").val());
var password = encodeURIComponent($("input[name='password']").val());
var code = $("input[name='code']").val();
if(username == '' || password == ''){
layer.msg("表单错误,请重新输入!",{icon:2});
return;
}
var data = 'username='+username+'&password='+password+'&code='+code;
var loadT = layer.msg("正在登录中",{icon:16,time:0,shade: [0.3, '#000']});
$.post('/do_login',data,function(rdata){
layer.close(loadT);
if(!rdata.status){
if(username == 'admin' && rdata.msg.indexOf('用户名') != -1) rdata.msg += ', <br>获取默认用户和密码命令: mw default';
$("#errorStr").html(rdata.msg);
$("input[name='password']").val('');
num = rdata.msg.substring(rdata.msg.indexOf('[')+1,rdata.msg.indexOf(']'))
if(num < 5){
$(".yzm").show();
Wreset();
layer.msg(rdata.msg,{icon:2,time:5000});
return;
$(".login").css("height","332px");
$("input[name='code']").val('');
$(".passcode").click();
}
layer.msg(rdata.msg,{icon:16,time:0,shade: [0.3, '#000']});
window.location.href = '/';
},'json');
});
$(".yzm").show();
Wreset();
layer.msg(rdata.msg,{icon:2,time:5000});
return;
}
layer.msg(rdata.msg,{icon:16,time:0,shade: [0.3, '#000']});
window.location.href = '/';
},'json');
});
</script>
</body>

Loading…
Cancel
Save