shogun-core
Version:
SHOGUN CORE - Core library for Shogun Ecosystem
73 lines (72 loc) • 2.39 kB
JavaScript
;
// Utility di validazione e generazione credenziali per ShogunCore
Object.defineProperty(exports, "__esModule", { value: true });
exports.validateUsername = validateUsername;
exports.validateEmail = validateEmail;
exports.validateProvider = validateProvider;
exports.generateUsernameFromIdentity = generateUsernameFromIdentity;
exports.generateDeterministicPassword = generateDeterministicPassword;
// --- VALIDAZIONE ---
/**
* Valida uno username secondo le regole comuni
*/
function validateUsername(username) {
if (!username || typeof username !== "string")
return false;
if (username.length < 3 || username.length > 64)
return false;
if (!/^[a-zA-Z0-9._-]+$/.test(username))
return false;
return true;
}
/**
* Valida una email
*/
function validateEmail(email) {
if (!email || typeof email !== "string")
return false;
// Regex semplice per email
return /^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(email);
}
/**
* Valida un provider OAuth supportato
*/
function validateProvider(provider) {
return ["google", "github", "discord", "twitter", "custom"].includes(provider);
}
// --- GENERAZIONE USERNAME ---
/**
* Genera uno username uniforme a partire da provider e userInfo
* Esempio: google_utente, github_12345, nostr_pubkey, web3_0xabc...
*/
function generateUsernameFromIdentity(provider, userInfo) {
if (provider === "web3" && userInfo.id) {
return `web3_${userInfo.id.toLowerCase()}`;
}
if (provider === "nostr" && userInfo.id) {
return `nostr_${userInfo.id}`;
}
if (provider === "webauthn" && userInfo.id) {
return `webauthn_${userInfo.id}`;
}
if (userInfo.email && validateEmail(userInfo.email)) {
return `${provider}_${userInfo.email.split("@")[0]}`;
}
if (userInfo.name) {
return `${provider}_${userInfo.name.replace(/\s+/g, "_")}`;
}
if (userInfo.id) {
return `${provider}_${userInfo.id}`;
}
return `${provider}_user`;
}
// --- GENERAZIONE PASSWORD DETERMINISTICA ---
const ethers_1 = require("ethers");
/**
* Genera una password deterministica sicura a partire da un salt
* Usare per OAuth, Web3, Nostr, ecc.
*/
function generateDeterministicPassword(salt) {
// Restituisce una stringa hex di 32 caratteri
return ethers_1.ethers.keccak256(ethers_1.ethers.toUtf8Bytes(salt)).slice(2, 34);
}