From 514cc9c05c14975e5a98fd742b78d9ed0ec325a3 Mon Sep 17 00:00:00 2001 From: valenti Date: Thu, 9 Apr 2026 05:45:40 -0400 Subject: [PATCH] ver fix --- package.json | 2 +- server/package.json | 2 +- server/src/config/database.ts | 7 +++-- server/src/config/db.ts | 7 +++-- server/src/controllers/rutController.ts | 2 +- server/src/controllers/system.controller.ts | 26 ++++++++++++++- server/src/routes/system.routes.ts | 5 +-- server/src/scripts/migrate-tenant-credits.ts | 7 +++-- server/src/scripts/migrate-tenant-usage.ts | 7 +++-- src/components/layouts/DashboardLayout.tsx | 33 ++++++++++++++++++++ 10 files changed, 84 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 999265f..bd6216b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "duxiter-fast-check", "private": true, - "version": "1.5.58", + "version": "1.6.00", "type": "module", "scripts": { "dev": "vite", diff --git a/server/package.json b/server/package.json index 6c3e0a4..49c5663 100644 --- a/server/package.json +++ b/server/package.json @@ -1,6 +1,6 @@ { "name": "duxiter-server", - "version": "1.6.10", + "version": "1.6.20", "private": true, "type": "module", "scripts": { diff --git a/server/src/config/database.ts b/server/src/config/database.ts index fcbdf77..aea81a8 100644 --- a/server/src/config/database.ts +++ b/server/src/config/database.ts @@ -3,10 +3,13 @@ import dotenv from 'dotenv'; dotenv.config(); -const MONGODB_URI = process.env.MONGODB_URI || null; +const MONGODB_URI = process.env.MONGODB_URI; export const connectDB = async () => { try { + if (!MONGODB_URI) { + throw new Error('MONGODB_URI is not set'); + } await mongoose.connect(MONGODB_URI); console.log('MongoDB connected successfully'); @@ -23,4 +26,4 @@ export const connectDB = async () => { } }; -export default mongoose; \ No newline at end of file +export default mongoose; diff --git a/server/src/config/db.ts b/server/src/config/db.ts index f86f49c..2703a49 100644 --- a/server/src/config/db.ts +++ b/server/src/config/db.ts @@ -3,14 +3,17 @@ import dotenv from 'dotenv'; dotenv.config(); -const MONGODB_URI = process.env.MONGODB_URI || null; +const MONGODB_URI = process.env.MONGODB_URI; export const connectDB = async (): Promise => { try { + if (!MONGODB_URI) { + throw new Error('MONGODB_URI is not set'); + } console.log(`[connectDB] Connecting to MongoDB at ${MONGODB_URI}`); await mongoose.connect(MONGODB_URI); } catch (error) { console.error('MongoDB connection error:', error); throw error; } -}; \ No newline at end of file +}; diff --git a/server/src/controllers/rutController.ts b/server/src/controllers/rutController.ts index 881605b..3179632 100644 --- a/server/src/controllers/rutController.ts +++ b/server/src/controllers/rutController.ts @@ -757,7 +757,7 @@ export class RutController { //AV sheriffV2 if (newSheriff && (newSheriff as any).compliance) { - console.warn(586, "-------------------- newSheriff", newSheriff?.compliance?.data); + console.warn(586, "-------------------- newSheriff", (newSheriff as any)?.compliance?.data); (filteredDetails as any).complianceSelectedRowsPepChile = (newSheriff as any)?.compliance?.data?.pepChile?.coincidencias || []; (filteredDetails as any).complianceSelectedRowsPublicOfficial = (newSheriff as any)?.compliance?.data?.funcionariosPublicos?.coincidencias || []; (filteredDetails as any).complianceSelectedRowsPepChileFamily = (newSheriff as any)?.compliance?.data?.familiaresPep?.coincidencias || []; diff --git a/server/src/controllers/system.controller.ts b/server/src/controllers/system.controller.ts index c1af8f2..6b44608 100644 --- a/server/src/controllers/system.controller.ts +++ b/server/src/controllers/system.controller.ts @@ -204,4 +204,28 @@ export const getSystemStatus = async (req: Request, res: Response): Promise { + const interfaces = os.networkInterfaces(); + const results: string[] = []; + + for (const infos of Object.values(interfaces)) { + if (!infos) continue; + for (const info of infos) { + if (info.family !== 'IPv4') continue; + if (info.internal) continue; + results.push(info.address); + } + } + + return results; +}; + +export const getVmIp = async (req: Request, res: Response): Promise => { + const override = (process.env.VM_IP || process.env.HOST_IP || '').trim(); + const ips = override ? [override] : getVmIpv4Addresses(); + const ip = ips[0] || null; + + res.json({ ip, ips }); +}; diff --git a/server/src/routes/system.routes.ts b/server/src/routes/system.routes.ts index 3bded11..b380992 100644 --- a/server/src/routes/system.routes.ts +++ b/server/src/routes/system.routes.ts @@ -1,5 +1,5 @@ import { Router } from 'express'; -import { getSystemStatus } from '../controllers/system.controller'; +import { getSystemStatus, getVmIp } from '../controllers/system.controller'; import { authenticate } from '../middleware/auth.middleware'; import { requirePermission, Permission } from '../middleware/permissions.middleware'; @@ -87,5 +87,6 @@ const router = Router(); * description: Internal server error */ router.get('/status', authenticate, requirePermission(Permission.ADMIN_DASHBOARD), getSystemStatus); +router.get('/vm-ip', authenticate, getVmIp); -export default router; \ No newline at end of file +export default router; diff --git a/server/src/scripts/migrate-tenant-credits.ts b/server/src/scripts/migrate-tenant-credits.ts index 274e0b2..0d9641c 100644 --- a/server/src/scripts/migrate-tenant-credits.ts +++ b/server/src/scripts/migrate-tenant-credits.ts @@ -7,7 +7,10 @@ dotenv.config(); async function migrateTenantCredits() { try { - const MONGODB_URI = process.env.MONGODB_URI || null; + const MONGODB_URI = process.env.MONGODB_URI; + if (!MONGODB_URI) { + throw new Error('MONGODB_URI is not set'); + } await mongoose.connect(MONGODB_URI); console.log('Connected to MongoDB'); @@ -62,4 +65,4 @@ async function migrateTenantCredits() { } } -migrateTenantCredits(); \ No newline at end of file +migrateTenantCredits(); diff --git a/server/src/scripts/migrate-tenant-usage.ts b/server/src/scripts/migrate-tenant-usage.ts index b6ee50b..9164d0f 100644 --- a/server/src/scripts/migrate-tenant-usage.ts +++ b/server/src/scripts/migrate-tenant-usage.ts @@ -7,7 +7,10 @@ dotenv.config(); async function migrateTenants() { try { - const MONGODB_URI = process.env.MONGODB_URI || null; + const MONGODB_URI = process.env.MONGODB_URI; + if (!MONGODB_URI) { + throw new Error('MONGODB_URI is not set'); + } await mongoose.connect(MONGODB_URI); console.log('Connected to MongoDB'); @@ -34,4 +37,4 @@ async function migrateTenants() { } } -migrateTenants(); \ No newline at end of file +migrateTenants(); diff --git a/src/components/layouts/DashboardLayout.tsx b/src/components/layouts/DashboardLayout.tsx index b5d9d9d..7cb6959 100644 --- a/src/components/layouts/DashboardLayout.tsx +++ b/src/components/layouts/DashboardLayout.tsx @@ -33,11 +33,21 @@ import packageJson from '../../../package.json'; import logger from '../../utils/logger'; import LanguageSwitcher from '../common/LanguageSwitcher'; import { useTranslation } from 'react-i18next'; +import { apiClient } from '../../services/api'; interface DashboardLayoutProps { children: ReactNode; } +const getLastTwoIpv4Blocks = (ip: string): string | null => { + const match = ip.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/); + if (!match) return null; + const third = Number(match[3]); + const fourth = Number(match[4]); + if (Number.isNaN(third) || Number.isNaN(fourth)) return null; + return `${third}.${fourth}`; +}; + const DashboardLayout: React.FC = ({ children }) => { const { user, logout } = useAuth(); const { tenant } = useTenant(); @@ -45,6 +55,7 @@ const DashboardLayout: React.FC = ({ children }) => { const [sidebarOpen, setSidebarOpen] = useState(false); const location = useLocation(); const navigate = useNavigate(); + const [vmIpSuffix, setVmIpSuffix] = useState(null); // Force language from localStorage on mount to ensure immediate consistency useEffect(() => { @@ -62,6 +73,26 @@ const DashboardLayout: React.FC = ({ children }) => { } catch { } }, [i18n.resolvedLanguage]); + useEffect(() => { + let isMounted = true; + + const loadVmIp = async () => { + try { + const response = await apiClient.get<{ ip: string | null; ips?: string[] }>('/system/vm-ip'); + const ip = response.data?.ip; + const suffix = ip ? getLastTwoIpv4Blocks(ip) : null; + if (isMounted) setVmIpSuffix(suffix); + } catch { + if (isMounted) setVmIpSuffix(null); + } + }; + + loadVmIp(); + return () => { + isMounted = false; + }; + }, []); + const handleLogout = async () => { try { await logout(); @@ -196,6 +227,7 @@ const DashboardLayout: React.FC = ({ children }) => {
v{packageJson.version} + {vmIpSuffix && IP {vmIpSuffix}}
@@ -266,6 +298,7 @@ const DashboardLayout: React.FC = ({ children }) => {
v{packageJson.version} + {vmIpSuffix && IP {vmIpSuffix}}