Use sessionId cookie

This commit is contained in:
Douglas Barone 2023-05-22 09:37:59 -04:00
parent eac76d417f
commit d7d9748339
2 changed files with 22 additions and 10 deletions

View File

@ -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

View File

@ -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