From d7d9748339ee3a55af09285eb8e0f0b9eb359169 Mon Sep 17 00:00:00 2001 From: Douglas Barone Date: Mon, 22 May 2023 09:37:59 -0400 Subject: [PATCH] Use sessionId cookie --- server/Dockerfile | 2 ++ server/src/lib/ciscoController.js | 30 ++++++++++++++++++++---------- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/server/Dockerfile b/server/Dockerfile index 4ae8bfe..a217b54 100644 --- a/server/Dockerfile +++ b/server/Dockerfile @@ -18,4 +18,6 @@ RUN npm run prisma:generate RUN npm run build +ENV NODE_TLS_REJECT_UNAUTHORIZED="0" + CMD npm run prisma:deploy && npm start \ No newline at end of file diff --git a/server/src/lib/ciscoController.js b/server/src/lib/ciscoController.js index 5a26424..e2bfdde 100644 --- a/server/src/lib/ciscoController.js +++ b/server/src/lib/ciscoController.js @@ -6,16 +6,17 @@ import { logError } from './logger' const TIMEOUT_IN_MS = 120000 const REQUEST_TIMEOUT_IN_MS = 20000 -const getDevicesUri = (skip, page, take) => - `https://${process.env.CISCO_HOST}/data/client-table.html?columns=524287&take=${take}&skip=${skip}&page=${page}&pageSize=50&sort[0][field]=ST&sort[0][dir]=desc` +const getDevicesUri = (skip = 0, page = 1, take = 50) => + `data/client-table.html?columns=524287&take=${take}&skip=${skip}&page=${page}&pageSize=50&sort[0][field]=ST&sort[0][dir]=desc` const httpsAgent = new https.Agent({ - rejectUnauthorized: false, - ciphers: 'AES256-SHA' // That's necessary to connect to a TLS 1.0 server. Run node with --tls-min-v1.0 + rejectUnauthorized: false }) const ciscoAxios = create({ + withCredentials: true, httpsAgent: httpsAgent, + baseURL: `https://${process.env.CISCO_HOST}/`, timeout: REQUEST_TIMEOUT_IN_MS, auth: { username: process.env.CISCO_USER, @@ -43,12 +44,21 @@ function getDevices() { const responsesPromises = [] try { - const firstResponse = await ciscoAxios.get( - getDevicesUri(skip, page, take), - { - cancelToken: source.token - } - ) + await ciscoAxios.get(getDevicesUri()) + } catch (e) { + if (e.response?.status === 401) { + const newSessionId = e.response.headers['set-cookie'][0] + .split(';')[0] + .split('=')[1] + + ciscoAxios.defaults.headers.Cookie = `sessionId=${newSessionId}` + } + } + + try { + const firstResponse = await ciscoAxios.get(getDevicesUri(), { + cancelToken: source.token + }) const { total, data: page1devices } = firstResponse.data