Make WS host configurable (#167)
authorMischa Spiegelmock <me@mish.dev>
Fri, 12 Feb 2021 17:54:35 +0000 (19:54 +0200)
committerGitHub <noreply@github.com>
Fri, 12 Feb 2021 17:54:35 +0000 (12:54 -0500)
* Make WS host configurable

* indent

* Type fixes

* Type lemmyConfig

* typo

* Move lemmy config to interfaces.ts

src/server/index.tsx
src/shared/env.ts
src/shared/interfaces.ts
src/shared/utils.ts
tsconfig.json

index 21b3d053015c0afd19a4d87c3923ac582d3f7394..666140f8cd9ea6f8679e35088862b2988af7c957 100644 (file)
@@ -5,7 +5,11 @@ import { renderToString } from 'inferno-server';
 import { matchPath } from 'inferno-router';
 import path from 'path';
 import { App } from '../shared/components/app';
-import { InitialFetchRequest, IsoData } from '../shared/interfaces';
+import {
+  ILemmyConfig,
+  InitialFetchRequest,
+  IsoData,
+} from '../shared/interfaces';
 import { routes } from '../shared/routes';
 import IsomorphicCookie from 'isomorphic-cookie';
 import { GetSite, LemmyHttp } from 'lemmy-js-client';
@@ -95,11 +99,14 @@ server.get('/*', async (req, res) => {
   const cspStr = process.env.LEMMY_EXTERNAL_HOST ? renderToString(cspHtml) : '';
   const helmet = Helmet.renderStatic();
 
+  const config: ILemmyConfig = { wsHost: process.env.LEMMY_WS_HOST };
+
   res.send(`
            <!DOCTYPE html>
            <html ${helmet.htmlAttributes.toString()} lang="en">
            <head>
            <script>window.isoData = ${serialize(isoData)}</script>
+           <script>window.lemmyConfig = ${serialize(config)}</script>
 
            ${helmet.title.toString()}
            ${helmet.meta.toString()}
index 02d66e88447a0ea2ccf63c3f7f80626137bffe68..9fd5039a4a6a6a13584014a2c63cdd1765916713 100644 (file)
@@ -2,30 +2,39 @@ import { isBrowser } from './utils';
 
 const testHost = 'localhost:8536';
 
-const internalHost =
+let internalHost =
   (!isBrowser() && process.env.LEMMY_INTERNAL_HOST) || testHost; // used for local dev
-export const externalHost = isBrowser()
-  ? `${window.location.hostname}${
-      ['1234', '1235'].includes(window.location.port)
-        ? ':8536'
-        : window.location.port == ''
-        ? ''
-        : `:${window.location.port}`
-    }`
-  : process.env.LEMMY_EXTERNAL_HOST || testHost;
-
-const secure = isBrowser()
-  ? window.location.protocol == 'https:'
-    ? 's'
-    : ''
-  : process.env.LEMMY_HTTPS == 'true'
-  ? 's'
-  : '';
-
-const host = isBrowser() ? externalHost : internalHost;
+export let externalHost: string;
+let host: string;
+let wsHost: string;
+let secure: string;
+
+if (isBrowser()) {
+  // browser
+  const lemmyConfig =
+    typeof window.lemmyConfig !== 'undefined' ? window.lemmyConfig : {};
+
+  externalHost = `${window.location.hostname}${
+    ['1234', '1235'].includes(window.location.port)
+      ? ':8536'
+      : window.location.port == ''
+      ? ''
+      : `:${window.location.port}`
+  }`;
+
+  host = externalHost;
+  wsHost = lemmyConfig.wsHost || host;
+  secure = window.location.protocol == 'https:' ? 's' : '';
+} else {
+  // server-side
+  externalHost = process.env.LEMMY_EXTERNAL_HOST || testHost;
+  host = internalHost;
+  wsHost = process.env.LEMMY_WS_HOST || host;
+  secure = process.env.LEMMY_HTTPS == 'true' ? 's' : '';
+}
 
 const httpBase = `http://${host}`; // Don't use secure here
-export const wsUri = `ws${secure}://${host}/api/v2/ws`;
+export const wsUri = `ws${secure}://${wsHost}/api/v2/ws`;
 export const httpUri = `${httpBase}/api/v2`;
 export const pictrsUri = `http${secure}://${host}/pictrs/image`;
 
index 116f5d150323f89ee5f61f0b48507568157fd085..cc4c18a56b7284a645ed30c6e6c672bd87dd3655 100644 (file)
@@ -14,9 +14,14 @@ export interface IsoData {
   // communities?: ListCommunitiesResponse;
 }
 
+export interface ILemmyConfig {
+  wsHost?: string;
+}
+
 declare global {
   interface Window {
     isoData: IsoData;
+    lemmyConfig?: ILemmyConfig;
   }
 }
 
index 2f4414283814f667474a17133c376fdc5ae77e54..016862f4a7f4191018dcbb45d88b070149d38cb0 100644 (file)
@@ -54,7 +54,6 @@ import {
   CommentNode as CommentNodeI,
 } from './interfaces';
 import { UserService, WebSocketService } from './services';
-
 var Tribute: any;
 if (isBrowser()) {
   Tribute = require('tributejs');
index cd9bc8d0b35161873a380449592f00244a6bedbc..aae5ae70e7e717e6e74d8c46c964dbbf91dd120f 100644 (file)
@@ -22,6 +22,6 @@
        },\r
        "include": [\r
                "src/**/*",\r
-               "node_modules/inferno/dist/index.d.ts"\r
+               "node_modules/inferno/dist/index.d.ts",\r
        ]\r
 }\r