|
|
|
@ -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' |
|
|
|
|