diff --git a/plugins/gogs/bak/index_2022_6_19.py b/plugins/gogs/bak/index_2022_6_19.py
new file mode 100755
index 000000000..9bfc0b2a7
--- /dev/null
+++ b/plugins/gogs/bak/index_2022_6_19.py
@@ -0,0 +1,704 @@
+# coding: utf-8
+
+
+import time
+import os
+import sys
+import re
+
+
+sys.path.append(os.getcwd() + "/class/core")
+import mw
+
+
+cmd = 'ls /usr/local/lib/ | grep python | cut -d \\ -f 1 | awk \'END {print}\''
+info = mw.execShell(cmd)
+p = "/usr/local/lib/" + info[0].strip() + "/site-packages"
+sys.path.append(p)
+import psutil
+
+
+app_debug = False
+if mw.isAppleSystem():
+ app_debug = True
+
+
+def getPluginName():
+ return 'gogs'
+
+
+def getPluginDir():
+ return mw.getPluginDir() + '/' + getPluginName()
+
+sys.path.append(getPluginDir() + "/class")
+import mysqlDb
+
+
+def getServerDir():
+ return mw.getServerDir() + '/' + getPluginName()
+
+
+def getInitDFile():
+ if app_debug:
+ return '/tmp/' + getPluginName()
+ return '/etc/init.d/' + getPluginName()
+
+
+def getArgs():
+ args = sys.argv[2:]
+ tmp = {}
+ args_len = len(args)
+
+ if args_len == 1:
+ t = args[0].strip('{').strip('}')
+ t = t.split(':', 1)
+ tmp[t[0]] = t[1]
+ elif args_len > 1:
+ for i in range(len(args)):
+ t = args[i].split(':', 1)
+ tmp[t[0]] = t[1]
+
+ return tmp
+
+
+def getInitdConfTpl():
+ path = getPluginDir() + "/init.d/gogs.tpl"
+ return path
+
+
+def getInitdConf():
+ path = getServerDir() + "/init.d/gogs"
+ return path
+
+
+def getConf():
+ path = getServerDir() + "/custom/conf/app.ini"
+ return path
+
+
+def getConfTpl():
+ path = getPluginDir() + "/conf/app.ini"
+ return path
+
+
+def status():
+ data = mw.execShell(
+ "ps -ef|grep " + getPluginName() + " |grep -v grep | grep -v python | awk '{print $2}'")
+ if data[0] == '':
+ return 'stop'
+ return 'start'
+
+
+def getHomeDir():
+ if mw.isAppleSystem():
+ user = mw.execShell(
+ "who | sed -n '2, 1p' |awk '{print $1}'")[0].strip()
+ return '/Users/' + user
+ else:
+ return '/root'
+
+
+def getRunUser():
+ if mw.isAppleSystem():
+ user = mw.execShell(
+ "who | sed -n '2, 1p' |awk '{print $1}'")[0].strip()
+ return user
+ else:
+ return 'root'
+
+__SR = '''#!/bin/bash
+PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
+export PATH
+export USER=%s
+export HOME=%s && ''' % ( getRunUser(), getHomeDir())
+
+
+def contentReplace(content):
+
+ service_path = mw.getServerDir()
+ content = content.replace('{$ROOT_PATH}', mw.getRootDir())
+ content = content.replace('{$SERVER_PATH}', service_path)
+ content = content.replace('{$RUN_USER}', getRunUser())
+ content = content.replace('{$HOME_DIR}', getHomeDir())
+
+ return content
+
+
+def initDreplace():
+
+ file_tpl = getInitdConfTpl()
+ service_path = mw.getServerDir()
+
+ initD_path = getServerDir() + '/init.d'
+ if not os.path.exists(initD_path):
+ os.mkdir(initD_path)
+ file_bin = initD_path + '/' + getPluginName()
+
+ if not os.path.exists(file_bin):
+ content = mw.readFile(file_tpl)
+ content = contentReplace(content)
+ mw.writeFile(file_bin, content)
+ mw.execShell('chmod +x ' + file_bin)
+
+ conf_bin = getConf()
+ if not os.path.exists(conf_bin):
+ mw.execShell('mkdir -p ' + getServerDir() + '/custom/conf')
+ conf_tpl = getConfTpl()
+ content = mw.readFile(conf_tpl)
+ content = contentReplace(content)
+ mw.writeFile(conf_bin, content)
+
+ log_path = getServerDir() + '/log'
+ if not os.path.exists(log_path):
+ os.mkdir(log_path)
+
+ return file_bin
+
+
+def getRootUrl():
+ content = mw.readFile(getConf())
+ rep = 'ROOT_URL\s*=\s*(.*)'
+ tmp = re.search(rep, content)
+ if not tmp:
+ return ''
+ return tmp.groups()[0]
+
+
+def getSshPort():
+ content = mw.readFile(getConf())
+ rep = 'SSH_PORT\s*=\s*(.*)'
+ tmp = re.search(rep, content)
+ if not tmp:
+ return ''
+ return tmp.groups()[0]
+
+
+def getHttpPort():
+ content = mw.readFile(getConf())
+ rep = 'HTTP_PORT\s*=\s*(.*)'
+ tmp = re.search(rep, content)
+ if not tmp:
+ return ''
+ return tmp.groups()[0]
+
+
+def getRootPath():
+ content = mw.readFile(getConf())
+ rep = 'ROOT\s*=\s*(.*)'
+ tmp = re.search(rep, content)
+ if not tmp:
+ return ''
+ return tmp.groups()[0]
+
+
+def getDbConfValue():
+ content = mw.readFile(getConf())
+
+ rep_scope = "\[database\](.*?)\["
+ tmp = re.findall(rep_scope, content, re.S)
+
+ rep = '(\w*)\s*=\s*(.*)'
+ tmp = re.findall(rep, tmp[0])
+ r = {}
+ for x in range(len(tmp)):
+ k = tmp[x][0]
+ v = tmp[x][1]
+ r[k] = v
+ return r
+
+
+def pMysqlDb():
+ conf = getDbConfValue()
+
+ host = conf['HOST'].split(':')
+ conn = mysqlDb.mysqlDb()
+
+ conn.setHost(host[0])
+ conn.setUser(conf['USER'])
+ conn.setPwd(conf['PASSWD'])
+ conn.setPort(int(host[1]))
+ conn.setDb(conf['NAME'])
+ return conn
+
+
+def isSqlError(mysqlMsg):
+ # 检测数据库执行错误
+ _mysqlMsg = str(mysqlMsg)
+ # print _mysqlMsg
+ if "MySQLdb" in _mysqlMsg:
+ return mw.returnData(False, 'MySQLdb组件缺失!
进入SSH命令行输入: pip install mysql-python')
+ if "2002," in _mysqlMsg:
+ return mw.returnData(False, '数据库连接失败,请检查数据库服务是否启动!')
+ if "using password:" in _mysqlMsg:
+ return mw.returnData(False, '数据库管理密码错误!')
+ if "Connection refused" in _mysqlMsg:
+ return mw.returnData(False, '数据库连接失败,请检查数据库服务是否启动!')
+ if "1133," in _mysqlMsg:
+ return mw.returnData(False, '数据库用户不存在!')
+ if "1007," in _mysqlMsg:
+ return mw.returnData(False, '数据库已经存在!')
+ if "1044," in _mysqlMsg:
+ return mw.returnData(False, mysqlMsg[1])
+ if "2003," in _mysqlMsg:
+ return mw.returnData(False, "Can't connect to MySQL server on '127.0.0.1' (61)")
+ return mw.returnData(True, 'OK')
+
+
+def start():
+
+ is_frist = True
+ conf_bin = getConf()
+ if os.path.exists(conf_bin):
+ is_frist = False
+
+ file = initDreplace()
+
+ if is_frist:
+ return "第一次启动Gogs,默认使用MySQL连接!
可以在配置文件中重新设置,再启动!"
+
+ conn = pMysqlDb()
+ list_table = conn.query('show tables')
+ data = isSqlError(list_table)
+ if not data['status']:
+ return data['msg']
+
+ data = mw.execShell(__SR + file + ' start')
+ if data[1] == '':
+ return 'ok'
+ return data[0]
+
+
+def stop():
+ file = initDreplace()
+ data = mw.execShell(__SR + file + ' stop')
+ if data[1] == '':
+ return 'ok'
+ return data[1]
+
+
+def restart():
+ file = initDreplace()
+ data = mw.execShell(__SR + file + ' restart')
+ if data[1] == '':
+ return 'ok'
+ return data[1]
+
+
+def reload():
+ file = initDreplace()
+ data = mw.execShell(__SR + file + ' reload')
+ if data[1] == '':
+ return 'ok'
+ return data[1]
+
+
+def initdStatus():
+ if not app_debug:
+ os_name = mw.getOs()
+ if os_name == 'darwin':
+ return "Apple Computer does not support"
+ initd_bin = getInitDFile()
+ if os.path.exists(initd_bin):
+ return 'ok'
+ return 'fail'
+
+
+def initdInstall():
+ import shutil
+ if not app_debug:
+ os_name = mw.getOs()
+ if os_name == 'darwin':
+ return "Apple Computer does not support"
+
+ mem_bin = initDreplace()
+ initd_bin = getInitDFile()
+ shutil.copyfile(mem_bin, initd_bin)
+ mw.execShell('chmod +x ' + initd_bin)
+ mw.execShell('chkconfig --add ' + getPluginName())
+ return 'ok'
+
+
+def initdUinstall():
+ if not app_debug:
+ os_name = mw.getOs()
+ if os_name == 'darwin':
+ return "Apple Computer does not support"
+ initd_bin = getInitDFile()
+ os.remove(initd_bin)
+ mw.execShell('chkconfig --del ' + getPluginName())
+ return 'ok'
+
+
+def runLog():
+ log_path = getServerDir() + '/log/gogs.log'
+ return log_path
+
+
+def postReceiveLog():
+ log_path = getServerDir() + '/log/hooks/post-receive.log'
+ return log_path
+
+
+def getGogsConf():
+ gets = [
+ {'name': 'DOMAIN', 'type': -1, 'ps': '服务器域名'},
+ {'name': 'ROOT_URL', 'type': -1, 'ps': '公开的完整URL路径'},
+ {'name': 'HTTP_ADDR', 'type': -1, 'ps': '应用HTTP监听地址'},
+ {'name': 'HTTP_PORT', 'type': -1, 'ps': '应用 HTTP 监听端口号'},
+
+ {'name': 'START_SSH_SERVER', 'type': 2, 'ps': '启动内置SSH服务器'},
+ {'name': 'SSH_PORT', 'type': -1, 'ps': 'SSH 端口号'},
+
+ {'name': 'REQUIRE_SIGNIN_VIEW', 'type': 2, 'ps': '强制登录浏览'},
+ {'name': 'ENABLE_CAPTCHA', 'type': 2, 'ps': '启用验证码服务'},
+ {'name': 'DISABLE_REGISTRATION', 'type': 2, 'ps': '禁止注册,只能由管理员创建帐号'},
+ {'name': 'ENABLE_NOTIFY_MAIL', 'type': 2, 'ps': '是否开启邮件通知'},
+
+ {'name': 'FORCE_PRIVATE', 'type': 2, 'ps': '强制要求所有新建的仓库都是私有'},
+
+ {'name': 'SHOW_FOOTER_BRANDING', 'type': 2, 'ps': 'Gogs推广信息'},
+ {'name': 'SHOW_FOOTER_VERSION', 'type': 2, 'ps': 'Gogs版本信息'},
+ {'name': 'SHOW_FOOTER_TEMPLATE_LOAD_TIME', 'type': 2, 'ps': 'Gogs模板加载时间'},
+ ]
+ conf = mw.readFile(getConf())
+ result = []
+
+ for g in gets:
+ rep = g['name'] + '\s*=\s*(.*)'
+ tmp = re.search(rep, conf)
+ if not tmp:
+ continue
+ g['value'] = tmp.groups()[0]
+ result.append(g)
+ return mw.getJson(result)
+
+
+def submitGogsConf():
+ gets = ['DOMAIN',
+ 'ROOT_URL',
+ 'HTTP_ADDR',
+ 'HTTP_PORT',
+ 'START_SSH_SERVER',
+ 'SSH_PORT',
+ 'REQUIRE_SIGNIN_VIEW',
+ 'FORCE_PRIVATE',
+ 'ENABLE_CAPTCHA',
+ 'DISABLE_REGISTRATION',
+ 'ENABLE_NOTIFY_MAIL',
+ 'SHOW_FOOTER_BRANDING',
+ 'SHOW_FOOTER_VERSION',
+ 'SHOW_FOOTER_TEMPLATE_LOAD_TIME']
+ args = getArgs()
+ filename = getConf()
+ conf = mw.readFile(filename)
+ for g in gets:
+ if g in args:
+ rep = g + '\s*=\s*(.*)'
+ val = g + ' = ' + args[g]
+ conf = re.sub(rep, val, conf)
+ mw.writeFile(filename, conf)
+ reload()
+ return mw.returnJson(True, '设置成功')
+
+
+def userList():
+ import math
+ 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 = {}
+
+ data['root_url'] = getRootUrl()
+
+ pm = pMysqlDb()
+ start = (page - 1) * page_size
+ list_count = pm.query('select count(id) as num from user')
+ count = list_count[0][0]
+
+ list_data = pm.query(
+ 'select id,name,email from user order by id desc limit ' + str(start) + ',' + str(page_size))
+
+ page_info = {'count': count, 'p': page,
+ 'row': page_size, 'tojs': 'gogsUserList'}
+ data['list'] = mw.getPage(page_info)
+ data['page'] = page
+ data['page_size'] = page_size
+ data['page_count'] = int(math.ceil(count / page_size))
+ data['data'] = list_data
+ return mw.returnJson(True, 'OK', data)
+
+
+def getAllUserProject(user, search=''):
+ path = getRootPath() + '/' + user
+ dlist = []
+ if os.path.exists(path):
+ for filename in os.listdir(path):
+ tmp = {}
+ filePath = path + '/' + filename
+ if os.path.isdir(filePath):
+ if search == '':
+ tmp['name'] = filename.replace('.git', '')
+ dlist.append(tmp)
+ else:
+ if filename.find(search) != -1:
+ tmp['name'] = filename.replace('.git', '')
+ dlist.append(tmp)
+ return dlist
+
+
+def checkProjectListIsHasScript(user, data):
+ path = getRootPath() + '/' + user
+ for x in range(len(data)):
+ name = data[x]['name'] + '.git'
+ path_tmp = path + '/' + name + '/custom_hooks/post-receive'
+ if os.path.exists(path_tmp):
+ data[x]['has_hook'] = True
+ else:
+ data[x]['has_hook'] = False
+ return data
+
+
+def userProjectList():
+ import math
+ args = getArgs()
+ # print args
+
+ page = 1
+ page_size = 5
+ search = ''
+
+ if not 'name' in args:
+ return mw.returnJson(False, '缺少参数name')
+ 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 = {}
+
+ ulist = getAllUserProject(args['name'])
+ dlist_sum = len(ulist)
+
+ start = (page - 1) * page_size
+ ret_data = ulist[start:start + page_size]
+ ret_data = checkProjectListIsHasScript(args['name'], ret_data)
+
+ data['root_url'] = getRootUrl()
+ data['data'] = ret_data
+ data['args'] = args
+ data['list'] = mw.getPage(
+ {'count': dlist_sum, 'p': page, 'row': page_size, 'tojs': 'userProjectList'})
+
+ return mw.returnJson(True, 'OK', data)
+
+
+def projectScriptEdit():
+ args = getArgs()
+
+ if not 'user' in args:
+ return mw.returnJson(True, 'username missing')
+
+ if not 'name' in args:
+ return mw.returnJson(True, 'project name missing')
+
+ user = args['user']
+ name = args['name'] + '.git'
+ post_receive = getRootPath() + '/' + user + '/' + name + \
+ '/custom_hooks/commit'
+ if os.path.exists(post_receive):
+ return mw.returnJson(True, 'OK', {'path': post_receive})
+ else:
+ return mw.returnJson(False, 'file does not exist')
+
+
+def projectScriptLoad():
+ args = getArgs()
+ if not 'user' in args:
+ return mw.returnJson(True, 'username missing')
+
+ if not 'name' in args:
+ return mw.returnJson(True, 'project name missing')
+
+ user = args['user']
+ name = args['name'] + '.git'
+
+ path = getRootPath() + '/' + user + '/' + name
+ post_receive_tpl = getPluginDir() + '/hook/post-receive.tpl'
+ post_receive = path + '/custom_hooks/post-receive'
+
+ if not os.path.exists(path + '/custom_hooks'):
+ mw.execShell('mkdir -p ' + path + '/custom_hooks')
+
+ pct_content = mw.readFile(post_receive_tpl)
+ pct_content = pct_content.replace('{$PATH}', path + '/custom_hooks')
+ mw.writeFile(post_receive, pct_content)
+ mw.execShell('chmod 777 ' + post_receive)
+
+ commit_tpl = getPluginDir() + '/hook/commit.tpl'
+ commit = path + '/custom_hooks/commit'
+
+ codeDir = mw.getRootDir() + '/git'
+
+ cc_content = mw.readFile(commit_tpl)
+
+ sshUrl = 'http://127.0.0.1:' + getHttpPort()
+ cc_content = cc_content.replace('{$GITROOTURL}', sshUrl)
+ cc_content = cc_content.replace('{$CODE_DIR}', codeDir)
+ cc_content = cc_content.replace('{$USERNAME}', user)
+ cc_content = cc_content.replace('{$PROJECT}', args['name'])
+ cc_content = cc_content.replace('{$WEB_ROOT}', mw.getWwwDir())
+ mw.writeFile(commit, cc_content)
+ mw.execShell('chmod 777 ' + commit)
+
+ return 'ok'
+
+
+def projectScriptUnload():
+ args = getArgs()
+ if not 'user' in args:
+ return mw.returnJson(True, 'username missing')
+
+ if not 'name' in args:
+ return mw.returnJson(True, 'project name missing')
+
+ user = args['user']
+ name = args['name'] + '.git'
+
+ post_receive = getRootPath() + '/' + user + '/' + name + \
+ '/custom_hooks/post-receive'
+ mw.execShell('rm -f ' + post_receive)
+
+ commit = getRootPath() + '/' + user + '/' + name + \
+ '/custom_hooks/commit'
+ mw.execShell('rm -f ' + commit)
+ return 'ok'
+
+
+def projectScriptDebug():
+ args = getArgs()
+ if not 'user' in args:
+ return mw.returnJson(True, 'username missing')
+
+ if not 'name' in args:
+ return mw.returnJson(True, 'project name missing')
+ user = args['user']
+ name = args['name'] + '.git'
+ commit_log = getRootPath() + '/' + user + '/' + name + \
+ '/custom_hooks/sh.log'
+
+ data = {}
+ if os.path.exists(commit_log):
+ data['status'] = True
+ data['path'] = commit_log
+ else:
+ data['status'] = False
+ data['msg'] = '没有日志文件'
+
+ return mw.getJson(data)
+
+
+def gogsEdit():
+ data = {}
+ data['post_receive'] = getPluginDir() + '/hook/post-receive.tpl'
+ data['commit'] = getPluginDir() + '/hook/commit.tpl'
+ return mw.getJson(data)
+
+
+def getRsaPublic():
+ path = getHomeDir()
+ path += '/.ssh/id_rsa.pub'
+
+ content = mw.readFile(path)
+
+ data = {}
+ data['mw'] = content
+ return mw.getJson(data)
+
+
+def getTotalStatistics():
+ st = status()
+ data = {}
+ if st.strip() == 'start':
+ pm = pMysqlDb()
+ list_count = pm.query('select count(id) as num from repository')
+
+ if list_count.find("error") > -1:
+ data['status'] = False
+ data['count'] = 0
+ return mw.returnJson(False, 'fail', data)
+
+ data['status'] = True
+ data['count'] = count
+ data['ver'] = mw.readFile(getServerDir() + '/version.pl').strip()
+ return mw.returnJson(True, 'ok', data)
+
+ data['status'] = False
+ data['count'] = 0
+ return mw.returnJson(False, 'fail', data)
+
+
+if __name__ == "__main__":
+ func = sys.argv[1]
+ if func == 'status':
+ print(status())
+ 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_log':
+ print(runLog())
+ elif func == 'post_receive_log':
+ print(postReceiveLog())
+ elif func == 'conf':
+ print(getConf())
+ elif func == 'init_conf':
+ print(getInitdConf())
+ elif func == 'get_gogs_conf':
+ print(getGogsConf())
+ elif func == 'submit_gogs_conf':
+ print(submitGogsConf())
+ elif func == 'user_list':
+ print(userList())
+ elif func == 'user_project_list':
+ print(userProjectList())
+ elif func == 'project_script_edit':
+ print(projectScriptEdit())
+ elif func == 'project_script_load':
+ print(projectScriptLoad())
+ elif func == 'project_script_unload':
+ print(projectScriptUnload())
+ elif func == 'project_script_debug':
+ print(projectScriptDebug())
+ elif func == 'gogs_edit':
+ print(gogsEdit())
+ elif func == 'get_rsa_public':
+ print(getRsaPublic())
+ elif func == 'get_total_statistics':
+ print(getTotalStatistics())
+ else:
+ print('fail')
diff --git a/plugins/gogs/index.py b/plugins/gogs/index.py
index 9bfc0b2a7..0ebce029a 100755
--- a/plugins/gogs/index.py
+++ b/plugins/gogs/index.py
@@ -140,13 +140,24 @@ def initDreplace():
mw.writeFile(file_bin, content)
mw.execShell('chmod +x ' + file_bin)
- conf_bin = getConf()
- if not os.path.exists(conf_bin):
- mw.execShell('mkdir -p ' + getServerDir() + '/custom/conf')
- conf_tpl = getConfTpl()
- content = mw.readFile(conf_tpl)
- content = contentReplace(content)
- mw.writeFile(conf_bin, content)
+ # conf_bin = getConf()
+ # if not os.path.exists(conf_bin):
+ # mw.execShell('mkdir -p ' + getServerDir() + '/custom/conf')
+ # conf_tpl = getConfTpl()
+ # content = mw.readFile(conf_tpl)
+ # content = contentReplace(content)
+ # mw.writeFile(conf_bin, content)
+
+ # systemd
+ systemDir = '/lib/systemd/system'
+ systemService = systemDir + '/gogs.service'
+ systemServiceTpl = getPluginDir() + '/init.d/gogs.service.tpl'
+ if os.path.exists(systemDir) and not os.path.exists(systemService):
+ service_path = mw.getServerDir()
+ se_content = mw.readFile(systemServiceTpl)
+ se_content = se_content.replace('{$SERVER_PATH}', service_path)
+ mw.writeFile(systemService, se_content)
+ mw.execShell('systemctl daemon-reload')
log_path = getServerDir() + '/log'
if not os.path.exists(log_path):
@@ -246,22 +257,7 @@ def isSqlError(mysqlMsg):
def start():
- is_frist = True
- conf_bin = getConf()
- if os.path.exists(conf_bin):
- is_frist = False
-
file = initDreplace()
-
- if is_frist:
- return "第一次启动Gogs,默认使用MySQL连接!
可以在配置文件中重新设置,再启动!"
-
- conn = pMysqlDb()
- list_table = conn.query('show tables')
- data = isSqlError(list_table)
- if not data['status']:
- return data['msg']
-
data = mw.execShell(__SR + file + ' start')
if data[1] == '':
return 'ok'
@@ -293,39 +289,29 @@ def reload():
def initdStatus():
- if not app_debug:
- os_name = mw.getOs()
- if os_name == 'darwin':
- return "Apple Computer does not support"
- initd_bin = getInitDFile()
- if os.path.exists(initd_bin):
- return 'ok'
- return 'fail'
+ if mw.isAppleSystem():
+ return "Apple Computer does not support"
+
+ shell_cmd = 'systemctl status gogs | grep loaded | grep "enabled;"'
+ data = mw.execShell(shell_cmd)
+ if data[0] == '':
+ return 'fail'
+ return 'ok'
def initdInstall():
- import shutil
- if not app_debug:
- os_name = mw.getOs()
- if os_name == 'darwin':
- return "Apple Computer does not support"
-
- mem_bin = initDreplace()
- initd_bin = getInitDFile()
- shutil.copyfile(mem_bin, initd_bin)
- mw.execShell('chmod +x ' + initd_bin)
- mw.execShell('chkconfig --add ' + getPluginName())
+ if mw.isAppleSystem():
+ return "Apple Computer does not support"
+
+ mw.execShell('systemctl enable gogs')
return 'ok'
def initdUinstall():
- if not app_debug:
- os_name = mw.getOs()
- if os_name == 'darwin':
- return "Apple Computer does not support"
- initd_bin = getInitDFile()
- os.remove(initd_bin)
- mw.execShell('chkconfig --del ' + getPluginName())
+ if mw.isAppleSystem():
+ return "Apple Computer does not support"
+
+ mw.execShell('systemctl disable gogs')
return 'ok'
diff --git a/plugins/gogs/init.d/gogs.service.tpl b/plugins/gogs/init.d/gogs.service.tpl
new file mode 100644
index 000000000..0bfca87e5
--- /dev/null
+++ b/plugins/gogs/init.d/gogs.service.tpl
@@ -0,0 +1,30 @@
+[Unit]
+Description=Gogs
+After=syslog.target
+After=network.target
+After=mariadb.service mysqld.service postgresql.service memcached.service redis.service
+
+[Service]
+# Modify these two values and uncomment them if you have
+# repos with lots of files and get an HTTP error 500 because
+# of that
+###
+#LimitMEMLOCK=infinity
+#LimitNOFILE=65535
+Type=simple
+User=root
+Group=root
+WorkingDirectory={$SERVER_PATH}/gogs
+ExecStart={$SERVER_PATH}/gogs/gogs web
+Restart=always
+Environment=USER=git HOME=/home/git
+
+# Some distributions may not support these hardening directives. If you cannot start the service due
+# to an unknown option, comment out the ones not supported by your version of systemd.
+ProtectSystem=full
+PrivateDevices=yes
+PrivateTmp=yes
+NoNewPrivileges=true
+
+[Install]
+WantedBy=multi-user.target