pull/109/head
Mr Chen 6 years ago
parent fc5fe97e90
commit 2904f8dd0c
  1. 10
      plugins/l2tp/index.html
  2. 275
      plugins/l2tp/index.py
  3. 19
      plugins/l2tp/install.sh
  4. 49
      plugins/l2tp/js/l2tp.js
  5. 12
      route/static/app/site.js

@ -1,11 +1,8 @@
<div class="bt-form">
<div class="bt-w-main">
<div class="bt-w-menu">
<p class="bgw" onclick="pluginService('pm2');">服务</p>
<p onclick="pluginInitD('pm2');">项目列表</p>
<p onclick="pluginConfig('pm2');">Node版本</p>
<p onclick="redisStatus();">模版管理</p>
<p onclick="pluginLogs('pm2','','run_log');">日志管理</p>
<p class="bgw" onclick="pluginService('l2tp');">服务</p>
<p onclick="pluginInitD('l2tp');">用户列表</p>
</div>
<div class="bt-w-con pd15">
<div class="soft-man-con"></div>
@ -13,4 +10,7 @@
</div>
</div>
<script type="text/javascript">
$.getScript( "/plugins/file?name=l2tp&f=js/l2tp.js", function(){
pluginService('l2tp');
});
</script>

@ -15,7 +15,7 @@ if public.isAppleSystem():
def getPluginName():
return 'pureftp'
return 'l2tp'
def getPluginDir():
@ -179,261 +179,6 @@ def initdUinstall():
return 'ok'
def pftpDB():
file = getServerDir() + '/ftps.db'
if not os.path.exists(file):
conn = public.M('ftps').dbPos(getServerDir(), 'ftps')
csql = public.readFile(getPluginDir() + '/conf/ftps.sql')
csql_list = csql.split(';')
for index in range(len(csql_list)):
conn.execute(csql_list[index], ())
else:
conn = public.M('ftps').dbPos(getServerDir(), 'ftps')
return conn
def pftpUser():
if public.isAppleSystem():
user = public.execShell(
"who | sed -n '2, 1p' |awk '{print $1}'")[0].strip()
return user
return 'www'
def pftpAdd(username, password, path):
user = pftpUser()
if not os.path.exists(path):
os.makedirs(path)
if public.isAppleSystem():
os.system('chown ' + user + '.staff ' + path)
else:
os.system('chown www.www ' + path)
cmd = getServerDir() + '/bin/pure-pw useradd ' + username + ' -u ' + user + ' -d ' + \
path + '<<EOF \n' + password + '\n' + password + '\nEOF'
return public.execShell(cmd)
def pftpMod(username, password):
user = pftpUser()
cmd = getServerDir() + '/bin/pure-pw passwd ' + username + \
'<<EOF \n' + password + '\n' + password + '\nEOF'
return public.execShell(cmd)
def pftpStop(username):
cmd = getServerDir() + '/bin/pure-pw usermod ' + username + ' -r 1'
return public.execShell(cmd)
def pftpStart(username):
cmd = getServerDir() + '/bin/pure-pw usermod ' + username + " -r ''"
return public.execShell(cmd)
def pftpReload():
public.execShell(getServerDir() + '/bin/pure-pw mkdb ' +
getServerDir() + '/etc/pureftpd.pdb')
def getWwwDir():
path = public.getWwwDir()
return path
def getFtpPort():
import re
try:
file = getServerDir() + '/etc/pure-ftpd.conf'
conf = public.readFile(file)
rep = "\n#?\s*Bind\s+[0-9]+\.[0-9]+\.[0-9]+\.+[0-9]+,([0-9]+)"
port = re.search(rep, conf).groups()[0]
except:
port = '21'
return port
def getFtpList():
args = getArgs()
page = 1
page_size = 10
search = ''
if 'page' in args:
page = int(args['page'])
if 'page_size' in args:
page_size = int(args['page_size'])
if 'search' in args:
search = args['search']
data = {}
conn = pftpDB()
limit = str((page - 1) * page_size) + ',' + str(page_size)
# print limit, search
condition = ''
if not search == '':
condition = "name like '%" + search + "%'"
field = 'id,pid,name,password,path,status,ps,addtime'
clist = conn.where(condition, ()).field(
field).limit(limit).order('id desc').select()
count = conn.where(condition, ()).count()
_page = {}
_page['count'] = count
_page['p'] = page
_page['row'] = page_size
_page['tojs'] = 'ftpList'
data['page'] = public.getPage(_page)
info = {}
info['ip'] = public.getLocalIp()
info['port'] = getFtpPort()
data['info'] = info
data['data'] = clist
return public.getJson(data)
def addFtp():
import urllib
args = getArgs()
if not 'ftp_username' in args:
return 'ftp_username missing'
if not 'ftp_password' in args:
return 'ftp_password missing'
if not 'path' in args:
return 'path missing'
if not 'ps' in args:
return 'ps missing'
path = urllib.unquote(args['path'])
user = args['ftp_username']
pwd = args['ftp_password']
ps = args['ps']
addtime = time.strftime('%Y-%m-%d %X', time.localtime())
data = pftpAdd(user, pwd, path)
conn = pftpDB()
conn.add('pid,name,password,path,status,ps,addtime',
(0, user, pwd, path, 1, ps, addtime))
pftpReload()
if data[1] == '':
return 'ok'
return data[0]
def delFtp():
args = getArgs()
if not 'id' in args:
return 'ftp_username missing'
if not 'username' in args:
return 'username missing'
public.execShell(getServerDir() +
'/bin/pure-pw userdel ' + args['username'])
pftpReload()
conn = pftpDB()
conn.where("id=?", (args['id'],)).delete()
public.writeLog('TYPE_FTP', 'FTP_DEL_SUCCESS', (args['username'],))
return 'ok'
def modFtp():
args = getArgs()
if not 'id' in args:
return 'id missing'
if not 'name' in args:
return 'name missing'
if not 'password' in args:
return 'password missing'
conn = pftpDB()
data = pftpMod(args['name'], args['password'])
pftpReload()
conn.where('id=?', (int(args['id']),)).save(
'password', (args['password'],))
# print data
if data[1] == '':
return 'ok'
return data[0]
def modFtpPort():
import re
args = getArgs()
if not 'port' in args:
return 'port missing'
try:
port = args['port']
if int(port) < 1 or int(port) > 65535:
return '端口范围不正确!'
file = file = getServerDir() + '/etc/pure-ftpd.conf'
conf = public.readFile(file)
rep = u"\n#?\s*Bind\s+[0-9]+\.[0-9]+\.[0-9]+\.+[0-9]+,([0-9]+)"
# preg_match(rep,conf,tmp)
conf = re.sub(
rep, "\nBind 0.0.0.0," + port, conf)
public.writeFile(file, conf)
restart()
return 'ok'
except Exception as ex:
return str(ex)
def stopPort():
args = getArgs()
if not 'id' in args:
return 'id missing'
if not 'username' in args:
return 'username missing'
if not 'status' in args:
return 'status missing'
data = pftpStop(args['username'])
pftpReload()
conn = pftpDB()
conn.where('id=?', (int(args['id']),)).save(
'status', (args['status'],))
if data[1] == '':
return 'ok'
return data[0]
def startPort():
args = getArgs()
if not 'id' in args:
return 'id missing'
if not 'username' in args:
return 'username missing'
if not 'status' in args:
return 'status missing'
data = pftpStart(args['username'])
pftpReload()
conn = pftpDB()
conn.where('id=?', (int(args['id']),)).save(
'status', (args['status'],))
if data[1] == '':
return 'ok'
return data[0]
if __name__ == "__main__":
func = sys.argv[1]
if func == 'status':
@ -452,23 +197,5 @@ if __name__ == "__main__":
print initdInstall()
elif func == 'initd_uninstall':
print initdUinstall()
elif func == 'conf':
print getConf()
elif func == 'get_www_dir':
print getWwwDir()
elif func == 'get_ftp_list':
print getFtpList()
elif func == 'add_ftp':
print addFtp()
elif func == 'del_ftp':
print delFtp()
elif func == 'mod_ftp':
print modFtp()
elif func == 'mod_ftp_port':
print modFtpPort()
elif func == 'stop_ftp':
print stopPort()
elif func == 'start_ftp':
print startPort()
else:
print 'error'

