2026-04-14 17:41:39 +02:00

141 lines
4.7 KiB
Lua

------------------------------------
------------------------------------
---- DONT TOUCH ANY OF THIS IF YOU DON'T KNOW WHAT YOU ARE DOING
---- THESE ARE **NOT** CONFIG VALUES, USE THE CONVARS IF YOU WANT TO CHANGE SOMETHING
----
----
---- If you are a developer and want to change something, consider writing a plugin instead:
---- https://easyadmin.readthedocs.io/en/latest/plugins/
----
------------------------------------
------------------------------------
Citizen.CreateThread(function()
backupInfos = LoadResourceFile(GetCurrentResourceName(), "backups/_backups.json")
while true do
repeat
Wait(5000)
until blacklist
if backupInfos == nil then
lastBackupTime = 0
else
backupData = json.decode(backupInfos)
lastBackupTime = backupData.lastBackup
end
if (GetConvarInt("ea_backupFrequency", 72) ~= 0) and (lastBackupTime+(GetConvarInt("ea_backupFrequency", 72)*3600) < os.time()) then
createBackup()
end
Wait(120000)
end
end)
---@param name string @Name of the backup file to load
function loadBackupName(name)
local backup = LoadResourceFile(GetCurrentResourceName(), "backups/"..name)
if backup then
local backupJson = json.decode(backup)
if backupJson then
PrintDebugMessage("Loading Backup..")
for i,ban in pairs(blacklist) do
UnbanId(ban.banid)
PrintDebugMessage("removing ban "..ban.banid, 4)
Wait(50)
end
for i,ban in pairs(backupJson) do
addBan(ban)
PrintDebugMessage("adding ban "..ban.banid, 4)
TriggerEvent("ea_data:addBan", ban)
Wait(50)
end
local saved = SaveResourceFile(GetCurrentResourceName(), "banlist.json", json.encode(blacklist, {indent = true}), -1)
if not saved then
PrintDebugMessage("^1Saving banlist.json failed! Please check if EasyAdmin has Permission to write in its own folder!^7", 1)
end
updateBlacklist()
PrintDebugMessage("Backup should be loaded!")
else
PrintDebugMessage("^1EasyAdmin:^7 Backup Could not be loaded, in most cases this comes from there being a formatting error, please use a JSON Validator on the file and fix the errors!")
end
else
PrintDebugMessage("^1EasyAdmin:^7 Backup Name Invalid or missing from Backups.")
end
end
---@return number @Backup ID
---@return number @Backup timestamp
function createBackup()
local backupTime = os.time()
local backupDate = os.date("%H_%M_%d_%m_%Y")
local backupName = "banlist_"..backupDate..".json"
local resourceName = GetCurrentResourceName()
PrintDebugMessage("Creating Banlist Backup to "..backupName, 3)
local saved = SaveResourceFile(resourceName, "backups/"..backupName, json.encode(blacklist, {indent = true}), -1)
if not saved then
PrintDebugMessage("^1Saving banlist backup failed! Please check if EasyAdmin has Permission to write in the backups folder!^7", 1)
end
backupInfos = LoadResourceFile(resourceName, "backups/_backups.json")
if backupInfos then
backupData = json.decode(backupInfos)
table.insert(backupData.backups, {id = getNewBackupid(backupData), backupFile = backupName, backupTimestamp = backupTime, backupDate = backupDate})
if #backupData.backups > GetConvarInt("ea_maxBackupCount", 10) then
deleteBackup(backupData,1)
end
backupData.lastBackup = backupTime
SaveResourceFile(resourceName, "backups/_backups.json", json.encode(backupData, {indent = true}))
else
local backupData = {lastBackup = backupTime, backups = {}}
table.insert(backupData.backups, {id = getNewBackupid(backupData), backupFile = backupName, backupTimestamp = backupTime, backupDate = backupDate})
SaveResourceFile(resourceName, "backups/_backups.json", json.encode(backupData, {indent = true}))
end
return id,timestamp
end
---@param backupData table @Table containing backup information
---@param id number @Index of the backup to delete
function deleteBackup(backupData,id)
local expiredBackup = backupData.backups[id]
table.remove(backupData.backups, id)
local backupFileName = expiredBackup.backupFile
local fullResourcePath = GetResourcePath(GetCurrentResourceName())
os.remove(fullResourcePath.."/backups/"..backupFileName)
PrintDebugMessage("Removed Backup "..backupFileName, 3)
end
---@param backupData table @Table containing backup information
---@return number @New backup ID
function getNewBackupid(backupData)
if backupData then
local lastBackup = backupData.lastbackup
local backups = backupData.backups
return #backups+1
else
return 0
end
end
RegisterCommand("ea_createBackup", function(source, args, rawCommand)
if DoesPlayerHavePermission(source, "server") then
createBackup()
end
end, false)
RegisterCommand("ea_loadBackup", function(source,args,rawCommand)
if DoesPlayerHavePermission(source, "server") and args[1] then
loadBackupName(args[1])
end
end,false)