Yggdrasil/modules/utils.js
Azure 97ae0c43f0 Move serverKeys initialization into signProfileData
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.
2025-12-25 01:41:01 +01:00

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
}