diff --git a/src/app/settings/server/actions.ts b/src/app/settings/server/actions.ts index d755c02f..40835682 100644 --- a/src/app/settings/server/actions.ts +++ b/src/app/settings/server/actions.ts @@ -113,8 +113,12 @@ export const updateIngressSettings = async (prevState: any, inputData: QsIngress value: validatedData.disableNodePortAccess + '' }); + const currentReleaseChannel = await paramService.getString(ParamService.USE_CANARY_CHANNEL, 'false'); + await quickStackService.createOrUpdateService(!validatedData.disableNodePortAccess); await quickStackService.createOrUpdateIngress(validatedData.serverUrl); + setTimeout(() => quickStackService.createOrUpdateDeployment(undefined, currentReleaseChannel === 'true' ? 'canary' : 'latest'), 2000); // delay is needed to ensure that the response is sent before the backend restarts, otherwise an error is shown in the UI. + }); diff --git a/src/server/services/param.service.ts b/src/server/services/param.service.ts index 67b73484..e9d69e25 100644 --- a/src/server/services/param.service.ts +++ b/src/server/services/param.service.ts @@ -7,7 +7,7 @@ import { CryptoUtils } from "../utils/crypto.utils"; export class ParamService { - static readonly QS_SERVER_HOSTNAME = 'qsServerHostname'; + static readonly QS_SERVER_HOSTNAME = Constants.QS_PARAM_SERVER_HOSTNAME; static readonly DISABLE_NODEPORT_ACCESS = 'disableNodePortAccess'; static readonly LETS_ENCRYPT_MAIL = 'letsEncryptMail'; static readonly USE_CANARY_CHANNEL = 'useCanaryChannel'; diff --git a/src/server/services/qs.service.ts b/src/server/services/qs.service.ts index 42a7c3a2..8e4d861c 100644 --- a/src/server/services/qs.service.ts +++ b/src/server/services/qs.service.ts @@ -6,6 +6,8 @@ import crypto from "crypto"; import { FancyConsoleUtils } from "../../shared/utils/fancy-console.utils"; import standalonePodService from "./standalone-services/standalone-pod.service"; import ingressSetupService from "./setup-services/ingress-setup.service"; +import dataAccess from "../adapter/db.client"; +import { Constants } from "@/shared/utils/constants"; class QuickStackService { @@ -259,6 +261,11 @@ class QuickStackService { async createOrUpdateDeployment(inputNextAuthSecret?: string, imageTag = 'latest') { const generatedNextAuthSecret = crypto.randomBytes(32).toString('base64'); const existingDeployment = await this.getExistingDeployment(); + const hostnameParam = await dataAccess.client.parameter.findUnique({ + where: { name: Constants.QS_PARAM_SERVER_HOSTNAME }, + select: { value: true }, + }); + const nextAuthUrl = hostnameParam?.value ? `https://${hostnameParam.value}` : undefined; const body: V1Deployment = { metadata: { name: this.QUICKSTACK_DEPLOYMENT_NAME, @@ -299,6 +306,10 @@ class QuickStackService { name: 'NEXTAUTH_SECRET', value: inputNextAuthSecret || existingDeployment.nextAuthSecret || generatedNextAuthSecret }, + ...nextAuthUrl ? [{ + name: 'NEXTAUTH_URL', + value: nextAuthUrl, + }] : [], ...process.env.K3S_JOIN_TOKEN ? [{ name: 'K3S_JOIN_TOKEN', value: process.env.K3S_JOIN_TOKEN diff --git a/src/shared/utils/constants.ts b/src/shared/utils/constants.ts index 0e2fbbd9..f872cb71 100644 --- a/src/shared/utils/constants.ts +++ b/src/shared/utils/constants.ts @@ -41,5 +41,6 @@ export class Constants { static readonly QS_AUTH_PROXY_IMAGE = 'quickstack/auth-proxy:canary'; static readonly QS_AGENT_CLAIM_COOKIE = 'qs-agent-claim'; static readonly QS_AGENT_ACCESS_COOKIE = 'qs-agent-access'; + static readonly QS_PARAM_SERVER_HOSTNAME = 'qsServerHostname'; }