@solidxai/core 0.1.4 → 0.1.5-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +8 -0
- package/dist/constants/error-messages.d.ts +1 -0
- package/dist/constants/error-messages.d.ts.map +1 -1
- package/dist/constants/error-messages.js +1 -0
- package/dist/constants/error-messages.js.map +1 -1
- package/dist/constants.d.ts +3 -3
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +12 -12
- package/dist/constants.js.map +1 -1
- package/dist/controllers/otp-authentication.controller.d.ts +1 -4
- package/dist/controllers/otp-authentication.controller.d.ts.map +1 -1
- package/dist/controllers/otp-authentication.controller.js +1 -1
- package/dist/controllers/role-metadata.controller.d.ts +1 -0
- package/dist/controllers/role-metadata.controller.d.ts.map +1 -1
- package/dist/controllers/role-metadata.controller.js +15 -0
- package/dist/controllers/role-metadata.controller.js.map +1 -1
- package/dist/dtos/create-email-template.dto.d.ts.map +1 -1
- package/dist/dtos/create-email-template.dto.js.map +1 -1
- package/dist/dtos/create-list-of-values.dto.d.ts.map +1 -1
- package/dist/dtos/create-list-of-values.dto.js.map +1 -1
- package/dist/dtos/create-menu-item-metadata.dto.d.ts.map +1 -1
- package/dist/dtos/create-menu-item-metadata.dto.js.map +1 -1
- package/dist/dtos/create-role-metadata.dto.d.ts.map +1 -1
- package/dist/dtos/create-role-metadata.dto.js.map +1 -1
- package/dist/dtos/create-scheduled-job.dto.d.ts.map +1 -1
- package/dist/dtos/create-scheduled-job.dto.js.map +1 -1
- package/dist/dtos/create-security-rule.dto.d.ts.map +1 -1
- package/dist/dtos/create-security-rule.dto.js.map +1 -1
- package/dist/dtos/create-sms-template.dto.d.ts.map +1 -1
- package/dist/dtos/create-sms-template.dto.js.map +1 -1
- package/dist/dtos/create-view-metadata.dto.d.ts.map +1 -1
- package/dist/dtos/create-view-metadata.dto.js.map +1 -1
- package/dist/dtos/otp-sign-in.dto.d.ts +1 -1
- package/dist/dtos/otp-sign-in.dto.d.ts.map +1 -1
- package/dist/dtos/otp-sign-in.dto.js +2 -2
- package/dist/dtos/otp-sign-in.dto.js.map +1 -1
- package/dist/dtos/otp-sign-up.dto.d.ts +2 -2
- package/dist/dtos/otp-sign-up.dto.d.ts.map +1 -1
- package/dist/dtos/otp-sign-up.dto.js +2 -2
- package/dist/dtos/otp-sign-up.dto.js.map +1 -1
- package/dist/dtos/resolve-s3-url.dto.d.ts +2 -5
- package/dist/dtos/resolve-s3-url.dto.d.ts.map +1 -1
- package/dist/dtos/resolve-s3-url.dto.js +1 -13
- package/dist/dtos/resolve-s3-url.dto.js.map +1 -1
- package/dist/dtos/sign-up.dto.d.ts.map +1 -1
- package/dist/dtos/sign-up.dto.js.map +1 -1
- package/dist/dtos/update-email-template.dto.d.ts.map +1 -1
- package/dist/dtos/update-email-template.dto.js.map +1 -1
- package/dist/dtos/update-list-of-values.dto.d.ts.map +1 -1
- package/dist/dtos/update-list-of-values.dto.js.map +1 -1
- package/dist/dtos/update-menu-item-metadata.dto.d.ts.map +1 -1
- package/dist/dtos/update-menu-item-metadata.dto.js.map +1 -1
- package/dist/dtos/update-scheduled-job.dto.d.ts.map +1 -1
- package/dist/dtos/update-scheduled-job.dto.js.map +1 -1
- package/dist/dtos/update-security-rule.dto.d.ts.map +1 -1
- package/dist/dtos/update-security-rule.dto.js.map +1 -1
- package/dist/dtos/update-sms-template.dto.d.ts.map +1 -1
- package/dist/dtos/update-sms-template.dto.js.map +1 -1
- package/dist/dtos/update-view-metadata.dto.d.ts.map +1 -1
- package/dist/dtos/update-view-metadata.dto.js.map +1 -1
- package/dist/entities/user.entity.d.ts +1 -0
- package/dist/entities/user.entity.d.ts.map +1 -1
- package/dist/entities/user.entity.js +6 -1
- package/dist/entities/user.entity.js.map +1 -1
- package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.d.ts +2 -0
- package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.d.ts.map +1 -1
- package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.js +33 -23
- package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.js.map +1 -1
- package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.d.ts +3 -0
- package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.d.ts.map +1 -1
- package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.js +36 -23
- package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.js.map +1 -1
- package/dist/helpers/security.helper.js +1 -0
- package/dist/helpers/security.helper.js.map +1 -1
- package/dist/index.d.ts +0 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -4
- package/dist/index.js.map +1 -1
- package/dist/repository/solid-base.repository.d.ts +10 -1
- package/dist/repository/solid-base.repository.d.ts.map +1 -1
- package/dist/repository/solid-base.repository.js +109 -0
- package/dist/repository/solid-base.repository.js.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.d.ts +2 -0
- package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.js +141 -71
- package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
- package/dist/seeders/permission-metadata-seeder.service.d.ts +1 -1
- package/dist/seeders/permission-metadata-seeder.service.d.ts.map +1 -1
- package/dist/seeders/permission-metadata-seeder.service.js +1 -1
- package/dist/seeders/permission-metadata-seeder.service.js.map +1 -1
- package/dist/seeders/seed-data/solid-core-metadata.json +12 -25
- package/dist/services/authentication.service.d.ts +22 -8
- package/dist/services/authentication.service.d.ts.map +1 -1
- package/dist/services/authentication.service.js +228 -214
- package/dist/services/authentication.service.js.map +1 -1
- package/dist/services/crud-helper.service.d.ts +4 -0
- package/dist/services/crud-helper.service.d.ts.map +1 -1
- package/dist/services/crud-helper.service.js +66 -32
- package/dist/services/crud-helper.service.js.map +1 -1
- package/dist/services/crud.service.d.ts.map +1 -1
- package/dist/services/crud.service.js +7 -4
- package/dist/services/crud.service.js.map +1 -1
- package/dist/services/field-metadata.service.d.ts.map +1 -1
- package/dist/services/field-metadata.service.js.map +1 -1
- package/dist/services/file/disk-file.service.d.ts +0 -2
- package/dist/services/file/disk-file.service.d.ts.map +1 -1
- package/dist/services/file/disk-file.service.js +7 -16
- package/dist/services/file/disk-file.service.js.map +1 -1
- package/dist/services/file/index.d.ts +1 -0
- package/dist/services/file/index.d.ts.map +1 -1
- package/dist/services/file/index.js +1 -0
- package/dist/services/file/index.js.map +1 -1
- package/dist/services/file/storage-path-builder.d.ts +17 -0
- package/dist/services/file/storage-path-builder.d.ts.map +1 -0
- package/dist/{seeders/sms-template-seeder.service.js → services/file/storage-path-builder.js} +45 -35
- package/dist/services/file/storage-path-builder.js.map +1 -0
- package/dist/services/media.service.d.ts +1 -1
- package/dist/services/media.service.d.ts.map +1 -1
- package/dist/services/media.service.js +45 -6
- package/dist/services/media.service.js.map +1 -1
- package/dist/services/mediaStorageProviders/file-s3-storage-provider.js.map +1 -1
- package/dist/services/mediaStorageProviders/file-storage-provider.d.ts.map +1 -1
- package/dist/services/mediaStorageProviders/file-storage-provider.js +46 -7
- package/dist/services/mediaStorageProviders/file-storage-provider.js.map +1 -1
- package/dist/services/module-metadata.service.d.ts +4 -6
- package/dist/services/module-metadata.service.d.ts.map +1 -1
- package/dist/services/module-metadata.service.js +16 -14
- package/dist/services/module-metadata.service.js.map +1 -1
- package/dist/services/setting.service.d.ts +3 -2
- package/dist/services/setting.service.d.ts.map +1 -1
- package/dist/services/setting.service.js +7 -4
- package/dist/services/setting.service.js.map +1 -1
- package/dist/services/settings/default-settings-provider.service.d.ts +24 -2
- package/dist/services/settings/default-settings-provider.service.d.ts.map +1 -1
- package/dist/services/settings/default-settings-provider.service.js +8 -6
- package/dist/services/settings/default-settings-provider.service.js.map +1 -1
- package/dist/solid-core.module.d.ts +3 -1
- package/dist/solid-core.module.d.ts.map +1 -1
- package/dist/solid-core.module.js +45 -9
- package/dist/solid-core.module.js.map +1 -1
- package/dist/testing/adapters/ui/playwright-adapter.d.ts.map +1 -1
- package/dist/testing/adapters/ui/playwright-adapter.js +35 -2
- package/dist/testing/adapters/ui/playwright-adapter.js.map +1 -1
- package/package.json +8 -2
- package/src/constants/error-messages.ts +1 -0
- package/src/constants.ts +3 -3
- package/src/controllers/role-metadata.controller.ts +26 -18
- package/src/dtos/create-email-template.dto.ts +7 -0
- package/src/dtos/create-list-of-values.dto.ts +7 -0
- package/src/dtos/create-menu-item-metadata.dto.ts +12 -1
- package/src/dtos/create-role-metadata.dto.ts +9 -0
- package/src/dtos/create-scheduled-job.dto.ts +14 -0
- package/src/dtos/create-security-rule.dto.ts +6 -0
- package/src/dtos/create-sms-template.dto.ts +6 -0
- package/src/dtos/create-view-metadata.dto.ts +11 -0
- package/src/dtos/otp-sign-in.dto.ts +3 -3
- package/src/dtos/otp-sign-up.dto.ts +3 -3
- package/src/dtos/resolve-s3-url.dto.ts +2 -12
- package/src/dtos/sign-up.dto.ts +0 -2
- package/src/dtos/update-email-template.dto.ts +6 -0
- package/src/dtos/update-list-of-values.dto.ts +8 -0
- package/src/dtos/update-menu-item-metadata.dto.ts +12 -0
- package/src/dtos/update-scheduled-job.dto.ts +15 -0
- package/src/dtos/update-security-rule.dto.ts +7 -0
- package/src/dtos/update-sms-template.dto.ts +32 -32
- package/src/dtos/update-view-metadata.dto.ts +12 -0
- package/src/entities/user.entity.ts +3 -0
- package/src/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.ts +43 -32
- package/src/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.ts +45 -33
- package/src/helpers/security.helper.ts +1 -1
- package/src/index.ts +0 -4
- package/src/repository/solid-base.repository.ts +172 -1
- package/src/seeders/module-metadata-seeder.service.ts +188 -126
- package/src/seeders/permission-metadata-seeder.service.ts +1 -4
- package/src/seeders/seed-data/solid-core-metadata.json +12 -25
- package/src/services/authentication.service.ts +268 -266
- package/src/services/crud-helper.service.ts +79 -36
- package/src/services/crud.service.ts +9 -4
- package/src/services/field-metadata.service.ts +0 -71
- package/src/services/file/disk-file.service.ts +8 -18
- package/src/services/file/index.ts +1 -0
- package/src/services/file/storage-path-builder.ts +56 -0
- package/src/services/media.service.ts +13 -7
- package/src/services/mediaStorageProviders/file-s3-storage-provider.ts +1 -1
- package/src/services/mediaStorageProviders/file-storage-provider.ts +13 -8
- package/src/services/module-metadata.service.ts +18 -15
- package/src/services/setting.service.ts +5 -3
- package/src/services/settings/default-settings-provider.service.ts +5 -3
- package/src/solid-core.module.ts +16 -12
- package/src/testing/adapters/ui/playwright-adapter.ts +1 -1
- package/dist/passport-strategies/local.strategy.d.ts +0 -15
- package/dist/passport-strategies/local.strategy.d.ts.map +0 -1
- package/dist/passport-strategies/local.strategy.js +0 -44
- package/dist/passport-strategies/local.strategy.js.map +0 -1
- package/dist/seeders/email-template-seeder.service.d.ts +0 -10
- package/dist/seeders/email-template-seeder.service.d.ts.map +0 -1
- package/dist/seeders/email-template-seeder.service.js +0 -84
- package/dist/seeders/email-template-seeder.service.js.map +0 -1
- package/dist/seeders/sms-template-seeder.service.d.ts +0 -10
- package/dist/seeders/sms-template-seeder.service.d.ts.map +0 -1
- package/dist/seeders/sms-template-seeder.service.js.map +0 -1
- package/dist/seeders/user-seeder.service.d.ts +0 -10
- package/dist/seeders/user-seeder.service.d.ts.map +0 -1
- package/dist/seeders/user-seeder.service.js +0 -44
- package/dist/seeders/user-seeder.service.js.map +0 -1
- package/src/passport-strategies/local.strategy.ts +0 -28
- package/src/seeders/email-template-seeder.service.ts +0 -49
- package/src/seeders/sms-template-seeder.service.ts +0 -50
- package/src/seeders/user-seeder.service.ts +0 -33
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
import { BadRequestException, forwardRef, Inject, Injectable, Logger, NotFoundException } from '@nestjs/common';
|
|
2
|
-
import { InjectDataSource
|
|
3
|
-
import {
|
|
2
|
+
import { InjectDataSource } from '@nestjs/typeorm';
|
|
3
|
+
import { DEFAULT_MEDIA_FILE_STORAGE_DIR } from "src/services/settings/default-settings-provider.service";
|
|
4
|
+
import type { SolidCoreSetting } from "src/services/settings/default-settings-provider.service";
|
|
5
|
+
import { DataSource, EntityManager, SelectQueryBuilder } from 'typeorm';
|
|
4
6
|
import { CreateModuleMetadataDto } from '../dtos/create-module-metadata.dto';
|
|
5
7
|
import { ModuleMetadata } from '../entities/module-metadata.entity';
|
|
6
|
-
import type { SolidCoreSetting } from "src/services/settings/default-settings-provider.service";
|
|
7
8
|
|
|
8
|
-
import { classify
|
|
9
|
+
import { classify } from '@angular-devkit/core/src/utils/strings';
|
|
9
10
|
import { ConfigService } from '@nestjs/config';
|
|
10
11
|
import * as fs from 'fs/promises'; // Use the Promise-based version of fs for async/await
|
|
11
12
|
import * as path from 'path'; // To handle file paths
|
|
13
|
+
import { ERROR_MESSAGES } from 'src/constants/error-messages';
|
|
14
|
+
import { DisallowInProduction } from 'src/decorators/disallow-in-production.decorator';
|
|
15
|
+
import { ModuleMetadataHelperService } from 'src/helpers/module-metadata-helper.service';
|
|
16
|
+
import { ModuleMetadataRepository } from 'src/repository/module-metadata.repository';
|
|
12
17
|
import { PermissionMetadataSeederService } from 'src/seeders/permission-metadata-seeder.service';
|
|
13
18
|
import { DiskFileService } from 'src/services/file';
|
|
14
19
|
import { BasicFilterDto } from '../dtos/basic-filters.dto';
|
|
@@ -21,11 +26,6 @@ import { SolidRegistry } from '../helpers/solid-registry';
|
|
|
21
26
|
import { CodeGenerationOptions, ModuleMetadataConfiguration } from '../interfaces';
|
|
22
27
|
import { CrudHelperService } from './crud-helper.service';
|
|
23
28
|
import { ModelMetadataService } from './model-metadata.service';
|
|
24
|
-
import { ModuleMetadataHelperService } from 'src/helpers/module-metadata-helper.service';
|
|
25
|
-
import { DisallowInProduction } from 'src/decorators/disallow-in-production.decorator';
|
|
26
|
-
import { ERROR_MESSAGES } from 'src/constants/error-messages';
|
|
27
|
-
import Module from 'module';
|
|
28
|
-
import { ModuleMetadataRepository } from 'src/repository/module-metadata.repository';
|
|
29
29
|
import { SettingService } from './setting.service';
|
|
30
30
|
|
|
31
31
|
@Injectable()
|
|
@@ -40,7 +40,6 @@ export class ModuleMetadataService {
|
|
|
40
40
|
private readonly moduleMetadataRepo: ModuleMetadataRepository,
|
|
41
41
|
private readonly crudHelperService: CrudHelperService,
|
|
42
42
|
private readonly schematicService: SchematicService,
|
|
43
|
-
private readonly configService: ConfigService,
|
|
44
43
|
private readonly fileService: DiskFileService,
|
|
45
44
|
private readonly settingService: SettingService,
|
|
46
45
|
|
|
@@ -133,7 +132,7 @@ export class ModuleMetadataService {
|
|
|
133
132
|
|
|
134
133
|
async createInDB(manager: EntityManager, createDto: CreateModuleMetadataDto, files: Express.Multer.File[] = []) {
|
|
135
134
|
if (files.length > 0) {
|
|
136
|
-
const fileStoragePath =
|
|
135
|
+
const fileStoragePath = this.getFullFilePathForDisk(this.getFileName(files[0]));
|
|
137
136
|
this.fileService.copy(files[0].path, fileStoragePath);
|
|
138
137
|
this.fileService.delete(files[0].path);
|
|
139
138
|
createDto.menuIconUrl = fileStoragePath;
|
|
@@ -239,7 +238,7 @@ export class ModuleMetadataService {
|
|
|
239
238
|
}
|
|
240
239
|
if (files.length > 0) {
|
|
241
240
|
|
|
242
|
-
const fileStoragePath =
|
|
241
|
+
const fileStoragePath = this.getFullFilePathForDisk(this.getFileName(files[0]));
|
|
243
242
|
this.fileService.copy(files[0].path, fileStoragePath);
|
|
244
243
|
this.fileService.delete(files[0].path);
|
|
245
244
|
module.menuIconUrl = fileStoragePath;
|
|
@@ -464,9 +463,13 @@ export class ModuleMetadataService {
|
|
|
464
463
|
return outputLines.join('\n');
|
|
465
464
|
}
|
|
466
465
|
|
|
467
|
-
private
|
|
468
|
-
const
|
|
469
|
-
|
|
466
|
+
private getFullFilePathForDisk(fileName: string): string {
|
|
467
|
+
const base = this.settingService.getConfigValue<SolidCoreSetting>("fileStorageDir")
|
|
468
|
+
|| DEFAULT_MEDIA_FILE_STORAGE_DIR;
|
|
469
|
+
if (path.isAbsolute(fileName) || fileName.startsWith(`${base}/`)) {
|
|
470
|
+
return fileName;
|
|
471
|
+
}
|
|
472
|
+
return `${base}/${fileName}`;
|
|
470
473
|
}
|
|
471
474
|
|
|
472
475
|
private getFileName(file: Express.Multer.File): string {
|
|
@@ -7,7 +7,7 @@ import { CreateSettingDto } from 'src/dtos/create-setting.dto';
|
|
|
7
7
|
import { GetMcpUrlDto } from 'src/dtos/get-mcp-url.dto';
|
|
8
8
|
import { User } from 'src/entities/user.entity';
|
|
9
9
|
import { SettingRepository } from '../repository/setting.repository';
|
|
10
|
-
import { FILE_SERVICE, IFileService } from './file';
|
|
10
|
+
import { FILE_SERVICE, IFileService, FILE_STORAGE_PATH_BUILDER, IStoragePathBuilder } from './file';
|
|
11
11
|
import { Setting } from '../entities/setting.entity';
|
|
12
12
|
import { RequestContextService } from './request-context.service';
|
|
13
13
|
import { SolidRegistry } from 'src/helpers/solid-registry';
|
|
@@ -32,6 +32,7 @@ export class SettingService {
|
|
|
32
32
|
|
|
33
33
|
constructor(
|
|
34
34
|
@Inject(FILE_SERVICE) readonly fileService: IFileService,
|
|
35
|
+
@Inject(FILE_STORAGE_PATH_BUILDER) readonly pathBuilder: IStoragePathBuilder,
|
|
35
36
|
readonly solidRegistry: SolidRegistry,
|
|
36
37
|
readonly repo: SettingRepository,
|
|
37
38
|
readonly moduleMetadataRepo: ModuleMetadataRepository,
|
|
@@ -251,9 +252,10 @@ export class SettingService {
|
|
|
251
252
|
const relativeFileName = `${file.filename}-${file.originalname}`;
|
|
252
253
|
|
|
253
254
|
// Read file from local disk (where Multer stores uploads) and write to storage
|
|
254
|
-
// The
|
|
255
|
+
// The path builder constructs the provider-appropriate storage path
|
|
255
256
|
const fileContent = await fsPromises.readFile(file.path);
|
|
256
|
-
const
|
|
257
|
+
const storagePath = this.pathBuilder.build(relativeFileName);
|
|
258
|
+
const fileUrl = await this.fileService.write(storagePath, fileContent, { contentType: file.mimetype });
|
|
257
259
|
// Delete the temp file from local disk
|
|
258
260
|
await fsPromises.unlink(file.path);
|
|
259
261
|
|
|
@@ -3,8 +3,8 @@ import { Environment } from "src/decorators/disallow-in-production.decorator";
|
|
|
3
3
|
import { SettingsProvider } from "src/decorators/settings-provider.decorator";
|
|
4
4
|
import { ISettingsProvider, SettingDefinition, SettingLevel } from "src/interfaces";
|
|
5
5
|
|
|
6
|
-
const DEFAULT_MEDIA_UPLOAD_DIR = 'media-uploads';
|
|
7
|
-
const DEFAULT_MEDIA_FILE_STORAGE_DIR = 'media-files-storage';
|
|
6
|
+
export const DEFAULT_MEDIA_UPLOAD_DIR = 'media-uploads';
|
|
7
|
+
export const DEFAULT_MEDIA_FILE_STORAGE_DIR = 'media-files-storage';
|
|
8
8
|
|
|
9
9
|
// 1.
|
|
10
10
|
const getSolidCoreSettings = (isProd: boolean) => ([
|
|
@@ -87,7 +87,8 @@ const getSolidCoreSettings = (isProd: boolean) => ([
|
|
|
87
87
|
// iam-settings-provider.service.ts
|
|
88
88
|
{ moduleName: "solid-core", key: "passwordLessAuth", value: (process.env.IAM_PASSWORD_LESS_AUTH?.trim() ?? 'false') === 'true', level: SettingLevel.SystemAdminEditable },
|
|
89
89
|
{ moduleName: "solid-core", key: "passwordBasedAuth", value: (process.env.IAM_PASSWORD_BASED_AUTH?.trim() ?? 'true') === 'true', level: SettingLevel.SystemAdminEditable },
|
|
90
|
-
{ moduleName: "solid-core", key: "passwordlessRegistrationValidateWhat", value: (process.env.IAM_PASSWORD_LESS_REGISTRATION_VALIDATE_WHAT ?? 'email').
|
|
90
|
+
{ moduleName: "solid-core", key: "passwordlessRegistrationValidateWhat", value: (process.env.IAM_PASSWORD_LESS_REGISTRATION_VALIDATE_WHAT ?? 'email').trim(), level: SettingLevel.SystemAdminEditable },
|
|
91
|
+
{ moduleName: "solid-core", key: "passwordlessLoginValidateWhat", value: process.env.IAM_PASSWORD_LESS_LOGIN_VALIDATE_WHAT ?? 'email', level: SettingLevel.SystemAdminEditable },
|
|
91
92
|
{ moduleName: "solid-core", key: "allowPublicRegistration", value: (process.env.IAM_ALLOW_PUBLIC_REGISTRATION ?? 'true') === 'true', level: SettingLevel.SystemAdminEditable },
|
|
92
93
|
{ moduleName: "solid-core", key: "activateUserOnRegistration", value: (process.env.IAM_ACTIVATE_USER_ON_REGISTRATION ?? 'true') === 'true', level: SettingLevel.SystemAdminEditable },
|
|
93
94
|
{ moduleName: "solid-core", key: "autoLoginUserOnRegistration", value: (process.env.IAM_AUTO_LOGIN_USER_ON_REGISTRATION ?? 'false') === 'true', level: SettingLevel.SystemEnv },
|
|
@@ -96,6 +97,7 @@ const getSolidCoreSettings = (isProd: boolean) => ([
|
|
|
96
97
|
{ moduleName: "solid-core", key: "defaultRole", value: process.env.IAM_DEFAULT_ROLE ?? 'Public', level: SettingLevel.SystemAdminEditable },
|
|
97
98
|
{ moduleName: "solid-core", key: "dummyOtp", value: process.env.IAM_OTP_DUMMY, level: SettingLevel.SystemEnv },
|
|
98
99
|
{ moduleName: "solid-core", key: "forgotPasswordSendVerificationTokenOn", value: process.env.IAM_FORGOT_PASSWORD_SEND_VERIFICATION_TOKEN_ON ?? 'email', level: SettingLevel.SystemEnv },
|
|
100
|
+
{ moduleName: "solid-core", key: "maxFailedLoginAttempts", value: parseInt(process.env.IAM_MAX_FAILED_LOGIN_ATTEMPTS ?? '0'), level: SettingLevel.SystemAdminReadonly },
|
|
99
101
|
{ moduleName: "solid-core", key: "forceChangePasswordOnFirstLogin", value: false, level: SettingLevel.SystemAdminEditable },
|
|
100
102
|
{ moduleName: "solid-core", key: "authenticationPasswordRegex", value: process.env.PASSWORD_REGEX || '^$|^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[^\\da-zA-Z]).*$', level: SettingLevel.SystemAdminEditable },
|
|
101
103
|
{ moduleName: "solid-core", key: "authenticationPasswordRegexErrorMessage", value: process.env.PASSWORD_REGEX_ERROR_MESSAGE || 'Password must contain at least one uppercase, one lowercase, one number, and one special character.', level: SettingLevel.SystemAdminEditable },
|
package/src/solid-core.module.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { Global, Module } from '@nestjs/common';
|
|
1
|
+
import { Global, MiddlewareConsumer, Module, NestModule } from '@nestjs/common';
|
|
2
|
+
import * as express from 'express';
|
|
2
3
|
import { ConfigModule, ConfigService } from '@nestjs/config';
|
|
3
4
|
import {
|
|
4
5
|
APP_FILTER,
|
|
@@ -97,16 +98,12 @@ import { TestQueuePublisher } from './jobs/test-queue-publisher.service';
|
|
|
97
98
|
import { TestQueueSubscriber } from './jobs/test-queue-subscriber.service';
|
|
98
99
|
import { UserRegistrationListener } from './listeners/user-registration.listener';
|
|
99
100
|
import { GoogleOauthStrategy } from './passport-strategies/google-oauth.strategy';
|
|
100
|
-
import { LocalStrategy } from './passport-strategies/local.strategy';
|
|
101
|
-
import { EmailTemplateSeederService } from './seeders/email-template-seeder.service';
|
|
102
|
-
import { SmsTemplateSeederService } from './seeders/sms-template-seeder.service';
|
|
103
|
-
import { UserSeederService } from './seeders/user-seeder.service';
|
|
104
101
|
import { AuthenticationService } from './services/authentication.service';
|
|
105
102
|
import { BcryptService } from './services/bcrypt.service';
|
|
106
103
|
import { UuidExternalIdEntityComputedFieldProvider } from './services/computed-fields/entity/uuid-externalid-entity-computed-field-provider.service';
|
|
107
104
|
import { UuidExternalIdComputedFieldProvider } from './services/computed-fields/uuid-external-id-computed-field-provider.service';
|
|
108
105
|
import { EmailTemplateService } from './services/email-template.service';
|
|
109
|
-
import { DiskFileService, S3FileService, FileServiceFactory } from './services/file';
|
|
106
|
+
import { DiskFileService, S3FileService, FileServiceFactory, DiskStoragePathBuilder, S3StoragePathBuilder, StoragePathBuilderFactory } from './services/file';
|
|
110
107
|
import { HashingService } from './services/hashing.service';
|
|
111
108
|
import { ElasticEmailService } from './services/mail/elastic-email.service';
|
|
112
109
|
import { SMTPEMailService } from './services/mail/smtp-email.service';
|
|
@@ -505,6 +502,9 @@ import { ListOfRolesSelectionProvider } from './services/selection-providers/lis
|
|
|
505
502
|
DiskFileService,
|
|
506
503
|
S3FileService,
|
|
507
504
|
FileServiceFactory,
|
|
505
|
+
DiskStoragePathBuilder,
|
|
506
|
+
S3StoragePathBuilder,
|
|
507
|
+
StoragePathBuilderFactory,
|
|
508
508
|
TextractService,
|
|
509
509
|
SolidRegistry,
|
|
510
510
|
SeedCommand,
|
|
@@ -563,8 +563,6 @@ import { ListOfRolesSelectionProvider } from './services/selection-providers/lis
|
|
|
563
563
|
Three60WhatsappService,
|
|
564
564
|
MqMessageService,
|
|
565
565
|
MqMessageQueueService,
|
|
566
|
-
EmailTemplateSeederService,
|
|
567
|
-
SmsTemplateSeederService,
|
|
568
566
|
TinyUrlService,
|
|
569
567
|
PdfService,
|
|
570
568
|
UuidExternalIdComputedFieldProvider,
|
|
@@ -577,8 +575,6 @@ import { ListOfRolesSelectionProvider } from './services/selection-providers/lis
|
|
|
577
575
|
AuthenticationService,
|
|
578
576
|
GoogleAuthenticationController,
|
|
579
577
|
RefreshTokenIdsStorageService,
|
|
580
|
-
UserSeederService,
|
|
581
|
-
LocalStrategy,
|
|
582
578
|
GoogleOauthStrategy,
|
|
583
579
|
UserRegistrationListener,
|
|
584
580
|
TestQueuePublisher,
|
|
@@ -734,6 +730,9 @@ import { ListOfRolesSelectionProvider } from './services/selection-providers/lis
|
|
|
734
730
|
DiskFileService,
|
|
735
731
|
S3FileService,
|
|
736
732
|
FileServiceFactory,
|
|
733
|
+
DiskStoragePathBuilder,
|
|
734
|
+
S3StoragePathBuilder,
|
|
735
|
+
StoragePathBuilderFactory,
|
|
737
736
|
HttpModule,
|
|
738
737
|
ImportTransactionService,
|
|
739
738
|
ListOfValuesService,
|
|
@@ -768,11 +767,16 @@ import { ListOfRolesSelectionProvider } from './services/selection-providers/lis
|
|
|
768
767
|
TwilioSMSService,
|
|
769
768
|
TypeOrmModule,
|
|
770
769
|
UserActivityHistoryService,
|
|
771
|
-
UserSeederService,
|
|
772
770
|
ImageEncodingService,
|
|
773
771
|
SolidMicroserviceAdapter,
|
|
774
772
|
UserService,
|
|
775
773
|
SettingService,
|
|
776
774
|
],
|
|
777
775
|
})
|
|
778
|
-
export class SolidCoreModule {
|
|
776
|
+
export class SolidCoreModule implements NestModule {
|
|
777
|
+
configure(consumer: MiddlewareConsumer) {
|
|
778
|
+
consumer
|
|
779
|
+
.apply(express.json({ limit: '10mb' }), express.urlencoded({ limit: '10mb', extended: true }))
|
|
780
|
+
.forRoutes('*');
|
|
781
|
+
}
|
|
782
|
+
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { chromium } from "playwright";
|
|
2
1
|
import type { Browser, BrowserContext, Page } from "playwright";
|
|
3
2
|
|
|
4
3
|
import type { PlaywrightAdapterOptions } from "./ui.types";
|
|
@@ -20,6 +19,7 @@ export class PlaywrightAdapter {
|
|
|
20
19
|
}
|
|
21
20
|
|
|
22
21
|
async start(): Promise<void> {
|
|
22
|
+
const { chromium } = await import('playwright');
|
|
23
23
|
this.browser = await chromium.launch({ headless: this.headless });
|
|
24
24
|
this.context = await this.browser.newContext();
|
|
25
25
|
this.page = await this.context.newPage();
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { Strategy } from 'passport-local';
|
|
2
|
-
import { AuthenticationService } from '../services/authentication.service';
|
|
3
|
-
import { UserService } from '../services/user.service';
|
|
4
|
-
declare const LocalStrategy_base: new (...args: any[]) => Strategy;
|
|
5
|
-
export declare class LocalStrategy extends LocalStrategy_base {
|
|
6
|
-
private authService;
|
|
7
|
-
private userService;
|
|
8
|
-
constructor(authService: AuthenticationService, userService: UserService);
|
|
9
|
-
validate(username: string, password: string): Promise<any>;
|
|
10
|
-
}
|
|
11
|
-
declare const LocalAuthGuard_base: import("@nestjs/passport").Type<import("@nestjs/passport").IAuthGuard>;
|
|
12
|
-
export declare class LocalAuthGuard extends LocalAuthGuard_base {
|
|
13
|
-
}
|
|
14
|
-
export {};
|
|
15
|
-
//# sourceMappingURL=local.strategy.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"local.strategy.d.ts","sourceRoot":"","sources":["../../src/passport-strategies/local.strategy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;;AAGvD,qBACa,aAAc,SAAQ,kBAA0B;IAErD,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,WAAW;gBADX,WAAW,EAAE,qBAAqB,EAClC,WAAW,EAAE,WAAW;IAK9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;CAOnE;;AAGD,qBACa,cAAe,SAAQ,mBAAkB;CAAI"}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
-
};
|
|
8
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.LocalAuthGuard = exports.LocalStrategy = void 0;
|
|
13
|
-
const passport_local_1 = require("passport-local");
|
|
14
|
-
const passport_1 = require("@nestjs/passport");
|
|
15
|
-
const common_1 = require("@nestjs/common");
|
|
16
|
-
const authentication_service_1 = require("../services/authentication.service");
|
|
17
|
-
const user_service_1 = require("../services/user.service");
|
|
18
|
-
let LocalStrategy = class LocalStrategy extends (0, passport_1.PassportStrategy)(passport_local_1.Strategy) {
|
|
19
|
-
constructor(authService, userService) {
|
|
20
|
-
super();
|
|
21
|
-
this.authService = authService;
|
|
22
|
-
this.userService = userService;
|
|
23
|
-
}
|
|
24
|
-
async validate(username, password) {
|
|
25
|
-
const user = await this.authService.validateUserAndRehashPasswordIfRequired({ username, password, email: null });
|
|
26
|
-
if (!user) {
|
|
27
|
-
throw new common_1.UnauthorizedException();
|
|
28
|
-
}
|
|
29
|
-
return user;
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
exports.LocalStrategy = LocalStrategy;
|
|
33
|
-
exports.LocalStrategy = LocalStrategy = __decorate([
|
|
34
|
-
(0, common_1.Injectable)(),
|
|
35
|
-
__metadata("design:paramtypes", [authentication_service_1.AuthenticationService,
|
|
36
|
-
user_service_1.UserService])
|
|
37
|
-
], LocalStrategy);
|
|
38
|
-
let LocalAuthGuard = class LocalAuthGuard extends (0, passport_1.AuthGuard)('local') {
|
|
39
|
-
};
|
|
40
|
-
exports.LocalAuthGuard = LocalAuthGuard;
|
|
41
|
-
exports.LocalAuthGuard = LocalAuthGuard = __decorate([
|
|
42
|
-
(0, common_1.Injectable)()
|
|
43
|
-
], LocalAuthGuard);
|
|
44
|
-
//# sourceMappingURL=local.strategy.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"local.strategy.js","sourceRoot":"","sources":["../../src/passport-strategies/local.strategy.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mDAA0C;AAC1C,+CAA+D;AAC/D,2CAAmE;AACnE,+EAA2E;AAC3E,2DAAuD;AAIhD,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,IAAA,2BAAgB,EAAC,yBAAQ,CAAC;IACzD,YACY,WAAkC,EAClC,WAAwB;QAEhC,KAAK,EAAE,CAAC;QAHA,gBAAW,GAAX,WAAW,CAAuB;QAClC,gBAAW,GAAX,WAAW,CAAa;IAGpC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,QAAgB,EAAE,QAAgB;QAC7C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,uCAAuC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACjH,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,MAAM,IAAI,8BAAqB,EAAE,CAAC;QACtC,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ,CAAA;AAfY,sCAAa;wBAAb,aAAa;IADzB,IAAA,mBAAU,GAAE;qCAGgB,8CAAqB;QACrB,0BAAW;GAH3B,aAAa,CAezB;AAIM,IAAM,cAAc,GAApB,MAAM,cAAe,SAAQ,IAAA,oBAAS,EAAC,OAAO,CAAC;CAAI,CAAA;AAA7C,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;GACA,cAAc,CAA+B","sourcesContent":["import { Strategy } from 'passport-local';\nimport { AuthGuard, PassportStrategy } from '@nestjs/passport';\nimport { Injectable, UnauthorizedException } from '@nestjs/common';\nimport { AuthenticationService } from '../services/authentication.service';\nimport { UserService } from '../services/user.service';\n\n\n@Injectable()\nexport class LocalStrategy extends PassportStrategy(Strategy) {\n constructor(\n private authService: AuthenticationService,\n private userService: UserService,\n ) {\n super();\n }\n\n async validate(username: string, password: string): Promise<any> {\n const user = await this.authService.validateUserAndRehashPasswordIfRequired({ username, password, email: null });\n if (!user) {\n throw new UnauthorizedException();\n }\n return user;\n }\n}\n\n\n@Injectable()\nexport class LocalAuthGuard extends AuthGuard('local') { }\n"]}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { EmailTemplateService } from '../services/email-template.service';
|
|
2
|
-
import { SettingService } from 'src/services/setting.service';
|
|
3
|
-
export declare class EmailTemplateSeederService {
|
|
4
|
-
private readonly emailTemplateService;
|
|
5
|
-
private readonly settingService;
|
|
6
|
-
private readonly logger;
|
|
7
|
-
constructor(emailTemplateService: EmailTemplateService, settingService: SettingService);
|
|
8
|
-
seed(): Promise<void>;
|
|
9
|
-
}
|
|
10
|
-
//# sourceMappingURL=email-template-seeder.service.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"email-template-seeder.service.d.ts","sourceRoot":"","sources":["../../src/seeders/email-template-seeder.service.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAE1E,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,qBACa,0BAA0B;IAI/B,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAJnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+C;gBAGjD,oBAAoB,EAAE,oBAAoB,EAC1C,cAAc,EAAE,cAAc;IAG7C,IAAI;CA6Bb"}
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
22
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
|
-
};
|
|
24
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
-
var ownKeys = function(o) {
|
|
26
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
-
var ar = [];
|
|
28
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
-
return ar;
|
|
30
|
-
};
|
|
31
|
-
return ownKeys(o);
|
|
32
|
-
};
|
|
33
|
-
return function (mod) {
|
|
34
|
-
if (mod && mod.__esModule) return mod;
|
|
35
|
-
var result = {};
|
|
36
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
-
__setModuleDefault(result, mod);
|
|
38
|
-
return result;
|
|
39
|
-
};
|
|
40
|
-
})();
|
|
41
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
42
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
43
|
-
};
|
|
44
|
-
var EmailTemplateSeederService_1;
|
|
45
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
46
|
-
exports.EmailTemplateSeederService = void 0;
|
|
47
|
-
const common_1 = require("@nestjs/common");
|
|
48
|
-
const fs = __importStar(require("fs"));
|
|
49
|
-
const path = __importStar(require("path"));
|
|
50
|
-
const email_template_service_1 = require("../services/email-template.service");
|
|
51
|
-
const setting_service_1 = require("../services/setting.service");
|
|
52
|
-
let EmailTemplateSeederService = EmailTemplateSeederService_1 = class EmailTemplateSeederService {
|
|
53
|
-
constructor(emailTemplateService, settingService) {
|
|
54
|
-
this.emailTemplateService = emailTemplateService;
|
|
55
|
-
this.settingService = settingService;
|
|
56
|
-
this.logger = new common_1.Logger(EmailTemplateSeederService_1.name);
|
|
57
|
-
}
|
|
58
|
-
async seed() {
|
|
59
|
-
const seedDataFileVariable = this.settingService.getConfigValue("emailTemplateSeederFiles");
|
|
60
|
-
const seedDataFiles = seedDataFileVariable.split(',');
|
|
61
|
-
for (let i = 0; i < seedDataFiles.length; i++) {
|
|
62
|
-
const seedDataFile = seedDataFiles[i];
|
|
63
|
-
const fullPath = path.join(process.cwd(), seedDataFile);
|
|
64
|
-
this.logger.log(`Using email template seed data: ${fullPath}`);
|
|
65
|
-
const emailTemplateJson = fs.readFileSync(fullPath, 'utf-8').toString();
|
|
66
|
-
const emailTemplates = JSON.parse(emailTemplateJson);
|
|
67
|
-
for (let i = 0; i < emailTemplates.length; i++) {
|
|
68
|
-
const emailTemplate = emailTemplates[i];
|
|
69
|
-
this.logger.log(`Found ${emailTemplate.name} email template`);
|
|
70
|
-
const emailTemplateFilePath = path.join(process.cwd(), emailTemplate.body);
|
|
71
|
-
emailTemplate.body = fs.readFileSync(emailTemplateFilePath, 'utf-8').toString();
|
|
72
|
-
await this.emailTemplateService.removeByName(emailTemplate.name);
|
|
73
|
-
await this.emailTemplateService.create(emailTemplate);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
};
|
|
78
|
-
exports.EmailTemplateSeederService = EmailTemplateSeederService;
|
|
79
|
-
exports.EmailTemplateSeederService = EmailTemplateSeederService = EmailTemplateSeederService_1 = __decorate([
|
|
80
|
-
(0, common_1.Injectable)(),
|
|
81
|
-
__metadata("design:paramtypes", [email_template_service_1.EmailTemplateService,
|
|
82
|
-
setting_service_1.SettingService])
|
|
83
|
-
], EmailTemplateSeederService);
|
|
84
|
-
//# sourceMappingURL=email-template-seeder.service.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"email-template-seeder.service.js","sourceRoot":"","sources":["../../src/seeders/email-template-seeder.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA4D;AAC5D,uCAAyB;AACzB,2CAA6B;AAI7B,+EAA0E;AAE1E,iEAA8D;AAGvD,IAAM,0BAA0B,kCAAhC,MAAM,0BAA0B;IAGnC,YACqB,oBAA0C,EAC1C,cAA8B;QAD9B,yBAAoB,GAApB,oBAAoB,CAAsB;QAC1C,mBAAc,GAAd,cAAc,CAAgB;QAJlC,WAAM,GAAG,IAAI,eAAM,CAAC,4BAA0B,CAAC,IAAI,CAAC,CAAC;IAKlE,CAAC;IAEL,KAAK,CAAC,IAAI;QAEN,MAAM,oBAAoB,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAmB,0BAA0B,CAAC,CAAC;QAC9G,MAAM,aAAa,GAAG,oBAAoB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,MAAM,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC;YAGxD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,mCAAmC,QAAQ,EAAE,CAAC,CAAC;YAC/D,MAAM,iBAAiB,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;YACxE,MAAM,cAAc,GAA6B,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;YAE/E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7C,MAAM,aAAa,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;gBACxC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,aAAa,CAAC,IAAI,iBAAiB,CAAC,CAAC;gBAG9D,MAAM,qBAAqB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;gBAC3E,aAAa,CAAC,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAA;gBAG/E,MAAM,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;gBACjE,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YAC1D,CAAC;QAEL,CAAC;IACL,CAAC;CACJ,CAAA;AArCY,gEAA0B;qCAA1B,0BAA0B;IADtC,IAAA,mBAAU,GAAE;qCAKkC,6CAAoB;QAC1B,gCAAc;GAL1C,0BAA0B,CAqCtC","sourcesContent":["import { Inject, Injectable, Logger } from '@nestjs/common';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport type { SolidCoreSetting } from \"src/services/settings/default-settings-provider.service\";\n\nimport { ConfigType } from '@nestjs/config';\nimport { EmailTemplateService } from '../services/email-template.service';\nimport { CreateEmailTemplateDto } from '../dtos/create-email-template.dto';\nimport { SettingService } from 'src/services/setting.service';\n\n@Injectable()\nexport class EmailTemplateSeederService {\n private readonly logger = new Logger(EmailTemplateSeederService.name);\n\n constructor(\n private readonly emailTemplateService: EmailTemplateService,\n private readonly settingService: SettingService\n ) { }\n\n async seed() {\n // Read the module metadata from a file specified in the .env \n const seedDataFileVariable = this.settingService.getConfigValue<SolidCoreSetting>(\"emailTemplateSeederFiles\");\n const seedDataFiles = seedDataFileVariable.split(',');\n\n for (let i = 0; i < seedDataFiles.length; i++) {\n const seedDataFile = seedDataFiles[i];\n const fullPath = path.join(process.cwd(), seedDataFile);\n\n // For each module metadata seed file provided, read contents, parse & convert to a variable. \n this.logger.log(`Using email template seed data: ${fullPath}`);\n const emailTemplateJson = fs.readFileSync(fullPath, 'utf-8').toString();\n const emailTemplates: CreateEmailTemplateDto[] = JSON.parse(emailTemplateJson);\n\n for (let i = 0; i < emailTemplates.length; i++) {\n const emailTemplate = emailTemplates[i];\n this.logger.log(`Found ${emailTemplate.name} email template`);\n\n // We need to load the actual template contents. \n const emailTemplateFilePath = path.join(process.cwd(), emailTemplate.body);\n emailTemplate.body = fs.readFileSync(emailTemplateFilePath, 'utf-8').toString()\n\n // Save to DB.\n await this.emailTemplateService.removeByName(emailTemplate.name);\n await this.emailTemplateService.create(emailTemplate);\n }\n\n }\n }\n}"]}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { SmsTemplateService } from '../services/sms-template.service';
|
|
2
|
-
import { SettingService } from 'src/services/setting.service';
|
|
3
|
-
export declare class SmsTemplateSeederService {
|
|
4
|
-
private readonly smsTemplateService;
|
|
5
|
-
private readonly settingService;
|
|
6
|
-
private readonly logger;
|
|
7
|
-
constructor(smsTemplateService: SmsTemplateService, settingService: SettingService);
|
|
8
|
-
seed(): Promise<void>;
|
|
9
|
-
}
|
|
10
|
-
//# sourceMappingURL=sms-template-seeder.service.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sms-template-seeder.service.d.ts","sourceRoot":"","sources":["../../src/seeders/sms-template-seeder.service.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,qBACa,wBAAwB;IAI7B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAJnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6C;gBAG/C,kBAAkB,EAAE,kBAAkB,EACtC,cAAc,EAAE,cAAc;IAG7C,IAAI;CA8Bb"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sms-template-seeder.service.js","sourceRoot":"","sources":["../../src/seeders/sms-template-seeder.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA4D;AAC5D,uCAAyB;AACzB,2CAA6B;AAK7B,2EAAsE;AACtE,iEAA8D;AAGvD,IAAM,wBAAwB,gCAA9B,MAAM,wBAAwB;IAGjC,YACqB,kBAAsC,EACtC,cAA8B;QAD9B,uBAAkB,GAAlB,kBAAkB,CAAoB;QACtC,mBAAc,GAAd,cAAc,CAAgB;QAJlC,WAAM,GAAG,IAAI,eAAM,CAAC,0BAAwB,CAAC,IAAI,CAAC,CAAC;IAKhE,CAAC;IAEL,KAAK,CAAC,IAAI;QAEN,MAAM,oBAAoB,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAmB,wBAAwB,CAAC,CAAC;QAC5G,MAAM,aAAa,GAAG,oBAAoB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,MAAM,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC;YAGxD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,iCAAiC,QAAQ,EAAE,CAAC,CAAC;YAC7D,MAAM,eAAe,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;YACtE,MAAM,YAAY,GAA2B,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAEzE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3C,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;gBACpC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,WAAW,CAAC,IAAI,eAAe,CAAC,CAAC;gBAG1D,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC;oBACnB,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;oBACvE,WAAW,CAAC,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAA;gBAC/E,CAAC;gBAGD,MAAM,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBAC7D,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACtD,CAAC;QACL,CAAC;IACL,CAAC;CACJ,CAAA;AAtCY,4DAAwB;mCAAxB,wBAAwB;IADpC,IAAA,mBAAU,GAAE;qCAKgC,yCAAkB;QACtB,gCAAc;GAL1C,wBAAwB,CAsCpC","sourcesContent":["import { Inject, Injectable, Logger } from '@nestjs/common';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport type { SolidCoreSetting } from \"src/services/settings/default-settings-provider.service\";\n\nimport { ConfigType } from '@nestjs/config';\nimport { CreateSmsTemplateDto } from '../dtos/create-sms-template.dto';\nimport { SmsTemplateService } from '../services/sms-template.service';\nimport { SettingService } from 'src/services/setting.service';\n\n@Injectable()\nexport class SmsTemplateSeederService {\n private readonly logger = new Logger(SmsTemplateSeederService.name);\n\n constructor(\n private readonly smsTemplateService: SmsTemplateService,\n private readonly settingService: SettingService\n ) { }\n\n async seed() {\n // Read the module metadata from a file specified in the .env \n const seedDataFileVariable = this.settingService.getConfigValue<SolidCoreSetting>(\"smsTemplateSeederFiles\");\n const seedDataFiles = seedDataFileVariable.split(',');\n\n for (let i = 0; i < seedDataFiles.length; i++) {\n const seedDataFile = seedDataFiles[i];\n const fullPath = path.join(process.cwd(), seedDataFile);\n\n // For each module metadata seed file provided, read contents, parse & convert to a variable. \n this.logger.log(`Using sms template seed data: ${fullPath}`);\n const smsTemplateJson = fs.readFileSync(fullPath, 'utf-8').toString();\n const smsTemplates: CreateSmsTemplateDto[] = JSON.parse(smsTemplateJson);\n\n for (let i = 0; i < smsTemplates.length; i++) {\n const smsTemplate = smsTemplates[i];\n this.logger.log(`Found ${smsTemplate.name} sms template`);\n\n // We need to load the actual template contents. \n if (smsTemplate.body) {\n const smsTemplateFilePath = path.join(process.cwd(), smsTemplate.body);\n smsTemplate.body = fs.readFileSync(smsTemplateFilePath, 'utf-8').toString()\n }\n\n // Save to DB.\n await this.smsTemplateService.removeByName(smsTemplate.name);\n await this.smsTemplateService.create(smsTemplate);\n }\n }\n }\n}"]}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { AuthenticationService } from '../services/authentication.service';
|
|
2
|
-
import { UserService } from '../services/user.service';
|
|
3
|
-
export declare class UserSeederService {
|
|
4
|
-
private readonly authenticationService;
|
|
5
|
-
private readonly userService;
|
|
6
|
-
private readonly logger;
|
|
7
|
-
constructor(authenticationService: AuthenticationService, userService: UserService);
|
|
8
|
-
seed(): Promise<void>;
|
|
9
|
-
}
|
|
10
|
-
//# sourceMappingURL=user-seeder.service.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"user-seeder.service.d.ts","sourceRoot":"","sources":["../../src/seeders/user-seeder.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,qBACa,iBAAiB;IAItB,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAJhC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsC;gBAGxC,qBAAqB,EAAE,qBAAqB,EAC5C,WAAW,EAAE,WAAW;IAGvC,IAAI;CAkBb"}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
-
};
|
|
8
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
-
};
|
|
11
|
-
var UserSeederService_1;
|
|
12
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
exports.UserSeederService = void 0;
|
|
14
|
-
const common_1 = require("@nestjs/common");
|
|
15
|
-
const authentication_service_1 = require("../services/authentication.service");
|
|
16
|
-
const user_service_1 = require("../services/user.service");
|
|
17
|
-
const uuid_1 = require("uuid");
|
|
18
|
-
let UserSeederService = UserSeederService_1 = class UserSeederService {
|
|
19
|
-
constructor(authenticationService, userService) {
|
|
20
|
-
this.authenticationService = authenticationService;
|
|
21
|
-
this.userService = userService;
|
|
22
|
-
this.logger = new common_1.Logger(UserSeederService_1.name);
|
|
23
|
-
}
|
|
24
|
-
async seed() {
|
|
25
|
-
let user = await this.userService.findOneByUsername("sa");
|
|
26
|
-
if (!user) {
|
|
27
|
-
user = await this.authenticationService.signUp({
|
|
28
|
-
username: 'sa',
|
|
29
|
-
email: 'sa@solidxai.com',
|
|
30
|
-
password: (0, uuid_1.v4)(),
|
|
31
|
-
});
|
|
32
|
-
this.logger.log(`Newly created user is ${user}`);
|
|
33
|
-
}
|
|
34
|
-
await this.userService.addRoleToUser(user.email, "Admin");
|
|
35
|
-
await this.userService.addRoleToUser(user.email, "Public");
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
exports.UserSeederService = UserSeederService;
|
|
39
|
-
exports.UserSeederService = UserSeederService = UserSeederService_1 = __decorate([
|
|
40
|
-
(0, common_1.Injectable)(),
|
|
41
|
-
__metadata("design:paramtypes", [authentication_service_1.AuthenticationService,
|
|
42
|
-
user_service_1.UserService])
|
|
43
|
-
], UserSeederService);
|
|
44
|
-
//# sourceMappingURL=user-seeder.service.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"user-seeder.service.js","sourceRoot":"","sources":["../../src/seeders/user-seeder.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAoD;AACpD,+EAA2E;AAC3E,2DAAuD;AACvD,+BAAoC;AAG7B,IAAM,iBAAiB,yBAAvB,MAAM,iBAAiB;IAG1B,YACqB,qBAA4C,EAC5C,WAAwB;QADxB,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,gBAAW,GAAX,WAAW,CAAa;QAJ5B,WAAM,GAAG,IAAI,eAAM,CAAC,mBAAiB,CAAC,IAAI,CAAC,CAAC;IAKzD,CAAC;IAEL,KAAK,CAAC,IAAI;QAEN,IAAI,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAE1D,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,IAAI,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC;gBAC3C,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,iBAAiB;gBACxB,QAAQ,EAAE,IAAA,SAAM,GAAE;aACrB,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;QACrD,CAAC;QAGD,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC1D,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC/D,CAAC;CACJ,CAAA;AA1BY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;qCAKmC,8CAAqB;QAC/B,0BAAW;GALpC,iBAAiB,CA0B7B","sourcesContent":["import { Injectable, Logger } from '@nestjs/common';\nimport { AuthenticationService } from '../services/authentication.service';\nimport { UserService } from '../services/user.service';\nimport { v4 as uuidv4 } from 'uuid';\n\n@Injectable()\nexport class UserSeederService {\n private readonly logger = new Logger(UserSeederService.name);\n\n constructor(\n private readonly authenticationService: AuthenticationService,\n private readonly userService: UserService,\n ) { }\n\n async seed() {\n // see if the user already exists, \n let user = await this.userService.findOneByUsername(\"sa\");\n\n if (!user) {\n user = await this.authenticationService.signUp({\n username: 'sa',\n email: 'sa@solidxai.com',\n password: uuidv4(),\n }); \n\n this.logger.log(`Newly created user is ${user}`);\n }\n\n // now make this user an Admin by adding them to the Admin role group. \n await this.userService.addRoleToUser(user.email, \"Admin\");\n await this.userService.addRoleToUser(user.email, \"Public\");\n }\n}"]}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { Strategy } from 'passport-local';
|
|
2
|
-
import { AuthGuard, PassportStrategy } from '@nestjs/passport';
|
|
3
|
-
import { Injectable, UnauthorizedException } from '@nestjs/common';
|
|
4
|
-
import { AuthenticationService } from '../services/authentication.service';
|
|
5
|
-
import { UserService } from '../services/user.service';
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
@Injectable()
|
|
9
|
-
export class LocalStrategy extends PassportStrategy(Strategy) {
|
|
10
|
-
constructor(
|
|
11
|
-
private authService: AuthenticationService,
|
|
12
|
-
private userService: UserService,
|
|
13
|
-
) {
|
|
14
|
-
super();
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
async validate(username: string, password: string): Promise<any> {
|
|
18
|
-
const user = await this.authService.validateUserAndRehashPasswordIfRequired({ username, password, email: null });
|
|
19
|
-
if (!user) {
|
|
20
|
-
throw new UnauthorizedException();
|
|
21
|
-
}
|
|
22
|
-
return user;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
@Injectable()
|
|
28
|
-
export class LocalAuthGuard extends AuthGuard('local') { }
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { Inject, Injectable, Logger } from '@nestjs/common';
|
|
2
|
-
import * as fs from 'fs';
|
|
3
|
-
import * as path from 'path';
|
|
4
|
-
import type { SolidCoreSetting } from "src/services/settings/default-settings-provider.service";
|
|
5
|
-
|
|
6
|
-
import { ConfigType } from '@nestjs/config';
|
|
7
|
-
import { EmailTemplateService } from '../services/email-template.service';
|
|
8
|
-
import { CreateEmailTemplateDto } from '../dtos/create-email-template.dto';
|
|
9
|
-
import { SettingService } from 'src/services/setting.service';
|
|
10
|
-
|
|
11
|
-
@Injectable()
|
|
12
|
-
export class EmailTemplateSeederService {
|
|
13
|
-
private readonly logger = new Logger(EmailTemplateSeederService.name);
|
|
14
|
-
|
|
15
|
-
constructor(
|
|
16
|
-
private readonly emailTemplateService: EmailTemplateService,
|
|
17
|
-
private readonly settingService: SettingService
|
|
18
|
-
) { }
|
|
19
|
-
|
|
20
|
-
async seed() {
|
|
21
|
-
// Read the module metadata from a file specified in the .env
|
|
22
|
-
const seedDataFileVariable = this.settingService.getConfigValue<SolidCoreSetting>("emailTemplateSeederFiles");
|
|
23
|
-
const seedDataFiles = seedDataFileVariable.split(',');
|
|
24
|
-
|
|
25
|
-
for (let i = 0; i < seedDataFiles.length; i++) {
|
|
26
|
-
const seedDataFile = seedDataFiles[i];
|
|
27
|
-
const fullPath = path.join(process.cwd(), seedDataFile);
|
|
28
|
-
|
|
29
|
-
// For each module metadata seed file provided, read contents, parse & convert to a variable.
|
|
30
|
-
this.logger.log(`Using email template seed data: ${fullPath}`);
|
|
31
|
-
const emailTemplateJson = fs.readFileSync(fullPath, 'utf-8').toString();
|
|
32
|
-
const emailTemplates: CreateEmailTemplateDto[] = JSON.parse(emailTemplateJson);
|
|
33
|
-
|
|
34
|
-
for (let i = 0; i < emailTemplates.length; i++) {
|
|
35
|
-
const emailTemplate = emailTemplates[i];
|
|
36
|
-
this.logger.log(`Found ${emailTemplate.name} email template`);
|
|
37
|
-
|
|
38
|
-
// We need to load the actual template contents.
|
|
39
|
-
const emailTemplateFilePath = path.join(process.cwd(), emailTemplate.body);
|
|
40
|
-
emailTemplate.body = fs.readFileSync(emailTemplateFilePath, 'utf-8').toString()
|
|
41
|
-
|
|
42
|
-
// Save to DB.
|
|
43
|
-
await this.emailTemplateService.removeByName(emailTemplate.name);
|
|
44
|
-
await this.emailTemplateService.create(emailTemplate);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
}
|