From bdacb18a073487205b75d96b3e5ae1bd1e310b42 Mon Sep 17 00:00:00 2001 From: Dobromir Popov Date: Mon, 26 Feb 2024 22:44:25 +0200 Subject: [PATCH] dynamic baseURL --- package-lock.json | 2 +- src/axiosServer.js | 2 +- src/helpers/common.js | 42 +++++++++++++++++++++++++++++++----------- 3 files changed, 33 insertions(+), 13 deletions(-) diff --git a/package-lock.json b/package-lock.json index e59d4c4..45e6b12 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11333,4 +11333,4 @@ } } } -} \ No newline at end of file +} diff --git a/src/axiosServer.js b/src/axiosServer.js index 6d06426..071e7e1 100644 --- a/src/axiosServer.js +++ b/src/axiosServer.js @@ -24,7 +24,7 @@ const axiosServer = async (context) => { //headers['X-From-Server'] = token; // Note: Using the entire token as a header value might not be intended return axios.create({ - baseURL: common.getBaseUrl(), + baseURL: common.getBaseUrl("", context.req || req), withCredentials: true, headers: headers, }); diff --git a/src/helpers/common.js b/src/helpers/common.js index fcfad27..98720e3 100644 --- a/src/helpers/common.js +++ b/src/helpers/common.js @@ -4,11 +4,19 @@ const levenshtein = require('fastest-levenshtein'); +const fs = require("fs"); const path = require("path"); const { PrismaClient } = require('@prisma/client'); const DayOfWeek = require("@prisma/client").DayOfWeek; const winston = require('winston'); +// User and auth functions +// import { getSession } from "next-auth/react"; +// import { UserRole } from "@prisma/client"; +//convert to es6 import +const { getSession } = require("next-auth/react"); +const { UserRole } = require("@prisma/client"); +// const { set } = require('date-fns'); const logger = winston.createLogger({ level: 'info', // Set the default log level @@ -54,7 +62,17 @@ exports.isValidPhoneNumber = function (phone) { // If neither condition is met, the phone number is invalid return false; } -exports.getBaseUrl = function (relative = "") { + +exports.setBaseUrl = function (req) { + const protocol = req.headers['x-forwarded-proto'] || 'http'; + const host = req.headers.host; + const baseUrl = `${protocol}://${host}`; + + fs.writeFileSync(path.join(__dirname, 'baseUrl.txt'), baseUrlGlobal, 'utf8'); + return baseUrl; +} + +exports.getBaseUrl = function (relative = "", req = null) { const filePath = path.join(__dirname, 'baseUrl.txt'); try { @@ -66,6 +84,12 @@ exports.getBaseUrl = function (relative = "") { const fullUrl = relative ? new URL(relative, baseUrl).toString() : baseUrl; return fullUrl; } else { + + if (req) { + const baseUrl = exports.setBaseUrl(req); + return `${baseUrl}/${relative.replace(/^\/|\/$/g, '')}/`; + } + console.log('Base URL file does not exist.'); return null; } @@ -75,10 +99,10 @@ exports.getBaseUrl = function (relative = "") { } // const host = process.env.NEXT_PUBLIC_HOST || '127.0.0.1'; - // const port = process.env.NEXT_PUBLIC_PORT ? `:${process.env.NEXT_PUBLIC_PORT}` : ''; + // const port = process.env.NEXT_PUBLIC_PORT ? `:${ process.env.NEXT_PUBLIC_PORT } ` : ''; // const protocol = process.env.NEXT_PUBLIC_PROTOCOL || "https" - // //const url = `${protocol}://${host}${port}/${relative.replace(/^\/|\/$/g, '')}/`; + // //const url = `${ protocol }://${host}${port}/${relative.replace(/^\/|\/$/g, '')}/`; // const isRelativeEmpty = !relative || relative.trim() === ''; // const formattedRelative = !isRelativeEmpty ? '/' + relative.replace(/^\/|\/$/g, '') : ''; // const url = `${protocol}://${host}${port}${formattedRelative}`; @@ -88,7 +112,8 @@ exports.getBaseUrl = function (relative = "") { // logger.debug("getBaseURL = ", url); // return url; -}; +} + let prisma; exports.getPrismaClient = function getPrismaClient() { @@ -307,7 +332,7 @@ exports.getTimeFomatted = function (date) { /*Todo: remove: toISOString slice(0, 10) - + getISODateFromDateTime > getISODateOnly */ @@ -628,12 +653,7 @@ exports.copyToClipboard = function (event, text) { } -// User and auth functions -// import { getSession } from "next-auth/react"; -// import { UserRole } from "@prisma/client"; -//convert to es6 import -const { getSession } = require("next-auth/react"); -const { UserRole } = require("@prisma/client"); + exports.getUser = async function (req) { // Use req if provided (server-side), otherwise call getSession without args (client-side)