From 300d59699febddddbbf0a12c8d69e8b22b2a913a Mon Sep 17 00:00:00 2001 From: Radek <104318242+radekm2000@users.noreply.github.com> Date: Sun, 9 Jun 2024 19:24:55 +0200 Subject: [PATCH] add production variables --- README.md | 5 + client/ecommerce/.env.production | 1 + client/ecommerce/src/api/axios.tsx | 8 +- .../src/components/DiscordSignInButton.tsx | 7 +- .../src/components/pages/MainPage.tsx | 3 + readmeImages/BinanceAccountCommand.png | Bin 0 -> 41490 bytes server/ecommerce/package-lock.json | 86 ++++++++++++++++++ server/ecommerce/package.json | 1 + server/ecommerce/src/auth/auth.controller.ts | 6 +- .../src/auth/utils/DiscordStrategy.ts | 5 +- .../ecommerce/src/binance/binance.service.ts | 16 +--- .../src/discord-bot/src/discordbot.ts | 11 +++ 12 files changed, 123 insertions(+), 26 deletions(-) create mode 100644 client/ecommerce/.env.production create mode 100644 readmeImages/BinanceAccountCommand.png diff --git a/README.md b/README.md index c62c440..cf8cbc3 100644 --- a/README.md +++ b/README.md @@ -51,10 +51,15 @@ This app is a simplified version of **Vinted**, following a similar layout. Belo - **Frontend:** - React using Vite. + + ## Integration with discord **Discord commands** +- You can check your top tokens in binance wallet, however **BINANCE_API_KEY** and **BINANCE_SECRET_KEY** is required in **ENV** file + ![BinanceTokens](/readmeImages/BinanceAccountCommand.png) + - Profile ![Profile Command](/readmeImages/Profile%20command.png) - Inventory + removing product ![Inventory command](/readmeImages/Inventory%20command.png) diff --git a/client/ecommerce/.env.production b/client/ecommerce/.env.production new file mode 100644 index 0000000..60062d6 --- /dev/null +++ b/client/ecommerce/.env.production @@ -0,0 +1 @@ +VITE_BASE_URL=https://ecommerce-123.onrender.com \ No newline at end of file diff --git a/client/ecommerce/src/api/axios.tsx b/client/ecommerce/src/api/axios.tsx index 7040276..06cf3e8 100644 --- a/client/ecommerce/src/api/axios.tsx +++ b/client/ecommerce/src/api/axios.tsx @@ -26,12 +26,8 @@ import { ResponseOAuthInterceptor } from "./response-auth.interceptor"; import { FeedbackFormData } from "../components/FeedbackDialog"; import { ResponseErrorInterceptor } from "./responseError.interceptor"; const LIMIT = 8; -const baseUrl = "http://localhost:3000"; -// if (import.meta.env.VITE_NETLIFY == "true") { -// baseUrl = "https://ecommerce-123.onrender.com"; -// } else { -// baseUrl = "http://localhost:3000"; -// } +const baseUrl = import.meta.env.VITE_BASE_URL; + const ACCESS_TOKEN_KEY = "accessToken"; export const axiosApi = axios.create({ diff --git a/client/ecommerce/src/components/DiscordSignInButton.tsx b/client/ecommerce/src/components/DiscordSignInButton.tsx index b7c66fa..d4a57d6 100644 --- a/client/ecommerce/src/components/DiscordSignInButton.tsx +++ b/client/ecommerce/src/components/DiscordSignInButton.tsx @@ -2,10 +2,11 @@ import { Box, BoxProps, Link, Typography } from "@mui/material"; import { DiscordIcon } from "./DiscordIcon"; export const DiscordSignInButton = (props: BoxProps) => { + const baseURL = import.meta.env.VITE_BASE_URL; return ( { }, }} > - + SIGN IN diff --git a/client/ecommerce/src/components/pages/MainPage.tsx b/client/ecommerce/src/components/pages/MainPage.tsx index d648fa1..9f10737 100644 --- a/client/ecommerce/src/components/pages/MainPage.tsx +++ b/client/ecommerce/src/components/pages/MainPage.tsx @@ -6,8 +6,11 @@ import { useAllProducts } from "../../hooks/useAllProducts"; import { PaginatedProducts } from "../PaginatedProducts"; import { MainPageSkeleton } from "../skeletons/MainPageSkeleton"; import { NotAuthed } from "../NotAuthed"; +import { useLocation } from "wouter"; export const MainPage = () => { + const location = useLocation(); + console.log(location); const { user, setUser } = useUserContext(); const { data: products, isLoading: isProductsDataLoading } = useAllProducts(); const { diff --git a/readmeImages/BinanceAccountCommand.png b/readmeImages/BinanceAccountCommand.png new file mode 100644 index 0000000000000000000000000000000000000000..b1cd74aa65728ead492a04df5873866863f8e55f GIT binary patch literal 41490 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 J`oAM{{|9+bjz|Ci literal 0 HcmV?d00001 diff --git a/server/ecommerce/package-lock.json b/server/ecommerce/package-lock.json index 25f44a4..5cc16a5 100644 --- a/server/ecommerce/package-lock.json +++ b/server/ecommerce/package-lock.json @@ -22,6 +22,7 @@ "@types/jsonwebtoken": "^9.0.5", "@types/passport-oauth2": "^1.4.15", "bcrypt": "^5.1.1", + "binance-api-node": "^0.12.7", "cookie-parser": "^1.4.6", "discord-api-types": "^0.37.84", "discord.js": "^14.15.2", @@ -4823,6 +4824,51 @@ "node": ">=0.6" } }, + "node_modules/bignumber.js": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "engines": { + "node": "*" + } + }, + "node_modules/binance-api-node": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/binance-api-node/-/binance-api-node-0.12.7.tgz", + "integrity": "sha512-hEIPaZg1YwZClOznAJo5Zb1JyxsqdYjT8twG48rhOwhbNVrLJRxkeGj+PTa881wFXOtyOtyrXsDytsEcI2EUHA==", + "dependencies": { + "https-proxy-agent": "^5.0.0", + "isomorphic-fetch": "^3.0.0", + "isomorphic-ws": "^4.0.1", + "json-bigint": "^1.0.0", + "lodash.zipobject": "^4.1.3", + "reconnecting-websocket": "^4.2.0", + "ws": "^7.2.0" + }, + "engines": { + "yarn": ">= 1.0.0" + } + }, + "node_modules/binance-api-node/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -8114,6 +8160,23 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, + "node_modules/isomorphic-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", + "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", + "dependencies": { + "node-fetch": "^2.6.1", + "whatwg-fetch": "^3.4.1" + } + }, + "node_modules/isomorphic-ws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", + "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", + "peerDependencies": { + "ws": "*" + } + }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", @@ -8859,6 +8922,14 @@ "node": ">=4" } }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -9080,6 +9151,11 @@ "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==" }, + "node_modules/lodash.zipobject": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/lodash.zipobject/-/lodash.zipobject-4.1.3.tgz", + "integrity": "sha512-A9SzX4hMKWS25MyalwcOnNoplyHbkNVsjidhTp8ru0Sj23wY9GWBKS8gAIGDSAqeWjIjvE4KBEl24XXAs+v4wQ==" + }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -10933,6 +11009,11 @@ "node": ">= 0.10" } }, + "node_modules/reconnecting-websocket": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/reconnecting-websocket/-/reconnecting-websocket-4.4.0.tgz", + "integrity": "sha512-D2E33ceRPga0NvTDhJmphEgJ7FUYF0v4lr1ki0csq06OdlxKfugGzN0dSkxM/NfqCxYELK4KcaTOUOjTV6Dcng==" + }, "node_modules/reflect-metadata": { "version": "0.1.14", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.14.tgz", @@ -12984,6 +13065,11 @@ "node": ">=4.0" } }, + "node_modules/whatwg-fetch": { + "version": "3.6.20", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", + "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==" + }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", diff --git a/server/ecommerce/package.json b/server/ecommerce/package.json index 4a9c046..df948cb 100644 --- a/server/ecommerce/package.json +++ b/server/ecommerce/package.json @@ -39,6 +39,7 @@ "@types/jsonwebtoken": "^9.0.5", "@types/passport-oauth2": "^1.4.15", "bcrypt": "^5.1.1", + "binance-api-node": "^0.12.7", "cookie-parser": "^1.4.6", "discord-api-types": "^0.37.84", "discord.js": "^14.15.2", diff --git a/server/ecommerce/src/auth/auth.controller.ts b/server/ecommerce/src/auth/auth.controller.ts index 5798eb8..7a77876 100644 --- a/server/ecommerce/src/auth/auth.controller.ts +++ b/server/ecommerce/src/auth/auth.controller.ts @@ -95,11 +95,13 @@ export class AuthController { response.cookie('refreshToken', refreshToken, { httpOnly: true, maxAge: 60 * 60 * 1000, + secure: true, }); + if (process.env.IS_DEV == 'true') { - response.redirect('http://localhost:5173'); + return response.redirect('http://localhost:5173'); } else { - response.redirect('https://exquisite-pasca-338883.netlify.app'); + return response.redirect('https://exquisite-pasca-338883.netlify.app'); } } } diff --git a/server/ecommerce/src/auth/utils/DiscordStrategy.ts b/server/ecommerce/src/auth/utils/DiscordStrategy.ts index 9da00b4..ef9a567 100644 --- a/server/ecommerce/src/auth/utils/DiscordStrategy.ts +++ b/server/ecommerce/src/auth/utils/DiscordStrategy.ts @@ -29,7 +29,10 @@ export class DiscordStrategy extends PassportStrategy(Strategy, 'discord') { tokenURL: TOKEN_URL, clientID: process.env.DISCORD_CLIENT_ID ?? '', clientSecret: process.env.DISCORD_CLIENT_SECRET ?? '', - callbackURL: process.env.DISCORD_REDIRECT_URL ?? '', + callbackURL: + process.env.IS_DEV == 'true' + ? process.env.DISCORD_REDIRECT_URL_DEV + : process.env.DISCORD_REDIRECT_URL_PRO, scope: ['identify', 'guilds'], } as StrategyOptions); this.logger = new Logger(DiscordStrategy.name); diff --git a/server/ecommerce/src/binance/binance.service.ts b/server/ecommerce/src/binance/binance.service.ts index 796bc55..5f85f7a 100644 --- a/server/ecommerce/src/binance/binance.service.ts +++ b/server/ecommerce/src/binance/binance.service.ts @@ -69,9 +69,7 @@ export class BinanceService { balancesWithTotalValueCalculated, ); - const revertedBalances = this.revertBalances(sortedBalances); - - const topBalances = revertedBalances.slice(0, numberOfTopBalances); + const topBalances = sortedBalances.slice(0, numberOfTopBalances); return topBalances; }; @@ -84,18 +82,6 @@ export class BinanceService { ); }; - private revertBalances = ( - balances: BinanceBalanceWithTotalValueAndSymbol[], - ) => { - return balances.map((balance) => ({ - asset: balance.asset, - free: balance.free, - locked: balance.locked, - symbol: balance.symbol, - totalValue: balance.totalValue, - })); - }; - private addTotalValueAndCurrencySymbolToBalances = async ( balances: BinanceBalance[], currencyName?: string, diff --git a/server/ecommerce/src/discord-bot/src/discordbot.ts b/server/ecommerce/src/discord-bot/src/discordbot.ts index f9442a8..738866c 100644 --- a/server/ecommerce/src/discord-bot/src/discordbot.ts +++ b/server/ecommerce/src/discord-bot/src/discordbot.ts @@ -59,8 +59,19 @@ export class DiscordBot { }; private handleCommand = async (interaction: ChatInputCommandInteraction) => { + const userId = interaction.user.id; const command = this.commands.get(interaction.commandName); + const commandName = interaction.commandName; if (!command) return; + if ( + commandName == 'binance-account' && + userId !== process.env.MY_DISCORD_ID + ) { + await interaction.reply({ + content: + 'You are not authorized to use this command! Only project owner can use this command', + }); + } try { await command.execute(interaction); } catch (error) {