@ -10,28 +10,27 @@ serverPath=$(dirname "$rootPath")
install_tmp=${rootPath}/tmp/bt_install.pl
SYSOS=`uname`
Install_l2tp()
{
isStart=""
while [[ "$isStart" == "" ]];
do
echo -e ".\c"
sleep 0.5
startTime=`date +%s`
echo $startTime,'end'
done
echo '正在安装脚本文件...' > $install_tmp
mkdir -p $serverPath/l2tp
echo '1.0' > $serverPath/l2tp/version.pl
echo '安装完成' > $install_tmp
if [ "Darwin" == "$SYSOS" ];then
echo 'macosx unavailable' > $install_tmp
exit 0
fi
echo 'install complete' > $install_tmp
}
Uninstall_l2tp()
{
rm -rf $serverPath/l2tp
echo "卸载完成" > $install_tmp
echo "Uninstall completed" > $install_tmp
}
action=$1

@ -0,0 +1,49 @@
function str2Obj(str){
var data = {};
kv = str.split('&');
for(i in kv){
v = kv[i].split('=');
data[v[0]] = v[1];
}
return data;
}
function lpPost(method,args,callback, title){
var _args = null;
if (typeof(args) == 'string'){
_args = JSON.stringify(str2Obj(args));
} else {
_args = JSON.stringify(args);
}
var _title = '正在获取...';
if (typeof(title) != 'undefined'){
_title = title;
}
var loadT = layer.msg(_title, { icon: 16, time: 0, shade: 0.3 });
$.post('/plugins/run', {name:'l2tp', func:method, args:_args}, function(data) {
layer.close(loadT);
if (!data.status){
layer.msg(data.msg,{icon:0,time:2000,shade: [0.3, '#000']});
return;
}
if(typeof(callback) == 'function'){
callback(data);
}
},'json');
}
function lpAsyncPost(method,args){
var _args = null;
if (typeof(args) == 'string'){
_args = JSON.stringify(str2Obj(args));
} else {
_args = JSON.stringify(args);
}
var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 });
return syncPost('/plugins/run', {name:'l2tp', func:method, args:_args});
}

