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.
379 lines
7.0 KiB
379 lines
7.0 KiB
|
|
function startup()
|
|
startup_options={
|
|
locale.off,
|
|
locale.server,
|
|
locale.client,
|
|
locale.ext
|
|
}
|
|
end
|
|
|
|
function split(s)
|
|
-- split s at first space
|
|
if not s then
|
|
return nil
|
|
end
|
|
local space = s:find("%s") or (#s + 1)
|
|
return s:sub(1, space-1), s:sub(space+1)
|
|
end
|
|
|
|
function get_filename(s)
|
|
-- split s at last /
|
|
if not s then
|
|
return nil
|
|
end
|
|
local slash = s:find("/[^/]*$")
|
|
return s:sub(slash+1)
|
|
end
|
|
|
|
function get_pathname(s)
|
|
-- split s at last /
|
|
if not s then
|
|
return nil
|
|
end
|
|
local slash = s:find("/[^/]*$")
|
|
return s:sub(1, slash-1)
|
|
end
|
|
|
|
function load(config, T)
|
|
if not helpers.fileExist(config) then
|
|
save(config, T)
|
|
end
|
|
|
|
local f = io.open(config, "r")
|
|
if f then
|
|
for line in f:lines() do
|
|
local key, val = split(line:match("^([^=#]+)([^\n]*)"))
|
|
if key then
|
|
if val == nil then
|
|
val = ""
|
|
end
|
|
T[helpers.trim(key)] = helpers.trim(val)
|
|
end
|
|
end
|
|
f:close()
|
|
end
|
|
end
|
|
|
|
function save(config, T)
|
|
restart_on_exit = true
|
|
|
|
local f = io.open(config, "w")
|
|
if f then
|
|
f:write("# Created by OpenVPN-Setup - Don't change this file manually.\n")
|
|
for k, v in pairs(T) do
|
|
if (k == "comp-lzo" and v == "n/a") then
|
|
goto continue
|
|
end
|
|
f:write(k .. " " .. v .. "\n")
|
|
::continue::
|
|
end
|
|
f:close()
|
|
end
|
|
end
|
|
|
|
function key_home(a)
|
|
return MENU_RETURN.EXIT
|
|
end
|
|
|
|
function key_setup(a)
|
|
return MENU_RETURN.EXIT_ALL
|
|
end
|
|
|
|
function get_upscript()
|
|
local f = nil
|
|
local cmd = "#!/bin/sh\n"
|
|
route = "" -- "ip route add 192.168.1.0/24 via 10.8.0.2"
|
|
|
|
if not helpers.fileExist(scriptup) then
|
|
f = io.open(scriptup, "w")
|
|
f:write(string.lower(cmd))
|
|
f:close()
|
|
os.execute("chmod +x " .. scriptup)
|
|
return
|
|
end
|
|
|
|
local f = io.open(scriptup, "r")
|
|
if f then
|
|
for line in f:lines() do
|
|
if string.find(line, "#") then
|
|
goto continue
|
|
elseif string.find(line, scriptup_cmd) then
|
|
route = line
|
|
f:close()
|
|
break
|
|
end
|
|
::continue::
|
|
end
|
|
end
|
|
end
|
|
|
|
function set_upscript(id, value)
|
|
local cmd = "#!/bin/sh\n"
|
|
|
|
if value ~= "" and value ~= " " then
|
|
cmd = cmd .. " " .. value .. "\n"
|
|
end
|
|
--print(cmd)
|
|
|
|
local f = io.open(scriptup, "w")
|
|
if f then
|
|
f:write(string.lower(cmd))
|
|
f:close()
|
|
end
|
|
|
|
end
|
|
|
|
function get_startup()
|
|
local f = io.open(flagfile, "r")
|
|
if f then
|
|
local c = f:read()
|
|
f:close()
|
|
|
|
if c == nil then
|
|
c = ""
|
|
end
|
|
|
|
for k, v in ipairs(startup_options) do
|
|
if string.lower(v) == c then
|
|
return v
|
|
end
|
|
end
|
|
end
|
|
return locale.off
|
|
end
|
|
|
|
function set_startup(id, value)
|
|
activate_items(value)
|
|
restart_on_exit = true
|
|
|
|
if value == locale.off then
|
|
os.remove(flagfile)
|
|
return
|
|
end
|
|
|
|
local f = io.open(flagfile, "w")
|
|
if f then
|
|
f:write(string.lower(value))
|
|
f:close()
|
|
end
|
|
|
|
return
|
|
end
|
|
|
|
function activate_items(item)
|
|
setup_server_active = false
|
|
setup_client_active = false
|
|
setup_server_client_active = false
|
|
|
|
if item == locale.server then
|
|
setup_server_active = true
|
|
elseif item == locale.client then
|
|
setup_client_active = true
|
|
end
|
|
|
|
if item ~= locale.off then
|
|
setup_server_client_active = true
|
|
end
|
|
|
|
if m then
|
|
m:setActive{item=m_ss, activ=setup_server_active}
|
|
m:setActive{item=m_sc, activ=setup_client_active}
|
|
m:setActive{item=m_sr, activ=setup_server_client_active}
|
|
end
|
|
end
|
|
|
|
function set_string_server(k, v)
|
|
S[k] = v
|
|
end
|
|
|
|
function set_string_client(k, v)
|
|
C[k] = v
|
|
end
|
|
|
|
function action(cmd, caption)
|
|
local caption = caption or locale.caption
|
|
local h = hintbox.new{caption=caption, text=locale.wait}
|
|
h:paint()
|
|
|
|
print("action: " .. cmd)
|
|
os.execute(cmd)
|
|
|
|
local i = 0
|
|
repeat
|
|
i = i + 1
|
|
msg, data = n:GetInput(500)
|
|
until msg == RC.ok or msg == RC.home or i == 2
|
|
|
|
h:hide()
|
|
end
|
|
|
|
function secret_file_create(cmd, firstrun)
|
|
--print(firstrun)
|
|
if (((not helpers.fileExist(secret_file)) and (firstrun == true)) or ((firstrun == nil) and helpers.fileExist(secret_file))) then
|
|
local ret = messagebox.exec{ title=locale.secret, text=locale.secret_new_ask , buttons={ "yes", "no" } };
|
|
if ret == "yes" then
|
|
action(cmd, locale.secret)
|
|
end
|
|
end
|
|
end
|
|
|
|
function secret_file_push(k, v)
|
|
if not v then
|
|
v = k
|
|
end
|
|
secret_dest = v
|
|
action("cp -f " .. secret_file .. " " .. secret_dest, locale.secret_push)
|
|
if (not helpers.fileExist(secret_dest .. secret_file)) then
|
|
--TODO hintbox Fehler
|
|
else
|
|
--TODO hintbox Erfolg
|
|
end
|
|
end
|
|
|
|
function secret_file_pull(k, v)
|
|
if not v then
|
|
v = k
|
|
end
|
|
action("cp -f " .. v .. " ".. secret_file, locale.secret_pull)
|
|
if (not helpers.fileExist(secret_file)) then
|
|
--TODO hintbox Fehler
|
|
else
|
|
--TODO hintbox Erfolg
|
|
end
|
|
end
|
|
|
|
function logging()
|
|
m:hide()
|
|
|
|
local fact = 0.8 --80%
|
|
local scr_x = SCREEN['X_RES']
|
|
local scr_y = SCREEN['Y_RES']
|
|
local dx = scr_x*fact
|
|
local x = (scr_x-dx)/2
|
|
local dy = scr_y*fact
|
|
local y = (scr_y-dy)/2
|
|
local offset = n:scale2Res(10)
|
|
local scroll = true
|
|
|
|
w = cwindow.new{x=x, y=y, dx=dx, dy=dy, title=locale.logging, icon="hint_network", has_shadow=true, show_footer=false }
|
|
|
|
local tmp_h = w:headerHeight()
|
|
local log=readlog()
|
|
ct = ctext.new{parent=w, x=offset, y=offset, dx=dx-offset, dy=dy-tmp_h-offset, text=log, mode = "ALIGN_TOP | ALIGN_SCROLL"}
|
|
ct:scroll{dir="down", pages=-1}
|
|
|
|
w:paint{do_save_bg=true};
|
|
|
|
local i = 0
|
|
repeat
|
|
i = i + 1
|
|
msg, data = n:GetInput(500)
|
|
|
|
if i==20 then
|
|
log=readlog()
|
|
ct:setText{text=log}
|
|
if scroll == true then
|
|
ct:scroll{dir="down", pages=-1}
|
|
end
|
|
ct:paint()
|
|
i = 0
|
|
end
|
|
|
|
if (msg == RC['up'] or msg == RC['page_up']) then
|
|
scroll = false
|
|
ct:scroll{dir="up"}
|
|
elseif (msg == RC['down'] or msg == RC['page_down']) then
|
|
ct:scroll{dir="down"}
|
|
scroll = true
|
|
end
|
|
|
|
until msg == RC.ok or msg == RC.home
|
|
|
|
w:hide{no_restore=true}
|
|
end
|
|
|
|
function readlog()
|
|
local ret="no log available"
|
|
local logfile
|
|
local mode=string.lower(get_startup())
|
|
|
|
if (mode == "server" or mode == "client" or mode == "extern") then
|
|
logfile="/tmp/openvpn_" .. mode.. ".log"
|
|
|
|
local f = io.open(logfile, "r")
|
|
if f then
|
|
ret = f:read("*a")
|
|
f:close()
|
|
end
|
|
end
|
|
|
|
return ret
|
|
end
|
|
|
|
function search_conf(directory)
|
|
if not directory then
|
|
return nil
|
|
end
|
|
|
|
local i, t, popen = 0, {}, io.popen
|
|
for filename in popen('ls -a "'..directory..'"'):lines() do
|
|
i = i + 1
|
|
if filename:find(".conf") or filename:find(".ovpn") then
|
|
return filename
|
|
end
|
|
end
|
|
end
|
|
|
|
function write_path(s)
|
|
if not helpers.fileExist(s) then
|
|
print("file not found")
|
|
end
|
|
|
|
local cd = "cd%s"
|
|
local dir = get_pathname(s)
|
|
print(dir)
|
|
|
|
local f = io.open(s, "r+")
|
|
if f then
|
|
for line in f:lines() do
|
|
print(line)
|
|
if line:find(cd) then
|
|
print("FOUND")
|
|
return
|
|
end
|
|
end
|
|
|
|
f:write("\n", "cd " .. dir, "\n")
|
|
f:close()
|
|
end
|
|
end
|
|
|
|
function get_extern(k, v)
|
|
if not v then
|
|
v = k
|
|
end
|
|
if not v then
|
|
return
|
|
end
|
|
|
|
local E = {"*.crt", "*.key", "*.conf", "*.ovpn"}
|
|
local dir = get_filename(v)
|
|
local destdir = conf_base .. "/" .. dir
|
|
|
|
os.execute("mkdir -p " .. destdir)
|
|
for i, ext in pairs(E) do
|
|
os.execute("cp -pf " .. v .. "/" .. ext .. " " .. destdir)
|
|
end
|
|
|
|
local cfg = search_conf(destdir)
|
|
if not cfg then
|
|
os.execute("rm -rf " .. destdir)
|
|
print("config not found")
|
|
return
|
|
end
|
|
|
|
local destpath = destdir .. "/" .. cfg
|
|
os.execute("ln -s " .. destpath .. " " .. conf_base .. "/extern.conf")
|
|
write_path(destpath)
|
|
end
|
|
|