diff --git a/.env b/.env new file mode 100644 index 0000000..f1315e3 --- /dev/null +++ b/.env @@ -0,0 +1,2 @@ +PORT=52026 +REACT_APP_CAIRO_URL=https://cairo.dunestorm.net diff --git a/.env.local b/.env.local new file mode 100644 index 0000000..8ef4bc9 --- /dev/null +++ b/.env.local @@ -0,0 +1 @@ +REACT_APP_CAIRO_URL=http://localhost:52000 diff --git a/package.json b/package.json index d4803fe..779a463 100644 --- a/package.json +++ b/package.json @@ -24,10 +24,11 @@ "sass": "^1.37.5" }, "scripts": { - "start": "node server/main.js", - "start:dev": "nodemon server/main.js", - "start:react": "PORT=52026 react-scripts start", - "build": "react-scripts build" + "start": "node server/index.js", + "start:dev": "nodemon server/index.js", + "start:react": "react-scripts start", + "build:react": "react-scripts build", + "build:all": "npm run build:react && docker-compose build" }, "eslintConfig": { "extends": [ diff --git a/server/main.js b/server/index.js similarity index 76% rename from server/main.js rename to server/index.js index d165d17..8c86403 100644 --- a/server/main.js +++ b/server/index.js @@ -5,6 +5,6 @@ const cairoUrl = process.env.CAIRO_URL || "http://cairo.dunestorm.net:52000"; const nubianUrl = process.env.NUBIAN_URL || "http://nubian.dunestorm.net:52001"; const app = express(); app.use("/", express.static("build")); -app.use("/api/cairo", createProxyMiddleware({ target: cairoUrl })); -app.use("/api/nubian", createProxyMiddleware({ target: nubianUrl })); +app.use("/cairo", createProxyMiddleware({ target: cairoUrl })); +app.use("/nubian", createProxyMiddleware({ target: nubianUrl })); app.listen(port, () => console.log(`🌴 Nile server started on ${port}! 🌴`)); diff --git a/src/Stash.js b/src/Stash.js index e2d6e25..394ea7e 100644 --- a/src/Stash.js +++ b/src/Stash.js @@ -1,16 +1,14 @@ -//Module Imports +// Module Imports import React from "react"; import axios from "axios"; import { ToastContainer } from "react-toastify"; import "react-toastify/dist/ReactToastify.css"; -//Local Imports +// Local Imports import StashBoard from "./stash/StashBoard"; import { api } from "./config.json"; const getCairoApiInstance = (cairoAuthToken) => - axios.create({ - headers: { Authorization: `Bearer ${cairoAuthToken}` }, - }); + axios.create({ headers: { Authorization: `Bearer ${cairoAuthToken}` } }); class Stash extends React.Component { constructor(props) { @@ -28,13 +26,17 @@ class Stash extends React.Component { verifyLocalToken() { const token = localStorage.getItem("cairoAuthToken"); axios - .get(api.cairo.verify, { headers: { authorization: `Bearer ${token}` } }) + .get(api.cairo.urls.verify, { + headers: { authorization: `Bearer ${token}` }, + }) .then(() => this.setState({ cairoApi: getCairoApiInstance(token) })) - .catch(() => - window.location.replace( - `${api.cairo.login}?redirectUri=${window.location.href}` - ) - ); + .catch((error) => { + if (error.response && error.response.status === 401) + return window.location.replace( + `${process.env.REACT_APP_CAIRO_URL}${api.cairo.urls.login}?redirectUri=${window.location.href}` + ); + console.error("Auth server not up/configured properly!"); + }); } setLocalToken(cairoAuthToken) { diff --git a/src/config.json b/src/config.json index 895d00b..693542a 100644 --- a/src/config.json +++ b/src/config.json @@ -1,8 +1,22 @@ { "api": { "cairo": { - "verify": "/api/cairo/user/data", - "login": "http://cairo.dunestorm.net:52000/login" + "urls": { + "verify": "/cairo/api/user/data", + "login": "/cairo/login" + } + }, + "nubian": { + "urls": { + "files": "/nubian/api/stash/files", + "upload": "/nubian/api/stash/upload", + "download": "/nubian/api/stash/download", + "delete": "/nubian/api/stash/delete", + "public": "/nubian/api/stash/public" + }, + "misc": { + "uploadField": "user-selected-file" + } } } } diff --git a/src/setupProxy.js b/src/setupProxy.js index edb115f..019ae55 100644 --- a/src/setupProxy.js +++ b/src/setupProxy.js @@ -3,6 +3,6 @@ const cairoUrl = process.env.CAIRO_URL || "http://cairo.dunestorm.net:52000"; const nubianUrl = process.env.NUBIAN_URL || "http://nubian.dunestorm.net:52001"; module.exports = (app) => { // Cairo Proxy - app.use("/api/cairo", createProxyMiddleware({ target: cairoUrl })); - app.use("/api/nubian", createProxyMiddleware({ target: nubianUrl })); + app.use("/cairo", createProxyMiddleware({ target: cairoUrl })); + app.use("/nubian", createProxyMiddleware({ target: nubianUrl })); }; diff --git a/src/stash/StashBoard.jsx b/src/stash/StashBoard.jsx index 7a9f53c..a0995a1 100644 --- a/src/stash/StashBoard.jsx +++ b/src/stash/StashBoard.jsx @@ -1,16 +1,13 @@ -//Module Imports +// Module Imports import React from "react"; import { toast } from "react-toastify"; -//Local Imports +// Local Imports import Stashbar from "./Stashbar"; import StashUpload from "./StashUpload"; import StashContextMenu from "./StashContextMenu"; -import { serverUrls } from "./api.json"; +import { api } from "../config.json"; import "./scss/Stash.scss"; -//Constants -const filesUrl = `${serverUrls.GET.filesUrl}`; -//Class - +// Constants const buildFilebox = (file, index) => ({ file, selected: false, @@ -37,7 +34,7 @@ class StashBoard extends React.Component { componentDidMount() { window.cairoApi - .get(filesUrl) + .get(api.nubian.urls.files) .then((res) => { if (res.data === undefined || res.data.length === undefined) return toast.error("Error Loading Files"); diff --git a/src/stash/StashContextMenu.jsx b/src/stash/StashContextMenu.jsx index f2fb7c2..b53e737 100644 --- a/src/stash/StashContextMenu.jsx +++ b/src/stash/StashContextMenu.jsx @@ -11,11 +11,11 @@ import { } from "@fortawesome/free-solid-svg-icons"; //Local Imports import "./scss/stash/StashContextMenu.scss"; -import { serverUrls } from "./api.json"; +import { api } from "../config.json"; //Constants -const downloadUrl = `${serverUrls.POST.downloadUrl}`; -const deleteUrl = `${serverUrls.POST.deleteUrl}`; -const publicUrl = `${serverUrls.POST.publicUrl}`; +const downloadUrl = api.nubian.urls.download; +const deleteUrl = api.nubian.urls.delete; +const publicUrl = api.nubian.urls.public; export default class StashContextMenu extends React.Component { infoView() { diff --git a/src/stash/StashDropzone.jsx b/src/stash/StashDropzone.jsx index 3c98ffe..121effe 100644 --- a/src/stash/StashDropzone.jsx +++ b/src/stash/StashDropzone.jsx @@ -1,7 +1,6 @@ import React from "react"; import Dropzone from "react-dropzone"; import FileDisplay from "./FileDisplay"; - import "./scss/stash/StashDropzone.scss"; class StashDropzone extends React.Component { render() { diff --git a/src/stash/StashUpload.jsx b/src/stash/StashUpload.jsx index fb21cf9..b40370c 100644 --- a/src/stash/StashUpload.jsx +++ b/src/stash/StashUpload.jsx @@ -1,14 +1,14 @@ -//Module Imports +// Module Imports import React from "react"; import { CancelToken } from "axios"; import { toast } from "react-toastify"; -//Local Imports +// Local Imports import StashDropzone from "./StashDropzone"; import StashUploadDialog from "./uploader/StashUploadDialog"; -//Constants -import { serverUrls, serverFields } from "./api.json"; -const uploadUrl = `${serverUrls.POST.uploadUrl}`; -const uploadField = serverFields.uploadField; +// Constants +import { api } from "../config.json"; +const uploadUrl = api.nubian.urls.upload; +const uploadField = api.nubian.misc.uploadField; const cancelMessage = "User Canceled"; const successClearTime = 200; diff --git a/src/stash/api.json b/src/stash/api.json deleted file mode 100644 index 539aeed..0000000 --- a/src/stash/api.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "serverUrls": { - "POST": { - "uploadUrl": "/api/nubian/stash/upload", - "downloadUrl": "/api/nubian/stash/download", - "deleteUrl": "/api/nubian/stash/delete", - "publicUrl": "/api/nubian/stash/public" - }, - "GET": { - "filesUrl": "/api/nubian/stash/files", - "rawUrl": "/api/nubian/stash/raw" - }, - "api": { - "cairo": { - "verify": "/api/cairo/user/data" - } - } - }, - "serverFields": { - "uploadField": "user-selected-file" - } -}