diff --git a/src/server/handlers/catch-all-handler.tsx b/src/server/handlers/catch-all-handler.tsx index b9ff13bf..e57f079d 100644 --- a/src/server/handlers/catch-all-handler.tsx +++ b/src/server/handlers/catch-all-handler.tsx @@ -1,4 +1,5 @@ import { initializeSite, isAuthPath } from "@utils/app"; +import { getHttpBaseInternal } from "@utils/env"; import { ErrorPageData } from "@utils/types"; import type { Request, Response } from "express"; import { StaticRouter, matchPath } from "inferno-router"; @@ -6,7 +7,6 @@ import { renderToString } from "inferno-server"; import IsomorphicCookie from "isomorphic-cookie"; import { GetSite, GetSiteResponse, LemmyHttp } from "lemmy-js-client"; import { App } from "../../shared/components/app/app"; -import { getHttpBaseInternal } from "../../shared/env"; import { InitialFetchRequest, IsoDataOptionalSite, diff --git a/src/server/handlers/manifest-handler.ts b/src/server/handlers/manifest-handler.ts index 6858cffd..014e0348 100644 --- a/src/server/handlers/manifest-handler.ts +++ b/src/server/handlers/manifest-handler.ts @@ -1,6 +1,6 @@ +import { getHttpBaseExternal, getHttpBaseInternal } from "@utils/env"; import type { Request, Response } from "express"; import { LemmyHttp } from "lemmy-js-client"; -import { getHttpBaseExternal, getHttpBaseInternal } from "../../shared/env"; import { wrapClient } from "../../shared/services/HttpService"; import generateManifestJson from "../utils/generate-manifest-json"; import { setForwardedHeaders } from "../utils/set-forwarded-headers"; diff --git a/src/server/utils/generate-manifest-json.ts b/src/server/utils/generate-manifest-json.ts index b03fd87b..2f9d8b80 100644 --- a/src/server/utils/generate-manifest-json.ts +++ b/src/server/utils/generate-manifest-json.ts @@ -1,8 +1,8 @@ +import { getHttpBaseExternal } from "@utils/env"; import { readFile } from "fs/promises"; import { GetSiteResponse } from "lemmy-js-client"; import path from "path"; import sharp from "sharp"; -import { getHttpBaseExternal } from "../../shared/env"; import { fetchIconPng } from "./fetch-icon-png"; const iconSizes = [72, 96, 128, 144, 152, 192, 384, 512]; diff --git a/src/shared/components/common/html-tags.tsx b/src/shared/components/common/html-tags.tsx index 3a8b270a..5d532589 100644 --- a/src/shared/components/common/html-tags.tsx +++ b/src/shared/components/common/html-tags.tsx @@ -1,7 +1,7 @@ +import { httpExternalPath } from "@utils/env"; import { htmlToText } from "html-to-text"; import { Component } from "inferno"; import { Helmet } from "inferno-helmet"; -import { httpExternalPath } from "../../env"; import { md } from "../../markdown"; import { I18NextService } from "../../services"; diff --git a/src/shared/components/post/post-listing.tsx b/src/shared/components/post/post-listing.tsx index bbc02892..8e4d7303 100644 --- a/src/shared/components/post/post-listing.tsx +++ b/src/shared/components/post/post-listing.tsx @@ -1,5 +1,6 @@ import { myAuthRequired, newVote, showScores } from "@utils/app"; import { canShare, share } from "@utils/browser"; +import { getExternalHost, getHttpBase } from "@utils/env"; import { futureDaysToUnixTime, hostname, numToSI } from "@utils/helpers"; import { isImage, isVideo } from "@utils/media"; import { @@ -38,7 +39,6 @@ import { TransferCommunity, } from "lemmy-js-client"; import { relTags } from "../../config"; -import { getExternalHost, getHttpBase } from "../../env"; import { BanType, PostFormParams, PurgeType, VoteType } from "../../interfaces"; import { mdNoImages, mdToHtml, mdToHtmlInline } from "../../markdown"; import { I18NextService, UserService } from "../../services"; diff --git a/src/shared/config.ts b/src/shared/config.ts index 384e86c3..28e8ce51 100644 --- a/src/shared/config.ts +++ b/src/shared/config.ts @@ -24,3 +24,5 @@ export const updateUnreadCountsInterval = 30000; export const fetchLimit = 40; export const relTags = "noopener nofollow"; export const emDash = "\u2014"; + +export const testHost = "0.0.0.0:8536"; diff --git a/src/shared/env.ts b/src/shared/env.ts deleted file mode 100644 index 287912d1..00000000 --- a/src/shared/env.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { isBrowser } from "@utils/browser"; - -const testHost = "0.0.0.0:8536"; - -function getInternalHost() { - return !isBrowser() - ? process.env.LEMMY_UI_LEMMY_INTERNAL_HOST ?? testHost - : testHost; // used for local dev -} - -export function getExternalHost() { - return isBrowser() - ? `${window.location.hostname}${ - ["1234", "1235"].includes(window.location.port) - ? ":8536" - : window.location.port == "" - ? "" - : `:${window.location.port}` - }` - : process.env.LEMMY_UI_LEMMY_EXTERNAL_HOST || testHost; -} - -function getSecure() { - return ( - isBrowser() - ? window.location.protocol.includes("https") - : process.env.LEMMY_UI_HTTPS === "true" - ) - ? "s" - : ""; -} - -function getHost() { - return isBrowser() ? getExternalHost() : getInternalHost(); -} - -function getBaseLocal(s = "") { - return `http${s}://${getHost()}`; -} - -export function getHttpBaseInternal() { - return getBaseLocal(); // Don't use secure here -} - -export function getHttpBaseExternal() { - return `http${getSecure()}://${getExternalHost()}`; -} - -export function getHttpBase() { - return getBaseLocal(getSecure()); -} - -export function isHttps() { - return getSecure() === "s"; -} - -console.log(`httpbase: ${getHttpBase()}`); -console.log(`isHttps: ${isHttps()}`); - -// This is for html tags, don't include port -export function httpExternalPath(path: string) { - return `http${getSecure()}://${getExternalHost().replace( - /:\d+/g, - "" - )}${path}`; -} diff --git a/src/shared/services/HttpService.ts b/src/shared/services/HttpService.ts index 6f57ecb5..361ffbd3 100644 --- a/src/shared/services/HttpService.ts +++ b/src/shared/services/HttpService.ts @@ -1,5 +1,5 @@ +import { getHttpBase } from "@utils/env"; import { LemmyHttp } from "lemmy-js-client"; -import { getHttpBase } from "../../shared/env"; import { toast } from "../../shared/toast"; import { I18NextService } from "./I18NextService"; diff --git a/src/shared/services/UserService.ts b/src/shared/services/UserService.ts index df4f00a8..3d08e124 100644 --- a/src/shared/services/UserService.ts +++ b/src/shared/services/UserService.ts @@ -1,10 +1,10 @@ // import Cookies from 'js-cookie'; import { isAuthPath } from "@utils/app"; import { isBrowser } from "@utils/browser"; +import { isHttps } from "@utils/env"; import IsomorphicCookie from "isomorphic-cookie"; import jwt_decode from "jwt-decode"; import { LoginResponse, MyUserInfo } from "lemmy-js-client"; -import { isHttps } from "../env"; import { toast } from "../toast"; import { I18NextService } from "./I18NextService"; diff --git a/src/shared/utils/env/get-base-local.ts b/src/shared/utils/env/get-base-local.ts new file mode 100644 index 00000000..754d66d3 --- /dev/null +++ b/src/shared/utils/env/get-base-local.ts @@ -0,0 +1,5 @@ +import { getHost } from "@utils/env"; + +export default function getBaseLocal(s = "") { + return `http${s}://${getHost()}`; +} diff --git a/src/shared/utils/env/get-external-host.ts b/src/shared/utils/env/get-external-host.ts new file mode 100644 index 00000000..7e2635d8 --- /dev/null +++ b/src/shared/utils/env/get-external-host.ts @@ -0,0 +1,14 @@ +import { isBrowser } from "@utils/browser"; +import { testHost } from "../../config"; + +export default function getExternalHost() { + return isBrowser() + ? `${window.location.hostname}${ + ["1234", "1235"].includes(window.location.port) + ? ":8536" + : window.location.port == "" + ? "" + : `:${window.location.port}` + }` + : process.env.LEMMY_UI_LEMMY_EXTERNAL_HOST || testHost; +} diff --git a/src/shared/utils/env/get-host.ts b/src/shared/utils/env/get-host.ts new file mode 100644 index 00000000..0e361ac3 --- /dev/null +++ b/src/shared/utils/env/get-host.ts @@ -0,0 +1,6 @@ +import { isBrowser } from "@utils/browser"; +import { getExternalHost, getInternalHost } from "@utils/env"; + +export default function getHost() { + return isBrowser() ? getExternalHost() : getInternalHost(); +} diff --git a/src/shared/utils/env/get-http-base-external.ts b/src/shared/utils/env/get-http-base-external.ts new file mode 100644 index 00000000..c0ee3bb3 --- /dev/null +++ b/src/shared/utils/env/get-http-base-external.ts @@ -0,0 +1,5 @@ +import { getExternalHost, getSecure } from "@utils/env"; + +export default function getHttpBaseExternal() { + return `http${getSecure()}://${getExternalHost()}`; +} diff --git a/src/shared/utils/env/get-http-base-internal.ts b/src/shared/utils/env/get-http-base-internal.ts new file mode 100644 index 00000000..e30c14c2 --- /dev/null +++ b/src/shared/utils/env/get-http-base-internal.ts @@ -0,0 +1,5 @@ +import { getBaseLocal } from "@utils/env"; + +export default function getHttpBaseInternal() { + return getBaseLocal(); // Don't use secure here +} diff --git a/src/shared/utils/env/get-http-base.ts b/src/shared/utils/env/get-http-base.ts new file mode 100644 index 00000000..97fa0578 --- /dev/null +++ b/src/shared/utils/env/get-http-base.ts @@ -0,0 +1,5 @@ +import { getBaseLocal, getSecure } from "@utils/env"; + +export default function getHttpBase() { + return getBaseLocal(getSecure()); +} diff --git a/src/shared/utils/env/get-internal-host.ts b/src/shared/utils/env/get-internal-host.ts new file mode 100644 index 00000000..ee8fdbd3 --- /dev/null +++ b/src/shared/utils/env/get-internal-host.ts @@ -0,0 +1,8 @@ +import { isBrowser } from "@utils/browser"; +import { testHost } from "../../config"; + +export default function getInternalHost() { + return !isBrowser() + ? process.env.LEMMY_UI_LEMMY_INTERNAL_HOST ?? testHost + : testHost; // used for local dev +} diff --git a/src/shared/utils/env/get-secure.ts b/src/shared/utils/env/get-secure.ts new file mode 100644 index 00000000..7e78b4f5 --- /dev/null +++ b/src/shared/utils/env/get-secure.ts @@ -0,0 +1,11 @@ +import { isBrowser } from "@utils/browser"; + +export default function getSecure() { + return ( + isBrowser() + ? window.location.protocol.includes("https") + : process.env.LEMMY_UI_HTTPS === "true" + ) + ? "s" + : ""; +} diff --git a/src/shared/utils/env/http-external-path.ts b/src/shared/utils/env/http-external-path.ts new file mode 100644 index 00000000..f24ccace --- /dev/null +++ b/src/shared/utils/env/http-external-path.ts @@ -0,0 +1,9 @@ +import { getExternalHost, getSecure } from "@utils/env"; + +// This is for html tags, don't include port +export default function httpExternalPath(path: string) { + return `http${getSecure()}://${getExternalHost().replace( + /:\d+/g, + "" + )}${path}`; +} diff --git a/src/shared/utils/env/index.ts b/src/shared/utils/env/index.ts new file mode 100644 index 00000000..e14c6735 --- /dev/null +++ b/src/shared/utils/env/index.ts @@ -0,0 +1,23 @@ +import getBaseLocal from "./get-base-local"; +import getExternalHost from "./get-external-host"; +import getHost from "./get-host"; +import getHttpBase from "./get-http-base"; +import getHttpBaseExternal from "./get-http-base-external"; +import getHttpBaseInternal from "./get-http-base-internal"; +import getInternalHost from "./get-internal-host"; +import getSecure from "./get-secure"; +import httpExternalPath from "./http-external-path"; +import isHttps from "./is-https"; + +export { + getBaseLocal, + getExternalHost, + getHost, + getHttpBase, + getHttpBaseExternal, + getHttpBaseInternal, + getInternalHost, + getSecure, + httpExternalPath, + isHttps, +}; diff --git a/src/shared/utils/env/is-https.ts b/src/shared/utils/env/is-https.ts new file mode 100644 index 00000000..dd907570 --- /dev/null +++ b/src/shared/utils/env/is-https.ts @@ -0,0 +1,5 @@ +import { getSecure } from "@utils/env"; + +export default function isHttps() { + return getSecure() === "s"; +}