Files
main/network/connection/openvpn/comar/service.py
T
2021-05-10 14:54:38 +03:00

91 lines
2.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from comar.service import *
import os
serviceType = "server"
serviceDefault = "off"
serviceDesc = _({"en": "OpenVPN",
"tr": "OpenVPN"})
OPENVPN = "/usr/sbin/openvpn"
PIDDIR = "/run/openvpn"
WORKDIR = "/etc/openvpn"
PIDFILE = ""
MSG_NOCONF = _({"en": "%s doesn't contain any OpenVPN configuration file." % WORKDIR,
"tr": "%s herhangi bir OpenVPN yapılandırma dosyası içermiyor." % WORKDIR,
})
@synchronized
def start():
# Load tun
os.system("modprobe -q tun")
# Run startup script if defined
if os.path.exists(os.path.join(WORKDIR, "openvpn-startup.sh")):
os.system(os.path.join(WORKDIR, "openvpn-startup.sh"))
configs = [_c for _c in os.listdir(WORKDIR) if _c.endswith(".conf")]
if len(configs) > 0:
# There's at least 1 OpenVPN configuration to start
# Start every .conf in WORKDIR and run .sh if it exists
for conf in configs:
conf_name = conf.split(".conf")[0]
sh_name = os.path.join(WORKDIR, "%s.sh" % conf_name)
PIDFILE = os.path.join(PIDDIR, "%s.pid" % conf_name)
if os.path.exists(sh_name):
os.system(sh_name)
# Clean stale pid files
if os.path.exists(PIDFILE):
os.unlink(PIDFILE)
startService(command=OPENVPN,
args="--daemon --writepid %s --config %s/%s --cd %s --script-security 2" % (PIDFILE, WORKDIR, conf, WORKDIR),
pidfile=PIDFILE,
donotify=True)
# Reset PIDFILE. This is a hack for status() calls from startService() problems..
PIDFILE = ""
else:
fail(MSG_NOCONF)
@synchronized
def stop():
for pidf in [pid for pid in os.listdir(PIDDIR) if pid.endswith(".pid")]:
stopService(pidfile="%s/%s" % (PIDDIR, pidf),
donotify=True)
try:
os.unlink(os.path.join(PIDDIR, pidf))
except OSError:
pass
# Run shutdown script if defined
if os.path.exists(os.path.join(WORKDIR, "openvpn-shutdown.sh")):
os.system(os.path.join(WORKDIR, "openvpn-shutdown.sh"))
@synchronized
def reload():
import signal
for pidf in [pid for pid in os.listdir(PIDDIR) if pid.endswith(".pid")]:
stopService(pidfile="%s/%s" % (PIDDIR, pidf),
signalno=signal.SIGHUP,
donotify=True)
def status():
if PIDFILE:
return isServiceRunning(pidfile=PIDFILE)
else:
state = False
for pidf in [pid for pid in os.listdir(PIDDIR) if pid.endswith(".pid")]:
PIDFILE = os.path.join(PIDDIR, pidf)
state = state and isServiceRunning(pidfile=PIDFILE)
return state