From 8adffc3212d5a3605267ff9acfa446322a5752bd Mon Sep 17 00:00:00 2001 From: Charles Le Maux Date: Mon, 16 Sep 2024 22:45:35 +0200 Subject: [PATCH 1/4] [+] Renamed default server card for future scaling. I want to work on brand new cards using spring --- .../DefaultServerCard.jsx} | 10 ++++------ .../DefaultServerCard.module.scss} | 0 2 files changed, 4 insertions(+), 6 deletions(-) rename src/components/{serverCard/serverCard.jsx => serverCards/DefaultServerCard.jsx} (91%) rename src/components/{serverCard/serverCard.module.scss => serverCards/DefaultServerCard.module.scss} (100%) diff --git a/src/components/serverCard/serverCard.jsx b/src/components/serverCards/DefaultServerCard.jsx similarity index 91% rename from src/components/serverCard/serverCard.jsx rename to src/components/serverCards/DefaultServerCard.jsx index 5aa3468..ec66a76 100644 --- a/src/components/serverCard/serverCard.jsx +++ b/src/components/serverCards/DefaultServerCard.jsx @@ -1,5 +1,5 @@ import { Link } from 'react-router-dom'; -import styles from './serverCard.module.scss'; +import styles from './DefaultServerCard.module.scss'; import bukkit from '../../assets/frameworks/bukkit.png'; import fabric from '../../assets/frameworks/fabric.png'; @@ -10,9 +10,7 @@ import vanilla from '../../assets/frameworks/vanilla.png'; import PropTypes from "prop-types"; // eslint-disable-next-line react/prop-types -const ServerCard = ({ status, version, name, framework, onRunClick, onStopClick, onDeleteClick , countPlayers , maxPlayers}) => { - - +const DefaultServerCard = ({ status, version, name, framework, onRunClick, onStopClick, onDeleteClick , countPlayers , maxPlayers}) => { const getFrameworkSource = () => { switch (framework) { case "bukkit": @@ -89,7 +87,7 @@ const ServerCard = ({ status, version, name, framework, onRunClick, onStopClick, }; -ServerCard.propTypes = { +DefaultServerCard.propTypes = { key: PropTypes.string, status: PropTypes.bool, version: PropTypes.string, @@ -102,4 +100,4 @@ ServerCard.propTypes = { subdomain: PropTypes.string, }; -export default ServerCard; +export default DefaultServerCard; diff --git a/src/components/serverCard/serverCard.module.scss b/src/components/serverCards/DefaultServerCard.module.scss similarity index 100% rename from src/components/serverCard/serverCard.module.scss rename to src/components/serverCards/DefaultServerCard.module.scss From 5484017ba7c7b3de26e4018ae68b4ccc892488c9 Mon Sep 17 00:00:00 2001 From: Charles Le Maux Date: Mon, 16 Sep 2024 22:46:10 +0200 Subject: [PATCH 2/4] [+] Fixed basic warnings and indentation --- src/components/CreateServer/CreateServer.jsx | 5 ++-- src/pages/DashboardPage/DashboardPage.jsx | 31 ++++++++++---------- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/src/components/CreateServer/CreateServer.jsx b/src/components/CreateServer/CreateServer.jsx index 5f19719..865621d 100644 --- a/src/components/CreateServer/CreateServer.jsx +++ b/src/components/CreateServer/CreateServer.jsx @@ -67,8 +67,9 @@ const CreateServer = ({ user, onCreateServer, onSubdomainUpdate, onCancel, noSer }; useEffect(() => { - loadSubdomain(); - }, [user]); + loadSubdomain().then(r => r); + }, + [user]); const handleSaveSubdomain = async () => { try { diff --git a/src/pages/DashboardPage/DashboardPage.jsx b/src/pages/DashboardPage/DashboardPage.jsx index adde911..2526645 100644 --- a/src/pages/DashboardPage/DashboardPage.jsx +++ b/src/pages/DashboardPage/DashboardPage.jsx @@ -1,5 +1,5 @@ import { useEffect, useState } from 'react'; -import ServerCard from '../../components/serverCard/serverCard'; +import DefaultServerCard from '../../components/serverCards/DefaultServerCard.jsx'; import Navbar from '../../components/navbar/Navbar'; import styles from './DashboardPage.module.scss'; import Loading from '../Loading/loading'; @@ -87,7 +87,7 @@ const DashboardPage = ({ user }) => { const handleCopyAddress = () => { const address = `${subdomain}.servii.fr`; - navigator.clipboard.writeText(address) + navigator.clipboard.writeText(address).then(r => r) }; @@ -116,6 +116,7 @@ const DashboardPage = ({ user }) => { @@ -134,19 +135,19 @@ const DashboardPage = ({ user }) => { Créer un nouveau serveur {servers.map((server) => ( - handleRunServer(server.name)} - onStopClick={() => handleStopServer(server.name)} - onDeleteClick={() => handleDeleteServer(server.name)} - subdomain={subdomain} - /> + handleRunServer(server.name)} + onStopClick={() => handleStopServer(server.name)} + onDeleteClick={() => handleDeleteServer(server.name)} + subdomain={subdomain} + /> ))} )} From b1d30fb671dac8344db0cd57256840a96202f2b1 Mon Sep 17 00:00:00 2001 From: Charles Le Maux Date: Fri, 20 Sep 2024 16:17:19 +0200 Subject: [PATCH 3/4] [+] New super secure token authentication system. --- src/service/api.tsx | 73 +++++++++++++++++++--------------------- src/service/firebase.jsx | 2 +- 2 files changed, 36 insertions(+), 39 deletions(-) diff --git a/src/service/api.tsx b/src/service/api.tsx index 2be430e..c043970 100644 --- a/src/service/api.tsx +++ b/src/service/api.tsx @@ -1,7 +1,8 @@ -import { getAuth } from 'firebase/auth'; -import { Bounce, toast } from "react-toastify"; +import {auth} from './firebase.jsx' +import {Bounce, toast} from "react-toastify"; -const apiUrl: string = 'https://www.servii.fr/api'; +//const apiUrl: string = 'https://www.servii.fr/api'; +const apiUrl: string = 'http://localhost:3000'; interface ApiResponse { return_code: number; @@ -9,7 +10,6 @@ interface ApiResponse { } interface BaseRequest { - token: string; } interface SubdomainRequest extends BaseRequest { @@ -87,13 +87,14 @@ function toast_status(status: number, message: string) { } class serviiApi { - private static async call(endpoint: serviiRequest, body: T): Promise { + private static async call(endpoint: serviiRequest, body: T, token: string): Promise { const unreachable: string = "Couldn't find an available API"; try { const response = await fetch(`${apiUrl}/${endpoint}`, { method: 'POST', headers: { 'Content-Type': 'application/json', + 'SST': token, }, body: JSON.stringify(body), }); @@ -121,81 +122,77 @@ class serviiApi { constructor() {} - private static token(): string { - const currentUser = getAuth().currentUser; - if (!currentUser) { - throw new Error('No user is currently logged in.'); + private static async token(): Promise { + try { + return await auth.currentUser.getIdToken(true); + } catch (error) { + throw new Error("No token retrieved."); } - return currentUser.uid; } public static async setSubdomain(subdomain: string): Promise { - const payload: SubdomainRequest = { token: this.token(), subdomain: subdomain }; - return this.call(serviiRequest.setSubdomain, payload); + const payload: SubdomainRequest = { subdomain: subdomain }; + return this.call(serviiRequest.setSubdomain, payload, await this.token()); } public static async fetchServers(): Promise { - const payload: BaseRequest = { token: this.token() }; - return this.call(serviiRequest.fetchServers, payload); + const payload: BaseRequest = { wait: "wtf" }; + return this.call(serviiRequest.fetchServers, payload, await this.token()); } public static async fetchLogs(name: string): Promise { - const payload: ServerRequest = { token: this.token(), name: name }; - return this.call(serviiRequest.fetchLogs, payload); + const payload: ServerRequest = { name: name }; + return this.call(serviiRequest.fetchLogs, payload, await this.token()); } public static async fetchHistory(name: string): Promise { - const payload: ServerRequest = { token: this.token(), name: name }; - return this.call(serviiRequest.fetchHistory, payload); + const payload: ServerRequest = { name: name }; + return this.call(serviiRequest.fetchHistory, payload, await this.token()); } public static async fetchPlayersStatus(name: string): Promise { - const payload: ServerRequest = { token: this.token(), name: name,}; - return this.call(serviiRequest.fetchPlayersStatus, payload); + const payload: ServerRequest = { name: name,}; + return this.call(serviiRequest.fetchPlayersStatus, payload, await this.token()); } public static async accountCreate(): Promise { const payload: BaseRequest = { token: this.token() }; - return this.call(serviiRequest.accountCreate, payload); + return this.call(serviiRequest.accountCreate, payload, await this.token()); } public static async serverCreate(name: string, version: string, framework: string): Promise { - const payload: ServerCreationRequest = { token: this.token(), name: name, version: version, framework: framework }; - return this.call(serviiRequest.serverCreate, payload); + const payload: ServerCreationRequest = { name: name, version: version, framework: framework }; + return this.call(serviiRequest.serverCreate, payload, await this.token()); } public static async serverDelete(name: string): Promise { - const payload: ServerRequest = { token: this.token(), name: name }; - return this.call(serviiRequest.serverDelete, payload); + const payload: ServerRequest = { name: name }; + return this.call(serviiRequest.serverDelete, payload, await this.token()); } public static async accountDelete(): Promise { const payload: BaseRequest = { token: this.token() }; - return this.call(serviiRequest.accountDelete, payload); + return this.call(serviiRequest.accountDelete, payload, await this.token()); } public static async serverRun(name: string): Promise { - const payload: ServerRequest = { token: this.token(), name: name }; - return this.call(serviiRequest.serverRun, payload); + const payload: ServerRequest = { name: name }; + return this.call(serviiRequest.serverRun, payload, await this.token()); } public static async serverStop(name: string): Promise { - const payload: ServerRequest = { token: this.token(), name: name }; - return this.call(serviiRequest.serverStop, payload); + const payload: ServerRequest = { name: name }; + return this.call(serviiRequest.serverStop, payload, await this.token()); } public static async updateProperties(name: string, props: [string, string][]): Promise { - const payload: UpdatePropertiesRequest = { - token: this.token(), - name: name, - props: props, - }; - return this.call(serviiRequest.updateProperty, payload); + const payload: UpdatePropertiesRequest = { name: name, props: props }; + return this.call(serviiRequest.updateProperty, payload, await this.token()); } public static async command(command: string, name: string): Promise { - const payload: CommandRequest = { token: this.token(), command: command, name: name }; - return this.call(serviiRequest.command, payload); + const payload: CommandRequest = { command: command, name: name }; + return this.call(serviiRequest.command, payload, await this.token()); } } diff --git a/src/service/firebase.jsx b/src/service/firebase.jsx index 428677e..5f84bdd 100644 --- a/src/service/firebase.jsx +++ b/src/service/firebase.jsx @@ -37,4 +37,4 @@ const getUserSubdomain = async (userId) => { } }; -export { auth, googleProvider, signInWithPopup, getUserSubdomain }; +export { auth, googleProvider, signInWithPopup, getUserSubdomain, app }; From 1fe1d042928c5a21dc06ca27d6321246c6c0f455 Mon Sep 17 00:00:00 2001 From: Charles Le Maux Date: Fri, 20 Sep 2024 16:18:17 +0200 Subject: [PATCH 4/4] [+] Revert to regular API ip. --- src/service/api.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/service/api.tsx b/src/service/api.tsx index c043970..0c76d47 100644 --- a/src/service/api.tsx +++ b/src/service/api.tsx @@ -1,8 +1,8 @@ import {auth} from './firebase.jsx' import {Bounce, toast} from "react-toastify"; -//const apiUrl: string = 'https://www.servii.fr/api'; -const apiUrl: string = 'http://localhost:3000'; +const apiUrl: string = 'https://www.servii.fr/api'; +//const apiUrl: string = 'http://localhost:3000'; interface ApiResponse { return_code: number;