summaryrefslogtreecommitdiffhomepage
path: root/applications/luci-app-openvpn/luasrc/model
diff options
context:
space:
mode:
authorDirk Brenken <dev@brenken.org>2018-11-24 16:33:54 +0100
committerDirk Brenken <dev@brenken.org>2018-11-26 13:19:52 +0100
commit0f8e36f21416805f8dc2f0932db1bb81f1ccf39f (patch)
tree9b1aeaaafb4918d7077432b82d82ae10789ad622 /applications/luci-app-openvpn/luasrc/model
parent4bd7f4ba429eee697fb5f75c4ece5d03cc9514f5 (diff)
luci-app-openvpn: "final" changeset
* add 'auth-user-pass' edit section in file mode (see screenshot) * add port & protocol detection in file mode (see screenshot) * don't mix file & normal edit modes any longer * add CC compatibility fix (for turris devices) * fix/refine JS instance name filter * remove needless CSS rules * unlink ovpn/auth files on section removal * commit changes instantly (Add/Upload/Delete) Signed-off-by: Dirk Brenken <dev@brenken.org>
Diffstat (limited to 'applications/luci-app-openvpn/luasrc/model')
-rw-r--r--applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua4
-rw-r--r--applications/luci-app-openvpn/luasrc/model/cbi/openvpn-basic.lua4
-rw-r--r--applications/luci-app-openvpn/luasrc/model/cbi/openvpn-file.lua43
-rw-r--r--applications/luci-app-openvpn/luasrc/model/cbi/openvpn.lua37
4 files changed, 68 insertions, 20 deletions
diff --git a/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua b/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua
index 9a37ba802..2124c3d28 100644
--- a/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua
+++ b/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua
@@ -158,10 +158,6 @@ local knownParams = {
"script_security",
{ 0, 1, 2, 3 },
translate("Policy level over usage of external programs and scripts") },
- { Value,
- "config",
- "/etc/openvpn/ovpn-file.ovpn",
- translate("Local OVPN configuration file") },
} },
{ "Networking", {
diff --git a/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-basic.lua b/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-basic.lua
index 3be274dc8..3e9137bae 100644
--- a/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-basic.lua
+++ b/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-basic.lua
@@ -87,10 +87,6 @@ local basicParams = {
"key",
"/etc/easy-rsa/keys/some-client.key",
translate("Local private key") },
- { Value,
- "config",
- "/etc/openvpn/ovpn-file.ovpn",
- translate("Local OVPN configuration file") },
}
diff --git a/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-file.lua b/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-file.lua
index 6878275d7..9d50601b1 100644
--- a/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-file.lua
+++ b/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-file.lua
@@ -1,10 +1,11 @@
-- Licensed to the public under the Apache License 2.0.
-local ip = require("luci.ip")
-local fs = require("nixio.fs")
-local util = require("luci.util")
-local uci = require("luci.model.uci").cursor()
-local cfg_file = uci:get("openvpn", arg[1], "config")
+local ip = require("luci.ip")
+local fs = require("nixio.fs")
+local util = require("luci.util")
+local uci = require("luci.model.uci").cursor()
+local cfg_file = uci:get("openvpn", arg[1], "config")
+local auth_file = cfg_file:match("(.+)%..+").. ".auth"
local m = Map("openvpn")
@@ -36,25 +37,45 @@ f:append(Template("openvpn/ovpn_css"))
f.submit = translate("Save")
f.reset = false
-s = f:section(SimpleSection, nil, translatef("This form allows you to modify the content of the OVPN config file (%s). ", cfg_file))
-file = s:option(TextValue, "data")
+s = f:section(SimpleSection, nil, translatef("Section to modify the OVPN config file (%s)", cfg_file))
+file = s:option(TextValue, "data1")
file.datatype = "string"
file.rows = 20
-file.rmempty = true
function file.cfgvalue()
return fs.readfile(cfg_file) or ""
end
-function file.write(self, section, data)
- return fs.writefile(cfg_file, "\n" .. util.trim(data:gsub("\r\n", "\n")) .. "\n")
+function file.write(self, section, data1)
+ return fs.writefile(cfg_file, "\n" .. util.trim(data1:gsub("\r\n", "\n")) .. "\n")
end
function file.remove(self, section, value)
return fs.writefile(cfg_file, "")
end
-function s.handle(self, state, data)
+function s.handle(self, state, data1)
+ return true
+end
+
+s = f:section(SimpleSection, nil, translatef("Section to add an optional 'auth-user-pass' file with your credentials (%s)", auth_file))
+file = s:option(TextValue, "data2")
+file.datatype = "string"
+file.rows = 5
+
+function file.cfgvalue()
+ return fs.readfile(auth_file) or ""
+end
+
+function file.write(self, section, data2)
+ return fs.writefile(auth_file, util.trim(data2:gsub("\r\n", "\n")) .. "\n")
+end
+
+function file.remove(self, section, value)
+ return fs.writefile(auth_file, "")
+end
+
+function s.handle(self, state, data2)
return true
end
diff --git a/applications/luci-app-openvpn/luasrc/model/cbi/openvpn.lua b/applications/luci-app-openvpn/luasrc/model/cbi/openvpn.lua
index ad607ae6c..41266d860 100644
--- a/applications/luci-app-openvpn/luasrc/model/cbi/openvpn.lua
+++ b/applications/luci-app-openvpn/luasrc/model/cbi/openvpn.lua
@@ -69,10 +69,14 @@ function s.create(self, name)
local options = uci:get_all("openvpn_recipes", recipe)
for k, v in pairs(options) do
if k ~= "_role" and k ~= "_description" then
+ if type(v) == "boolean" then
+ v = v and "1" or "0"
+ end
uci:set("openvpn", name, k, v)
end
end
uci:save("openvpn")
+ uci:commit("openvpn")
if extedit then
luci.http.redirect( self.extedit:format(name) )
end
@@ -80,10 +84,23 @@ function s.create(self, name)
elseif #name > 0 then
self.invalid_cts = true
end
-
return 0
end
+function s.remove(self, name)
+ local cfg_file = "/etc/openvpn/" ..name.. ".ovpn"
+ local auth_file = "/etc/openvpn/" ..name.. ".auth"
+ if fs.access(cfg_file) then
+ fs.unlink(cfg_file)
+ end
+ if fs.access(auth_file) then
+ fs.unlink(auth_file)
+ end
+ uci:delete("openvpn", name)
+ uci:save("openvpn")
+ uci:commit("openvpn")
+end
+
s:option( Flag, "enabled", translate("Enabled") )
local active = s:option( DummyValue, "_active", translate("Started") )
@@ -124,12 +141,30 @@ end
local port = s:option( DummyValue, "port", translate("Port") )
function port.cfgvalue(self, section)
local val = AbstractValue.cfgvalue(self, section)
+ if not val then
+ local file_cfg = self.map:get(section, "config")
+ if file_cfg and fs.access(file_cfg) then
+ val = sys.exec("awk '{if(match(tolower($1),/^port$/)&&match($2,/[0-9]+/)){cnt++;printf $2;exit}}END{if(cnt==0)printf \"-\"}' " ..file_cfg)
+ if val == "-" then
+ val = sys.exec("awk '{if(match(tolower($1),/^remote$/)&&match($3,/[0-9]+/)){cnt++;printf $3;exit}}END{if(cnt==0)printf \"-\"}' " ..file_cfg)
+ end
+ end
+ end
return val or "-"
end
local proto = s:option( DummyValue, "proto", translate("Protocol") )
function proto.cfgvalue(self, section)
local val = AbstractValue.cfgvalue(self, section)
+ if not val then
+ local file_cfg = self.map:get(section, "config")
+ if file_cfg and fs.access(file_cfg) then
+ val = sys.exec("awk '{if(match(tolower($1),/^proto$/)&&match(tolower($2),/^udp[46]*$|^tcp[46]*-server$|^tcp[46]*-client$/)){cnt++;printf tolower($2);exit}}END{if(cnt==0)printf \"-\"}' " ..file_cfg)
+ if val == "-" then
+ val = sys.exec("awk '{if(match(tolower($1),/^remote$/)&&match(tolower($4),/^udp[46]*$|^tcp[46]*-server$|^tcp[46]*-client$/)){cnt++;printf $4;exit}}END{if(cnt==0)printf \"-\"}' " ..file_cfg)
+ end
+ end
+ end
return val or "-"
end