summaryrefslogtreecommitdiffstats
path: root/openvpn-model.lua
blob: c5210b3695e9fda5874ab36fff9221a2d3b06ed5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
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