Skip to content

Commit

Permalink
use urlJoin
Browse files Browse the repository at this point in the history
  • Loading branch information
cramakri committed Sep 9, 2022
1 parent f714997 commit a856047
Show file tree
Hide file tree
Showing 3 changed files with 84 additions and 9 deletions.
20 changes: 12 additions & 8 deletions server/src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
* limitations under the License.
*/

import { convertType } from "./utils";
import { convertType, urlJoin } from "./utils";

const SERVER = {
url: process.env.SERVER_URL,
Expand All @@ -28,14 +28,18 @@ const SERVER = {
wsSuffix: "/ws",
};

const gatewayUrl = process.env.GATEWAY_URL || urlJoin(SERVER.url ?? "", "/api");

const DEPLOYMENT = {
gatewayUrl: process.env.GATEWAY_URL || SERVER.url + "/api",
gatewayLoginUrl:
(process.env.GATEWAY_URL || SERVER.url + "/api") +
(process.env.GATEWAY_LOGIN_PATH || "/auth/login"),
gatewayLogoutUrl:
(process.env.GATEWAY_URL || SERVER.url + "/api") +
(process.env.GATEWAY_LOGOUT_PATH || "/auth/logout"),
gatewayUrl,
gatewayLoginUrl: urlJoin(
gatewayUrl,
process.env.GATEWAY_LOGIN_PATH || "/auth/login"
),
gatewayLogoutUrl: urlJoin(
gatewayUrl,
process.env.GATEWAY_LOGOUT_PATH || "/auth/logout"
),
};

const SENTRY = {
Expand Down
4 changes: 3 additions & 1 deletion server/src/utils/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
* limitations under the License.
*/

import urlJoin from "./url-join";


/**
* Convert string to booloan or numbers. Useful to handle values coming from environmental variables.
Expand Down Expand Up @@ -134,4 +136,4 @@ function simpleHash(str: string, seed = 0): number {
return 4294967296 * (2097151 & h2) + (h1 >>> 0);
}

export { clamp, convertType, getCookieValueByName, getRelease, simpleHash, sleep };
export { clamp, convertType, getCookieValueByName, getRelease, simpleHash, sleep, urlJoin };
69 changes: 69 additions & 0 deletions server/src/utils/url-join.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
/* eslint-disable no-useless-escape */
/* eslint-disable curly */

/** url-join library from https://github.com/jfromaniello/url-join/blob/main/lib/url-join.js */
function normalize(strArray: string[]) {
const resultArray = [];
if (strArray.length === 0) {
return "";
}

if (typeof strArray[0] !== "string") {
throw new TypeError("Url must be a string. Received " + strArray[0]);
}

// If the first part is a plain protocol, we combine it with the next part.
if (strArray[0].match(/^[^/:]+:\/*$/) && strArray.length > 1) {
strArray[0] = strArray.shift() + strArray[0];
}

// There must be two or three slashes in the file protocol, two slashes in anything else.
if (strArray[0].match(/^file:\/\/\//)) {
strArray[0] = strArray[0].replace(/^([^/:]+):\/*/, "$1:///");
} else {
strArray[0] = strArray[0].replace(/^([^/:]+):\/*/, "$1://");
}

for (let i = 0; i < strArray.length; i++) {
let component = strArray[i];

if (typeof component !== "string") {
throw new TypeError("Url must be a string. Received " + component);
}

if (component === "") {
continue;
}

if (i > 0) {
// Removing the starting slashes for each component but the first.
component = component.replace(/^[\/]+/, "");
}
if (i < strArray.length - 1) {
// Removing the ending slashes for each component but the last.
component = component.replace(/[\/]+$/, "");
} else {
// For the last component we will combine multiple slashes to a single one.
component = component.replace(/[\/]+$/, "/");
}

resultArray.push(component);
}

let str = resultArray.join("/");
// Each input component is now separated by a single slash except the possible first plain protocol part.

// remove trailing slash before parameters or hash
str = str.replace(/\/(\?|&|#[^!])/g, "$1");

// replace ? in parameters with &
const parts = str.split("?");
str = parts.shift() + (parts.length > 0 ? "?" : "") + parts.join("&");

return str;
}

export default function urlJoin(...args: string[]): string {
const parts = Array.from(Array.isArray(args[0]) ? args[0] : args);
return normalize(parts);
}

0 comments on commit a856047

Please sign in to comment.