/** * Gera um token JWT para um usuário em uma empresa específica. * O token é armazenado no campo USU_TOKEN da tabela USUARIOS. * * Uso: node scripts/gerar-token-jwt.js [alias] * * Exemplos: * node scripts/gerar-token-jwt.js SUPORTE 1 * node scripts/gerar-token-jwt.js SUPORTE 1 lajedo */ const jwt = require('jsonwebtoken'); const db = require('../src/database'); const authConfig = require('../src/config/auth'); async function main() { const login = process.argv[2]; const empresaId = parseInt(process.argv[3], 10); const alias = process.argv[4] || 'lajedo'; if (!login || !empresaId) { console.log('Uso: node scripts/gerar-token-jwt.js [alias]'); console.log('Ex: node scripts/gerar-token-jwt.js SUPORTE 1 lajedo'); process.exit(1); } // 1. Busca o usuário pelo login const users = await db.query(alias, `SELECT USU_CODIGO_ID, USU_NOME, USU_LOGIN, USU_EMAIL, USU_STATUS, USU_ACESSO_WEB, USU_TIPO, USU_TOKEN FROM USUARIOS WHERE USU_LOGIN = ?`, [login] ); if (users.length === 0) { console.log(`❌ Usuário "${login}" não encontrado no alias "${alias}".`); process.exit(1); } const user = users[0]; // 2. Verifica se o usuário tem acesso à empresa const empresas = await db.query(alias, `SELECT USE_EMPRESA_ID FROM USUARIOS_EMPRESA WHERE USE_USUARIO_ID = ? AND USE_EMPRESA_ID = ?`, [user.USU_CODIGO_ID, empresaId] ); if (empresas.length === 0) { // Lista as empresas que o usuário tem acesso const allEmpresas = await db.query(alias, `SELECT USE_EMPRESA_ID FROM USUARIOS_EMPRESA WHERE USE_USUARIO_ID = ?`, [user.USU_CODIGO_ID] ); const empresasList = allEmpresas.map(e => e.USE_EMPRESA_ID).join(', '); console.log(`❌ Usuário "${login}" não tem acesso à empresa ${empresaId}.`); console.log(` Empresas disponíveis para este usuário: ${empresasList || 'nenhuma'}`); process.exit(1); } // 3. Verifica status e permissão web const statusOk = user.USU_STATUS === 'A'; const webOk = user.USU_ACESSO_WEB === 1; if (!statusOk) { console.log(`❌ Usuário "${login}" não está ativo (status: ${user.USU_STATUS}).`); process.exit(1); } if (!webOk) { console.log(`⚠️ Usuário "${login}" não tem acesso WEB habilitado.`); console.log(` Execute: node scripts/habilitar-acesso-web.js ${login} ${alias}`); // Não impede de gerar o token, mas avisa } // 4. Gera o payload do token const payload = { id: user.USU_CODIGO_ID, empresaId: empresaId, nome: user.USU_NOME.trim(), login: user.USU_LOGIN.trim(), email: user.USU_EMAIL ? user.USU_EMAIL.trim() : null, tipo: user.USU_TIPO ? user.USU_TIPO.trim() : null, alias: alias, }; // 5. Gera o token JWT const token = jwt.sign(payload, authConfig.secret, { expiresIn: authConfig.expiresIn, issuer: authConfig.issuer, }); // 6. Armazena no campo USU_TOKEN await db.execute(alias, 'UPDATE USUARIOS SET USU_TOKEN = ? WHERE USU_CODIGO_ID = ?', [token, user.USU_CODIGO_ID] ); // 7. Exibe o resultado console.log(''); console.log('='.repeat(70)); console.log(' ✅ TOKEN JWT GERADO COM SUCESSO'); console.log('='.repeat(70)); console.log(''); console.log(` Alias: ${alias}`); console.log(` Usuário: ${user.USU_NOME.trim()} (${user.USU_LOGIN.trim()})`); console.log(` ID Usuário: ${user.USU_CODIGO_ID}`); console.log(` Empresa: ${empresaId}`); console.log(` Status: ${statusOk ? '✅ Ativo' : '❌ Inativo'}`); console.log(` Acesso Web: ${webOk ? '✅ Sim' : '❌ Não'}`); console.log(''); console.log(' ┌─ TOKEN ─────────────────────────────────────────────────┐'); console.log(` │ ${token}`); console.log(' └─────────────────────────────────────────────────────────┘'); console.log(''); console.log(' Expira em: ' + authConfig.expiresIn); console.log(''); console.log(' 📌 Headers para usar nas requisições:'); console.log(' Authorization: Bearer ' + token.substring(0, 50) + '...'); console.log(' X-Usu-Token: ' + token.substring(0, 50) + '...'); console.log(''); process.exit(0); } main().catch(err => { console.error('Erro:', err.message); process.exit(1); });