diff --git a/.vscode/settings.json b/.vscode/settings.json index 970fb6b8c..ccf5efa8a 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -9,7 +9,7 @@ }, "eslint.nodePath": "interface/.yarn/sdks", "eslint.workingDirectories": ["interface"], - "prettier.prettierPath": "interface/.yarn/sdks/prettier/index.js", + "prettier.prettierPath": "", "typescript.tsdk": "interface/.yarn/sdks/typescript/lib", "typescript.enablePromptUseWorkspaceTsdk": true, "files.associations": { diff --git a/interface/package.json b/interface/package.json index 3834df14e..3c5826ff2 100644 --- a/interface/package.json +++ b/interface/package.json @@ -63,7 +63,7 @@ "eslint-plugin-prettier": "alpha", "eslint-plugin-react": "^7.32.2", "eslint-plugin-react-hooks": "^4.6.0", - "nodemon": "^2.0.22", + "nodemon": "^3.0.1", "npm-run-all": "^4.1.5", "prettier": "^3.0.0", "rollup-plugin-visualizer": "^5.9.2", diff --git a/interface/src/framework/system/SystemLog.tsx b/interface/src/framework/system/SystemLog.tsx index 6f400efe9..d099872c6 100644 --- a/interface/src/framework/system/SystemLog.tsx +++ b/interface/src/framework/system/SystemLog.tsx @@ -1,9 +1,8 @@ import DownloadIcon from '@mui/icons-material/GetApp'; import WarningIcon from '@mui/icons-material/Warning'; import { Box, styled, Button, Checkbox, MenuItem, Grid, TextField } from '@mui/material'; -// eslint-disable-next-line import/named import { useRequest } from 'alova'; -import { useState, useEffect } from 'react'; +import { useState, useEffect, useRef } from 'react'; import { toast } from 'react-toastify'; import type { FC } from 'react'; @@ -58,8 +57,7 @@ const SystemLog: FC = () => { }); // called on page load to reset pointer and fetch all log entries - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { send: fetchLog } = useRequest(SystemApi.fetchLog()); + useRequest(SystemApi.fetchLog()); const [logEntries, setLogEntries] = useState([]); const [lastIndex, setLastIndex] = useState(0); @@ -108,13 +106,23 @@ const SystemLog: FC = () => { await saveData(); }; + const ref = useRef(null); + + useEffect(() => { + if (logEntries.length) { + ref.current?.scrollIntoView({ + behavior: 'smooth', + block: 'end' + }); + } + }, [logEntries.length]); + useEffect(() => { const es = new EventSource(addAccessTokenParameter(LOG_EVENTSOURCE_URL)); es.onmessage = onMessage; es.onerror = () => { es.close(); toast.error('EventSource failed'); - // window.location.reload(); }; return () => { @@ -217,6 +225,7 @@ const SystemLog: FC = () => { {e.m} ))} +
); diff --git a/interface/yarn.lock b/interface/yarn.lock index 2e57c9ed4..e561bbba2 100644 --- a/interface/yarn.lock +++ b/interface/yarn.lock @@ -1554,7 +1554,7 @@ __metadata: jwt-decode: ^3.1.2 lodash-es: ^4.17.21 mime-types: ^2.1.35 - nodemon: ^2.0.22 + nodemon: ^3.0.1 npm-run-all: ^4.1.5 prettier: ^3.0.0 react: latest @@ -4374,23 +4374,23 @@ __metadata: languageName: node linkType: hard -"nodemon@npm:^2.0.22": - version: 2.0.22 - resolution: "nodemon@npm:2.0.22" +"nodemon@npm:^3.0.1": + version: 3.0.1 + resolution: "nodemon@npm:3.0.1" dependencies: chokidar: ^3.5.2 debug: ^3.2.7 ignore-by-default: ^1.0.1 minimatch: ^3.1.2 pstree.remy: ^1.1.8 - semver: ^5.7.1 - simple-update-notifier: ^1.0.7 + semver: ^7.5.3 + simple-update-notifier: ^2.0.0 supports-color: ^5.5.0 touch: ^3.1.0 undefsafe: ^2.0.5 bin: nodemon: bin/nodemon.js - checksum: 37e960b995b66e6d9e3b0e435ecc07a45200c4c566c4820a4deb6e7cc234b305e076a8ff0b4dc9c01ee690c663ae82a217d60c591dcbbcd4af1e3a7d0ad2b2c6 + checksum: 471a218227949b38926de78237004c91e226b63ee06f433cf85c2f1c1f8b6bfbef9bceaa8d27786e7cfb539eb84da357d01741884d08a3ae172bebecd0f1de5b languageName: node linkType: hard @@ -5223,7 +5223,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.5.0, semver@npm:^5.7.1": +"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.5.0": version: 5.7.1 resolution: "semver@npm:5.7.1" bin: @@ -5241,7 +5241,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.3.5, semver@npm:^7.3.7": +"semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.3": version: 7.5.4 resolution: "semver@npm:7.5.4" dependencies: @@ -5252,15 +5252,6 @@ __metadata: languageName: node linkType: hard -"semver@npm:~7.0.0": - version: 7.0.0 - resolution: "semver@npm:7.0.0" - bin: - semver: bin/semver.js - checksum: 7fd341680a967a0abfd66f3a7d36ba44e52ff5d3e799e9a6cdb01a68160b64ef09be82b4af05459effeecdd836f002c2462555d2821cd890dfdfe36a0d9f56a5 - languageName: node - linkType: hard - "set-blocking@npm:^2.0.0": version: 2.0.0 resolution: "set-blocking@npm:2.0.0" @@ -5332,12 +5323,12 @@ __metadata: languageName: node linkType: hard -"simple-update-notifier@npm:^1.0.7": - version: 1.1.0 - resolution: "simple-update-notifier@npm:1.1.0" +"simple-update-notifier@npm:^2.0.0": + version: 2.0.0 + resolution: "simple-update-notifier@npm:2.0.0" dependencies: - semver: ~7.0.0 - checksum: 3cbbbc71a5d9a2924f0e3f42fbf3cbe1854bfe142203456b00d5233bdbbdeb5091b8067cd34fb00f81dbfbc29fc30dbb6e026b3d58ea0551e3f26c0e64082092 + semver: ^7.5.3 + checksum: 2a00bd03bfbcbf8a737c47ab230d7920f8bfb92d1159d421bdd194479f6d01ebc995d13fbe13d45dace23066a78a3dc6642999b4e3b38b847e6664191575b20c languageName: node linkType: hard diff --git a/lib/framework/UploadFileService.cpp b/lib/framework/UploadFileService.cpp index 8637d45be..a15821508 100644 --- a/lib/framework/UploadFileService.cpp +++ b/lib/framework/UploadFileService.cpp @@ -43,7 +43,6 @@ void UploadFileService::handleUpload(AsyncWebServerRequest * request, const Stri } else { md5[0] = '\0'; handleError(request, 406); // Not Acceptable - unsupported file type - request->client()->abort(); return; } @@ -134,7 +133,7 @@ void UploadFileService::uploadComplete(AsyncWebServerRequest * request) { return; } - handleError(request, 406); // send the forbidden response + handleError(request, 500); } void UploadFileService::handleError(AsyncWebServerRequest * request, int code) { @@ -146,7 +145,13 @@ void UploadFileService::handleError(AsyncWebServerRequest * request, int code) { // send the error code to the client and record the error code in the temp object AsyncWebServerResponse * response = request->beginResponse(code); request->send(response); - handleEarlyDisconnect(); + + // check for invalid extension and immediately kill the connection, which will through an error + // that is caught by the web code. Unfortunately the http error code is not sent to the client on fast network connections + if (code == 406) { + request->client()->close(true); + handleEarlyDisconnect(); + } } void UploadFileService::handleEarlyDisconnect() { diff --git a/mock-api/package.json b/mock-api/package.json index c4f17293a..1bdb7584a 100644 --- a/mock-api/package.json +++ b/mock-api/package.json @@ -13,7 +13,7 @@ "compression": "^1.7.4", "express": "^4.18.2", "multer": "^1.4.5-lts.1", - "nodemon": "^2.0.22" + "nodemon": "^3.0.1" }, "packageManager": "yarn@3.4.1" } diff --git a/mock-api/server.js b/mock-api/server.js index 1b83be34b..9885dc7d0 100644 --- a/mock-api/server.js +++ b/mock-api/server.js @@ -2782,5 +2782,5 @@ rest_server.get(ES_LOG_ENDPOINT, function (req, res) { log_index = 0; } fetch_log.events.push(data); // append to buffer - }, 3000); + }, 300); }); diff --git a/mock-api/yarn.lock b/mock-api/yarn.lock index 83c353e29..0c5dc99bb 100644 --- a/mock-api/yarn.lock +++ b/mock-api/yarn.lock @@ -118,7 +118,7 @@ __metadata: compression: ^1.7.4 express: ^4.18.2 multer: ^1.4.5-lts.1 - nodemon: ^2.0.22 + nodemon: ^3.0.1 languageName: unknown linkType: soft @@ -1203,23 +1203,23 @@ __metadata: languageName: node linkType: hard -"nodemon@npm:^2.0.22": - version: 2.0.22 - resolution: "nodemon@npm:2.0.22" +"nodemon@npm:^3.0.1": + version: 3.0.1 + resolution: "nodemon@npm:3.0.1" dependencies: chokidar: ^3.5.2 debug: ^3.2.7 ignore-by-default: ^1.0.1 minimatch: ^3.1.2 pstree.remy: ^1.1.8 - semver: ^5.7.1 - simple-update-notifier: ^1.0.7 + semver: ^7.5.3 + simple-update-notifier: ^2.0.0 supports-color: ^5.5.0 touch: ^3.1.0 undefsafe: ^2.0.5 bin: nodemon: bin/nodemon.js - checksum: 9c987e139748f5b5c480c6c9080bdc97304ee7d29172b7b3da1a7db590b1323ad57b96346304e9b522b0e445c336dc393ccd3f9f45c73b20d476d2347890dcd0 + checksum: 6a5d81855760d6617049eccce10ccf02bddb482dab13ceea5280ae595ec7004eee13e7b934368e3f46c37fe4d970342a8c38c99cae7e93e4d7a3ed1c1ecb6acf languageName: node linkType: hard @@ -1483,15 +1483,6 @@ __metadata: languageName: node linkType: hard -"semver@npm:^5.7.1": - version: 5.7.1 - resolution: "semver@npm:5.7.1" - bin: - semver: ./bin/semver - checksum: 57fd0acfd0bac382ee87cd52cd0aaa5af086a7dc8d60379dfe65fea491fb2489b6016400813930ecd61fd0952dae75c115287a1b16c234b1550887117744dfaf - languageName: node - linkType: hard - "semver@npm:^7.3.5": version: 7.3.8 resolution: "semver@npm:7.3.8" @@ -1503,12 +1494,14 @@ __metadata: languageName: node linkType: hard -"semver@npm:~7.0.0": - version: 7.0.0 - resolution: "semver@npm:7.0.0" +"semver@npm:^7.5.3": + version: 7.5.4 + resolution: "semver@npm:7.5.4" + dependencies: + lru-cache: ^6.0.0 bin: semver: bin/semver.js - checksum: 272c11bf8d083274ef79fe40a81c55c184dff84dd58e3c325299d0927ba48cece1f020793d138382b85f89bab5002a35a5ba59a3a68a7eebbb597eb733838778 + checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3 languageName: node linkType: hard @@ -1577,12 +1570,12 @@ __metadata: languageName: node linkType: hard -"simple-update-notifier@npm:^1.0.7": - version: 1.1.0 - resolution: "simple-update-notifier@npm:1.1.0" +"simple-update-notifier@npm:^2.0.0": + version: 2.0.0 + resolution: "simple-update-notifier@npm:2.0.0" dependencies: - semver: ~7.0.0 - checksum: 1012e9b6c504e559a948078177b3eedbb9d7e4d15878e2bda56314d08db609ca5da485be4ac9f838759faae8057935ee0246fcdf63f1233c86bd9fecb2a5544b + semver: ^7.5.3 + checksum: 9ba00d38ce6a29682f64a46213834e4eb01634c2f52c813a9a7b8873ca49cdbb703696f3290f3b27dc067de6d9418b0b84bef22c3eb074acf352529b2d6c27fd languageName: node linkType: hard