/
TimurIsm
/
OpenEyes
Обзор
Документация
Войти
/
TimurIsm
/
OpenEyes
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
back/utils/tokenManager.js
99 строк
2 KB
TimurIsm
first_commit
16 май 2026, 15:34
16 май 2026, 15:34
4d3f198
Код
Авторство
О чём код?
const crypto = require('crypto'); const TOKEN_TYPES = { EMAIL_VERIFICATION: 'ev', PASSWORD_RESET: 'pr', ACCOUNT_DELETION: 'ad', PASSWORD_CHANGE: 'pc' }; const TOKEN_LIFETIMES = { [TOKEN_TYPES.EMAIL_VERIFICATION]: 24 * 60 * 60 * 1000, [TOKEN_TYPES.PASSWORD_RESET]: 1 * 60 * 60 * 1000, [TOKEN_TYPES.ACCOUNT_DELETION]: 24 * 60 * 60 * 1000, [TOKEN_TYPES.PASSWORD_CHANGE]: 1 * 60 * 60 * 1000 }; const generateSecureToken = (bytes = 32) => { return crypto.randomBytes(bytes).toString('base64url'); }; const generateTypedToken = (type) => { const token = generateSecureToken(); return `${type}_${token}`; }; const createTokenObject = (type) => { return { token: generateTypedToken(type), expires: new Date(Date.now() + TOKEN_LIFETIMES[type]), type: type, createdAt: new Date() }; }; const isValidToken = (tokenData, receivedToken, expectedType = null) => { if (!tokenData) { return false; } if (expectedType && tokenData.type !== expectedType) { return false; } if (expectedType && !receivedToken.startsWith(`${expectedType}_`)) { return false; } if (tokenData.token !== receivedToken) { return false; } if (new Date(tokenData.expires) < new Date()) { return false; } return true; }; const isTokenType = (token, expectedType) => { if (!token || typeof token !== 'string') return false; return token.startsWith(`${expectedType}_`); }; const getTokenType = (typedToken) => { if (!typedToken || typeof typedToken !== 'string') return null; const parts = typedToken.split('_'); if (parts.length !== 2) return null; const prefix = parts[0]; return Object.values(TOKEN_TYPES).includes(prefix) ? prefix : null; }; const removeToken = async (user, tokenType) => { if (user.tokens && user.tokens[tokenType]) { const updatedTokens = { ...user.tokens }; delete updatedTokens[tokenType]; user.tokens = updatedTokens; await user.save(); } }; const clearAllTokens = async (user) => { user.tokens = {}; await user.save(); }; module.exports = { TOKEN_TYPES, TOKEN_LIFETIMES, generateSecureToken, generateTypedToken, createTokenObject, isValidToken, isTokenType, getTokenType, removeToken, clearAllTokens };