From 3f003dc7a0afafa961a59c89e914cb46c416b55a Mon Sep 17 00:00:00 2001 From: gotika Date: Thu, 3 Oct 2024 21:00:34 +0300 Subject: [PATCH 1/2] token --- package-lock.json | 134 +++++++++++++++++++++++++++++++++++++++++++ package.json | 3 + src/pages/Devices.js | 57 +++++++++++++++++- 3 files changed, 192 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6478421..6408366 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,9 @@ "@testing-library/jest-dom": "^5.17.0", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", + "axios": "^1.7.7", + "express": "^4.21.0", + "jsonwebtoken": "^9.0.2", "leaflet": "^1.9.4", "leaflet-defaulticon-compatibility": "^0.1.2", "qrcode.react": "^4.0.1", @@ -5862,6 +5865,31 @@ "node": ">=4" } }, + "node_modules/axios": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axios/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/axobject-query": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", @@ -6384,6 +6412,12 @@ "node-int64": "^0.4.0" } }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -7792,6 +7826,15 @@ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "license": "MIT" }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -13417,6 +13460,28 @@ "node": ">=0.10.0" } }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "license": "MIT", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, "node_modules/jsx-ast-utils": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", @@ -13432,6 +13497,27 @@ "node": ">=4.0" } }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "license": "MIT", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -13592,6 +13678,42 @@ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "license": "MIT" }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "license": "MIT" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "license": "MIT" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "license": "MIT" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "license": "MIT" + }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -13604,6 +13726,12 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "license": "MIT" }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "license": "MIT" + }, "node_modules/lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", @@ -16015,6 +16143,12 @@ "node": ">= 0.10" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", diff --git a/package.json b/package.json index fb34334..3d5cf24 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,9 @@ "@testing-library/jest-dom": "^5.17.0", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", + "axios": "^1.7.7", + "express": "^4.21.0", + "jsonwebtoken": "^9.0.2", "leaflet": "^1.9.4", "leaflet-defaulticon-compatibility": "^0.1.2", "qrcode.react": "^4.0.1", diff --git a/src/pages/Devices.js b/src/pages/Devices.js index adb5992..28e001f 100644 --- a/src/pages/Devices.js +++ b/src/pages/Devices.js @@ -1,5 +1,6 @@ -import React, { useState } from 'react'; +import React, { useState, useEffect } from 'react'; import { QRCodeCanvas } from "qrcode.react"; +import axios from 'axios'; import '../Devices.css'; const Devices = () => { @@ -7,10 +8,26 @@ const Devices = () => { const [selectedDevice, setSelectedDevice] = useState(null); const [deviceName, setDeviceName] = useState(''); const [deviceStatus, setDeviceStatus] = useState(''); + const [isRegenerating, setIsRegenerating] = useState(false); // отображение генерации токена + const [showFullToken, setShowFullToken] = useState({}); // управление отображением токена + + useEffect(() => { + // получение устройств + const fetchDevices = async () => { + try { + const response = await axios.get('/api/devices'); // потом нужно будет заменить на нашу апишку + setDevices(response.data.devices); + } catch (error) { + console.error('Ошибка при загрузке устройств:', error); + } + }; + + fetchDevices(); + }, []); const addDevice = () => { if (deviceName) { - const newDevice = { name: deviceName, status: deviceStatus || 'Неактивен', id: Date.now() }; + const newDevice = { name: deviceName, status: deviceStatus || 'Неактивен', id: Date.now(), access_key: '' }; setDevices([...devices, newDevice]); setDeviceName(''); setDeviceStatus(''); @@ -38,6 +55,25 @@ const Devices = () => { } }; + // генерация токена + const handleShowFullToken = (deviceId) => { + setShowFullToken(prevState => ({ ...prevState, [deviceId]: !prevState[deviceId] })); + }; + + // пересоздание токена + const handleRegenerateToken = async (deviceId) => { + setIsRegenerating(true); + try { + const response = await axios.post(`/api/devices/${deviceId}/regenerate-token`); // тоже заменить на апишку + setDevices(devices.map(device => + device.id === deviceId ? { ...device, access_key: response.data.access_key } : device + )); + } catch (error) { + console.error('Ошибка при пересоздании токена:', error); + } + setIsRegenerating(false); + }; + const generateQR = (device) => { return ( @@ -65,6 +101,7 @@ const Devices = () => { Название Статус QR Код + Токен устройства Действия @@ -74,8 +111,24 @@ const Devices = () => { {device.name} {device.status} {generateQR(device)} + + {showFullToken[device.id] ? ( + device.access_key + ) : ( + {device.access_key.slice(0, 6)}... + )} + + + ))} From daffc9b76ba726c55af1487f3a4af084e1aa1609 Mon Sep 17 00:00:00 2001 From: gotika Date: Thu, 3 Oct 2024 23:08:18 +0300 Subject: [PATCH 2/2] =?UTF-8?q?=D0=B2=D1=80=D0=B5=D0=BC=D0=B5=D0=BD=D0=BD?= =?UTF-8?q?=D0=B0=D1=8F=20=D0=BB=D0=BE=D0=B3=D0=B8=D0=BA=D0=B0=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D0=B0=D0=B2=D0=B0=D1=82=D0=B0=D1=80=D0=BA=D0=B8?= =?UTF-8?q?,=20=D0=BF=D0=BE=D0=B7=D0=B6=D0=B5=20=D0=94=D0=9E=D0=94=D0=95?= =?UTF-8?q?=D0=9B=D0=90=D0=A2=D0=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 10 ++ package.json | 1 + public/index.html | 2 +- public/logo192.png | Bin 5347 -> 15020 bytes public/logo512.png | Bin 9664 -> 15020 bytes src/UserAccount.scss | 201 +++++++++++++++++++++++++-------------- src/pages/UserAccount.js | 31 ++++++ 7 files changed, 170 insertions(+), 75 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6408366..608ceaf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,6 +19,7 @@ "qrcode.react": "^4.0.1", "react": "^18.3.1", "react-dom": "^18.3.1", + "react-image-crop": "^11.0.7", "react-leaflet": "^4.2.1", "react-router-dom": "^6.26.2", "react-scripts": "5.0.1", @@ -16529,6 +16530,15 @@ "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==", "license": "MIT" }, + "node_modules/react-image-crop": { + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/react-image-crop/-/react-image-crop-11.0.7.tgz", + "integrity": "sha512-ZciKWHDYzmm366JDL18CbrVyjnjH0ojufGDmScfS4ZUqLHg4nm6ATY+K62C75W4ZRNt4Ii+tX0bSjNk9LQ2xzQ==", + "license": "ISC", + "peerDependencies": { + "react": ">=16.13.1" + } + }, "node_modules/react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", diff --git a/package.json b/package.json index 3d5cf24..29415a1 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "qrcode.react": "^4.0.1", "react": "^18.3.1", "react-dom": "^18.3.1", + "react-image-crop": "^11.0.7", "react-leaflet": "^4.2.1", "react-router-dom": "^6.26.2", "react-scripts": "5.0.1", diff --git a/public/index.html b/public/index.html index 23d1da4..bd9c935 100644 --- a/public/index.html +++ b/public/index.html @@ -28,7 +28,7 @@ work correctly both with client-side routing and a non-root public URL. Learn how to configure a non-root public URL by running `npm run build`. --> - React App + YANDEX ZAKLADKI diff --git a/public/logo192.png b/public/logo192.png index fc44b0a3796c0e0a64c3d858ca038bd4570465d9..a7eba36a47992c10158d6151b8b39b17174c903c 100644 GIT binary patch literal 15020 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 YjeWFx|1SLBuAc&OQp%Dw;-(@02kb?P4FCWD literal 5347 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 X@eDJUQo;Ye2mwlRsP` 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 YjeWFx|1SLBuAc&OQp%Dw;-(@02kb?P4FCWD literal 9664 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 b{|{}U^kRn2wo}j7|0ATu<;8xA7zX}7|B6mN diff --git a/src/UserAccount.scss b/src/UserAccount.scss index eb5cf87..4a14435 100644 --- a/src/UserAccount.scss +++ b/src/UserAccount.scss @@ -1,87 +1,140 @@ .user-account { - padding: 20px; - background-color: #f4f4f4; - border-radius: 10px; - max-width: 400px; - margin: 0 auto; - - h1 { - text-align: center; + padding: 40px; + background-color: #ffffff; + border-radius: 15px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); + max-width: 600px; + margin: 60px auto; + font-family: 'Arial', sans-serif; + + h1 { + text-align: center; + font-size: 28px; + color: #333; + margin-bottom: 30px; + font-weight: 500; + } + + .user-info, .edit-form { + display: flex; + flex-direction: column; + gap: 20px; + + .avatar-container { + display: flex; + justify-content: flex-start; margin-bottom: 20px; + + .avatar { + width: 100px; + height: 100px; + border-radius: 50%; + object-fit: cover; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); + } + + .avatar-placeholder { + width: 100px; + height: 100px; + background-color: #3498db; + color: white; + font-size: 36px; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); + } } - - .user-info, .edit-form { + + p, input { + font-size: 18px; + color: #333; + margin-bottom: 15px; + padding: 10px 15px; + border: 1px solid #ddd; + border-radius: 8px; + background-color: #f9f9f9; + outline: none; + transition: border-color 0.3s ease; + + &:focus { + border-color: #3498db; + } + } + + label { display: flex; flex-direction: column; - gap: 10px; - - label { - display: flex; - justify-content: space-between; + font-size: 16px; + color: #666; + margin-bottom: 15px; + + input[type="text"], input[type="email"], input[type="tel"], input[type="file"] { + padding: 10px; font-size: 16px; + border-radius: 8px; + background-color: #f9f9f9; + border: 1px solid #ddd; + margin-top: 10px; + transition: border-color 0.3s ease; + + &:focus { + border-color: #3498db; + } } - - input { - padding: 8px; - font-size: 14px; - border: 1px solid #ccc; - border-radius: 5px; - } - - p { - font-size: 18px; - margin: 10px 0; - } - - .buttons { - display: flex; - justify-content: space-between; - - button { - padding: 10px 20px; - font-size: 14px; - cursor: pointer; - border: none; - border-radius: 5px; - background-color: #3498db; - color: white; - transition: background-color 0.3s ease; - + } + + .buttons { + display: flex; + justify-content: space-between; + + button { + padding: 14px 30px; + font-size: 16px; + cursor: pointer; + border: none; + border-radius: 8px; + background-color: #3498db; + color: white; + transition: background-color 0.3s ease, transform 0.2s ease; + + &:hover { + background-color: #2980b9; + transform: scale(1.03); + } + + &:last-child { + background-color: #e74c3c; + &:hover { - background-color: #2980b9; - } - - &:last-child { - background-color: #e74c3c; - - &:hover { - background-color: #c0392b; - } + background-color: #c0392b; } } } } - - .edit-button { - margin-top: 20px; - padding: 10px 25px; - font-size: 16px; - font-weight: bold; - cursor: pointer; - background-color: #2ecc71; /* Зелёный цвет */ - color: white; - border: none; - border-radius: 5px; - transition: background-color 0.3s ease, transform 0.2s ease; - - &:hover { - background-color: #27ae60; - transform: scale(1.05); /* Небольшой зум при наведении */ - } - - &:active { - background-color: #1e8449; - transform: scale(0.98); /* Легкий уменьшенный эффект при нажатии */ - } + } + + .edit-button { + margin-top: 30px; + padding: 14px 35px; + font-size: 18px; + font-weight: 600; + cursor: pointer; + background-color: #2ecc71; + color: white; + border: none; + border-radius: 8px; + transition: background-color 0.3s ease, transform 0.3s ease; + + &:hover { + background-color: #27ae60; + transform: scale(1.05); } - } \ No newline at end of file + + &:active { + background-color: #1e8449; + transform: scale(0.98); + } + } +} \ No newline at end of file diff --git a/src/pages/UserAccount.js b/src/pages/UserAccount.js index 0440cc8..24efdb6 100644 --- a/src/pages/UserAccount.js +++ b/src/pages/UserAccount.js @@ -6,6 +6,7 @@ const UserAccount = () => { username: 'Мамут Рахал', email: 'yatupoidayn@mail.ru', phone: '+666', + avatar: '', // Новое поле для аватара }); const [isEditing, setIsEditing] = useState(false); @@ -19,6 +20,21 @@ const UserAccount = () => { })); }; + // Функция для загрузки аватара + const handleAvatarChange = (e) => { + const file = e.target.files[0]; + if (file) { + const reader = new FileReader(); + reader.onloadend = () => { + setFormData((prevData) => ({ + ...prevData, + avatar: reader.result, + })); + }; + reader.readAsDataURL(file); + } + }; + const handleSave = () => { setUserData(formData); setIsEditing(false); @@ -62,6 +78,14 @@ const UserAccount = () => { onChange={handleChange} /> +
@@ -69,6 +93,13 @@ const UserAccount = () => {
) : (
+
+ {userData.avatar ? ( + User Avatar + ) : ( +
A
+ )} +

Имя: {userData.username}

Email: {userData.email}

Телефон: {userData.phone}