From 7ef8ad78bf7fe714e94432825ed5c92ead86842c Mon Sep 17 00:00:00 2001 From: zykem#0643 <86602828+Zykem@users.noreply.github.com> Date: Mon, 28 Apr 2025 18:38:14 +0200 Subject: [PATCH 1/9] Remove old & Add new config entries for MinAge & MaxAge --- [core]/esx_identity/config.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/[core]/esx_identity/config.lua b/[core]/esx_identity/config.lua index 9d46263c..77a15d0d 100644 --- a/[core]/esx_identity/config.lua +++ b/[core]/esx_identity/config.lua @@ -13,8 +13,8 @@ Config.DateFormat = "DD/MM/YYYY" Config.MaxNameLength = 20 -- Max Name Length. Config.MinHeight = 120 -- 120 cm lowest height Config.MaxHeight = 220 -- 220 cm max height. -Config.LowestYear = 1900 -- 112 years old is the oldest you can be. -Config.HighestYear = 2005 -- 18 years old is the youngest you can be. +Config.MinAge = 18 -- 18 years old is the youngest you can be. +Config.MaxAge = 112 -- 112 years old is the oldest you can be. Config.FullCharDelete = true -- Delete all reference to character. Config.EnableDebugging = ESX.GetConfig().EnableDebug -- prints for debugging :) From 4819740b21d3a240c41b4848427668ce5f066778 Mon Sep 17 00:00:00 2001 From: zykem#0643 <86602828+Zykem@users.noreply.github.com> Date: Mon, 28 Apr 2025 18:38:27 +0200 Subject: [PATCH 2/9] Refactor checkDOBFormat function --- [core]/esx_identity/server/main.lua | 58 +++++++++++++++++++---------- 1 file changed, 39 insertions(+), 19 deletions(-) diff --git a/[core]/esx_identity/server/main.lua b/[core]/esx_identity/server/main.lua index d0461b92..d4530f47 100644 --- a/[core]/esx_identity/server/main.lua +++ b/[core]/esx_identity/server/main.lua @@ -44,31 +44,51 @@ local function saveIdentityToDatabase(identifier, identity) MySQL.update.await("UPDATE users SET firstname = ?, lastname = ?, dateofbirth = ?, sex = ?, height = ? WHERE identifier = ?", { identity.firstName, identity.lastName, identity.dateOfBirth, identity.sex, identity.height, identifier }) end -local function checkDOBFormat(str) - str = tostring(str) - if not string.match(str, "(%d%d)/(%d%d)/(%d%d%d%d)") then +---@param year number Year +---@return boolean: true if the year is a leap year, false otherwise +local function isLeapYear(year) + return (year % 4 == 0 and year % 100 ~= 0) or (year % 400 == 0) +end + +---@param dob string Date of Birth in the format DD/MM/YYYY +---@return boolean: true if the date is valid, false otherwise +local function checkDOBFormat(dob) + dob = tostring(dob) + + local dayStr, monthStr, yearStr = dob:match('^(%d%d?)/(%d%d?)/(%d%d%d%d)$') + if not dayStr or not monthStr or not yearStr then return false end - local d, m, y = string.match(str, "(%d+)/(%d+)/(%d+)") - - m = tonumber(m) - d = tonumber(d) - y = tonumber(y) - - if ((d <= 0) or (d > 31)) or ((m <= 0) or (m > 12)) or ((y <= Config.LowestYear) or (y > Config.HighestYear)) then + local day, month, year = tonumber(dayStr), tonumber(monthStr), tonumber(yearStr) + if not day or not month or not year then return false - elseif m == 4 or m == 6 or m == 9 or m == 11 then - return d <= 30 - elseif m == 2 then - if y % 400 == 0 or (y % 100 ~= 0 and y % 4 == 0) then - return d <= 29 - else - return d <= 28 + end + + local currentDate = os.date("*t") + local currentYear = currentDate.year + local minYear = currentYear - Config.MaxAge + local maxYear = currentYear - Config.MinAge + + if year < minYear or year > maxYear or year > currentYear then + return false + end + + if year == maxYear then + if month > currentDate.month or (month == currentDate.month and day > currentDate.day) then + return false end - else - return d <= 31 end + + if month < 1 or month > 12 then return false end + + -- Days in each month (starting from January.) + local daysInMonth = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } + if month == 2 and isLeapYear(year) then + daysInMonth[2] = 29 + end + + return day >= 1 and day <= daysInMonth[month] end local function formatDate(str) From f77b105419e0bd6aba91c8554eafea3c22f7a00f Mon Sep 17 00:00:00 2001 From: zykem#0643 <86602828+Zykem@users.noreply.github.com> Date: Mon, 28 Apr 2025 19:04:21 +0200 Subject: [PATCH 3/9] Update main.lua --- [core]/esx_identity/server/main.lua | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/[core]/esx_identity/server/main.lua b/[core]/esx_identity/server/main.lua index d4530f47..6c111e74 100644 --- a/[core]/esx_identity/server/main.lua +++ b/[core]/esx_identity/server/main.lua @@ -83,11 +83,7 @@ local function checkDOBFormat(dob) if month < 1 or month > 12 then return false end -- Days in each month (starting from January.) - local daysInMonth = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } - if month == 2 and isLeapYear(year) then - daysInMonth[2] = 29 - end - + local daysInMonth = { 31, isLeapYear(year) and 29 or 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } return day >= 1 and day <= daysInMonth[month] end From 90120948e9ed1f2457996aee0603bba7d78250ac Mon Sep 17 00:00:00 2001 From: zykem#0643 <86602828+Zykem@users.noreply.github.com> Date: Mon, 28 Apr 2025 19:42:46 +0200 Subject: [PATCH 4/9] Remove Config.MinAge --- [core]/esx_identity/config.lua | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/[core]/esx_identity/config.lua b/[core]/esx_identity/config.lua index 77a15d0d..3da197d0 100644 --- a/[core]/esx_identity/config.lua +++ b/[core]/esx_identity/config.lua @@ -13,8 +13,7 @@ Config.DateFormat = "DD/MM/YYYY" Config.MaxNameLength = 20 -- Max Name Length. Config.MinHeight = 120 -- 120 cm lowest height Config.MaxHeight = 220 -- 220 cm max height. -Config.MinAge = 18 -- 18 years old is the youngest you can be. -Config.MaxAge = 112 -- 112 years old is the oldest you can be. +Config.MaxAge = 100 -- 100 years old is the oldest you can be. Config.FullCharDelete = true -- Delete all reference to character. Config.EnableDebugging = ESX.GetConfig().EnableDebug -- prints for debugging :) From ad6c9a0930e3b8e35680a6eb540885652e67cd65 Mon Sep 17 00:00:00 2001 From: zykem#0643 <86602828+Zykem@users.noreply.github.com> Date: Mon, 28 Apr 2025 19:48:12 +0200 Subject: [PATCH 5/9] Format date after validating it --- [core]/esx_identity/server/main.lua | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/[core]/esx_identity/server/main.lua b/[core]/esx_identity/server/main.lua index 6c111e74..1642ab1f 100644 --- a/[core]/esx_identity/server/main.lua +++ b/[core]/esx_identity/server/main.lua @@ -68,13 +68,13 @@ local function checkDOBFormat(dob) local currentDate = os.date("*t") local currentYear = currentDate.year local minYear = currentYear - Config.MaxAge - local maxYear = currentYear - Config.MinAge + local maxYear = currentYear - 18 - if year < minYear or year > maxYear or year > currentYear then + if year < minYear or year > maxYear or year > currentYear then return false end - if year == maxYear then + if year == currentYear then if month > currentDate.month or (month == currentDate.month and day > currentDate.day) then return false end @@ -259,7 +259,6 @@ end ESX.RegisterServerCallback("esx_identity:registerIdentity", function(source, cb, data) local xPlayer = ESX.GetPlayerFromId(source) - data.dateofbirth = formatDate(data.dateofbirth) if not checkNameFormat(data.firstname) then TriggerClientEvent("esx:showNotification", source, TranslateCap("invalid_firstname_format"), "error") @@ -281,6 +280,7 @@ end TriggerClientEvent("esx:showNotification", source, TranslateCap("invalid_height_format"), "error") return cb(false) end + if xPlayer then if alreadyRegistered[xPlayer.identifier] then xPlayer.showNotification(TranslateCap("already_registered"), "error") @@ -290,7 +290,7 @@ end playerIdentity[xPlayer.identifier] = { firstName = formatName(data.firstname), lastName = formatName(data.lastname), - dateOfBirth = data.dateofbirth, + dateOfBirth = formatDate(data.dateofbirth), sex = data.sex, height = data.height, } From 2ddb9e9fd20a7617bc4acc97ee1446537c3acc4c Mon Sep 17 00:00:00 2001 From: zykem <86602828+Zykem@users.noreply.github.com> Date: Mon, 28 Apr 2025 23:56:31 +0200 Subject: [PATCH 6/9] Remove unnecessary year > currentYear check --- [core]/esx_identity/server/main.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/esx_identity/server/main.lua b/[core]/esx_identity/server/main.lua index 1642ab1f..098a174e 100644 --- a/[core]/esx_identity/server/main.lua +++ b/[core]/esx_identity/server/main.lua @@ -70,7 +70,7 @@ local function checkDOBFormat(dob) local minYear = currentYear - Config.MaxAge local maxYear = currentYear - 18 - if year < minYear or year > maxYear or year > currentYear then + if year < minYear or year > maxYear then return false end From a91e17dee98ccdb9e7e6f0cd53757efd6d71fe65 Mon Sep 17 00:00:00 2001 From: zykem <86602828+Zykem@users.noreply.github.com> Date: Mon, 28 Apr 2025 23:58:04 +0200 Subject: [PATCH 7/9] Remove unnecessary code --- [core]/esx_identity/server/main.lua | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/[core]/esx_identity/server/main.lua b/[core]/esx_identity/server/main.lua index 098a174e..e4fdf104 100644 --- a/[core]/esx_identity/server/main.lua +++ b/[core]/esx_identity/server/main.lua @@ -70,16 +70,7 @@ local function checkDOBFormat(dob) local minYear = currentYear - Config.MaxAge local maxYear = currentYear - 18 - if year < minYear or year > maxYear then - return false - end - - if year == currentYear then - if month > currentDate.month or (month == currentDate.month and day > currentDate.day) then - return false - end - end - + if year < minYear or year > maxYear then return false end if month < 1 or month > 12 then return false end -- Days in each month (starting from January.) From 05769c6ac8a1c9db1f67eeef9004622057efc14f Mon Sep 17 00:00:00 2001 From: zykem <86602828+Zykem@users.noreply.github.com> Date: Tue, 29 Apr 2025 00:02:50 +0200 Subject: [PATCH 8/9] Directly using os.date instead of localizing iit --- [core]/esx_identity/server/main.lua | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/[core]/esx_identity/server/main.lua b/[core]/esx_identity/server/main.lua index e4fdf104..44a99173 100644 --- a/[core]/esx_identity/server/main.lua +++ b/[core]/esx_identity/server/main.lua @@ -65,8 +65,7 @@ local function checkDOBFormat(dob) return false end - local currentDate = os.date("*t") - local currentYear = currentDate.year + local currentYear = os.date("*t").year local minYear = currentYear - Config.MaxAge local maxYear = currentYear - 18 From 04dd22b30b9004fe3c3a6c68b8bcc7a4fb7405f6 Mon Sep 17 00:00:00 2001 From: zykem <86602828+Zykem@users.noreply.github.com> Date: Tue, 29 Apr 2025 00:03:36 +0200 Subject: [PATCH 9/9] Update main.lua --- [core]/esx_identity/server/main.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/esx_identity/server/main.lua b/[core]/esx_identity/server/main.lua index 44a99173..0c8612de 100644 --- a/[core]/esx_identity/server/main.lua +++ b/[core]/esx_identity/server/main.lua @@ -55,7 +55,7 @@ end local function checkDOBFormat(dob) dob = tostring(dob) - local dayStr, monthStr, yearStr = dob:match('^(%d%d?)/(%d%d?)/(%d%d%d%d)$') + local dayStr, monthStr, yearStr = dob:match("^(%d%d?)/(%d%d?)/(%d%d%d%d)$") if not dayStr or not monthStr or not yearStr then return false end