@ -1492,14 +1492,14 @@ function dns_check(){
}
//证书夹
function ssl_admin(siteName){
function sslAdmin(siteName){
var loadT = layer.msg('正在提交任务...',{icon:16,time:0,shade: [0.3, '#000']});
$.get('/site/get_cert_list',function(data){
layer.close(loadT);
var rdata = data['data'];
var tbody = '';
for(var i=0;i<rdata.length;i++){
tbody += '<tr><td>'+rdata[i].subject+'</td><td>'+rdata[i].dns.join('<br>')+'</td><td>'+rdata[i].notAfter+'</td><td>'+rdata[i].issuer+'</td><td style="text-align: right;"><a onclick="set_cert_ssl(\''+rdata[i].subject+'\',\''+siteName+'\')" class="btlink">部署</a> | <a onclick="remove_ssl(\''+rdata[i].subject+'\')" class="btlink">删除</a></td></tr>'
tbody += '<tr><td>'+rdata[i].subject+'</td><td>'+rdata[i].dns.join('<br>')+'</td><td>'+rdata[i].notAfter+'</td><td>'+rdata[i].issuer+'</td><td style="text-align: right;"><a onclick="setCertSsl(\''+rdata[i].subject+'\',\''+siteName+'\')" class="btlink">部署</a> | <a onclick="removeSsl(\''+rdata[i].subject+'\')" class="btlink">删除</a></td></tr>'
}
var txt = '<div class="mtb15" style="line-height:30px">\
<button style="margin-bottom: 7px;display:none;" class="btn btn-success btn-sm">添加</button>\
@ -1511,8 +1511,8 @@ function ssl_admin(siteName){
}
//删除证书
function remove_ssl(certName){
SafeMessage('删除证书','您真的要从证书夹删除证书吗?',function(){
function removeSsl(certName){
safeMessage('删除证书','您真的要从证书夹删除证书吗?',function(){
var loadT = layer.msg(lan.site.the_msg,{icon:16,time:0,shade: [0.3, '#000']});
$.post('/ssl?action=RemoveCert',{certName:certName},function(rdata){
layer.close(loadT);
@ -1523,7 +1523,7 @@ function remove_ssl(certName){
}
//从证书夹部署
function set_cert_ssl(certName,siteName){
function setCertSsl(certName,siteName){
var loadT = layer.msg('正在部署证书...',{icon:16,time:0,shade: [0.3, '#000']});
$.post('/ssl?action=SetCertToSite',{certName:certName,siteName:siteName},function(rdata){
layer.close(loadT);
@ -1537,7 +1537,7 @@ function setSSL(id,siteName){
<span class="on" onclick="opSSL(\'lets\','+id+',\''+siteName+'\')">Let\'s Encrypt</span>\
<span onclick="opSSL(\'other\','+id+',\''+siteName+'\')">其他证书</span>\
<span class="sslclose" onclick="closeSSL(\''+siteName+'\')">关闭</span>\
<span id="ssl_admin" onclick="ssl_admin(\''+siteName+'\')">证书夹</span>'
<span id="ssl_admin" onclick="sslAdmin(\''+siteName+'\')">证书夹</span>'
+ '<div class="ss-text pull-right mr30" style="position: relative;top:-4px">\
<em>强制HTTPS</em>\
<div class="ssh-item">\

Loading…
Cancel
Save