From 01e0a303217438f8c85e349cda7f54c5b520af73 Mon Sep 17 00:00:00 2001 From: Douglas Barone Date: Wed, 20 Apr 2022 09:06:54 -0400 Subject: [PATCH] Added campus verification --- server/package-lock.json | 4 ++-- server/package.json | 2 +- server/src/resolvers/Mutation/updateAccessPoint.js | 14 ++++++++++---- server/src/resolvers/User.js | 14 ++++++++++---- server/src/schemaDirectives/AuthDirective.js | 5 ++++- server/src/typeDefs.js | 1 + web/package-lock.json | 4 ++-- web/package.json | 2 +- web/src/views/AccessPoints/edit.vue | 3 +++ web/src/views/UserInfo.vue | 1 + 10 files changed, 35 insertions(+), 15 deletions(-) diff --git a/server/package-lock.json b/server/package-lock.json index a50f2a9..f229271 100755 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -1,12 +1,12 @@ { "name": "ifms-pti-svr", - "version": "2.13.1", + "version": "2.13.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "ifms-pti-svr", - "version": "2.13.1", + "version": "2.13.2", "license": "ISC", "dependencies": { "@prisma/client": "^3.11.0", diff --git a/server/package.json b/server/package.json index e90c184..feebacf 100755 --- a/server/package.json +++ b/server/package.json @@ -1,6 +1,6 @@ { "name": "ifms-pti-svr", - "version": "2.13.1", + "version": "2.13.2", "description": "Servidor do Portal de TI do IFMS", "main": "src/index.js", "scripts": { diff --git a/server/src/resolvers/Mutation/updateAccessPoint.js b/server/src/resolvers/Mutation/updateAccessPoint.js index d7c0064..424a195 100644 --- a/server/src/resolvers/Mutation/updateAccessPoint.js +++ b/server/src/resolvers/Mutation/updateAccessPoint.js @@ -2,6 +2,7 @@ import prisma from '../../prisma' import { ACCESS_POINTS_UPDATED, pubsub } from '../../pubsub' import { logInfo } from '../../lib/logger' +import { getSubnetInfo } from '../../utils/subnetInfo' export async function updateAccessPoint( parent, @@ -11,15 +12,20 @@ export async function updateAccessPoint( ) { - const accessPoint = await prisma.accessPoint.update({ + const accessPoint = await prisma.accessPoint.findUnique({ where: { id: parseInt(id) }, }) + + if (getSubnetInfo(accessPoint.ip).shortName !== auth.campus) + throw new Error(`O AP ${accessPoint.name || accessPoint.hostname} não está na rede do campus ${auth.campus}. Você só pode editar APs da rede do seu campus.`) + + const updatedAccessPoint = await prisma.accessPoint.update({ where: { id: parseInt(id) }, data: { name, local, notes } }) logInfo({ tags: ['accessPointEdited', 'accessPoints'], - message: `O usuário ${auth.displayName} (${auth.sAMAccountName}) atualizou as informações do AP ${accessPoint.name || accessPoint.hostname}`, - data: accessPoint + message: `O usuário ${auth.displayName} (${auth.sAMAccountName}) atualizou as informações do AP ${updatedAccessPoint.name || updatedAccessPoint.hostname}`, + data: updatedAccessPoint }) const accessPoints = await prisma.accessPoint.findMany({ @@ -30,5 +36,5 @@ export async function updateAccessPoint( accessPointsUpdated: accessPoints }) - return accessPoint + return updatedAccessPoint } \ No newline at end of file diff --git a/server/src/resolvers/User.js b/server/src/resolvers/User.js index 2125135..b99e831 100755 --- a/server/src/resolvers/User.js +++ b/server/src/resolvers/User.js @@ -20,15 +20,15 @@ const User = { sharedFolders: parent => parent.groups ? parent.groups - .filter(group => group.cn.includes('-Share-')) - .map(group => group.cn.split('-')[2]) + .filter(group => group.cn.includes('-Share-')) + .map(group => group.cn.split('-')[2]) : [], sharedPrinters: parent => parent.groups ? parent.groups - .filter(group => group.cn.includes('-Printer-')) - .map(group => group.cn.split('-')[2]) + .filter(group => group.cn.includes('-Printer-')) + .map(group => group.cn.split('-')[2]) : [], isSuperAdmin: parent => parent.roles.includes('superAdmin'), @@ -55,6 +55,12 @@ const User = { } }) .wifiDevices() + }, + + campus: parent => { + const campus = parent.extensionAttribute1?.split('-')[0] + + return campus || '--' } } diff --git a/server/src/schemaDirectives/AuthDirective.js b/server/src/schemaDirectives/AuthDirective.js index d20b837..caa0820 100755 --- a/server/src/schemaDirectives/AuthDirective.js +++ b/server/src/schemaDirectives/AuthDirective.js @@ -23,7 +23,10 @@ class AuthDirective extends SchemaDirectiveVisitor { const user = await new User(sAMAccountName).init() - context.auth = user + context.auth = { + ...user, + campus: user.extensionAttribute1?.split('-')[0] || '--', + } if (user.pwdLastSet.toISOString() === pwdLastSet) { if ( diff --git a/server/src/typeDefs.js b/server/src/typeDefs.js index e5e572a..e0c0778 100644 --- a/server/src/typeDefs.js +++ b/server/src/typeDefs.js @@ -125,6 +125,7 @@ const typeDefs = gql` groups: [Group!] sharedFolders: [String!] sharedPrinters: [String!] + campus: String firstName: String diff --git a/web/package-lock.json b/web/package-lock.json index ee0d9e4..c5ca0df 100755 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -1,12 +1,12 @@ { "name": "ifms-pti", - "version": "2.13.1", + "version": "2.13.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "ifms-pti", - "version": "2.13.1", + "version": "2.13.2", "dependencies": { "@mdi/font": "^6.6.96", "apollo-link-ws": "^1.0.20", diff --git a/web/package.json b/web/package.json index 373919c..898edd6 100755 --- a/web/package.json +++ b/web/package.json @@ -1,6 +1,6 @@ { "name": "ifms-pti", - "version": "2.13.1", + "version": "2.13.2", "private": true, "scripts": { "serve": "vue-cli-service serve", diff --git a/web/src/views/AccessPoints/edit.vue b/web/src/views/AccessPoints/edit.vue index db9dc28..619231f 100644 --- a/web/src/views/AccessPoints/edit.vue +++ b/web/src/views/AccessPoints/edit.vue @@ -42,6 +42,9 @@ Cancelar + + {{ error }} + diff --git a/web/src/views/UserInfo.vue b/web/src/views/UserInfo.vue index ed24558..28dc07a 100755 --- a/web/src/views/UserInfo.vue +++ b/web/src/views/UserInfo.vue @@ -58,6 +58,7 @@ export default { lastLogin lastLoginPrior roles + campus firstName