summaryrefslogtreecommitdiffstats
path: root/app/acf-util/password-model.lua
blob: 7454d79f2f1c012bc0247a867a0336715b0502af (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
module(..., package.seeall)

local auth=require("authenticator-plaintext")

function create_user(self, userdata)
	return update_user(self, userdata, true)
end

function read_user(self, user)
	local config = {}
	local errtxt

	-- Read the user data
	local userinfo
	if user and (#user > 0) then
		userinfo = auth.get_userinfo(self,user)
		if not userinfo then
			errtxt = "User does not exist"
		end
	end
	userinfo = userinfo or {}

	config.userid =  cfe({
		label="User id",
		value=(userinfo.userid or user or ""),
		errtxt = errtxt
		})
	config.username =  cfe({
		label="Real name",
		value=(userinfo.username or ""),
		})
	config.roles =  cfe({
		label="Roles",
		value=(userinfo.roles or {}),
		type="multi",
		option=auth.list_roles(),
		})
	config.password =  cfe({
		label="Password",
		})
	config.password_confirm =  cfe({
		label="Password (confirm)",
		})

	return cfe({ type="group", value=config, errtxt = errtxt, label="User Config" })
end

function update_user(self, userdata, newuser)
	local result
	local errormessage = {}

	-- Try to write new or update existing data
	if newuser == true then
		result, errormessage = auth.new_settings(self, userdata.value.userid.value, userdata.value.username.value, userdata.value.password.value, userdata.value.password_confirm.value, userdata.value.roles.value)
		if result == false then
			userdata.errtxt = "Failed to create new user"
		end
	else
		-- As a special case, settings that don't change are nil
		result, errormessage = auth.change_settings(self, userdata.value.userid.value, userdata.value.username.value, userdata.value.password.value, userdata.value.password_confirm.value, userdata.value.roles.value)
		if result == false then
			userdata.errtxt = "Failed to save changes"
		end
		-- We can't return any nil values, so set then
		local olduserdata = read_user(self, userdata.value.userid.value)
		for name,value in pairs(userdata.value) do
			if value.value == nil then
				value.value = olduserdata.value[name].value
			end
		end
	end
	
	userdata.value.password.value = ""
	userdata.value.password_confirm.value = ""

	if result == false then
		-- now, copy in the errors
		for name,value in pairs(userdata.value) do
			value.errtxt = errormessage[name]
		end
	end

	return userdata
end

function get_users(self)
	--List all users and their userinfo
	local users = {}
	local userlist = auth.list_users(self)
	
	for x,user in pairs(userlist) do
		local userinfo = auth.get_userinfo(self,user)
		users[user] = cfe({
			type="group",
			label=user,
			value={	userid=cfe ({
					label="User ID",
					value=userinfo.userid,
					}),
				username=cfe ({
					label="Real name",
					value=userinfo.username,
					}),
				roles=cfe ({
					label="Roles",
					value=userinfo.roles,
					option=auth.list_roles(),
					type="multi",
					}),
				},

			})
	end

	return cfe({ type="group", value=users, label="User Configs" })
end

function delete_user(self, userid)
	auth.delete_user(self, userid)
end