From f554eab3f106bc0a7f715e310b6ea4415c04f293 Mon Sep 17 00:00:00 2001 From: lolgopher Date: Fri, 11 Aug 2023 00:24:56 +0900 Subject: [PATCH 1/5] fix: set socket path and namespace by environment variables --- packages/nc-gui/plugins/jobs.ts | 1 + packages/nc-gui/plugins/tele.ts | 5 +++-- packages/nocodb/src/gateways/socket.gateway.ts | 2 ++ packages/nocodb/src/modules/jobs/jobs.gateway.ts | 3 ++- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/nc-gui/plugins/jobs.ts b/packages/nc-gui/plugins/jobs.ts index cc12c3aa86..2df588160c 100644 --- a/packages/nc-gui/plugins/jobs.ts +++ b/packages/nc-gui/plugins/jobs.ts @@ -16,6 +16,7 @@ export default defineNuxtPlugin(async (nuxtApp) => { socket = io(`${url.href}jobs`, { extraHeaders: { 'xc-auth': token }, + path: `${url.pathname}socket.io`, }) socket.on('connect_error', (e) => { diff --git a/packages/nc-gui/plugins/tele.ts b/packages/nc-gui/plugins/tele.ts index eed8abe5b7..87dc91cc2c 100644 --- a/packages/nc-gui/plugins/tele.ts +++ b/packages/nc-gui/plugins/tele.ts @@ -16,10 +16,11 @@ export default defineNuxtPlugin(async (nuxtApp) => { try { if (socket) socket.disconnect() - const url = new URL(appInfo.ncSiteUrl, window.location.href.split(/[?#]/)[0]).href + const url = new URL(appInfo.ncSiteUrl, window.location.href.split(/[?#]/)[0]) - socket = io(url, { + socket = io(url.href, { extraHeaders: { 'xc-auth': token }, + path: `${url.pathname}socket.io`, }) socket.on('connect_error', () => { diff --git a/packages/nocodb/src/gateways/socket.gateway.ts b/packages/nocodb/src/gateways/socket.gateway.ts index 192c24caaa..1c1447a830 100644 --- a/packages/nocodb/src/gateways/socket.gateway.ts +++ b/packages/nocodb/src/gateways/socket.gateway.ts @@ -14,12 +14,14 @@ function getHash(str) { return crypto.createHash('md5').update(str).digest('hex'); } +const url = new URL(process.env.NC_PUBLIC_URL || `http://localhost:${process.env.PORT}/`) @WebSocketGateway({ cors: { origin: '*', allowedHeaders: ['xc-auth'], credentials: true, }, + namespace: url.pathname, }) @Injectable() export class SocketGateway implements OnModuleInit { diff --git a/packages/nocodb/src/modules/jobs/jobs.gateway.ts b/packages/nocodb/src/modules/jobs/jobs.gateway.ts index 9e3d08aa68..b49e043906 100644 --- a/packages/nocodb/src/modules/jobs/jobs.gateway.ts +++ b/packages/nocodb/src/modules/jobs/jobs.gateway.ts @@ -14,13 +14,14 @@ import { JobEvents } from '../../interface/Jobs'; import type { OnModuleInit } from '@nestjs/common'; import type { JobStatus } from '../../interface/Jobs'; +const url = new URL(process.env.NC_PUBLIC_URL || `http://localhost:${process.env.PORT}/`) @WebSocketGateway({ cors: { origin: '*', allowedHeaders: ['xc-auth'], credentials: true, }, - namespace: 'jobs', + namespace: `${url.pathname}jobs`, }) export class JobsGateway implements OnModuleInit { constructor(@Inject('JobsService') private readonly jobsService) {} From e28a3fa73e9690393c3467442abb9e856bb12c64 Mon Sep 17 00:00:00 2001 From: lolgopher Date: Fri, 11 Aug 2023 00:28:35 +0900 Subject: [PATCH 2/5] fix: change base url of swagger by nocodb url --- packages/nc-gui/components/general/HelpAndSupport.vue | 2 +- packages/nc-gui/pages/[projectType]/[projectId]/index.vue | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/nc-gui/components/general/HelpAndSupport.vue b/packages/nc-gui/components/general/HelpAndSupport.vue index e8e8f7c259..432ed2a6cd 100644 --- a/packages/nc-gui/components/general/HelpAndSupport.vue +++ b/packages/nc-gui/components/general/HelpAndSupport.vue @@ -10,7 +10,7 @@ const { project } = storeToRefs(useProject()) const route = useRoute() const openSwaggerLink = () => { - openLink(`/api/v1/db/meta/projects/${route.params.projectId}/swagger`, appInfo.value.ncSiteUrl) + openLink(`./api/v1/db/meta/projects/${route.params.projectId}/swagger`, appInfo.value.ncSiteUrl) } diff --git a/packages/nc-gui/pages/[projectType]/[projectId]/index.vue b/packages/nc-gui/pages/[projectType]/[projectId]/index.vue index 64729b1ef9..e2d5fce8ed 100644 --- a/packages/nc-gui/pages/[projectType]/[projectId]/index.vue +++ b/packages/nc-gui/pages/[projectType]/[projectId]/index.vue @@ -365,7 +365,7 @@ useEventListener(document, 'keydown', async (e: KeyboardEvent) => { v-if="isUIAllowed('apiDocs') && !isMobileMode" v-e="['e:api-docs']" class="nc-project-menu-item group" - @click.stop="openLink(`/api/v1/db/meta/projects/${route.params.projectId}/swagger`, appInfo.ncSiteUrl)" + @click.stop="openLink(`./api/v1/db/meta/projects/${route.params.projectId}/swagger`, appInfo.ncSiteUrl)" > {{ $t('activity.account.swagger') }} From d7b09c3e3210d60780b6e861b22ea49d1578f55e Mon Sep 17 00:00:00 2001 From: lolgopher Date: Fri, 11 Aug 2023 13:52:35 +0900 Subject: [PATCH 3/5] fix: set default port when environment variable is empty --- packages/nocodb/src/gateways/socket.gateway.ts | 2 +- packages/nocodb/src/modules/jobs/jobs.gateway.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/nocodb/src/gateways/socket.gateway.ts b/packages/nocodb/src/gateways/socket.gateway.ts index 1c1447a830..d493d2044e 100644 --- a/packages/nocodb/src/gateways/socket.gateway.ts +++ b/packages/nocodb/src/gateways/socket.gateway.ts @@ -14,7 +14,7 @@ function getHash(str) { return crypto.createHash('md5').update(str).digest('hex'); } -const url = new URL(process.env.NC_PUBLIC_URL || `http://localhost:${process.env.PORT}/`) +const url = new URL(process.env.NC_PUBLIC_URL || `http://localhost:${process.env.PORT || '8080'}/`) @WebSocketGateway({ cors: { origin: '*', diff --git a/packages/nocodb/src/modules/jobs/jobs.gateway.ts b/packages/nocodb/src/modules/jobs/jobs.gateway.ts index b49e043906..95d4e9fd40 100644 --- a/packages/nocodb/src/modules/jobs/jobs.gateway.ts +++ b/packages/nocodb/src/modules/jobs/jobs.gateway.ts @@ -14,7 +14,7 @@ import { JobEvents } from '../../interface/Jobs'; import type { OnModuleInit } from '@nestjs/common'; import type { JobStatus } from '../../interface/Jobs'; -const url = new URL(process.env.NC_PUBLIC_URL || `http://localhost:${process.env.PORT}/`) +const url = new URL(process.env.NC_PUBLIC_URL || `http://localhost:${process.env.PORT || '8080'}/`) @WebSocketGateway({ cors: { origin: '*', From 1c3dbf7318df4bc9a11ad9fb318892668c2921b4 Mon Sep 17 00:00:00 2001 From: lolgopher Date: Fri, 11 Aug 2023 17:15:23 +0900 Subject: [PATCH 4/5] fix: url ensure trailing slash --- packages/nocodb/src/gateways/socket.gateway.ts | 7 ++++++- packages/nocodb/src/modules/jobs/jobs.gateway.ts | 9 ++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/nocodb/src/gateways/socket.gateway.ts b/packages/nocodb/src/gateways/socket.gateway.ts index d493d2044e..1cc1b6818d 100644 --- a/packages/nocodb/src/gateways/socket.gateway.ts +++ b/packages/nocodb/src/gateways/socket.gateway.ts @@ -15,13 +15,18 @@ function getHash(str) { } const url = new URL(process.env.NC_PUBLIC_URL || `http://localhost:${process.env.PORT || '8080'}/`) +let namespace = url.pathname +if (!namespace.endsWith('/')) { + namespace = namespace + '/'; +} + @WebSocketGateway({ cors: { origin: '*', allowedHeaders: ['xc-auth'], credentials: true, }, - namespace: url.pathname, + namespace: namespace, }) @Injectable() export class SocketGateway implements OnModuleInit { diff --git a/packages/nocodb/src/modules/jobs/jobs.gateway.ts b/packages/nocodb/src/modules/jobs/jobs.gateway.ts index 95d4e9fd40..f4f38851f0 100644 --- a/packages/nocodb/src/modules/jobs/jobs.gateway.ts +++ b/packages/nocodb/src/modules/jobs/jobs.gateway.ts @@ -15,13 +15,20 @@ import type { OnModuleInit } from '@nestjs/common'; import type { JobStatus } from '../../interface/Jobs'; const url = new URL(process.env.NC_PUBLIC_URL || `http://localhost:${process.env.PORT || '8080'}/`) +let namespace = url.pathname +if (!namespace.endsWith('/')) { + namespace = namespace + '/jobs'; +} else { + namespace = namespace + 'jobs'; +} + @WebSocketGateway({ cors: { origin: '*', allowedHeaders: ['xc-auth'], credentials: true, }, - namespace: `${url.pathname}jobs`, + namespace: namespace, }) export class JobsGateway implements OnModuleInit { constructor(@Inject('JobsService') private readonly jobsService) {} From bb616a5ec76ceb8f429da4da7a9df9eb9c082654 Mon Sep 17 00:00:00 2001 From: lolgopher Date: Sat, 12 Aug 2023 17:49:17 +0900 Subject: [PATCH 5/5] fix: code review --- packages/nc-gui/plugins/jobs.ts | 4 +++- packages/nc-gui/plugins/tele.ts | 4 +++- packages/nocodb/src/gateways/socket.gateway.ts | 6 ++---- packages/nocodb/src/modules/jobs/jobs.gateway.ts | 8 ++------ 4 files changed, 10 insertions(+), 12 deletions(-) diff --git a/packages/nc-gui/plugins/jobs.ts b/packages/nc-gui/plugins/jobs.ts index 2df588160c..116c2399e1 100644 --- a/packages/nc-gui/plugins/jobs.ts +++ b/packages/nc-gui/plugins/jobs.ts @@ -13,10 +13,12 @@ export default defineNuxtPlugin(async (nuxtApp) => { if (socket) socket.disconnect() const url = new URL(appInfo.ncSiteUrl, window.location.href.split(/[?#]/)[0]) + let socketPath = url.pathname + socketPath += socketPath.endsWith("/") ? "socket.io" : "/socket.io" socket = io(`${url.href}jobs`, { extraHeaders: { 'xc-auth': token }, - path: `${url.pathname}socket.io`, + path: socketPath, }) socket.on('connect_error', (e) => { diff --git a/packages/nc-gui/plugins/tele.ts b/packages/nc-gui/plugins/tele.ts index 87dc91cc2c..a28a9dd3be 100644 --- a/packages/nc-gui/plugins/tele.ts +++ b/packages/nc-gui/plugins/tele.ts @@ -17,10 +17,12 @@ export default defineNuxtPlugin(async (nuxtApp) => { if (socket) socket.disconnect() const url = new URL(appInfo.ncSiteUrl, window.location.href.split(/[?#]/)[0]) + let socketPath = url.pathname + socketPath += socketPath.endsWith("/") ? "socket.io" : "/socket.io" socket = io(url.href, { extraHeaders: { 'xc-auth': token }, - path: `${url.pathname}socket.io`, + path: socketPath, }) socket.on('connect_error', () => { diff --git a/packages/nocodb/src/gateways/socket.gateway.ts b/packages/nocodb/src/gateways/socket.gateway.ts index 1cc1b6818d..14f5071f9a 100644 --- a/packages/nocodb/src/gateways/socket.gateway.ts +++ b/packages/nocodb/src/gateways/socket.gateway.ts @@ -16,9 +16,7 @@ function getHash(str) { const url = new URL(process.env.NC_PUBLIC_URL || `http://localhost:${process.env.PORT || '8080'}/`) let namespace = url.pathname -if (!namespace.endsWith('/')) { - namespace = namespace + '/'; -} +namespace += namespace.endsWith("/") ? "" : "/" @WebSocketGateway({ cors: { @@ -26,7 +24,7 @@ if (!namespace.endsWith('/')) { allowedHeaders: ['xc-auth'], credentials: true, }, - namespace: namespace, + namespace, }) @Injectable() export class SocketGateway implements OnModuleInit { diff --git a/packages/nocodb/src/modules/jobs/jobs.gateway.ts b/packages/nocodb/src/modules/jobs/jobs.gateway.ts index f4f38851f0..76ababf3c2 100644 --- a/packages/nocodb/src/modules/jobs/jobs.gateway.ts +++ b/packages/nocodb/src/modules/jobs/jobs.gateway.ts @@ -16,11 +16,7 @@ import type { JobStatus } from '../../interface/Jobs'; const url = new URL(process.env.NC_PUBLIC_URL || `http://localhost:${process.env.PORT || '8080'}/`) let namespace = url.pathname -if (!namespace.endsWith('/')) { - namespace = namespace + '/jobs'; -} else { - namespace = namespace + 'jobs'; -} +namespace += namespace.endsWith("/") ? "jobs" : "/jobs" @WebSocketGateway({ cors: { @@ -28,7 +24,7 @@ if (!namespace.endsWith('/')) { allowedHeaders: ['xc-auth'], credentials: true, }, - namespace: namespace, + namespace, }) export class JobsGateway implements OnModuleInit { constructor(@Inject('JobsService') private readonly jobsService) {}