summaryrefslogtreecommitdiffstats
path: root/MCServer/Plugins/Core/web_permissions.lua
blob: dff35ca29f1a8cd2aed3983aa4b8a6c725d4e07a (plain) (blame)
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
125
126
127
128
129
130
131
132
133
134
local function HTML_Option( value, text, selected )
	if( selected == true ) then
		return [[<option value="]] .. value .. [[" selected>]] .. text .. [[</option>]]
	else
		return [[<option value="]] .. value .. [[">]] .. text .. [[</option>"]]
	end
end

local function ShowUsersTable()
	local Content = "<h4>Users</h4>"

	local NumUsers = UsersIni:GetNumKeys()

	Content = Content .. "<table>"

	if( NumUsers > 0 ) then
		Content = Content .. "<tr><th></th><th>User</th><th>Groups</th></tr>"

		for i=0, NumUsers-1 do
			local UserName = UsersIni:GetKeyName( i )

			Content = Content .. "<tr>"
			Content = Content .. "<td style='width: 10px;'>" .. i .. ".</td>"
			Content = Content .. "<td>" .. UserName .. "</td>"
			Content = Content .. "<td>"
			Content = Content .. UsersIni:GetValue( UserName, "Groups", "-" )
			Content = Content .. "</td>"
			Content = Content .. "</tr>"
		end
	else
		Content = Content .. "<tr><td>None</td></tr>"
	end
	Content = Content .. "</table>"


	return Content
end

local function ShowGroupsTable()
	local Content = "<h4>Groups</h4>"

	local NumGroups = GroupsIni:GetNumKeys()

	Content = Content .. "<table>"
	if( NumGroups > 0 ) then
		Content = Content .. "<tr><th></th><th>Name</th><th>Permissions</th><th>Color</th></tr>"

		for i=0, NumGroups-1 do
			local GroupName = GroupsIni:GetKeyName( i )

			Content = Content .. "<tr>"
			Content = Content .. "<td style='width: 10px;'>" .. i .. ".</td>"
			Content = Content .. "<td>" .. GroupName .. "</td>"
			Content = Content .. "<td>"
			Content = Content .. GroupsIni:GetValue( GroupName, "Permissions", "-" )
			Content = Content .. "</td>"
			Content = Content .. "<td>"
			Content = Content .. GroupsIni:GetValue( GroupName, "Color", "-" )
			Content = Content .. "</td>"
			Content = Content .. "</tr>"
		end
	else
		Content = Content .. "<tr><td>None</td></tr>"
	end
	Content = Content .. "</table>"

	return Content
end

local function HTML_Select_Group( name, defaultValue )
	Groups = ""
	for I=0, GroupsIni:GetNumKeys() - 1 do
		Groups = Groups ..
		HTML_Option(GroupsIni:KeyName(I), GroupsIni:KeyName(I),  defaultValue == GroupsIni:KeyName(I) )
	end
	return [[<select name="]] .. name .. [[">]] .. Groups .. [[</select>]]
end


local function AddPlayers( Request )
	local Content = "<h4>Add or change Players</h4>"
	if( Request.PostParams["AddPlayerToGroup"] ~= nil ) then
		if Request.PostParams["AddPlayer"] ~= "" then
			if Request.PostParams["AddGroups"] ~= "" then
				if GroupsIni:FindKey(Request.PostParams["AddGroup"]) == -1 then
					return "Group does not exist"
				end
				UsersIni:DeleteKey(Request.PostParams["AddPlayer"])
				UsersIni:GetValueSet(Request.PostParams["AddPlayer"], "Groups", Request.PostParams["AddGroup"])
				UsersIni:WriteFile()
				local loopPlayers = function( Player )
					if Player:GetName() == Request.PostParams["AddPlayer"] then
						SendMessageSuccess( Player, "You were moved to group " .. Request.PostParams["AddGroup"] )
						Player:LoadPermissionsFromDisk()
					end
				end
				local loopWorlds = function ( World )
					World:ForEachPlayer( loopPlayers )
				end
				cRoot:Get():ForEachWorld( loopWorlds )
			end
		end
	end
	Content = Content .. [[
	<form method="POST">
	<table>
	<tr><td style="width: 20%;">Player:</td>
	<td><input type="text" name="AddPlayer" value=""></td></tr><br>
	<tr><td style="width: 20%;">Group:</td>
	<td>]] .. HTML_Select_Group("AddGroup", GroupsIni:KeyName(0) ) .. [[</td></tr>
	</table>
	<input type="submit" value="Add Player" name="AddPlayerToGroup">]]

	return Content
end

function HandleRequest_Permissions( Request )
	GroupsIni = cIniFile("groups.ini")
	if( GroupsIni:ReadFile() == false ) then
		return "Could not read groups.ini!"
	end
	UsersIni = cIniFile("users.ini")
	if( UsersIni:ReadFile() == false ) then
		return "Could not read users.ini!"
	end

	local Content = ""

	Content = Content .. AddPlayers( Request )
	Content = Content .. ShowGroupsTable()
	Content = Content .. ShowUsersTable()

	return Content
end