From e80daa85e25d8ca80e5c04eeb814c19895eeccc8 Mon Sep 17 00:00:00 2001 From: Douglas Barone Date: Wed, 13 Dec 2023 14:13:09 -0400 Subject: [PATCH] Properly find PA host --- src/server/lib/login.ts | 16 +++++++++++++++- src/server/lib/netInfo.ts | 15 ++++++++------- src/server/services/PaFirewallService.ts | 2 -- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/server/lib/login.ts b/src/server/lib/login.ts index 2649252..ade9735 100644 --- a/src/server/lib/login.ts +++ b/src/server/lib/login.ts @@ -5,6 +5,8 @@ import { PaFirewallService } from '../services/PaFirewallService' import { db } from '../prisma' import { LoginResult } from '../schemas/LoginResult' import { jwtService } from './jwt' +import { getNetworkForIP } from './netInfo' +import { PaHost } from '@prisma/client' export async function login( username: string, @@ -22,10 +24,22 @@ export async function login( const paHosts = await db.paHost.findMany() - const pa = new PaFirewallService(paHosts[0].ip, paHosts[0].key) + const network = await getNetworkForIP(ip) + + const paHost: PaHost | undefined = paHosts.find(paHost => { + return network?.contains(paHost.ip) + }) + + if (!paHost) throw new Error('Rede não suportada') + + const pa = new PaFirewallService(paHost.ip, paHost.key) await pa.login({ username, ip, domain: user.domain }) + console.log( + `Mapped user ${user.domain}\\${username} to IP ${ip} on ${paHost.ip}` + ) + const jwt = jwtService.generateToken({ displayName: user.displayName, username: user.username, diff --git a/src/server/lib/netInfo.ts b/src/server/lib/netInfo.ts index 4090a2c..abf1b46 100644 --- a/src/server/lib/netInfo.ts +++ b/src/server/lib/netInfo.ts @@ -82,16 +82,15 @@ const networks = networksInfo.map(network => { export async function getNetworkForIP(ip: string) { z.string().ip().parse(ip) - console.log(ip) - const blackList = ['10.7.0.10'] if (blackList.includes(ip)) return { name: 'Endereço IP inválido', shortName: 'XX', - network: '?', - isSupported: false + network: undefined, + isSupported: false, + contains: () => false } const network = networks.find(network => network.contains(ip)) @@ -100,8 +99,9 @@ export async function getNetworkForIP(ip: string) { return { name: 'Rede desconhecida', shortName: '--', - network: '?', - isSupported: false + network: undefined, + isSupported: false, + contains: () => false } } @@ -112,7 +112,8 @@ export async function getNetworkForIP(ip: string) { ) return { + isSupported: !!paHost, ...network, - isSupported: !!paHost + contains: network.contains } } diff --git a/src/server/services/PaFirewallService.ts b/src/server/services/PaFirewallService.ts index daeed18..fab4797 100644 --- a/src/server/services/PaFirewallService.ts +++ b/src/server/services/PaFirewallService.ts @@ -42,8 +42,6 @@ export class PaFirewallService { throw new Error('Failed to map user ID to IP') } - console.log(`Mapped user ${domain}\\${username} to IP ${ip}`) - return true }