From 31ff3ba51554722d2afbdc8153801c5496ff02b8 Mon Sep 17 00:00:00 2001 From: Mika Havela Date: Sat, 17 Nov 2007 11:31:10 +0000 Subject: OpenVPN initial thoughts on functionallity. Almost no functionallity at this point. git-svn-id: svn://svn.alpinelinux.org/acf/openvpn/trunk@332 ab2d0c66-481e-0410-8bed-d214d4d58bed --- openvpn-controller.lua | 128 +++++++++++++++++++++++++++++++++++++++++ openvpn-model.lua | 124 +++++++++++++++++++++++++++++++++++++++ openvpn-read-html.lsp | 36 ++++++++++++ openvpn-server_config-html.lsp | 59 +++++++++++++++++++ openvpn.menu | 2 + 5 files changed, 349 insertions(+) create mode 100644 openvpn-controller.lua create mode 100644 openvpn-model.lua create mode 100644 openvpn-read-html.lsp create mode 100644 openvpn-server_config-html.lsp create mode 100644 openvpn.menu diff --git a/openvpn-controller.lua b/openvpn-controller.lua new file mode 100644 index 0000000..b088758 --- /dev/null +++ b/openvpn-controller.lua @@ -0,0 +1,128 @@ +-- the hostname controller + +module (..., package.seeall) + +-- Cause an http redirect to our "read" action +-- We use the self.conf table because it already has prefix,controller,etc +-- The redir code is defined in the application error handler (acf-controller) +local list_redir = function (self) + self.conf.action = "read" + self.conf.type = "redir" + error (self.conf) +end + +mvc={} +mvc.on_load = function(self, parent) + if (self.worker[self.conf.action] == nil ) or ( self.conf.action == "init" ) then + self.worker[self.conf.action] = list_redir(self) + end + +-- logit ("hostname.mvc.on_load activated") + +end + + +local function build_form ( model ) + local viewtable = {} + local configform = {} + local processform = {} + local messageform = {} +-- local conflist = model.conflist() + local conflist = "hej" + local formwith = 60 + -- cf.self is a global variable specifiying this controller + -- local url = cf.self or "" + +--[[ table.insert ( messageform , { + type = "label" , + value = "Logfile info" , + text = "Tail file /var/log/messages
(Still working on this function)" + } ) +]]-- + table.insert ( processform , { + type = "label" , + value = "Process information", + text = "Information on if process is running." + } ) + table.insert ( processform , { + type = "formtext", + label = "openvpn process status", +-- value = model.status("openvpn") + value = "hej" + } ) + + +-- if table.maxn(conflist)==0 then + if 0==0 then + table.insert ( configform , { + type = "label" , + value = "List of valid configurations" , + text = "No valid configurations could be found in /etc/openvpn/
A valid config is called *.conf and has got at least the following parameters set: ca, cert, key, dev, proto (and for clients also parameter 'remote')" + } ) + else + -- Generate processlist + configform[1] = { + type = "label", + value = "List of valid configurations" , + text = "List is based on all valid configuration files named /etc/openvpn/*.conf" + } + for i=1,table.maxn(conflist) do + table.insert ( configform , { + type = "formtext" , +-- label = conflist[i].confname , + label = "hej" , +-- value = conflist[i].conftype or "" + value = "hej" or "" + } ) + end + end + + --- Define the main table used by the generic view renderer + viewtable[1] = { + type = "label", + value = "GENERAL" + } + viewtable[2] = { + type = "form", + method = "post", + action = "set", + -- Put the 'form' table in the view table + value = processform + } + viewtable[3] = { + type = "form", + method = "post", + action = "set", + --action = cf.self .. "/set", + -- Put the 'form' table in the view table + value = configform + } + viewtable[4] = { + type = "form", + method = "post", + action = "set", + --action = cf.self .. "/set", + -- Put the 'form' table in the view table + value = messageform + } + return viewtable +end + +-- Public methods +-- /hostname/get + + +read = function (self) + local me = {} + me = cfe{name=conflistfilesaf, value="hej"} + return ( {conflistfiles = self.model:list_conffiles()} ) +-- return ({conflistfiles = me}) +-- return self.model:get() +-- return build_form(self) +end + + +server_config = function (self) +end + +create = update diff --git a/openvpn-model.lua b/openvpn-model.lua new file mode 100644 index 0000000..c5210b3 --- /dev/null +++ b/openvpn-model.lua @@ -0,0 +1,124 @@ +-- hostname model methods +module (..., package.seeall) + +require ("posix") +require ("fs") + +-- no initializer in model - use controller.init for that + +-- ################################################################################ +-- LOCAL FUNCTIONS +local function read_file_as_array ( path ) + local file, error = io.open(path) + if ( file == nil ) then + return nil, error + end + local f = {} + for line in file:lines() do + table.insert ( f , line ) + end + file:close() + return f +end + +local function has_init_script ( f ) + local initprefix = "/etc/init.d/openvpn" + local file = initprefix .. "." .. f + if f ~= "openvpn" then + if ( fs.is_file(file)) then + init = "yes" + else + init = nil + end + else + if ( fs.is_file(initprefix)) then + init = "yes" + else + init = nil + end + end + return init +end + +local function check_valid_config ( f ) + conf_ca = "" + conf_auth = "" + conf_type = "server" + conf_cert = "" + conf_key = "" + conf_dev = "" + conf_proto = "" + conf_remote = "" + conf_dev = "" + local conf_file_content = read_file_as_array( "/etc/openvpn/".. f ) + for i =1,table.maxn(conf_file_content) do + local lin = conf_file_content[i] + -- Filter out commented lines + if not string.find ( lin, "^[;#].*" ) then + -- The following code could probably de done much easier + -- Check for parameter of a valid configuration + if string.find ( lin, "^ca[%s \v]" ) then + conf_ca="ca" + end + if string.find ( lin, "^auth\-user\-pass[%s \v]" ) then + conf_auth="auth-user-pass" + end + if string.find ( lin, "^client[%s$]" ) then + conf_type = "client" + end + if string.find ( lin, "^cert[%s \v]" ) then + conf_cert = "cert" + end + if string.find ( lin, "^key[%s \v]" ) then + conf_key = "key" + end + if string.find ( lin, "^dev[%s \v]" ) then + conf_dev = "dev" + end + if string.find ( lin, "^proto[%s \v]" ) then + conf_proto = "proto" + end + if string.find ( lin, "^remote[%s \v]" ) then + conf_remote = "remote" + end + end + end + -- Check if config is invalid (missing parameters) + if conf_type == "client" then + if conf_dev == "" or conf_remote == "" then + conf_type="unknown" + end + else + if conf_dev == "" or conf_port == "" then + conf_type="unknown" + end + end + return conf_type +end + +local function list_rootfolder() + local files , errstr, errno = posix.dir ( "/etc/openvpn/" ) + return files +end + +-- ################################################################################ +-- PUBLIC FUNCTIONS +function list_conffiles() + conlistfiles = {} + local files = list_rootfolder() + if files then + for a,b in ipairs(files) do + if string.match (b, "^.*conf$") then + local conf_type = check_valid_config ( b ) + local init_script = has_init_script ( string.gsub(b, "(%w+)(\..*)", "%1") ) + table.insert ( conlistfiles, cfe{ value = b, type = conf_type, init = init_script} ) + end + end + return conlistfiles + end +end + +get = function (self) + return list_conffiles() +end + diff --git a/openvpn-read-html.lsp b/openvpn-read-html.lsp new file mode 100644 index 0000000..521e6b3 --- /dev/null +++ b/openvpn-read-html.lsp @@ -0,0 +1,36 @@ + + + + +

General

+

Available configs

+ + + + + + + + + + + + + + + + +
ConfigTypeStatusConnected Clients
xxx
+ +

System info

+ +
Program version
+
OpenVPN ver.x.x.x
+ + + + + diff --git a/openvpn-server_config-html.lsp b/openvpn-server_config-html.lsp new file mode 100644 index 0000000..41b28c5 --- /dev/null +++ b/openvpn-server_config-html.lsp @@ -0,0 +1,59 @@ + + + +

Server config 'xxx.conf'

+

Server settings

+ +
Mode
+
server
+ +
Process running
+
xxx
+ +
User device
+
xxx
+ +
Listens on
+
xxx.xxx.xxx.xxx:xxxx (xxx)
+ +
Logfile
+
xxx.log (Verbosity level: x)
+ +
Configfile
+
xxx.conf
+ +

Connected clients status

+ +
Last status was recorded
+
YYYY-MM-DD HH:MM:SS (xx minutes ago)
+ +
Maximum clients
+
xxx
+ +
Connected clients
+
xxx
+ + +

Certificate files

+ +
DH
+
xxx.pem
+ +
CA Certificate
+
xxx.pem
+ +
Server Certificate
+
xxx.pem
+ +
Server Private Key
+
xxx.pem
+ +
TLS Authentication
+
xxx.pem
+ +
CRL Verify File
+
xxx.pem (server side)
+ + + + diff --git a/openvpn.menu b/openvpn.menu new file mode 100644 index 0000000..d465676 --- /dev/null +++ b/openvpn.menu @@ -0,0 +1,2 @@ +#CAT GROUP/DESC TAB ACTION +Connectivity OpenVPN OpenVPN read -- cgit v1.2.3