diff --git a/apps/app/src/features/opentelemetry/server/node-sdk.ts b/apps/app/src/features/opentelemetry/server/node-sdk.ts index 46e506ff042..317bb152792 100644 --- a/apps/app/src/features/opentelemetry/server/node-sdk.ts +++ b/apps/app/src/features/opentelemetry/server/node-sdk.ts @@ -82,13 +82,13 @@ export const initServiceInstanceId = async(): Promise => { const instrumentationEnabled = configManager.getConfig('otel:enabled', ConfigSource.env); if (instrumentationEnabled) { const { generateNodeSDKConfiguration } = await import('./node-sdk-configuration'); - const { getInstance: getGrowiInfoService } = await import('~/server/service/growi-info'); + const { growiInfoService } = await import('~/server/service/growi-info'); // get GrowiInfo with additional info - const growiInfo = await getGrowiInfoService().getGrowiInfo(); + const growiInfo = await growiInfoService.getGrowiInfo(); const serviceInstanceId = configManager.getConfig('otel:serviceInstanceId') - ?? growiInfo.appSiteUrlHashed; + ?? growiInfo.serviceInstanceId; const updatedResource = generateNodeSDKConfiguration(serviceInstanceId); diff --git a/apps/app/src/features/questionnaire/server/routes/apiv3/questionnaire.ts b/apps/app/src/features/questionnaire/server/routes/apiv3/questionnaire.ts index 39975fd3c4e..4cb059b1b8c 100644 --- a/apps/app/src/features/questionnaire/server/routes/apiv3/questionnaire.ts +++ b/apps/app/src/features/questionnaire/server/routes/apiv3/questionnaire.ts @@ -7,7 +7,7 @@ import type Crowi from '~/server/crowi'; import { accessTokenParser } from '~/server/middlewares/access-token-parser'; import type { ApiV3Response } from '~/server/routes/apiv3/interfaces/apiv3-response'; import { configManager } from '~/server/service/config-manager'; -import { getInstance as getGrowiInfoService } from '~/server/service/growi-info'; +import { growiInfoService } from '~/server/service/growi-info'; import axios from '~/utils/axios'; import loggerFactory from '~/utils/logger'; @@ -18,7 +18,7 @@ import { StatusType } from '../../../interfaces/questionnaire-answer-status'; import ProactiveQuestionnaireAnswer from '../../models/proactive-questionnaire-answer'; import QuestionnaireAnswer from '../../models/questionnaire-answer'; import QuestionnaireAnswerStatus from '../../models/questionnaire-answer-status'; -import { convertToLegacyFormat } from '../../util/convert-to-legacy-format'; +import { convertToLegacyFormat, getSiteUrlHashed } from '../../util/convert-to-legacy-format'; const logger = loggerFactory('growi:routes:apiv3:questionnaire'); @@ -62,8 +62,8 @@ module.exports = (crowi: Crowi): Router => { }; router.get('/orders', accessTokenParser, loginRequired, async(req: AuthorizedRequest, res: ApiV3Response) => { - const growiInfo = await getGrowiInfoService().getGrowiInfo(true); - const userInfo = crowi.questionnaireService!.getUserInfo(req.user ?? null, growiInfo.appSiteUrlHashed); + const growiInfo = await growiInfoService.getGrowiInfo(true); + const userInfo = crowi.questionnaireService!.getUserInfo(req.user ?? null, getSiteUrlHashed(growiInfo.appSiteUrl)); try { const questionnaireOrders = await crowi.questionnaireService!.getQuestionnaireOrdersToShow(userInfo, growiInfo, req.user?._id ?? null); @@ -85,8 +85,8 @@ module.exports = (crowi: Crowi): Router => { const sendQuestionnaireAnswer = async() => { const questionnaireServerOrigin = configManager.getConfig('app:questionnaireServerOrigin'); const isAppSiteUrlHashed = configManager.getConfig('questionnaire:isAppSiteUrlHashed'); - const growiInfo = await getGrowiInfoService().getGrowiInfo(true); - const userInfo = crowi.questionnaireService!.getUserInfo(req.user ?? null, growiInfo.appSiteUrlHashed); + const growiInfo = await growiInfoService.getGrowiInfo(true); + const userInfo = crowi.questionnaireService!.getUserInfo(req.user ?? null, getSiteUrlHashed(growiInfo.appSiteUrl)); const proactiveQuestionnaireAnswer: IProactiveQuestionnaireAnswer = { satisfaction: req.body.satisfaction, @@ -134,8 +134,8 @@ module.exports = (crowi: Crowi): Router => { const sendQuestionnaireAnswer = async(user: IUserHasId, answers: IAnswer[]) => { const questionnaireServerOrigin = crowi.configManager.getConfig('app:questionnaireServerOrigin'); const isAppSiteUrlHashed = configManager.getConfig('questionnaire:isAppSiteUrlHashed'); - const growiInfo = await getGrowiInfoService().getGrowiInfo(true); - const userInfo = crowi.questionnaireService!.getUserInfo(user, growiInfo.appSiteUrlHashed); + const growiInfo = await growiInfoService.getGrowiInfo(true); + const userInfo = crowi.questionnaireService!.getUserInfo(user, getSiteUrlHashed(growiInfo.appSiteUrl)); const questionnaireAnswer: IQuestionnaireAnswer = { growiInfo, diff --git a/apps/app/src/features/questionnaire/server/util/convert-to-legacy-format.ts b/apps/app/src/features/questionnaire/server/util/convert-to-legacy-format.ts index e22cde4ef83..fbfe7fba885 100644 --- a/apps/app/src/features/questionnaire/server/util/convert-to-legacy-format.ts +++ b/apps/app/src/features/questionnaire/server/util/convert-to-legacy-format.ts @@ -13,7 +13,7 @@ function isLegacy(data: T): data is IHasGrowiAppIn return !('additionalInfo' in data.growiInfo); } -function getSiteUrlHashed(_siteUrl: string | undefined): string { +export function getSiteUrlHashed(_siteUrl: string | undefined): string { const siteUrl = _siteUrl ?? '[The site URL is not set. Please set it!]'; const hasher = crypto.createHash('sha256'); hasher.update(siteUrl); diff --git a/apps/app/src/server/service/growi-info/growi-info.integ.ts b/apps/app/src/server/service/growi-info/growi-info.integ.ts index 0dd0567652c..71c62e8ffbd 100644 --- a/apps/app/src/server/service/growi-info/growi-info.integ.ts +++ b/apps/app/src/server/service/growi-info/growi-info.integ.ts @@ -8,13 +8,11 @@ import { configManager } from '~/server/service/config-manager'; import type Crowi from '../../crowi'; -import type { GrowiInfoService } from './growi-info'; -import { serviceFactory } from './growi-info'; +import { growiInfoService } from './growi-info'; describe('GrowiInfoService', () => { const appVersion = pkg.version; - let growiInfoService: GrowiInfoService; let User; beforeAll(async() => { @@ -43,13 +41,8 @@ describe('GrowiInfoService', () => { }); } }), - appService: { - getSiteUrl: () => 'http://growi.test.jp', - }, }); - growiInfoService = serviceFactory(crowiMock); - const userModelFactory = (await import('~/server/models/user')).default; User = userModelFactory(crowiMock); @@ -63,20 +56,18 @@ describe('GrowiInfoService', () => { assert(growiInfo != null); - expect(growiInfo.appSiteUrlHashed).toBeTruthy(); - expect(growiInfo.appSiteUrlHashed).not.toBe('http://growi.test.jp'); expect(growiInfo.osInfo?.type).toBeTruthy(); expect(growiInfo.osInfo?.platform).toBeTruthy(); expect(growiInfo.osInfo?.arch).toBeTruthy(); expect(growiInfo.osInfo?.totalmem).toBeTruthy(); // eslint-disable-next-line @typescript-eslint/no-explicit-any - delete (growiInfo as any).appSiteUrlHashed; - delete growiInfo.osInfo; + delete (growiInfo as any).osInfo; expect(growiInfo).toEqual({ version: appVersion, appSiteUrl: 'http://growi.test.jp', + serviceInstanceId: '', type: 'on-premise', wikiType: 'closed', deploymentType: 'growi-docker-compose', @@ -96,20 +87,18 @@ describe('GrowiInfoService', () => { // assert assert(growiInfo != null); - expect(growiInfo.appSiteUrlHashed).toBeTruthy(); - expect(growiInfo.appSiteUrlHashed).not.toBe('http://growi.test.jp'); expect(growiInfo.osInfo?.type).toBeTruthy(); expect(growiInfo.osInfo?.platform).toBeTruthy(); expect(growiInfo.osInfo?.arch).toBeTruthy(); expect(growiInfo.osInfo?.totalmem).toBeTruthy(); // eslint-disable-next-line @typescript-eslint/no-explicit-any - delete (growiInfo as any).appSiteUrlHashed; - delete growiInfo.osInfo; + delete (growiInfo as any).osInfo; expect(growiInfo).toEqual({ version: appVersion, appSiteUrl: 'http://growi.test.jp', + serviceInstanceId: '', type: 'on-premise', wikiType: 'closed', deploymentType: 'growi-docker-compose', @@ -124,18 +113,5 @@ describe('GrowiInfoService', () => { }); }); - describe('When url hash settings is on', () => { - beforeEach(async() => { - process.env.QUESTIONNAIRE_IS_APP_SITE_URL_HASHED = 'true'; - await configManager.loadConfigs(); - }); - - test('Should return app url string', async() => { - const growiInfo = await growiInfoService.getGrowiInfo(); - expect(growiInfo.appSiteUrl).toBeUndefined(); - expect(growiInfo.appSiteUrlHashed).not.toBe('http://growi.test.jp'); - expect(growiInfo.appSiteUrlHashed).toBeTruthy(); - }); - }); }); }); diff --git a/apps/app/src/server/service/growi-info/growi-info.ts b/apps/app/src/server/service/growi-info/growi-info.ts index 8a986148802..0677d106ab9 100644 --- a/apps/app/src/server/service/growi-info/growi-info.ts +++ b/apps/app/src/server/service/growi-info/growi-info.ts @@ -1,4 +1,3 @@ -import crypto from 'crypto'; import * as os from 'node:os'; import type { IGrowiInfo } from '@growi/core';