-
Notifications
You must be signed in to change notification settings - Fork 0
/
users.lua
112 lines (90 loc) · 2.69 KB
/
users.lua
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
users = { users_table = {}, user = {} }
local inspect = require("inspect")
local users_config = {}
users_config.config = config.read("users").users
local authentication_failed_msg = "Authentication failed!"
function users_config.find(name)
for i,v in ipairs(users_config.config) do
if v.name == name then return v end
end
return nil
end
function users.find_by_name(name)
for i,v in ipairs(users.users_table) do
if v.name == name then return v end
end
end
function users.find_by_edict(E)
local name = get_entity_keyvalue(E, "name")
for i,v in ipairs(users.users_table) do
if v.name == name then return v end
end
end
local auth = { methods = {} }
function auth.methods.none( user, config )
return true
end
function auth.methods.ip( user, config )
return user.ip == config.ip
end
function auth.methods.password( user, config )
local password = get_entity_keyvalue(user.edict, "_pw")
return password == config.password
end
function auth.methods.authid( user, config )
return user.authid == config.authid
end
function auth.user(user, config)
local method = auth.methods[config.method]
if method ~= nil then return method(user,config) end
return false
end
function users.add(player_name, auth_method, auth_data)
end
function users.remove(player_name)
end
engine_callback.register('pfnClientConnect', function (E)
local ip = get_entity_keyvalue(E, "ip"):match("(%d+.%d+.%d+.%d+)")
table.insert(users.users_table,
{
edict = E,
name = get_entity_keyvalue(E, "name"),
authid = engine.get_player_authid(E),
ip = ip,
on_server = false,
auth = false
}
)
-- print(inspect(users.users_table))
end)
engine_callback.register('pfnClientDisconnect', function (E)
local name = get_entity_keyvalue(E, "name")
for i,v in ipairs(users.users_table) do
if users.users_table[i].name == name then
table.remove(users.users_table, i)
end
end
-- print(inspect(users.users_table))
end)
engine_callback.register('pfnClientPutInServer', function (E)
local name = get_entity_keyvalue(E, "name")
local config = users_config.find(name)
if config ~= nil then
local auth_user = users.find_by_name(name)
local authentication_success = auth.user(auth_user, config)
if authentication_success ~= true then
engine.server_command(string.format('kick #%i "%s"', engine.get_player_userid(E), authentication_failed_msg))
return
end
for i,v in ipairs(users.users_table) do
if users.users_table[i].name == name then
users.users_table[i].privilege = config.privilege
users.users_table[i].auth = true
end
end
end
for i,v in ipairs(users.users_table) do
if users.users_table[i].name == name then users.users_table[i].on_server = true end
end
-- print(inspect(users.users_table))
end)