diff --git a/server/prisma/migrations/20220324161331_add_access_point_model/migration.sql b/server/prisma/migrations/20220324164355_add_access_point_model/migration.sql similarity index 98% rename from server/prisma/migrations/20220324161331_add_access_point_model/migration.sql rename to server/prisma/migrations/20220324164355_add_access_point_model/migration.sql index 5ef522c..2df6301 100644 --- a/server/prisma/migrations/20220324161331_add_access_point_model/migration.sql +++ b/server/prisma/migrations/20220324164355_add_access_point_model/migration.sql @@ -21,6 +21,7 @@ CREATE TABLE "AccessPoint" ( "uptime" TEXT, "controller" TEXT, "model" TEXT, + "ipAddress" TEXT, "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" TIMESTAMP(3) NOT NULL, diff --git a/server/prisma/schema.prisma b/server/prisma/schema.prisma index d2c06db..95e1d03 100644 --- a/server/prisma/schema.prisma +++ b/server/prisma/schema.prisma @@ -150,6 +150,7 @@ model AccessPoint { uptime String? controller String? model String? + ipAddress String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt diff --git a/server/src/lib/accessPoints.js b/server/src/lib/accessPoints.js index 3f48361..e84ccc7 100644 --- a/server/src/lib/accessPoints.js +++ b/server/src/lib/accessPoints.js @@ -1,10 +1,12 @@ import prisma from '../prisma' import { getAccessPoints as getCiscoAccessPoints } from './ciscoController' +import { getAccessPoints as getUnifiAccessPoints } from './unifiController' async function getAccessPoints() { const ciscoAccessPoints = await getCiscoAccessPoints() + const unifiAccessPoints = await getUnifiAccessPoints() - return ciscoAccessPoints + return [...ciscoAccessPoints, ...unifiAccessPoints] } async function updateDB(accessPoints) { @@ -19,5 +21,6 @@ async function updateDB(accessPoints) { export async function updateAccessPoints() { const accessPoints = await getAccessPoints() + await updateDB(accessPoints) } diff --git a/server/src/lib/ciscoController.js b/server/src/lib/ciscoController.js index c4078f6..bc8cd79 100644 --- a/server/src/lib/ciscoController.js +++ b/server/src/lib/ciscoController.js @@ -135,13 +135,16 @@ export async function getAccessPoints() { clearTimeout(timeout) - const restructuredAccessPoints = accessPoints.map(({ Nm, Mc, Md, Ut }) => ({ - mac: Mc, - hostname: Nm, - uptime: Ut.toString(), - controller: 'Cisco', - model: Md - })) + const restructuredAccessPoints = accessPoints.map( + ({ Nm, Mc, Md, Ut, A4 }) => ({ + mac: Mc, + hostname: Nm, + uptime: Ut.toString(), + controller: 'Cisco', + model: Md, + ipAddress: A4 + }) + ) return restructuredAccessPoints } catch (e) { diff --git a/server/src/lib/unifiController.js b/server/src/lib/unifiController.js index 5b4b3b3..21cada5 100644 --- a/server/src/lib/unifiController.js +++ b/server/src/lib/unifiController.js @@ -2,6 +2,8 @@ import { Controller } from 'node-unifi' import { promisify } from 'util' import { ouiFinder } from '../utils/ouiFinder' +import { logError } from './logger' + const unifiController = new Controller( process.env.UNIFI_HOST || 'unifi.pp.ifms.edu.br', process.env.UNIFI_PORT || 8443 @@ -200,3 +202,35 @@ export async function getOnlineWifiDevices() { throw new Error('Error getting devices. ' + e) } } + +export async function getAccessPoints() { + try { + await unifiController.login( + process.env.UNIFI_USER, + process.env.UNIFI_PASSWORD + ) + const accessPoints = await unifiController.getAccessDevices('default') + + const restructuredAccessPoints = accessPoints[0].map( + ({ mac, model, ip, uptime, name }) => ({ + mac, + hostname: name, + uptime: uptime?.toString(), + controller: 'UniFi', + model, + ipAddress: ip + }) + ) + unifiController.logout() + + return restructuredAccessPoints + } catch (e) { + logError({ + tags: ['unifi', 'accessPoints'], + message: e.message, + data: { ...e, config: { ...e.config, auth: '*****' } } + }) + + throw e + } +}