Refactor mutation into individual files

This commit is contained in:
Douglas Barone 2022-04-04 17:56:49 -04:00
parent 4b63b28c9f
commit 91315b06c3
17 changed files with 156 additions and 160 deletions

View File

@ -1,12 +1,12 @@
{ {
"name": "ifms-pti-svr", "name": "ifms-pti-svr",
"version": "2.12.2", "version": "2.12.3",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "ifms-pti-svr", "name": "ifms-pti-svr",
"version": "2.12.2", "version": "2.12.3",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"@prisma/client": "^3.11.0", "@prisma/client": "^3.11.0",

View File

@ -1,6 +1,6 @@
{ {
"name": "ifms-pti-svr", "name": "ifms-pti-svr",
"version": "2.12.2", "version": "2.12.3",
"description": "Servidor do Portal de TI do IFMS", "description": "Servidor do Portal de TI do IFMS",
"main": "src/index.js", "main": "src/index.js",
"scripts": { "scripts": {

View File

@ -0,0 +1,25 @@
import { addHost } from '../../lib/paloalto'
import { logSuccess } from '../../lib/logger'
export async function addPAHost(
parent,
{ data: { cidr, user, password, description, note } },
{ auth }
) {
const host = await addHost({
cidr,
user,
password,
description,
note,
owner: auth
})
if (host)
logSuccess({
message: `Usuário ${auth.sAMAccountName} (${auth.displayName}) adicionou um novo host Palo Alto (${host.cidr}).`,
tags: ['paloalto']
})
return host
}

View File

@ -0,0 +1,5 @@
import { ResetToken } from '../../classes/ResetToken'
export async function createResetToken(parent, { data }, { auth }) {
return ResetToken.createToken(data.username, auth.sAMAccountName)
}

View File

@ -0,0 +1,10 @@
import prisma from '../../prisma'
export async function delPAHost(parent, { id }, { auth }) {
const host = await prisma.pAHost.findUnique({ where: { id } })
if (host.ownerId != auth.id)
throw new Error('Você não pode apagar o host de outro usuário')
return prisma.pAHost.delete({ where: { id } })
}

View File

@ -0,0 +1,5 @@
import { ResetToken } from '../../classes/ResetToken'
export async function deleteExpiredTokens() {
return `Tokens deletados ${await ResetToken.deleteExpiredTokens()}`
}

View File

@ -0,0 +1,6 @@
import { User } from '../../classes/User'
export async function importUsers() {
User.importAllUsers()
return 'A importação está sendo feita. Isso pode demorar alguns minutos.'
}

View File

@ -1,150 +1,28 @@
import { replacePassword } from '../../lib/activeDirectory/passwordUtils' import { login } from './login'
import { User } from '../../classes/User' import { updatePassword } from './updatePassword'
import { ResetToken } from '../../classes/ResetToken' import { replacePassword } from './replacePassword'
import { replaceStudentPassword } from './replaceStudentPassword'
import { updateDevicesInfo } from '../../lib/wifiDevices' import { createResetToken } from './createResetToken'
import { updateUserIdMappings, addHost } from '../../lib/paloalto' import { useResetToken } from './useResetToken'
import { logInfo, logSuccess, logError } from '../../lib/logger' import { deleteExpiredTokens } from './deleteExpiredTokens'
import { importUsers } from './importUsers'
import { updateAccessPoints } from '../../lib/accessPoints' import { addPAHost } from './addPAHost'
import { delPAHost } from './delPAHost'
import prisma from '../../prisma' import { updateAccessPoint } from './updateAccessPoint'
import { ACCESS_POINTS_UPDATED, pubsub } from '../../pubsub'
const Mutation = { const Mutation = {
async login(parent, { data }) {
return User.login(data.username, data.password)
},
async updatePassword(parent, { data }, { auth }) { login,
return auth.updatePassword(data.oldPassword, data.newPassword) updatePassword,
}, replacePassword,
replaceStudentPassword,
async replacePassword(parent, { data }, { auth }) { createResetToken,
logInfo({ useResetToken,
tags: ['replacePassword', 'user'], deleteExpiredTokens,
message: `Usuário ${auth.sAMAccountName} (${auth.displayName}) está trocando a senha do usuário ${data.username}` importUsers,
}) addPAHost,
delPAHost,
return replacePassword(data.username, data.newPassword) updateAccessPoint
},
async replaceStudentPassword(parent, { data }, { auth }) {
const user = await new User(data.username).init()
const isStudent = !!user.groups.find(
group => group.name == (process.env.STUDENT_GROUP || 'Estudantes')
)
const isServant = !!user.groups.find(
group => group.name == (process.env.SERVANT_GROUP || 'G_SERVIDORES')
)
if (isServant) throw new Error(`Usuário ${data.username} é um servidor`)
if (!isStudent)
throw new Error(`Usuário ${data.username} não é um estudante`)
logInfo({
tags: ['replaceStudentPassword', 'user'],
message: `Usuário ${auth.sAMAccountName} (${auth.displayName}) está trocando a senha do aluno ${data.username}`
})
return replacePassword(data.username, data.newPassword)
},
async createResetToken(parent, { data }, { auth }) {
return ResetToken.createToken(data.username, auth.sAMAccountName)
},
async useResetToken(parent, { data }) {
return ResetToken.useToken(data.token, data.newPassword)
},
async deleteExpiredTokens() {
return `Tokens deletados ${await ResetToken.deleteExpiredTokens()}`
},
async importUsers() {
User.importAllUsers()
return 'A importação está sendo feita. Isso pode demorar alguns minutos.'
},
async updateWifiDevices() {
return updateDevicesInfo()
},
async updateUserIdMappings() {
updateUserIdMappings()
return 'A atualização está em andamento. Acompanhe os logs do servidor para mais informações.'
},
async addPAHost(
parent,
{ data: { cidr, user, password, description, note } },
{ auth }
) {
const host = await addHost({
cidr,
user,
password,
description,
note,
owner: auth
})
if (host)
logSuccess({
message: `Usuário ${auth.sAMAccountName} (${auth.displayName}) adicionou um novo host Palo Alto (${host.cidr}).`,
tags: ['paloalto']
})
return host
},
async delPAHost(parent, { id }, { auth }) {
const host = await prisma.pAHost.findUnique({ where: { id } })
if (host.ownerId != auth.id)
throw new Error('Você não pode apagar o host de outro usuário')
return prisma.pAHost.delete({ where: { id } })
},
async updateAccessPoints() {
try {
await updateAccessPoints()
return 'Atualização concluída'
} catch (e) {
logError({
tags: ['accessPoints'],
message: `Erro tentando atualizar os pontos de acesso: ${e.message}`,
data: { error: e }
})
throw e
}
},
async updateAccessPoint(
parent,
{ data: { id, name, local, notes } },
context,
info
) {
const accessPoint = await prisma.accessPoint.update({
where: { id: parseInt(id) },
data: { name, local, notes }
})
const accessPoints = await prisma.accessPoint.findMany({
include: { wifiDevices: true }
})
pubsub.publish(ACCESS_POINTS_UPDATED, {
accessPointsUpdated: accessPoints
})
return accessPoint
}
} }
export { Mutation } export { Mutation }

View File

@ -0,0 +1,5 @@
import { User } from '../../classes/User'
export async function login(parent, { data }) {
return User.login(data.username, data.password)
}

View File

@ -0,0 +1,11 @@
import { logInfo } from '../../lib/logger'
import { replacePassword as replaceADPassword } from '../../lib/activeDirectory/passwordUtils'
export async function replacePassword(parent, { data }, { auth }) {
logInfo({
tags: ['replacePassword', 'user'],
message: `Usuário ${auth.sAMAccountName} (${auth.displayName}) está trocando a senha do usuário ${data.username}`
})
return replaceADPassword(data.username, data.newPassword)
}

View File

@ -0,0 +1,27 @@
import { User } from '../../classes/User'
import { replacePassword } from '../../lib/activeDirectory/passwordUtils'
import { logInfo } from '../../lib/logger'
export async function replaceStudentPassword(parent, { data }, { auth }) {
const user = await new User(data.username).init()
const isStudent = !!user.groups.find(
group => group.name == (process.env.STUDENT_GROUP || 'Estudantes')
)
const isServant = !!user.groups.find(
group => group.name == (process.env.SERVANT_GROUP || 'G_SERVIDORES')
)
if (isServant) throw new Error(`Usuário ${data.username} é um servidor`)
if (!isStudent)
throw new Error(`Usuário ${data.username} não é um estudante`)
logInfo({
tags: ['replaceStudentPassword', 'user'],
message: `Usuário ${auth.sAMAccountName} (${auth.displayName}) está trocando a senha do aluno ${data.username}`
})
return replacePassword(data.username, data.newPassword)
}

View File

@ -0,0 +1,25 @@
import prisma from '../../prisma'
import { ACCESS_POINTS_UPDATED, pubsub } from '../../pubsub'
export async function updateAccessPoint(
parent,
{ data: { id, name, local, notes } },
context,
info
) {
const accessPoint = await prisma.accessPoint.update({
where: { id: parseInt(id) },
data: { name, local, notes }
})
const accessPoints = await prisma.accessPoint.findMany({
include: { wifiDevices: true }
})
pubsub.publish(ACCESS_POINTS_UPDATED, {
accessPointsUpdated: accessPoints
})
return accessPoint
}

View File

@ -0,0 +1,3 @@
export async function updatePassword(parent, { data }, { auth }) {
return auth.updatePassword(data.oldPassword, data.newPassword)
}

View File

@ -0,0 +1,5 @@
import { ResetToken } from '../../classes/ResetToken'
export async function useResetToken(parent, { data }) {
return ResetToken.useToken(data.token, data.newPassword)
}

View File

@ -89,21 +89,12 @@ const typeDefs = gql`
"Import all users from Active Directory" "Import all users from Active Directory"
importUsers: String! @auth(roles: ["superAdmin"]) importUsers: String! @auth(roles: ["superAdmin"])
"Force update devices connected to Wi-Fi"
updateWifiDevices: String! @auth(roles: ["superAdmin"])
"Force update user-id mapping on firewall"
updateUserIdMappings: String! @auth(roles: ["superAdmin"])
"Add a PA host" "Add a PA host"
addPAHost(data: AddPAHostInput!): PAHost! @auth(roles: ["superAdmin"]) addPAHost(data: AddPAHostInput!): PAHost! @auth(roles: ["superAdmin"])
"Remove a PA host" "Remove a PA host"
delPAHost(id: Int!): PAHost! @auth(roles: ["superAdmin"]) delPAHost(id: Int!): PAHost! @auth(roles: ["superAdmin"])
"Force Update Access Points"
updateAccessPoints: String! @auth(roles: ["superAdmin"])
"Update an Access Point" "Update an Access Point"
updateAccessPoint(data: UpdateAccessPointInput): AccessPoint! updateAccessPoint(data: UpdateAccessPointInput): AccessPoint!
@auth(roles: ["superAdmin"]) @auth(roles: ["superAdmin"])

4
web/package-lock.json generated
View File

@ -1,12 +1,12 @@
{ {
"name": "ifms-pti", "name": "ifms-pti",
"version": "2.12.2", "version": "2.12.3",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "ifms-pti", "name": "ifms-pti",
"version": "2.12.2", "version": "2.12.3",
"dependencies": { "dependencies": {
"@mdi/font": "^6.6.96", "@mdi/font": "^6.6.96",
"apollo-link-ws": "^1.0.20", "apollo-link-ws": "^1.0.20",

View File

@ -1,6 +1,6 @@
{ {
"name": "ifms-pti", "name": "ifms-pti",
"version": "2.12.2", "version": "2.12.3",
"private": true, "private": true,
"scripts": { "scripts": {
"serve": "vue-cli-service serve", "serve": "vue-cli-service serve",