From 46979c6b9e121b775de9b0e512c35b1166504727 Mon Sep 17 00:00:00 2001 From: nkhangg Date: Thu, 27 Mar 2025 15:43:21 +0700 Subject: [PATCH] update authentication --- auto-bid-admin/src/apis/auth.ts | 14 ++ auto-bid-admin/src/apis/generate-key.ts | 67 +++++++ auto-bid-admin/src/components/user-menu.tsx | 8 +- auto-bid-admin/src/layouts/private-layout.tsx | 2 +- auto-bid-admin/src/pages/dashboard.tsx | 21 ++- auto-bid-admin/src/pages/generate-keys.tsx | 168 ++++++++++++++++++ auto-bid-admin/src/system/links.ts | 17 +- auto-bid-admin/src/system/type/index.ts | 5 + auto-bid-server/package-lock.json | 39 ++-- auto-bid-server/package.json | 5 +- auto-bid-server/src/app.module.ts | 12 +- auto-bid-server/src/main.ts | 2 +- .../src/modules/admins/admins.module.ts | 15 +- .../controllers/generate-keys.controller.ts | 47 +++++ .../modules/admins/entities/admin.entity.ts | 15 +- .../admins/entities/generate-key.entity.ts | 18 ++ .../modules/admins/services/admins.service.ts | 1 + .../admins/services/generate-key.service.ts | 106 +++++++++++ .../src/modules/auth/auth.module.ts | 2 +- .../src/modules/auth/auth.service.ts | 2 + .../auth/{ => controllers}/auth.controller.ts | 15 +- .../modules/auth/dto/generate-token.dto.ts | 6 + .../client-authentication.middleware.ts | 44 +++++ .../client-get-way.middleware copy.ts | 25 +++ .../auth/middlewares/get-way.middleware.ts | 50 ++++++ .../src/modules/bids/bids.module.ts | 6 + .../modules/bids/getways/admin-bid-getway.ts | 57 ++++++ .../src/modules/bids/getways/bid-getway.ts | 20 +-- .../src/system/routes/exclude-route.ts | 8 + auto-bid-tool/.env.dev | 3 +- auto-bid-tool/index.js | 13 +- auto-bid-tool/models/bid.js | 3 +- .../models/grays.com/grays-product-bid.js | 7 + auto-bid-tool/system/axios.js | 3 + 34 files changed, 771 insertions(+), 55 deletions(-) create mode 100644 auto-bid-admin/src/apis/generate-key.ts create mode 100644 auto-bid-admin/src/pages/generate-keys.tsx create mode 100644 auto-bid-server/src/modules/admins/controllers/generate-keys.controller.ts create mode 100644 auto-bid-server/src/modules/admins/entities/generate-key.entity.ts create mode 100644 auto-bid-server/src/modules/admins/services/generate-key.service.ts rename auto-bid-server/src/modules/auth/{ => controllers}/auth.controller.ts (69%) create mode 100644 auto-bid-server/src/modules/auth/dto/generate-token.dto.ts create mode 100644 auto-bid-server/src/modules/auth/middlewares/client-authentication.middleware.ts create mode 100644 auto-bid-server/src/modules/auth/middlewares/client-get-way.middleware copy.ts create mode 100644 auto-bid-server/src/modules/auth/middlewares/get-way.middleware.ts create mode 100644 auto-bid-server/src/modules/bids/getways/admin-bid-getway.ts diff --git a/auto-bid-admin/src/apis/auth.ts b/auto-bid-admin/src/apis/auth.ts index 028171e..cff5f66 100644 --- a/auto-bid-admin/src/apis/auth.ts +++ b/auto-bid-admin/src/apis/auth.ts @@ -19,6 +19,20 @@ export const login = async (credentials: { username: string; password: string }) } }; +export const checkStatus = async () => { + try { + const { data } = await axios({ + url: 'auth/check-status', + withCredentials: true, + method: 'POST', + }); + + return data as IResponse; + } catch (error) { + handleError(error); + } +}; + export const logout = async () => { try { const { data } = await axios({ diff --git a/auto-bid-admin/src/apis/generate-key.ts b/auto-bid-admin/src/apis/generate-key.ts new file mode 100644 index 0000000..9a1ba73 --- /dev/null +++ b/auto-bid-admin/src/apis/generate-key.ts @@ -0,0 +1,67 @@ +import { generateNestParams, handleError, handleSuccess } from '.'; +import axios from '../lib/axios'; +import { IKey } from '../system/type'; + +export const getKeys = async (params: Record) => { + return await axios({ + url: 'keys', + params: generateNestParams(params), + withCredentials: true, + method: 'GET', + }); +}; + +export const createKey = async () => { + try { + const { data } = await axios({ + url: 'keys', + withCredentials: true, + method: 'POST', + }); + + handleSuccess(data); + + return data; + } catch (error) { + handleError(error); + } +}; + +export const deleteKey = async (key: IKey) => { + try { + const { data } = await axios({ + url: 'keys/' + key.id, + withCredentials: true, + method: 'DELETE', + }); + + handleSuccess(data); + + return data; + } catch (error) { + handleError(error); + } +}; + +export const deletesKey = async (keys: IKey[]) => { + const ids = keys.reduce((prev, cur) => { + prev.push(cur.id); + return prev; + }, [] as number[]); + try { + const { data } = await axios({ + url: 'keys/deletes', + withCredentials: true, + method: 'POST', + data: { + ids, + }, + }); + + handleSuccess(data); + + return data; + } catch (error) { + handleError(error); + } +}; diff --git a/auto-bid-admin/src/components/user-menu.tsx b/auto-bid-admin/src/components/user-menu.tsx index 8ca1640..b986611 100644 --- a/auto-bid-admin/src/components/user-menu.tsx +++ b/auto-bid-admin/src/components/user-menu.tsx @@ -1,13 +1,14 @@ import { Avatar, Button, LoadingOverlay, Menu, Modal, PasswordInput } from '@mantine/core'; import { useForm, zodResolver } from '@mantine/form'; import { useDisclosure } from '@mantine/hooks'; -import { IconLogout, IconSettings, IconUser } from '@tabler/icons-react'; +import { IconKey, IconLogout, IconSettings, IconUser } from '@tabler/icons-react'; +import { useState } from 'react'; import { useNavigate } from 'react-router'; +import { Link } from 'react-router-dom'; import { z } from 'zod'; import { changePassword, logout } from '../apis/auth'; import { useConfirmStore } from '../lib/zustand/use-confirm'; import Links from '../system/links'; -import { useState } from 'react'; const schema = z .object({ @@ -92,6 +93,9 @@ export default function UserMenu() { }> Change password + }> + Keys + diff --git a/auto-bid-admin/src/layouts/private-layout.tsx b/auto-bid-admin/src/layouts/private-layout.tsx index 4ba4cdc..de69815 100644 --- a/auto-bid-admin/src/layouts/private-layout.tsx +++ b/auto-bid-admin/src/layouts/private-layout.tsx @@ -29,7 +29,7 @@ export default function PrivateLayout() { - {Links.MENUS.map((menu, index) => ( + {Links.MENUS.filter((i) => i.show).map((menu, index) => (