Simple Linux Panel
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mdserver-web/plugins/csvn/index.py

437 lines
11 KiB

7 years ago
# coding: utf-8
import time
import random
import os
import urllib
import binascii
import json
import re
7 years ago
import sys
7 years ago
import subprocess
7 years ago
sys.path.append(os.getcwd() + "/class/core")
import public
7 years ago
7 years ago
app_debug = False
if public.getOs() == 'darwin':
app_debug = True
7 years ago
def getPluginName():
return 'csvn'
def getPluginDir():
return public.getPluginDir() + '/' + getPluginName()
def getServerDir():
return public.getServerDir() + '/' + getPluginName()
def getInitDFile():
if app_debug:
return '/tmp/' + getPluginName()
return '/etc/init.d/' + getPluginName()
7 years ago
def getArgs():
args = sys.argv[2:]
tmp = {}
7 years ago
args_len = len(args)
if args_len == 1:
t = args[0].strip('{').strip('}')
t = t.split(':')
7 years ago
tmp[t[0]] = t[1]
7 years ago
elif args_len > 1:
for i in range(len(args)):
t = args[i].split(':')
tmp[t[0]] = t[1]
7 years ago
return tmp
def initDreplace():
7 years ago
initd_file = getInitDFile()
7 years ago
7 years ago
if not os.path.exists(initd_file):
return getServerDir()
7 years ago
7 years ago
return initd_file
7 years ago
7 years ago
def status():
7 years ago
data = public.execShell(
"ps -ef|grep " + getPluginName() + " |grep -v grep | grep -v python | awk '{print $2}'")
if data[0] == '':
return 'stop'
7 years ago
return 'start'
7 years ago
7 years ago
def csvnOp(method):
7 years ago
7 years ago
if app_debug:
7 years ago
os_name = public.getOs()
if os_name == 'darwin':
return "Apple Computer does not support"
7 years ago
_initd_csvn = '/etc/init.d/csvn'
_initd_csvn_httpd = '/etc/init.d/csvn-httpd'
7 years ago
#_csvn = getServerDir() + '/bin/csvn'
#_csvn_httpd = getServerDir() + '/bin/csvn-httpd'
7 years ago
7 years ago
ret_csvn_httpd = public.execShell(_initd_csvn_httpd + ' ' + method)
7 years ago
# ret_csvn = public.execShell(_initd_csvn + ' ' + method)
7 years ago
subprocess.Popen(_initd_csvn + ' ' + method,
stdout=subprocess.PIPE, shell=True)
7 years ago
if ret_csvn_httpd[1] == '':
7 years ago
return 'ok'
return 'fail'
7 years ago
def start():
return csvnOp('start')
7 years ago
def stop():
7 years ago
return csvnOp('stop')
7 years ago
def restart():
7 years ago
return csvnOp('restart')
7 years ago
def reload():
7 years ago
return csvnOp('reload')
7 years ago
def initdStatus():
7 years ago
if not app_debug:
if public.getOs() == 'darwin':
7 years ago
return "Apple Computer does not support"
7 years ago
_initd_csvn = '/etc/init.d/csvn'
_initd_csvn_httpd = '/etc/init.d/csvn-httpd'
if os.path.exists(_initd_csvn) and os.path.exists(_initd_csvn_httpd):
7 years ago
return 'ok'
return 'fail'
def initdInstall():
import shutil
7 years ago
if not app_debug:
if public.getOs() == 'darwin':
7 years ago
return "Apple Computer does not support"
7 years ago
_csvn = getServerDir() + '/bin/csvn'
_csvn_httpd = getServerDir() + '/bin/csvn-httpd'
7 years ago
ret_csvn = public.execShell(_csvn + ' install')
ret_csvn_httpd = public.execShell(_csvn_httpd + ' install')
if ret_csvn[1] == '' and ret_csvn_httpd[1] == '':
return 'ok'
return 'fail'
7 years ago
def initdUinstall():
7 years ago
if not app_debug:
if public.getOs() == 'darwin':
7 years ago
return "Apple Computer does not support"
_csvn = getServerDir() + '/bin/csvn'
_csvn_httpd = getServerDir() + '/bin/csvn-httpd'
7 years ago
ret_csvn = public.execShell(_csvn + ' remove')
ret_csvn_httpd = public.execShell(_csvn_httpd + ' remove')
7 years ago
return 'ok'
7 years ago
7 years ago
7 years ago
def userAdd():
args = getArgs()
if not 'username' in args:
return 'name missing'
if not 'password' in args:
return 'password missing'
htpasswd = getServerDir() + "/bin/htpasswd"
svn_auth_file = getServerDir() + "/data/conf/svn_auth_file"
cmd = htpasswd + ' -b ' + svn_auth_file + ' ' + \
args['username'] + ' ' + args['password']
data = public.execShell(cmd)
7 years ago
if data[0] == '':
7 years ago
return 'ok'
return 'fail'
def userDel():
args = getArgs()
if not 'username' in args:
return 'name missing'
htpasswd = getServerDir() + "/bin/htpasswd"
svn_auth_file = getServerDir() + "/data/conf/svn_auth_file"
cmd = htpasswd + ' -D ' + svn_auth_file + ' ' + args['username']
data = public.execShell(cmd)
7 years ago
if data[0] == '':
7 years ago
return 'ok'
return 'fail'
7 years ago
7 years ago
def getAllUser():
svn_auth_file = getServerDir() + '/data/conf/svn_auth_file'
if not os.path.exists(svn_auth_file):
return public.getJson([])
auth = public.readFile(svn_auth_file)
auth = auth.strip()
auth_list = auth.split("\n")
ulist = []
for x in range(len(auth_list)):
tmp = auth_list[x].split(':')
ulist.append(tmp[0])
return ulist
7 years ago
def userList():
import math
args = getArgs()
page = 1
page_size = 10
if 'page' in args:
page = int(args['page'])
if 'page_size' in args:
page_size = int(args['page_size'])
7 years ago
ulist = getAllUser()
ulist_sum = len(ulist)
7 years ago
7 years ago
page_info = {'count': ulist_sum, 'p': page,
7 years ago
'row': 10, 'tojs': 'csvnUserList'}
7 years ago
data = {}
7 years ago
data['list'] = public.getPage(page_info)
7 years ago
data['page'] = page
data['page_size'] = page_size
7 years ago
data['page_count'] = int(math.ceil(ulist_sum / page_size))
7 years ago
start = (page - 1) * page_size
7 years ago
7 years ago
data['data'] = ulist[start:start + page_size]
7 years ago
return public.getJson(data)
7 years ago
7 years ago
def projectAdd():
args = getArgs()
if not 'name' in args:
return 'project name missing'
path = getServerDir() + '/bin/svnadmin'
dest = getServerDir() + '/data/repositories/' + args['name']
cmd = path + ' create ' + dest
data = public.execShell(cmd)
7 years ago
if data[1] == '':
public.execShell('chown -R csvn:csvn ' + dest)
7 years ago
return 'ok'
return 'fail'
def projectDel():
args = getArgs()
if not 'name' in args:
return 'project name missing'
dest = getServerDir() + '/data/repositories/' + args['name']
cmd = 'rm -rf ' + dest
data = public.execShell(cmd)
if data[0] == '':
return 'ok'
return 'fail'
7 years ago
def projectList():
7 years ago
import math
args = getArgs()
path = getServerDir() + '/data/repositories'
dlist = []
data = {}
if os.path.exists(path):
for filename in os.listdir(path):
tmp = {}
filePath = path + '/' + filename
if os.path.isdir(filePath):
tmp['name'] = filename
verPath = filePath + '/format'
if os.path.exists(verPath):
ver = public.readFile(verPath).strip()
tmp['ver'] = ver
dlist.append(tmp)
page = 1
page_size = 10
if 'page' in args:
page = int(args['page'])
if 'page_size' in args:
page_size = int(args['page_size'])
dlist_sum = len(dlist)
page_info = {'count': dlist_sum, 'p': page,
'row': 10, 'tojs': 'csvnProjectList'}
data['list'] = public.getPage(page_info)
data['page'] = page
data['page_size'] = page_size
data['page_count'] = int(math.ceil(dlist_sum / page_size))
start = (page - 1) * page_size
data['data'] = dlist[start:start + page_size]
return public.getJson(data)
7 years ago
7 years ago
def getAllAclList():
svn_access_file = getServerDir() + '/data/conf/svn_access_file'
aData = public.readFile(svn_access_file)
7 years ago
aData = re.sub('#.*', '', aData)
7 years ago
aData = aData.strip().split('[')[1:]
allAcl = {}
7 years ago
for i in range(len(aData)):
7 years ago
oData = aData[i].strip().split(']')
name = oData[0].strip('/')
if oData[1] == '':
allAcl[name] = []
else:
user = oData[1].strip().split('\n')
userAll = []
for iu in range(len(user)):
ulist = user[iu].split('=')
utmp = {}
7 years ago
utmp['user'] = ulist[0].strip()
utmp['acl'] = ulist[1].strip()
7 years ago
userAll.append(utmp)
allAcl[name] = userAll
return allAcl
7 years ago
def makeAclFile(content):
7 years ago
# print content
7 years ago
svn_access_file = getServerDir() + '/data/conf/svn_access_file'
tmp = "\n"
for k, v in content.items():
if k == '':
tmp += "[/]\n"
else:
tmp += "[/" + k + "]\n"
for iv in range(len(v)):
7 years ago
tmp += v[iv]['user'] + ' = ' + v[iv]['acl'] + "\n"
7 years ago
tmp += "\n"
return public.writeFile(getServerDir() + '/data/conf/svn_access_file.log', tmp)
7 years ago
def projectAclList():
7 years ago
args = getArgs()
7 years ago
if not 'name' in args:
return 'name missing!'
name = args['name']
acl = getAllAclList()
if name in acl:
return public.getJson(acl[name])
else:
return 'fail'
# makeAclFile(acl)
# return public.getJson(acl)
7 years ago
7 years ago
def projectAclAdd():
7 years ago
args = getArgs()
if not 'uname' in args:
return 'username missing'
if not 'pname' in args:
return 'project name missing'
uname = args['uname']
pname = args['pname']
ulist = getAllUser()
if not uname in ulist:
return uname + " user not exists!"
acl = getAllAclList()
if not pname in acl:
return 'project not exists!'
tmp = acl[pname]
tmp_len = len(tmp)
tmp_acl = {'user': uname, 'acl': 'rw'}
if tmp_len == 0:
acl[pname] = [tmp_acl]
else:
print tmp_len
is_have = False
for x in range(tmp_len):
# print tmp[x], tmp[x]['user'], uname
if tmp[x]['user'] == uname:
is_have = True
return 'fail'
# print acl
if not is_have:
tmp.append(tmp_acl)
acl[pname] = tmp
# print acl
makeAclFile(acl)
return 'ok'
7 years ago
def projectAclDel():
pass
7 years ago
if __name__ == "__main__":
func = sys.argv[1]
if func == 'status':
print status()
7 years ago
elif func == 'start':
print start()
elif func == 'stop':
print stop()
elif func == 'restart':
print restart()
elif func == 'reload':
print reload()
elif func == 'initd_status':
print initdStatus()
elif func == 'initd_install':
print initdInstall()
elif func == 'initd_uninstall':
print initdUinstall()
elif func == 'run_info':
print runInfo()
elif func == 'conf':
print getConf()
elif func == 'save_conf':
print saveConf()
7 years ago
elif func == 'user_list':
print userList()
7 years ago
elif func == 'user_add':
print userAdd()
elif func == 'user_del':
print userDel()
7 years ago
elif func == 'project_list':
print projectList()
7 years ago
elif func == 'project_del':
print projectDel()
elif func == 'project_add':
print projectAdd()
7 years ago
elif func == 'project_acl_list':
print projectAclList()
7 years ago
elif func == 'project_acl_add':
print projectAclAdd()
7 years ago
else:
7 years ago
print 'fail'