From 6dc7639b537dc58668242506c166d9608841ef96 Mon Sep 17 00:00:00 2001 From: Spytex Date: Wed, 19 Jul 2023 02:09:06 +0300 Subject: [PATCH] Updated Wagon API and QR code. --- package-lock.json | 65 ++++++++++++++------------- package.json | 5 ++- src/components/ui/wagon/WagonItem.tsx | 2 +- src/pages/api/wagons.ts | 20 +++++++-- 4 files changed, 55 insertions(+), 37 deletions(-) diff --git a/package-lock.json b/package-lock.json index 43c4fc2..d88debf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,13 +22,14 @@ "formidable": "^3.5.0", "framer-motion": "^10.12.18", "next": "13.4.9", + "qrcode.react": "^3.1.0", "react": "18.2.0", "react-barcode": "^1.4.6", "react-dom": "18.2.0", "react-icons": "^4.10.1", - "react-qr-code": "^2.0.11", "react-query": "^3.39.3", - "typescript": "5.1.6" + "typescript": "5.1.6", + "uuid-by-string": "^4.0.0" } }, "node_modules/@babel/code-frame": { @@ -1328,6 +1329,14 @@ "node": ">= 0.12" } }, + "node_modules/@cypress/request/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/@cypress/xvfb": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", @@ -3123,6 +3132,16 @@ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" }, + "node_modules/js-md5": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/js-md5/-/js-md5-0.7.3.tgz", + "integrity": "sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ==" + }, + "node_modules/js-sha1": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/js-sha1/-/js-sha1-0.6.0.tgz", + "integrity": "sha512-01gwBFreYydzmU9BmZxpVk6svJJHrVxEN3IOiGl6VO93bVKYETJ0sIth6DASI6mIFdt7NmfX9UiByRzsYHGU9w==" + }, "node_modules/js-sha3": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", @@ -3838,10 +3857,13 @@ "node": ">=6" } }, - "node_modules/qr.js": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/qr.js/-/qr.js-0.0.0.tgz", - "integrity": "sha512-c4iYnWb+k2E+vYpRimHqSu575b1/wKl4XFeJGpFmrJQz5I88v9aY2czh7s0w36srfCM1sXgC/xpoJz5dJfq+OQ==" + "node_modules/qrcode.react": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/qrcode.react/-/qrcode.react-3.1.0.tgz", + "integrity": "sha512-oyF+Urr3oAMUG/OiOuONL3HXM+53wvuH3mtIWQrYmsXoAq0DkvZp2RYUWFSMFtbdOpuS++9v+WAkzNVkMlNW6Q==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } }, "node_modules/qs": { "version": "6.10.4", @@ -3943,24 +3965,6 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, - "node_modules/react-qr-code": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/react-qr-code/-/react-qr-code-2.0.11.tgz", - "integrity": "sha512-P7mvVM5vk9NjGdHMt4Z0KWeeJYwRAtonHTghZT2r+AASinLUUKQ9wfsGH2lPKsT++gps7hXmaiMGRvwTDEL9OA==", - "dependencies": { - "prop-types": "^15.8.1", - "qr.js": "0.0.0" - }, - "peerDependencies": { - "react": "^16.x || ^17.x || ^18.x", - "react-native-svg": "*" - }, - "peerDependenciesMeta": { - "react-native-svg": { - "optional": true - } - } - }, "node_modules/react-query": { "version": "3.39.3", "resolved": "https://registry.npmjs.org/react-query/-/react-query-3.39.3.tgz", @@ -4550,12 +4554,13 @@ } } }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" + "node_modules/uuid-by-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/uuid-by-string/-/uuid-by-string-4.0.0.tgz", + "integrity": "sha512-88ZSfcSkN04juiLqSsuyteqlSrXNFdsEPzSv3urnElDXNsZUXQN0smeTnh99x2DE15SCUQNgqKBfro54CuzHNQ==", + "dependencies": { + "js-md5": "^0.7.3", + "js-sha1": "^0.6.0" } }, "node_modules/verror": { diff --git a/package.json b/package.json index a541ec2..a1b5246 100644 --- a/package.json +++ b/package.json @@ -23,12 +23,13 @@ "formidable": "^3.5.0", "framer-motion": "^10.12.18", "next": "13.4.9", + "qrcode.react": "^3.1.0", "react": "18.2.0", "react-barcode": "^1.4.6", "react-dom": "18.2.0", "react-icons": "^4.10.1", - "react-qr-code": "^2.0.11", "react-query": "^3.39.3", - "typescript": "5.1.6" + "typescript": "5.1.6", + "uuid-by-string": "^4.0.0" } } diff --git a/src/components/ui/wagon/WagonItem.tsx b/src/components/ui/wagon/WagonItem.tsx index ab1623e..457fdf2 100644 --- a/src/components/ui/wagon/WagonItem.tsx +++ b/src/components/ui/wagon/WagonItem.tsx @@ -2,7 +2,7 @@ import { FC, useRef, useState } from "react"; import { IWagonDataSingle } from "@/interfaces/wagon.interface"; import {Box, Button, Center, Flex, Link, Text, useToast, VStack} from "@chakra-ui/react"; import { PhotoService } from "@/service/photo.service"; -import QRCode from "react-qr-code"; +import QRCode from "qrcode.react"; import Barcode from "react-barcode"; export const WagonItem: FC = ({ Vagons }) => { diff --git a/src/pages/api/wagons.ts b/src/pages/api/wagons.ts index 4b80a10..b57b03f 100644 --- a/src/pages/api/wagons.ts +++ b/src/pages/api/wagons.ts @@ -1,18 +1,27 @@ import { NextApiRequest, NextApiResponse } from 'next'; -import {WagonService} from "@/service/wagon.service"; +import { WagonService } from '@/service/wagon.service'; +import getUuidByString from 'uuid-by-string'; +const wordID = 'WagonInfo'; export default async function handler(req: NextApiRequest, res: NextApiResponse) { try { const { query } = req; - const VagonNumber = query.VagonNumber as string; + const apiKey = query.apiKey as string; - if (!VagonNumber) { + // Validate the apiKey (UUID v5) + if (!apiKey || !validateUuid(apiKey)) { + return res.status(400).json({ error: 'Invalid API key' }); + } + + const wagonNumber = query.VagonNumber as string; + + if (!wagonNumber) { const wagons = await WagonService.getAll(); return res.status(200).json(wagons); } - const wagon = await WagonService.getOne(VagonNumber); + const wagon = await WagonService.getOne(wagonNumber); if (!wagon) { return res.status(404).json({ error: 'Wagon not found' }); @@ -25,3 +34,6 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) } } +function validateUuid(uuid: string): boolean { + return getUuidByString(wordID) === uuid; +}