diff --git a/Dockerfile b/Dockerfile index 9c99a4c..8f75db6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,9 +1,9 @@ -FROM node:latest -RUN apt-get update && apt-get upgrade -y -WORKDIR /dunestorm/khufu +FROM node:16 +WORKDIR /dunemask/net/khufu COPY package.json . -RUN npm i --only=prod +RUN npm i +COPY public public +COPY src src +RUN npm run build:react COPY server server -COPY build build CMD ["npm", "start"] -EXPOSE 52026 diff --git a/dist/predeploy-vanilla.sh b/dist/predeploy-vanilla.sh deleted file mode 100755 index 4d3b36b..0000000 --- a/dist/predeploy-vanilla.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash -echo "Creating vanilla predeploy!" -# Set path correclty -if [[ $PWD == *"dist" ]]; -then cd .. -fi -# If .env exists, ignore it -if [[ ! -f ".env" ]];then - echo "Building vanilla env file!" - echo "PORT=52026 -NUBIAN_INTERNAL_URL=\${NUBIAN_INTERNAL_URL} -REACT_APP_CAIRO_PUBLIC_URL=\${CAIRO_PUBLIC_URL}" >> .env -fi -# Install node dependencies -echo "Installing node depencencies!" -npm i diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index a6490b3..0000000 --- a/docker-compose.yml +++ /dev/null @@ -1,15 +0,0 @@ -version: "3" -services: - khufu.dunestorm.net: - image: khufu.dunestorm.net - build: . - ports: - - "52026:52026" - networks: - - dunestorm_dev - environment: - - CAIRO_PUBLIC_URL=${CAIRO_PUBLIC_URL} - - NUBIAN_INTERNAL_URL=${NUBIAN_INTERNAL_URL} -networks: - dunestorm_dev: - external: true diff --git a/package.json b/package.json index ac9df01..b99e58e 100644 --- a/package.json +++ b/package.json @@ -7,9 +7,7 @@ "dependencies": { "axios": "^0.21.1", "express": "^4.17.1", - "http-proxy-middleware": "^2.0.1" - }, - "devDependencies": { + "http-proxy-middleware": "^2.0.1", "@fortawesome/fontawesome-svg-core": "^1.2.36", "@fortawesome/free-brands-svg-icons": "^5.15.4", "@fortawesome/free-regular-svg-icons": "^5.15.4", @@ -21,16 +19,20 @@ "react-dropzone": "^11.3.4", "react-fontawesome": "^1.7.1", "react-router-dom": "^5.2.0", - "react-scripts": "^4.0.3", "react-toastify": "^7.0.4", "sass": "^1.37.5" }, + "devDependencies": { + "react-scripts": "^4.0.3", + "nodemon": "^2.0.14" + }, "scripts": { "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" + "start:garden": "KHUFU_DEV_PORT=52035 node server/index.js", + "start:garden:dev": "nodemon server/index.js & CI=true PORT=52035 CAIRO_PROXY_URL=http://localhost:52002 NUBIAN_PROXY_URL=http://localhost:52002 react-scripts start" }, "browserslist": { "production": [ @@ -43,11 +45,5 @@ "last 1 firefox version", "last 1 safari version" ] - }, - "nodemonConfig": { - "env": { - "CAIRO_PUBLIC_URL": "http://localhost:52000", - "NUBIAN_INTERNAL_URL": "http://localhost:52001" - } } } diff --git a/server/index.js b/server/index.js index 3f9c0af..550447e 100644 --- a/server/index.js +++ b/server/index.js @@ -1,10 +1,21 @@ const express = require("express"); const { createProxyMiddleware: proxy } = require("http-proxy-middleware"); -const port = process.env.PORT ?? 52026; -const cairoUrl = process.env.CAIRO_PUBLIC_URL; -const nubianUrl = process.env.NUBIAN_INTERNAL_URL; +const port = process.env.KHUFU_DEV_PORT ?? 52002; +const { REACT_APP_CAIRO_URL, REACT_APP_NUBIAN_URL } = process.env; +const cairoProxyOpt = { + target: REACT_APP_CAIRO_URL, + changeOrigin: true, + pathRewrite: { "^/api/cairo": "/api" }, +}; +const nubianProxyOpt = { + target: REACT_APP_NUBIAN_URL, + changeOrigin: true, + pathRewrite: { "^/api/nubian": "/api" }, +}; const app = express(); app.use("/", express.static("build")); -app.use("/cairo", proxy({ target: cairoUrl, changeOrigin: true })); -app.use("/nubian", proxy({ target: nubianUrl, changeOrigin: true })); -app.listen(port, () => console.log(`🌴 Nile server started on ${port}! 🌴`)); +app.use("/api/cairo", proxy(cairoProxyOpt)); +app.use("/api/nubian", proxy(nubianProxyOpt)); +app.get("/healthcheck", (req, res) => res.sendStatus(200)); +app.get("/alive", (req, res) => res.sendStatus(200)); +app.listen(port, () => console.log(`🌴 Nile px server started on ${port}! 🌴`)); diff --git a/src/Stash.js b/src/Stash.js index 71a7992..52063a2 100644 --- a/src/Stash.js +++ b/src/Stash.js @@ -33,7 +33,7 @@ class Stash extends React.Component { .catch((error) => { if (error.response && error.response.status === 401) return window.location.replace( - `${process.env.REACT_APP_CAIRO_PUBLIC_URL}${api.cairo.urls.login}?redirectUri=${window.location.href}` + `${process.env.REACT_APP_CAIRO_URL}/authenticate?redirectUri=${window.location.href}` ); console.error("Auth server not up/configured properly!"); }); diff --git a/src/config.json b/src/config.json index 693542a..9da0d6c 100644 --- a/src/config.json +++ b/src/config.json @@ -2,17 +2,17 @@ "api": { "cairo": { "urls": { - "verify": "/cairo/api/user/data", - "login": "/cairo/login" + "verify": "api/cairo/user/info", + "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" + "files": "api/nubian/stash/files", + "upload": "api/nubian/stash/upload", + "download": "api/nubian/stash/download", + "delete": "api/nubian/stash/delete", + "public": "api/nubian/stash/public" }, "misc": { "uploadField": "user-selected-file" diff --git a/src/setupProxy.js b/src/setupProxy.js index acb8101..71c07f8 100644 --- a/src/setupProxy.js +++ b/src/setupProxy.js @@ -1,8 +1,8 @@ const { createProxyMiddleware } = require("http-proxy-middleware"); -const cairoUrl = process.env.REACT_APP_CAIRO_PUBLIC_URL; -const nubianUrl = process.env.NUBIAN_INTERNAL_URL; +const cairoUrl = process.env.CAIRO_PROXY_URL ?? "http://localhost:52002"; +const nubianUrl = process.env.NUBIAN_PROXY_URL ?? "http://localhost:52002"; module.exports = (app) => { // Cairo Proxy - app.use("/cairo", createProxyMiddleware({ target: cairoUrl })); - app.use("/nubian", createProxyMiddleware({ target: nubianUrl })); + app.use("/api/cairo", createProxyMiddleware({ target: cairoUrl })); + app.use("/api/nubian", createProxyMiddleware({ target: nubianUrl })); }; diff --git a/src/stash/StashContextMenu.jsx b/src/stash/StashContextMenu.jsx index b4ade79..0dbbc4e 100644 --- a/src/stash/StashContextMenu.jsx +++ b/src/stash/StashContextMenu.jsx @@ -101,7 +101,9 @@ export default class StashContextMenu extends React.Component { const selectedBoxes = this.props.getSelectedBoxes(); if (selectedBoxes.length !== 1) return toast.error("Only one file can be selected!"); - const url = `${window.location.origin}${process.env.PUBLIC_URL}${downloadUrl}?target=${selectedBoxes[0]}`; + if (window.location.protocol !== "https:") + return toast.error("Cannot clipboard without https!"); + const url = `${window.location.origin}/${downloadUrl}?target=${selectedBoxes[0]}`; navigator.clipboard.writeText(url); toast.success("Link successfully copied!"); }