Files
sky_phone-sky-systems/sky_phone/source/server/housing.lua
T
2026-08-12 07:15:26 +02:00

70 lines
2.3 KiB
Lua

SkyPhoneHousing = {}
function SkyPhoneHousing.ResolveShare(source, property_id)
local overview = Bridge.Housing.GetOverview(source)
if not overview or type(overview.properties) ~= "table" then
return nil
end
for _, property in ipairs(overview.properties) do
if property.id == property_id then
return {
title = property.name,
subtitle = property.access,
copyText = property.name,
link = "skyphone://house/property/" .. property.id,
meta = { access = property.access, entrance = property.entrance },
}
end
end
return nil
end
Bridge.Callbacks.Register("sky_phone:housing:overview", function(source)
if not SkyPhone.AllowOperation(
source,
"housing_overview",
Config.Housing.OverviewRequestsPerMinute,
60
) then
return { success = false, error = "rate_limited" }
end
local session, error_response = SkyPhone.RequireSession(source)
if not session then
return error_response
end
local overview, error_code = Bridge.Housing.GetOverview(source)
if not overview then
return { success = false, error = error_code or "request_failed" }
end
return { success = true, data = overview }
end)
Bridge.Callbacks.Register("sky_phone:housing:prepare", function(source, data)
if not SkyPhone.AllowOperation(source, "housing_action", Config.Housing.ActionsPerMinute, 60) then
return { success = false, error = "rate_limited" }
end
local session, error_response = SkyPhone.RequireSession(source)
if not session then
return error_response
end
if type(data) ~= "table" or type(data.action) ~= "string" then
return { success = false, error = "invalid_request" }
end
local allowed_actions = {
grant_key = true,
key_candidates = true,
open_cctv = true,
revoke_key = true,
set_waypoint = true,
toggle_lock = true,
}
if not allowed_actions[data.action] then
return { success = false, error = "invalid_action" }
end
local prepared, error_code = Bridge.Housing.Prepare(source, data.action, data)
if not prepared then
return { success = false, error = error_code or "action_failed" }
end
return { success = true, data = prepared }
end)