From 45e6679293dcd578445a2abbd7910695e48ab9e2 Mon Sep 17 00:00:00 2001 From: Douglas Barone Date: Wed, 15 Jun 2022 12:38:34 +0000 Subject: [PATCH] Get network info from DB --- server/package.json | 4 + server/prisma/seed.js | 78 +++++++++++++++ server/src/lib/subnetInfo.js | 42 ++++++++ server/src/resolvers/AccessPoint.js | 2 +- .../resolvers/Mutation/updateAccessPoint.js | 2 +- server/src/resolvers/Query/userPresence.js | 2 +- server/src/utils/subnetInfo.js | 99 ------------------- 7 files changed, 127 insertions(+), 102 deletions(-) create mode 100644 server/prisma/seed.js create mode 100644 server/src/lib/subnetInfo.js delete mode 100644 server/src/utils/subnetInfo.js diff --git a/server/package.json b/server/package.json index c63f18b..a248976 100755 --- a/server/package.json +++ b/server/package.json @@ -3,6 +3,9 @@ "version": "2.17.1", "description": "Servidor do Portal de TI do IFMS", "main": "src/index.js", + "prisma": { + "seed": "node prisma/seed.js" + }, "scripts": { "start": "node --tls-min-v1.0 dist/index.js", "dev": "nodemon --tls-min-v1.0 --ext js,graphql src/index.js --exec 'babel-node'", @@ -11,6 +14,7 @@ "prisma:dev": "prisma migrate dev", "prisma:deploy": "prisma migrate deploy", "prisma:generate": "prisma generate", + "seed": "node prisma/seed.js", "build": "babel src --out-dir dist --copy-files --source-maps" }, "repository": { diff --git a/server/prisma/seed.js b/server/prisma/seed.js new file mode 100644 index 0000000..4a64e37 --- /dev/null +++ b/server/prisma/seed.js @@ -0,0 +1,78 @@ +const { PrismaClient } = require('@prisma/client') +const prisma = new PrismaClient() + +async function seed() { + const subNetsInfo = [ + { + shortName: 'RT', + name: 'Reitoria', + cidr: '10.0.0.0/16' + }, + { + shortName: 'RT', + name: 'Reitoria', + cidr: '10.1.0.0/16' + }, + { + shortName: 'AQ', + name: 'Aquidauana', + cidr: '10.2.0.0/16' + }, + { + shortName: 'CG', + name: 'Campo Grande', + cidr: '10.3.0.0/16' + }, + { + shortName: 'CB', + name: 'Corumbá', + cidr: '10.4.0.0/16' + }, + { + shortName: 'CX', + name: 'Coxim', + cidr: '10.5.0.0/16' + }, + { + shortName: 'NA', + name: 'Nova Andradina', + cidr: '10.6.0.0/16' + }, + { + shortName: 'PP', + name: 'Ponta Porã', + cidr: '10.7.0.0/16' + }, + { + shortName: 'TL', + name: 'Três Lagoas', + cidr: '10.8.0.0/16' + }, + { + shortName: 'JD', + name: 'Jardim', + cidr: '10.9.0.0/16' + }, + { + shortName: 'NV', + name: 'Naviraí', + cidr: '10.10.0.0/16' + }, + { + shortName: 'DR', + name: 'Dourados', + cidr: '10.11.0.0/16' + } + ] + + console.log('Seeding subnets...') + + await prisma.network.createMany({ + data: subNetsInfo, + skipDuplicates: true + }) + + console.log('Done!') +} + +seed() diff --git a/server/src/lib/subnetInfo.js b/server/src/lib/subnetInfo.js new file mode 100644 index 0000000..371d51e --- /dev/null +++ b/server/src/lib/subnetInfo.js @@ -0,0 +1,42 @@ +import ip from 'ip' +import { isIPv4 } from 'net' +import prisma from '../prisma' + +let subNetsInfo = [] + +async function getSubnetInfoFromDB() { + return await prisma.network.findMany() +} + +async function getSubNets() { + subNetsInfo = await getSubnetInfoFromDB() + + return subNetsInfo.map(subNetInfo => ({ + ...subNetInfo, + ...ip.cidrSubnet(subNetInfo.cidr) + })) +} + +export const subNets = [] + +getSubNets().then(result => { + subNets.push(...result) +}) + +export function getSubnetInfo(ip) { + if (!isIPv4(ip)) + return { + shortName: '__', + name: 'Sem rede' + } + + const subnet = subNets.find(subnet => subnet.contains(ip)) + + if (!subnet) + return { + shortName: '??', + name: 'Rede desconhecida' + } + + return subnet +} diff --git a/server/src/resolvers/AccessPoint.js b/server/src/resolvers/AccessPoint.js index 8be82e9..9a1a2af 100644 --- a/server/src/resolvers/AccessPoint.js +++ b/server/src/resolvers/AccessPoint.js @@ -1,5 +1,5 @@ import prisma from '../prisma' -import { getSubnetInfo } from '../utils/subnetInfo' +import { getSubnetInfo } from '../lib/subnetInfo' export const AccessPoint = { updatedAt: (parent, data, context, info) => parent.updatedAt?.toISOString(), diff --git a/server/src/resolvers/Mutation/updateAccessPoint.js b/server/src/resolvers/Mutation/updateAccessPoint.js index 8711a8c..5e51ce2 100644 --- a/server/src/resolvers/Mutation/updateAccessPoint.js +++ b/server/src/resolvers/Mutation/updateAccessPoint.js @@ -1,7 +1,7 @@ import prisma from '../../prisma' import { ACCESS_POINTS_UPDATED, pubsub } from '../../pubsub' import { logError, logInfo } from '../../lib/logger' -import { getSubnetInfo } from '../../utils/subnetInfo' +import { getSubnetInfo } from '../../lib/subnetInfo' export async function updateAccessPoint( _, diff --git a/server/src/resolvers/Query/userPresence.js b/server/src/resolvers/Query/userPresence.js index a7e680f..0c963ed 100644 --- a/server/src/resolvers/Query/userPresence.js +++ b/server/src/resolvers/Query/userPresence.js @@ -1,5 +1,5 @@ import prisma from '../../prisma' -import { getSubnetInfo } from '../../utils/subnetInfo' +import { getSubnetInfo } from '../../lib/subnetInfo' export async function userPresence(_, { search, onlyServants }) { if (!search) search = '' diff --git a/server/src/utils/subnetInfo.js b/server/src/utils/subnetInfo.js deleted file mode 100644 index e4e2271..0000000 --- a/server/src/utils/subnetInfo.js +++ /dev/null @@ -1,99 +0,0 @@ -import ip from 'ip' -import { isIPv4 } from 'net' - -const subNetsInfo = [ - { - shortName: 'RT', - name: 'Reitoria', - cidr: '10.0.0.0/16' - }, - { - shortName: 'RT', - name: 'Reitoria', - cidr: '10.1.0.0/16', - addresses: [{ name: 'RNP', ip: '200.19.32.4' }] - }, - { - shortName: 'AQ', - name: 'Aquidauana', - cidr: '10.2.0.0/16', - addresses: [{ name: 'RNP', ip: '200.19.32.253' }] - }, - { - shortName: 'CG', - name: 'Campo Grande', - cidr: '10.3.0.0/16', - addresses: [{ name: 'RNP', ip: '200.19.32.120' }] - }, - { - shortName: 'CB', - name: 'Corumbá', - cidr: '10.4.0.0/16', - addresses: [{ name: 'RNP', ip: '200.19.37.2' }] - }, - { - shortName: 'CX', - name: 'Coxim', - cidr: '10.5.0.0/16', - addresses: [{ name: 'RNP', ip: '200.19.36.16' }] - }, - { - shortName: 'NA', - name: 'Nova Andradina', - cidr: '10.6.0.0/16', - addresses: [] - }, - { - shortName: 'PP', - name: 'Ponta Porã', - cidr: '10.7.0.0/16', - addresses: [{ name: 'RNP', ip: '200.19.34.254' }] - }, - { - shortName: 'TL', - name: 'Três Lagoas', - cidr: '10.8.0.0/16', - addresses: [{ name: 'RNP', ip: '200.19.35.2' }] - }, - { - shortName: 'JD', - name: 'Jardim', - cidr: '10.9.0.0/16', - addresses: [] - }, - { - shortName: 'NV', - name: 'Naviraí', - cidr: '10.10.0.0/16', - addresses: [] - }, - { - shortName: 'DR', - name: 'Dourados', - cidr: '10.11.0.0/16', - addresses: [] - } -] - -export const subNets = subNetsInfo.map(subNetInfo => ({ - ...subNetInfo, - ...ip.cidrSubnet(subNetInfo.cidr) -})) - -export function getSubnetInfo(ip) { - if (!isIPv4(ip)) - return { - shortName: '__', - name: 'Sem rede' - } - - const subnet = subNets.find(subnet => subnet.contains(ip)) - - if (!subnet) - return { - shortName: '??', - name: 'Rede desconhecida' - } - - return subnet -}