123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- -- WARNING: ipnames.command_* are reserved for chat commands!
- function ipnames.command_list(name)
- local names = {} -- faster than string concat
- for k, v in pairs(ipnames.whitelist) do
- if v then
- names[#names + 1] = k
- end
- end
- return true, "All exceptions: " .. table.concat(names, ", ")
- end
- function ipnames.command_whois(name, param)
- if not ipnames.data[param] then
- return false, "The player '" .. param .. "' did not join yet."
- end
-
- local ip = ipnames.data[param][1]
- local names = ""
- for k, v in pairs(ipnames.data) do
- if v[1] == ip then
- names = names .. " " .. k
- end
- end
- return true, "Following players share an IP: " .. names
- end
- function ipnames.command_ignore(name, param)
- if not ipnames.data[param] then
- return false, "The player '" .. param .. "' did not join yet."
- end
-
- ipnames.whitelist[param] = true
- ipnames.save_whitelist()
- return true, "Added '" .. param .. "' to the name whitelist."
- end
- function ipnames.command_unignore(name, param)
- if not ipnames.whitelist[param] then
- return false, "The player '" .. param .. "' is not on the whitelist."
- end
-
- ipnames.whitelist[param] = nil
- ipnames.save_whitelist()
- return true, "Removed '" .. param .. "' from the name whitelist."
- end
- ipnames.is_registered = minetest.player_exists
- or function(name)
- -- 0.4.x support: If you get a nil error here -> update Minetest
- return minetest.auth_table[name]
- end
- -- TODO: Use mod storage
- function ipnames.load_data()
- local file = io.open(ipnames.file, "r")
- if not file then
- return
- end
- local t = os.time()
- for line in file:lines() do
- local data = line:split("|")
- if #data >= 2 then
- -- Ignore players which were removed (according to auth)
- local player_exists = ipnames.is_registered(data[1])
- if player_exists then
- data[3] = tonumber(data[3]) or 0
- -- Remove IP after 2 weeks: Expired
- if data[3] > 0 and t - data[3] > (3600 * 24 * 14) then
- player_exists = false
- end
- end
- if player_exists then
- ipnames.data[data[1]] = {data[2], data[3]}
- end
- end
- end
- io.close(file)
- end
- function ipnames.save_data()
- if not ipnames.changes then
- return
- end
- ipnames.changes = false
- local contents = {} -- faster than string concat
- for k, v in pairs(ipnames.data) do
- v[2] = v[2] or os.time()
- contents[#contents + 1] = k.."|"..v[1].."|"..v[2]
- end
- minetest.safe_file_write(ipnames.file, table.concat(contents, "\n"))
- end
- function ipnames.load_whitelist()
- local file = io.open(ipnames.whitelist_file, "r")
- if not file then
- return
- end
- for line in file:lines() do
- if line ~= "" then
- ipnames.whitelist[line] = true
- end
- end
- io.close(file)
- end
- function ipnames.save_whitelist()
- local names = {} -- faster than string concat
- for k, v in pairs(ipnames.whitelist) do
- if v then
- names[#names + 1] = k
- end
- end
- minetest.safe_file_write(ipnames.whitelist_file, table.concat(names, "\n"))
- end
|