From 4f0f38d953fde3bb96db67d98dfdcea9819d6b72 Mon Sep 17 00:00:00 2001 From: Pranav C Date: Tue, 21 Nov 2023 14:16:43 +0530 Subject: [PATCH] feat: remove signup link from signup page if invite only signup enabled --- .../nc-gui/composables/useGlobal/state.ts | 1 + .../nc-gui/composables/useGlobal/types.ts | 1 + packages/nc-gui/pages/signin.vue | 2 +- packages/nocodb/src/services/utils.service.ts | 26 ++++++++++++------- 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/packages/nc-gui/composables/useGlobal/state.ts b/packages/nc-gui/composables/useGlobal/state.ts index 4fab0a5c72..318dea2a43 100644 --- a/packages/nc-gui/composables/useGlobal/state.ts +++ b/packages/nc-gui/composables/useGlobal/state.ts @@ -109,6 +109,7 @@ export function useGlobalState(storageKey = 'nocodb-gui-v2'): State { automationLogLevel: 'OFF', disableEmailAuth: false, dashboardPath: '/dashboard', + inviteOnlySignup: false, }) /** reactive token payload */ diff --git a/packages/nc-gui/composables/useGlobal/types.ts b/packages/nc-gui/composables/useGlobal/types.ts index f7e640cd7c..9efbfacb45 100644 --- a/packages/nc-gui/composables/useGlobal/types.ts +++ b/packages/nc-gui/composables/useGlobal/types.ts @@ -34,6 +34,7 @@ export interface AppInfo { disableEmailAuth: boolean mainSubDomain?: string dashboardPath: string + inviteOnlySignup: boolean } export interface StoredState { diff --git a/packages/nc-gui/pages/signin.vue b/packages/nc-gui/pages/signin.vue index 31cc73eb4e..63d3b35d77 100644 --- a/packages/nc-gui/pages/signin.vue +++ b/packages/nc-gui/pages/signin.vue @@ -184,7 +184,7 @@ function navigateForgotPassword() { -
+
{{ $t('msg.info.signUp.dontHaveAccount') }} {{ $t('general.signUp') }}
diff --git a/packages/nocodb/src/services/utils.service.ts b/packages/nocodb/src/services/utils.service.ts index 9cd676aef3..3abeeb31e1 100644 --- a/packages/nocodb/src/services/utils.service.ts +++ b/packages/nocodb/src/services/utils.service.ts @@ -5,10 +5,10 @@ import { ViewTypes } from 'nocodb-sdk'; import { ConfigService } from '@nestjs/config'; import { useAgent } from 'request-filtering-agent'; import type { AppConfig } from '~/interface/config'; -import { NC_ATTACHMENT_FIELD_SIZE } from '~/constants'; +import {NC_APP_SETTINGS, NC_ATTACHMENT_FIELD_SIZE} from '~/constants'; import SqlMgrv2 from '~/db/sql-mgr/v2/SqlMgrv2'; import { NcError } from '~/helpers/catchError'; -import { Base, User } from '~/models'; +import {Base, Store, User} from '~/models'; import Noco from '~/Noco'; import NcConnectionMgrv2 from '~/utils/common/NcConnectionMgrv2'; import { MetaTable } from '~/utils/globals'; @@ -365,6 +365,13 @@ export class UtilsService { async appInfo(param: { req: { ncSiteUrl: string } }) { const baseHasAdmin = !(await User.isFirst()); + + let settings: { invite_only_signup?: boolean } = {}; + try { + settings = JSON.parse((await Store.get(NC_APP_SETTINGS))?.value); + } catch {} + + const oidcAuthEnabled = !!( process.env.NC_OIDC_ISSUER && process.env.NC_OIDC_AUTHORIZATION_URL && @@ -384,10 +391,10 @@ export class UtilsService { type: 'rest', env: process.env.NODE_ENV, googleAuthEnabled: !!( - process.env.NC_GOOGLE_CLIENT_ID && process.env.NC_GOOGLE_CLIENT_SECRET + process.env.NC_GOOGLE_CLIENT_ID && process.env.NC_GOOGLE_CLIENT_SECRET ), githubAuthEnabled: !!( - process.env.NC_GITHUB_CLIENT_ID && process.env.NC_GITHUB_CLIENT_SECRET + process.env.NC_GITHUB_CLIENT_ID && process.env.NC_GITHUB_CLIENT_SECRET ), oidcAuthEnabled, oidcProviderName, @@ -395,8 +402,8 @@ export class UtilsService { connectToExternalDB: !process.env.NC_CONNECT_TO_EXTERNAL_DB_DISABLED, version: packageVersion, defaultLimit: Math.max( - Math.min(defaultLimitConfig.limitDefault, defaultLimitConfig.limitMax), - defaultLimitConfig.limitMin, + Math.min(defaultLimitConfig.limitDefault, defaultLimitConfig.limitMax), + defaultLimitConfig.limitMin, ), defaultGroupByLimit: defaultGroupByLimitConfig, timezone: defaultConnectionConfig.timezone, @@ -413,9 +420,10 @@ export class UtilsService { disableEmailAuth: this.configService.get('auth.disableEmailAuth', { infer: true, }), - mainSubDomain: this.configService.get('mainSubDomain', { infer: true }), - dashboardPath: this.configService.get('dashboardPath', { infer: true }), - }; + mainSubDomain: this.configService.get('mainSubDomain', {infer: true}), + dashboardPath: this.configService.get('dashboardPath', {infer: true}), + inviteOnlySignup: settings.invite_only_signup, + } return result; }