From b78336c2d2313b7b323fc7e831dc29eced33aef7 Mon Sep 17 00:00:00 2001 From: prafull-opensignlabs Date: Wed, 28 May 2025 17:17:29 +0000 Subject: [PATCH] Merge pull request #688 from OpenSignLabs/multi_domain_support feat: add separate domain support for frontend and backend --- apps/OpenSign/Dockerhubfile | 9 ++++++ apps/OpenSign/entrypoint.sh | 29 +++++++++++++++++++ apps/OpenSign/src/constant/Utils.jsx | 3 ++ apps/OpenSign/src/constant/appinfo.js | 9 ++++-- .../cloud/parsefunction/Newsletter.js | 4 +-- 5 files changed, 49 insertions(+), 5 deletions(-) create mode 100644 apps/OpenSign/entrypoint.sh diff --git a/apps/OpenSign/Dockerhubfile b/apps/OpenSign/Dockerhubfile index 395bad9d6..6f2d22e29 100644 --- a/apps/OpenSign/Dockerhubfile +++ b/apps/OpenSign/Dockerhubfile @@ -13,6 +13,10 @@ RUN npm install # Copy the current directory contents into the container COPY apps/OpenSign/ . COPY apps/OpenSign/.husky . +COPY apps/OpenSign/entrypoint.sh . + +# make the entrypoint.sh file executable +RUN chmod +x entrypoint.sh # Define environment variables if needed ENV NODE_ENV=production @@ -20,8 +24,13 @@ ENV GENERATE_SOURCEMAP=false # build RUN npm run build +# Inject env.js loader into index.html +RUN sed -i '//a\' build/index.html + # Make port 3000 available to the world outside this container EXPOSE 3000 +ENTRYPOINT ["./entrypoint.sh"] + # Run the application CMD ["npm", "start"] diff --git a/apps/OpenSign/entrypoint.sh b/apps/OpenSign/entrypoint.sh new file mode 100644 index 000000000..91553527a --- /dev/null +++ b/apps/OpenSign/entrypoint.sh @@ -0,0 +1,29 @@ +#!/bin/sh + +ENV_FILE=./build/env.js +DOTENV_FILE=./.env.prod # ✅ use .env.prod + +echo "Generating runtime env file at $ENV_FILE..." + +echo "window.RUNTIME_ENV = {" > $ENV_FILE + +# List of keys to include +RUNTIME_KEYS="REACT_APP_SERVERURL" + +for key in $RUNTIME_KEYS; do + # First check docker env (-e), fallback to .env file + value=$(printenv "$key") + + if [ -z "$value" ] && [ -f "$DOTENV_FILE" ]; then + # fallback: read from .env + value=$(grep "^$key=" "$DOTENV_FILE" | cut -d '=' -f2- | tr -d '\r\n' | sed 's/"/\\"/g') + else + value=$(echo "$value" | sed 's/"/\\"/g') + fi + + echo " $key: \"$value\"," >> $ENV_FILE +done + +echo "};" >> $ENV_FILE + +exec "$@" diff --git a/apps/OpenSign/src/constant/Utils.jsx b/apps/OpenSign/src/constant/Utils.jsx index cdff6fa16..79164dd76 100644 --- a/apps/OpenSign/src/constant/Utils.jsx +++ b/apps/OpenSign/src/constant/Utils.jsx @@ -21,6 +21,9 @@ export const isTabAndMobile = window.innerWidth < 1023; export const textInputWidget = "text input"; export const textWidget = "text"; export const radioButtonWidget = "radio button"; +export function getEnv() { + return window?.RUNTIME_ENV || {}; +} //function for create list of year for date widget diff --git a/apps/OpenSign/src/constant/appinfo.js b/apps/OpenSign/src/constant/appinfo.js index a41cff14c..f8e615f5b 100644 --- a/apps/OpenSign/src/constant/appinfo.js +++ b/apps/OpenSign/src/constant/appinfo.js @@ -1,9 +1,12 @@ import logo from "../assets/images/logo.png"; +import { getEnv } from "./Utils"; export function serverUrl_fn() { - let baseUrl = process.env.REACT_APP_SERVERURL - ? process.env.REACT_APP_SERVERURL - : window.location.origin + "/api/app"; + const env = getEnv(); + const serverurl = env?.REACT_APP_SERVERURL + ? env.REACT_APP_SERVERURL // env.REACT_APP_SERVERURL is used for prod + : process.env.REACT_APP_SERVERURL; // process.env.REACT_APP_SERVERURL is used for dev (locally) + let baseUrl = serverurl ? serverurl : window.location.origin + "/api/app"; return baseUrl; } export const appInfo = { diff --git a/apps/OpenSignServer/cloud/parsefunction/Newsletter.js b/apps/OpenSignServer/cloud/parsefunction/Newsletter.js index e26c8d97e..50cf7d9db 100644 --- a/apps/OpenSignServer/cloud/parsefunction/Newsletter.js +++ b/apps/OpenSignServer/cloud/parsefunction/Newsletter.js @@ -4,9 +4,9 @@ export default async function Newsletter(request) { const email = request.params?.email?.toLowerCase()?.replace(/\s/g, ''); const domain = request.params.domain; try { - const envAppId = process.env.REACT_APP_APPID || 'opensign'; + const envAppId = 'opensign'; const headers = { 'Content-Type': 'application/json', 'X-Parse-Application-Id': envAppId }; - const envProdServer = process.env.REACT_APP_SERVERURL || 'https://app.opensignlabs.com/api/app'; + const envProdServer = 'https://app.opensignlabs.com/api/app'; const newsletter = await axios.post( `${envProdServer}/classes/Newsletter`, { Name: name, Email: email, Domain: domain },