Relocated the serverKeys variable from module scope to inside the signProfileData function to ensure keys are fetched at the time of signing. This improves encapsulation and may help with key rotation or dynamic key management.
60 lines
1.5 KiB
JavaScript
60 lines
1.5 KiB
JavaScript
const path = require("node:path")
|
|
const logger = require("./logger")
|
|
const crypto = require("node:crypto")
|
|
const certificatesManager = require("./certificatesManager")
|
|
|
|
async function getRegistrationCountryFromIp(ipAddress) {
|
|
const apiUrl = `https://ip-api.com/json/${ipAddress}?fields=countryCode`
|
|
|
|
try {
|
|
const response = await fetch(apiUrl)
|
|
if (!response.ok) {
|
|
return "FR"
|
|
}
|
|
|
|
const data = await response.json()
|
|
if (data && data.countryCode) {
|
|
const countryCode = data.countryCode
|
|
return countryCode
|
|
} else {
|
|
return "FR"
|
|
}
|
|
|
|
} catch (error) {
|
|
return "??"
|
|
}
|
|
}
|
|
|
|
function signProfileData(dataBase64) {
|
|
const serverKeys = certificatesManager.getKeys()
|
|
try {
|
|
const privateKey = serverKeys.playerCertificateKeys.private
|
|
const signer = crypto.createSign("SHA1")
|
|
signer.update(dataBase64)
|
|
signer.end()
|
|
return signer.sign(privateKey, "base64")
|
|
} catch (err) {
|
|
console.error("Signing failed:", err)
|
|
return null
|
|
}
|
|
}
|
|
|
|
function addDashesToUUID(uuid) {
|
|
if (typeof uuid !== "string" || uuid.length !== 32) {
|
|
return uuid
|
|
}
|
|
|
|
return (
|
|
uuid.slice(0, 8) + "-" +
|
|
uuid.slice(8, 12) + "-" +
|
|
uuid.slice(12, 16) + "-" +
|
|
uuid.slice(16, 20) + "-" +
|
|
uuid.slice(20)
|
|
)
|
|
}
|
|
|
|
module.exports = {
|
|
getRegistrationCountryFromIp,
|
|
addDashesToUUID,
|
|
signProfileData
|
|
} |