Add cubic jail creation as option

This commit is contained in:
localhost_frssoft 2023-10-03 12:15:05 +03:00
parent 33586a6423
commit 8558c7dfb3
2 changed files with 59 additions and 0 deletions

View file

@ -16,6 +16,15 @@ local formspecfediadd = "size[9,10]" ..
local feditempstore = {}
local failed_counter = {}
local cubic_jail_entities = {}
function fediauth.remove_lock_cube(playername)
for _, obj in ipairs(cubic_jail_entities[playername]) do
obj:remove()
end
cubic_jail_entities[playername] = nil
minetest.log("action", "[fediauth] cubic jail removed for: '" .. playername .. "'")
end
minetest.register_entity("fediauth:checkmark", {
initial_properties = {
pointable = false,
@ -30,6 +39,22 @@ minetest.register_entity("fediauth:checkmark", {
on_detach = function(self, parent) self.object:remove() end
})
minetest.register_entity("fediauth:stopper", {
initial_properties = {
pointable = false,
physical = true,
collide_with_objects = true,
armor_group = { immortal = 1 },
collisionbox = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 },
visual = "sprite",
visual_size = {x = 1, y = 1 },
textures = { "ignore" },
use_texture_alpha = true,
static_save = true,
glow = 10,
}
})
function fediauth.verified_checkmark(player, verified)
local tag = player:get_player_name()
local props = player:get_properties()
@ -43,9 +68,34 @@ end
-- Code formspec on join for fediauth enabled players
minetest.register_on_joinplayer(function(player)
local playername = player:get_player_name()
local player_pos = player:getpos()
if fediauth.is_player_bypassed(playername) then return end
if fediauth.is_player_enabled(playername) or minetest.settings:get_bool("fediauth.fedi_required", false) then
minetest.log("action", "[fediauth] session start for player: '" .. playername .. "'")
if minetest.settings:get_bool("fediauth.create_lock_jail_cube") then
local cube = {}
for x=-2,2 do
for y=-2,2 do
for z=-2,2 do
if x ~= 0 then
table.insert(cube, {player_pos.x + x, player_pos.y + y, player_pos.z + z})
elseif y ~= 0 and y ~= 1 then
table.insert(cube, {player_pos.x + x, player_pos.y + y, player_pos.z + z})
elseif z ~= 0 then
table.insert(cube, {player_pos.x + x, player_pos.y + y, player_pos.z + z})
end
end
end
end
local cube_entities = {}
for _, i in ipairs(cube) do
table.insert(cube_entities, minetest.add_entity({x=i[1], y=i[2], z=i[3]}, "fediauth:stopper", nil))
end
cubic_jail_entities[playername] = cube_entities
cube = nil
minetest.log("action", "[fediauth] cubic jail created for: '" .. playername .. "'")
end
-- start fediauth session time
fediauth_sessions[player:get_player_name()] = os.time()
@ -179,9 +229,15 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
fediauth_sessions[playername] = nil
fediauth.regrant_privs(playername)
fediauth.verified_checkmark(player, true)
if minetest.settings:get_bool("fediauth.create_lock_jail_cube") then
fediauth.remove_lock_cube(playername)
end
else
minetest.kick_player(playername, "fediauth code validation failed")
fediauth.regrant_privs(playername)
if minetest.settings:get_bool("fediauth.create_lock_jail_cube") then
fediauth.remove_lock_cube(playername)
end
failed_counter[playername] = (failed_counter[playername] or 0) + 1
end
end)

View file

@ -15,3 +15,6 @@ fediauth.restricted_instances (Restrict instance domains) string example.com,ano
# After hour post will be deleted
# Supported on: Pleroma/Akkoma and their forks
fediauth.automatic_delete (Mark messages for delete*) bool false
# Unstable and can cause out of memory. Create jail/lock cube entities around player
fediauth.create_lock_jail_cube (Create jail/lock cube) bool false