From 2271946f1ee18791baac241ddde79b0fdd558ca0 Mon Sep 17 00:00:00 2001 From: admtracksteel Date: Sun, 15 Mar 2026 16:04:10 -0300 Subject: [PATCH] fix: restore organizationId mapping in auth login and middleware --- check-pass.cjs | 30 ++++++++++++++ check-user.cjs | 25 ++++++++++++ fix-admin-org.cjs | 52 ++++++++++++++++++++++++ src/server/controllers/authController.ts | 12 +++++- src/server/middleware/roleMiddleware.ts | 2 +- src/server/scripts/check-user.ts | 24 +++++++++++ 6 files changed, 142 insertions(+), 3 deletions(-) create mode 100644 check-pass.cjs create mode 100644 check-user.cjs create mode 100644 fix-admin-org.cjs create mode 100644 src/server/scripts/check-user.ts diff --git a/check-pass.cjs b/check-pass.cjs new file mode 100644 index 0000000..8200281 --- /dev/null +++ b/check-pass.cjs @@ -0,0 +1,30 @@ +const mongoose = require('mongoose'); +const bcrypt = require('bcryptjs'); + +const MONGODB_URI = 'mongodb+srv://admtracksteel:29OHAHpKTI8XcCNt@cluster0.a4xiilu.mongodb.net/ts_gpi?retryWrites=true&w=majority&appName=Cluster0'; + +const UserSchema = new mongoose.Schema({ + email: String, + passwordHash: String +}); + +async function check() { + try { + await mongoose.connect(MONGODB_URI); + const User = mongoose.models.User || mongoose.model('User', UserSchema); + const user = await User.findOne({ email: 'admtracksteel@gmail.com' }); + + if (user) { + const isMatch = await bcrypt.compare('admin', user.passwordHash); + console.log('PASSWORD_MATCH_ADMIN:' + isMatch); + } else { + console.log('USER_NOT_FOUND'); + } + } catch (err) { + console.error(err); + } finally { + await mongoose.disconnect(); + process.exit(0); + } +} +check(); diff --git a/check-user.cjs b/check-user.cjs new file mode 100644 index 0000000..56fed64 --- /dev/null +++ b/check-user.cjs @@ -0,0 +1,25 @@ +const mongoose = require('mongoose'); + +const MONGODB_URI = 'mongodb+srv://admtracksteel:29OHAHpKTI8XcCNt@cluster0.a4xiilu.mongodb.net/ts_gpi?retryWrites=true&w=majority&appName=Cluster0'; + +const UserSchema = new mongoose.Schema({ + email: String, + role: String, + passwordHash: String, + externalId: String +}); + +async function check() { + try { + await mongoose.connect(MONGODB_URI); + const User = mongoose.models.User || mongoose.model('User', UserSchema); + const user = await User.findOne({ email: 'admtracksteel@gmail.com' }); + console.log('USER_CHECK_RESULT:' + JSON.stringify(user)); + } catch (err) { + console.error(err); + } finally { + await mongoose.disconnect(); + process.exit(0); + } +} +check(); diff --git a/fix-admin-org.cjs b/fix-admin-org.cjs new file mode 100644 index 0000000..03b320e --- /dev/null +++ b/fix-admin-org.cjs @@ -0,0 +1,52 @@ +const mongoose = require('mongoose'); + +const MONGODB_URI = 'mongodb+srv://admtracksteel:29OHAHpKTI8XcCNt@cluster0.a4xiilu.mongodb.net/ts_gpi?retryWrites=true&w=majority&appName=Cluster0'; + +async function fix() { + try { + await mongoose.connect(MONGODB_URI); + + // Define simple models for the script + const User = mongoose.models.User || mongoose.model('User', new mongoose.Schema({ + email: String, + organizationId: String + })); + + const Organization = mongoose.models.Organization || mongoose.model('Organization', new mongoose.Schema({ + externalId: String, + name: String + })); + + // 1. Garante que existe uma organização padrão + let org = await Organization.findOne({ externalId: 'default-org' }); + if (!org) { + org = await Organization.create({ + externalId: 'default-org', + name: 'Default Organization' + }); + console.log('✅ Organização default-org criada.'); + } else { + console.log('✅ Organização default-org já existe.'); + } + + // 2. Vincula o admin à organização + const email = 'admtracksteel@gmail.com'; + const result = await User.updateOne( + { email }, + { $set: { organizationId: 'default-org' } } + ); + + if (result.matchedCount > 0) { + console.log(`✅ Usuário ${email} vinculado à organização default-org.`); + } else { + console.log(`❌ Usuário ${email} não encontrado.`); + } + + } catch (err) { + console.error(err); + } finally { + await mongoose.disconnect(); + process.exit(0); + } +} +fix(); diff --git a/src/server/controllers/authController.ts b/src/server/controllers/authController.ts index 9a7bb6e..20fa20d 100644 --- a/src/server/controllers/authController.ts +++ b/src/server/controllers/authController.ts @@ -1,7 +1,8 @@ import { Request, Response } from 'express'; import bcrypt from 'bcryptjs'; import jwt from 'jsonwebtoken'; -import User from '../models/User.js'; +import User, { IUser } from '../models/User.js'; +import { IAppUser } from '../middleware/roleMiddleware.js'; import { v4 as uuidv4 } from 'uuid'; const JWT_SECRET = process.env.JWT_SECRET || 'fallback_secret_key_change_in_prod'; @@ -90,7 +91,14 @@ export const login = async (req: Request, res: Response): Promise => { res.status(200).json({ message: 'Login realizado com sucesso', token, - user: { id: user._id, name: user.name, email: user.email, role: user.role, externalId: user.externalId } + user: { + id: user._id, + name: user.name, + email: user.email, + role: user.role, + externalId: user.externalId, + organizationId: user.organizationId + } }); } catch (error) { console.error('Login Error:', error); diff --git a/src/server/middleware/roleMiddleware.ts b/src/server/middleware/roleMiddleware.ts index 918f8b2..96e1949 100644 --- a/src/server/middleware/roleMiddleware.ts +++ b/src/server/middleware/roleMiddleware.ts @@ -39,7 +39,7 @@ export const extractUser = async (req: Request, res: Response, next: NextFunctio // Create extended user object const appUser: IAppUser = user.toObject() as IAppUser; - appUser.organizationId = organizationId; + appUser.organizationId = organizationId || user.organizationId; // If organization context, get org-specific role if (organizationId) { diff --git a/src/server/scripts/check-user.ts b/src/server/scripts/check-user.ts new file mode 100644 index 0000000..765dcf1 --- /dev/null +++ b/src/server/scripts/check-user.ts @@ -0,0 +1,24 @@ +import mongoose from 'mongoose'; + +const MONGODB_URI = 'mongodb+srv://admtracksteel:29OHAHpKTI8XcCNt@cluster0.a4xiilu.mongodb.net/ts_gpi?retryWrites=true&w=majority&appName=Cluster0'; + +const UserSchema = new mongoose.Schema({ + email: String, + role: String, + passwordHash: String, + externalId: String +}); + +async function check() { + try { + await mongoose.connect(MONGODB_URI); + const User = mongoose.model('User', UserSchema); + const user = await User.findOne({ email: 'admtracksteel@gmail.com' }); + console.log('User found:', JSON.stringify(user, null, 2)); + } catch (err) { + console.error(err); + } finally { + await mongoose.disconnect(); + } +} +check();