diff --git a/Dockerfile b/Dockerfile index ab4f293f..4443e3f6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,12 +8,13 @@ RUN apk add --update --no-cache \ # Create app directory WORKDIR /app -ADD . /app/ COPY package*.json ./ RUN npm install +ADD . /app/ + COPY . . RUN npm run generate diff --git a/assets/js/regex.worker.js b/assets/js/regex.worker.js new file mode 100644 index 00000000..c6f69036 --- /dev/null +++ b/assets/js/regex.worker.js @@ -0,0 +1,31 @@ +function generateREForProtocol(protocol) { + return [ + new RegExp( + `${protocol}(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$` + ), + new RegExp( + `${protocol}(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]).)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]*[A-Za-z0-9/])$` + ), + ] +} + +const ws = generateREForProtocol("^(wss?:\\/\\/)?") +const sse = generateREForProtocol("^(https?:\\/\\/)?") +const socketio = generateREForProtocol("^((wss?:\\/\\/)|(https?:\\/\\/))?") +const regex = { ws, sse, socketio } + +// type = ws/sse/socketio +async function validator(type, url) { + console.time("validator " + url) + const [res1, res2] = await Promise.all([regex[type][0].test(url), regex[type][1].test(url)]) + console.timeEnd("validator " + url) + return res1 || res2 +} + +onmessage = async function (event) { + var { type, url } = event.data + + const result = await validator(type, url) + + postMessage({ type, url, result }) +} diff --git a/components/realtime/mqtt.vue b/components/realtime/mqtt.vue index 6303cd1e..dfd14ae6 100644 --- a/components/realtime/mqtt.vue +++ b/components/realtime/mqtt.vue @@ -70,12 +70,13 @@