@solidstarters/solid-core 1.2.58 → 1.2.60
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/dist/config/iam.config.d.ts +2 -0
- package/dist/config/iam.config.d.ts.map +1 -1
- package/dist/config/iam.config.js +1 -0
- package/dist/config/iam.config.js.map +1 -1
- package/dist/controllers/setting.controller.d.ts +3 -0
- package/dist/controllers/setting.controller.d.ts.map +1 -1
- package/dist/controllers/setting.controller.js +23 -0
- package/dist/controllers/setting.controller.js.map +1 -1
- package/dist/dtos/create-setting.dto.d.ts +2 -15
- package/dist/dtos/create-setting.dto.d.ts.map +1 -1
- package/dist/dtos/create-setting.dto.js +6 -77
- package/dist/dtos/create-setting.dto.js.map +1 -1
- package/dist/dtos/update-setting.dto.d.ts +2 -15
- package/dist/dtos/update-setting.dto.d.ts.map +1 -1
- package/dist/dtos/update-setting.dto.js +6 -77
- package/dist/dtos/update-setting.dto.js.map +1 -1
- package/dist/dtos/update-settings.dto.d.ts +4 -0
- package/dist/dtos/update-settings.dto.d.ts.map +1 -0
- package/dist/dtos/update-settings.dto.js +26 -0
- package/dist/dtos/update-settings.dto.js.map +1 -0
- package/dist/entities/setting.entity.d.ts +2 -15
- package/dist/entities/setting.entity.d.ts.map +1 -1
- package/dist/entities/setting.entity.js +4 -65
- package/dist/entities/setting.entity.js.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.js +1 -18
- package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
- package/dist/seeders/seed-data/solid-core-metadata.json +7 -174
- package/dist/services/authentication.service.d.ts +3 -1
- package/dist/services/authentication.service.d.ts.map +1 -1
- package/dist/services/authentication.service.js +12 -17
- package/dist/services/authentication.service.js.map +1 -1
- package/dist/services/setting.service.d.ts +4 -0
- package/dist/services/setting.service.d.ts.map +1 -1
- package/dist/services/setting.service.js +139 -7
- package/dist/services/setting.service.js.map +1 -1
- package/dist/services/user.service.d.ts +5 -2
- package/dist/services/user.service.d.ts.map +1 -1
- package/dist/services/user.service.js +21 -3
- package/dist/services/user.service.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/config/iam.config.ts +1 -0
- package/src/controllers/setting.controller.ts +13 -1
- package/src/dtos/create-setting.dto.ts +10 -59
- package/src/dtos/update-setting.dto.ts +10 -60
- package/src/dtos/update-settings.dto.ts +7 -0
- package/src/entities/setting.entity.ts +8 -46
- package/src/seeders/module-metadata-seeder.service.ts +1 -19
- package/src/seeders/seed-data/solid-core-metadata.json +7 -174
- package/src/services/authentication.service.ts +10 -16
- package/src/services/setting.service.ts +163 -14
- package/src/services/user.service.ts +28 -5
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@solidstarters/solid-core",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.60",
|
|
4
4
|
"description": "This module is a NestJS module containing all the required core providers required by a Solid application",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
package/src/config/iam.config.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { registerAs } from '@nestjs/config';
|
|
|
3
3
|
export const iamConfig = registerAs('iam', () => {
|
|
4
4
|
return {
|
|
5
5
|
passwordlessRegistration: (process.env.IAM_PASSWORD_LESS_REGISTRATION ?? 'false') === 'true',
|
|
6
|
+
iamPasswordRegistrationEnabled: (process.env.IAM_PASSWORD_REGISTRATION_ENABLED ?? 'true') === 'true',
|
|
6
7
|
passwordlessRegistrationValidateWhat: (process.env.IAM_PASSWORD_LESS_REGISTRATION_VALIDATE_WHAT ?? 'email').split(',').map((item) => item.trim()),
|
|
7
8
|
allowPublicRegistration: (process.env.IAM_ALLOW_PUBLIC_REGISTRATION ?? 'true') === 'true',
|
|
8
9
|
activateUserOnRegistration: (process.env.IAM_ACTIVATE_USER_ON_REGISTRATION ?? 'true') === 'true',
|
|
@@ -6,6 +6,7 @@ import { CreateSettingDto } from '../dtos/create-setting.dto';
|
|
|
6
6
|
import { UpdateSettingDto } from '../dtos/update-setting.dto';
|
|
7
7
|
import { SolidRequestContextDecorator } from 'src/decorators/solid-request-context.decorator';
|
|
8
8
|
import { SolidRequestContextDto } from 'src/dtos/solid-request-context.dto';
|
|
9
|
+
import { UpdateSettingsDto } from 'src/dtos/update-settings.dto';
|
|
9
10
|
|
|
10
11
|
@ApiTags('Solid')
|
|
11
12
|
@Controller('setting') //FIXME: Change this to the model plural name
|
|
@@ -45,7 +46,12 @@ export class SettingController {
|
|
|
45
46
|
@Get('/wrapped')
|
|
46
47
|
async wrapSettings() {
|
|
47
48
|
return this.service.wrapSettings();
|
|
48
|
-
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
@Get()
|
|
52
|
+
async getAllSettings() {
|
|
53
|
+
return this.service.getAllSettings();
|
|
54
|
+
}
|
|
49
55
|
|
|
50
56
|
@ApiBearerAuth("jwt")
|
|
51
57
|
@ApiQuery({ name: 'showSoftDeleted', required: false, type: Boolean })
|
|
@@ -79,4 +85,10 @@ export class SettingController {
|
|
|
79
85
|
async delete(@Param('id') id: number,@SolidRequestContextDecorator() solidRequestContext:SolidRequestContextDto) {
|
|
80
86
|
return this.service.delete(id,solidRequestContext);
|
|
81
87
|
}
|
|
88
|
+
|
|
89
|
+
@ApiBearerAuth("jwt")
|
|
90
|
+
@Post('/bulk-update')
|
|
91
|
+
async updateSettings(@Body() updateSettingsDto: UpdateSettingsDto) {
|
|
92
|
+
return this.service.updateSettings(updateSettingsDto.settings);
|
|
93
|
+
}
|
|
82
94
|
}
|
|
@@ -1,63 +1,14 @@
|
|
|
1
1
|
import { IsString } from 'class-validator';
|
|
2
2
|
import { IsOptional, IsBoolean } from 'class-validator';
|
|
3
|
-
|
|
4
|
-
@IsOptional()
|
|
5
|
-
@IsString()
|
|
6
|
-
authPagesLayout: string;
|
|
7
|
-
|
|
8
|
-
@IsOptional()
|
|
9
|
-
@IsString()
|
|
10
|
-
authPagesTheme: string;
|
|
11
|
-
|
|
12
|
-
@IsOptional()
|
|
13
|
-
@IsString()
|
|
14
|
-
appTitle: string;
|
|
15
|
-
|
|
16
|
-
@IsOptional()
|
|
17
|
-
@IsString()
|
|
18
|
-
appLogo: string;
|
|
19
|
-
|
|
20
|
-
@IsOptional()
|
|
21
|
-
@IsString()
|
|
22
|
-
appDescription: string;
|
|
23
|
-
|
|
24
|
-
@IsOptional()
|
|
25
|
-
@IsString()
|
|
26
|
-
appTnc: string;
|
|
27
|
-
|
|
28
|
-
@IsOptional()
|
|
29
|
-
@IsString()
|
|
30
|
-
appPrivacyPolicy: string;
|
|
31
|
-
|
|
32
|
-
@IsOptional()
|
|
33
|
-
@IsBoolean()
|
|
34
|
-
iamAllowPublicRegistration: boolean = false;
|
|
3
|
+
import { ApiProperty } from '@nestjs/swagger';
|
|
35
4
|
|
|
36
|
-
|
|
37
|
-
@
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
@
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
@IsBoolean()
|
|
46
|
-
iamActivateUserOnRegistration: boolean = false;
|
|
47
|
-
|
|
48
|
-
@IsOptional()
|
|
49
|
-
@IsString()
|
|
50
|
-
iamDefaultRole: string;
|
|
51
|
-
|
|
52
|
-
@IsOptional()
|
|
53
|
-
@IsBoolean()
|
|
54
|
-
iamGoogleOAuthEnabled: boolean = false;
|
|
55
|
-
|
|
56
|
-
@IsOptional()
|
|
57
|
-
@IsBoolean()
|
|
58
|
-
shouldQueueEmails: boolean = false;
|
|
59
|
-
|
|
60
|
-
@IsOptional()
|
|
61
|
-
@IsBoolean()
|
|
62
|
-
shouldQueueSms: boolean = false;
|
|
5
|
+
export class CreateSettingDto {
|
|
6
|
+
@IsOptional()
|
|
7
|
+
@IsString()
|
|
8
|
+
@ApiProperty()
|
|
9
|
+
key: string;
|
|
10
|
+
@IsOptional()
|
|
11
|
+
@IsString()
|
|
12
|
+
@ApiProperty()
|
|
13
|
+
value: string;
|
|
63
14
|
}
|
|
@@ -1,66 +1,16 @@
|
|
|
1
1
|
import { IsInt,IsOptional, IsString, IsBoolean } from 'class-validator';
|
|
2
|
+
import { ApiProperty } from '@nestjs/swagger';
|
|
3
|
+
|
|
2
4
|
export class UpdateSettingDto {
|
|
3
5
|
@IsOptional()
|
|
4
6
|
@IsInt()
|
|
5
7
|
id: number;
|
|
6
|
-
|
|
7
|
-
@
|
|
8
|
-
@
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
@
|
|
12
|
-
@
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
@IsOptional()
|
|
16
|
-
@IsString()
|
|
17
|
-
appTitle: string;
|
|
18
|
-
|
|
19
|
-
@IsOptional()
|
|
20
|
-
@IsString()
|
|
21
|
-
appLogo: string;
|
|
22
|
-
|
|
23
|
-
@IsOptional()
|
|
24
|
-
@IsString()
|
|
25
|
-
appDescription: string;
|
|
26
|
-
|
|
27
|
-
@IsOptional()
|
|
28
|
-
@IsString()
|
|
29
|
-
appTnc: string;
|
|
30
|
-
|
|
31
|
-
@IsOptional()
|
|
32
|
-
@IsString()
|
|
33
|
-
appPrivacyPolicy: string;
|
|
34
|
-
|
|
35
|
-
@IsOptional()
|
|
36
|
-
@IsBoolean()
|
|
37
|
-
iamAllowPublicRegistration: boolean = false;
|
|
38
|
-
|
|
39
|
-
@IsOptional()
|
|
40
|
-
@IsBoolean()
|
|
41
|
-
iamPasswordRegistrationEnabled: boolean = false;
|
|
42
|
-
|
|
43
|
-
@IsOptional()
|
|
44
|
-
@IsBoolean()
|
|
45
|
-
iamPasswordLessRegistrationEnabled: boolean = false;
|
|
46
|
-
|
|
47
|
-
@IsOptional()
|
|
48
|
-
@IsBoolean()
|
|
49
|
-
iamActivateUserOnRegistration: boolean = false;
|
|
50
|
-
|
|
51
|
-
@IsOptional()
|
|
52
|
-
@IsString()
|
|
53
|
-
iamDefaultRole: string;
|
|
54
|
-
|
|
55
|
-
@IsOptional()
|
|
56
|
-
@IsBoolean()
|
|
57
|
-
iamGoogleOAuthEnabled: boolean = false;
|
|
58
|
-
|
|
59
|
-
@IsOptional()
|
|
60
|
-
@IsBoolean()
|
|
61
|
-
shouldQueueEmails: boolean = false;
|
|
62
|
-
|
|
63
|
-
@IsOptional()
|
|
64
|
-
@IsBoolean()
|
|
65
|
-
shouldQueueSms: boolean = false;
|
|
8
|
+
@IsOptional()
|
|
9
|
+
@IsString()
|
|
10
|
+
@ApiProperty()
|
|
11
|
+
key: string;
|
|
12
|
+
@IsOptional()
|
|
13
|
+
@IsString()
|
|
14
|
+
@ApiProperty()
|
|
15
|
+
value: string;
|
|
66
16
|
}
|
|
@@ -1,49 +1,11 @@
|
|
|
1
1
|
import { CommonEntity } from 'src/entities/common.entity'
|
|
2
|
-
import {Entity, Column} from 'typeorm'
|
|
3
|
-
@Entity("ss_setting")
|
|
4
|
-
export class Setting extends CommonEntity{
|
|
5
|
-
@Column({ type: "varchar", nullable: true })
|
|
6
|
-
authPagesLayout: string;
|
|
7
|
-
|
|
8
|
-
@Column({ type: "varchar", nullable: true })
|
|
9
|
-
authPagesTheme: string;
|
|
10
|
-
|
|
11
|
-
@Column({ type: "varchar", nullable: true })
|
|
12
|
-
appTitle: string;
|
|
13
|
-
|
|
14
|
-
@Column({ type: "varchar", nullable: true })
|
|
15
|
-
appLogo: string;
|
|
16
|
-
|
|
17
|
-
@Column({ type: "varchar", nullable: true })
|
|
18
|
-
appDescription: string;
|
|
19
|
-
|
|
20
|
-
@Column({ type: "varchar", nullable: true })
|
|
21
|
-
appTnc: string;
|
|
22
|
-
|
|
23
|
-
@Column({ type: "varchar", nullable: true })
|
|
24
|
-
appPrivacyPolicy: string;
|
|
25
|
-
|
|
26
|
-
@Column({ type: "boolean", nullable: true, default: false })
|
|
27
|
-
iamAllowPublicRegistration: boolean = false;
|
|
2
|
+
import {Entity, Column, Index} from 'typeorm'
|
|
28
3
|
|
|
29
|
-
@
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
@Column({ type: "
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
iamActivateUserOnRegistration: boolean = false;
|
|
37
|
-
|
|
38
|
-
@Column({ type: "varchar", nullable: true })
|
|
39
|
-
iamDefaultRole: string;
|
|
40
|
-
|
|
41
|
-
@Column({ type: "boolean", nullable: true, default: false })
|
|
42
|
-
iamGoogleOAuthEnabled: boolean = false;
|
|
43
|
-
|
|
44
|
-
@Column({ type: "boolean", nullable: true, default: false })
|
|
45
|
-
shouldQueueEmails: boolean = false;
|
|
46
|
-
|
|
47
|
-
@Column({ type: "boolean", nullable: true, default: false })
|
|
48
|
-
shouldQueueSms: boolean = false;
|
|
4
|
+
@Entity("ss_setting")
|
|
5
|
+
export class Setting extends CommonEntity {
|
|
6
|
+
@Index({ unique: true })
|
|
7
|
+
@Column({ type: "varchar", nullable: true })
|
|
8
|
+
key: string;
|
|
9
|
+
@Column({ type: "varchar", nullable: true })
|
|
10
|
+
value: string;
|
|
49
11
|
}
|
|
@@ -74,24 +74,6 @@ export class ModuleMetadataSeederService {
|
|
|
74
74
|
|
|
75
75
|
const typedSolidCoreMetadata: any = solidCoreMetadata;
|
|
76
76
|
|
|
77
|
-
const settingsSeederData: any = {
|
|
78
|
-
iamAllowPublicRegistration: this.iamConfiguration.allowPublicRegistration,
|
|
79
|
-
iamPasswordRegistrationEnabled: true,
|
|
80
|
-
iamPasswordLessRegistrationEnabled: this.iamConfiguration.passwordlessRegistration,
|
|
81
|
-
iamActivateUserOnRegistration: this.iamConfiguration.activateUserOnRegistration,
|
|
82
|
-
iamGoogleOAuthEnabled: false,
|
|
83
|
-
authPagesLayout: "center",
|
|
84
|
-
authPagesTheme: "light",
|
|
85
|
-
appTitle: process.env.SOLID_APP_NAME || "Solid App",
|
|
86
|
-
appLogo: "",
|
|
87
|
-
appDescription: "",
|
|
88
|
-
appTnc: "",
|
|
89
|
-
appPrivacyPolicy: "",
|
|
90
|
-
iamDefaultRole: this.iamConfiguration.defaultRole,
|
|
91
|
-
shouldQueueEmails: this.commonConfiguration.shouldQueueEmails,
|
|
92
|
-
shouldQueueSms: this.commonConfiguration.shouldQueueSms
|
|
93
|
-
}
|
|
94
|
-
|
|
95
77
|
// Run the permissions seeder.
|
|
96
78
|
// await this.permissionsSeederService.seed();
|
|
97
79
|
this.logger.log(`Seeding permissions`);
|
|
@@ -198,7 +180,7 @@ export class ModuleMetadataSeederService {
|
|
|
198
180
|
|
|
199
181
|
// Settings
|
|
200
182
|
this.logger.debug(`[Start] Processing settings for ${moduleMetadata.name}`);
|
|
201
|
-
await this.
|
|
183
|
+
await this.seetingService.seedDefaultSettings();
|
|
202
184
|
this.logger.debug(`[End] Processing settings for ${moduleMetadata.name}`);
|
|
203
185
|
|
|
204
186
|
// Security rules
|
|
@@ -2380,191 +2380,24 @@
|
|
|
2380
2380
|
"userKeyFieldUserKey": "username",
|
|
2381
2381
|
"fields": [
|
|
2382
2382
|
{
|
|
2383
|
-
"name": "
|
|
2384
|
-
"displayName": "
|
|
2385
|
-
"type": "selectionStatic",
|
|
2386
|
-
"ormType": "varchar",
|
|
2387
|
-
"length": 128,
|
|
2388
|
-
"required": false,
|
|
2389
|
-
"unique": false,
|
|
2390
|
-
"index": false,
|
|
2391
|
-
"private": false,
|
|
2392
|
-
"encrypt": false,
|
|
2393
|
-
"isSystem": true,
|
|
2394
|
-
"selectionStaticValues": [
|
|
2395
|
-
"left:Left",
|
|
2396
|
-
"center:Center",
|
|
2397
|
-
"right:Right"
|
|
2398
|
-
]
|
|
2399
|
-
},
|
|
2400
|
-
{
|
|
2401
|
-
"name": "authPagesTheme",
|
|
2402
|
-
"displayName": "Auth Pages Theme",
|
|
2403
|
-
"type": "selectionStatic",
|
|
2404
|
-
"ormType": "varchar",
|
|
2405
|
-
"length": 128,
|
|
2406
|
-
"required": false,
|
|
2407
|
-
"unique": false,
|
|
2408
|
-
"index": false,
|
|
2409
|
-
"private": false,
|
|
2410
|
-
"encrypt": false,
|
|
2411
|
-
"isSystem": true,
|
|
2412
|
-
"selectionStaticValues": [
|
|
2413
|
-
"dark:Dark",
|
|
2414
|
-
"light:Light"
|
|
2415
|
-
]
|
|
2416
|
-
},
|
|
2417
|
-
{
|
|
2418
|
-
"name": "appTitle",
|
|
2419
|
-
"displayName": "App Title",
|
|
2383
|
+
"name": "key",
|
|
2384
|
+
"displayName": "Key",
|
|
2420
2385
|
"type": "shortText",
|
|
2421
2386
|
"ormType": "varchar",
|
|
2422
|
-
"length":
|
|
2423
|
-
"required": false,
|
|
2424
|
-
"unique": false,
|
|
2425
|
-
"index": false,
|
|
2426
|
-
"private": false,
|
|
2427
|
-
"encrypt": false,
|
|
2428
|
-
"isSystem": true
|
|
2429
|
-
},
|
|
2430
|
-
{
|
|
2431
|
-
"name": "appLogo",
|
|
2432
|
-
"displayName": "App Logo",
|
|
2433
|
-
"type": "mediaSingle",
|
|
2434
|
-
"mediaStorageProviderUserKey": "default-filesystem",
|
|
2387
|
+
"length": 128,
|
|
2435
2388
|
"required": false,
|
|
2436
|
-
"unique":
|
|
2389
|
+
"unique": true,
|
|
2437
2390
|
"index": false,
|
|
2438
2391
|
"private": false,
|
|
2439
2392
|
"encrypt": false,
|
|
2440
2393
|
"isSystem": true
|
|
2441
2394
|
},
|
|
2442
2395
|
{
|
|
2443
|
-
"name": "
|
|
2444
|
-
"displayName": "
|
|
2396
|
+
"name": "value",
|
|
2397
|
+
"displayName": "Value",
|
|
2445
2398
|
"type": "longText",
|
|
2446
2399
|
"ormType": "varchar",
|
|
2447
|
-
"
|
|
2448
|
-
"unique": false,
|
|
2449
|
-
"index": false,
|
|
2450
|
-
"private": false,
|
|
2451
|
-
"encrypt": false,
|
|
2452
|
-
"isSystem": true
|
|
2453
|
-
},
|
|
2454
|
-
{
|
|
2455
|
-
"name": "appTnc",
|
|
2456
|
-
"displayName": "App TNC",
|
|
2457
|
-
"type": "richText",
|
|
2458
|
-
"ormType": "varchar",
|
|
2459
|
-
"required": false,
|
|
2460
|
-
"unique": false,
|
|
2461
|
-
"index": false,
|
|
2462
|
-
"private": false,
|
|
2463
|
-
"encrypt": false,
|
|
2464
|
-
"isSystem": true
|
|
2465
|
-
},
|
|
2466
|
-
{
|
|
2467
|
-
"name": "appPrivacyPolicy",
|
|
2468
|
-
"displayName": "App Privacy Policy",
|
|
2469
|
-
"type": "richText",
|
|
2470
|
-
"ormType": "varchar",
|
|
2471
|
-
"required": false,
|
|
2472
|
-
"unique": false,
|
|
2473
|
-
"index": false,
|
|
2474
|
-
"private": false,
|
|
2475
|
-
"encrypt": false,
|
|
2476
|
-
"isSystem": true
|
|
2477
|
-
},
|
|
2478
|
-
{
|
|
2479
|
-
"name": "iamAllowPublicRegistration",
|
|
2480
|
-
"displayName": "Iam Allow Public Registration",
|
|
2481
|
-
"type": "boolean",
|
|
2482
|
-
"ormType": "boolean",
|
|
2483
|
-
"required": false,
|
|
2484
|
-
"unique": false,
|
|
2485
|
-
"index": false,
|
|
2486
|
-
"private": false,
|
|
2487
|
-
"encrypt": false,
|
|
2488
|
-
"isSystem": true
|
|
2489
|
-
},
|
|
2490
|
-
{
|
|
2491
|
-
"name": "iamPasswordRegistrationEnabled",
|
|
2492
|
-
"displayName": "Iam Password Registration Enabled",
|
|
2493
|
-
"type": "boolean",
|
|
2494
|
-
"ormType": "boolean",
|
|
2495
|
-
"required": false,
|
|
2496
|
-
"unique": false,
|
|
2497
|
-
"index": false,
|
|
2498
|
-
"private": false,
|
|
2499
|
-
"encrypt": false,
|
|
2500
|
-
"isSystem": true
|
|
2501
|
-
},
|
|
2502
|
-
{
|
|
2503
|
-
"name": "iamPasswordLessRegistrationEnabled",
|
|
2504
|
-
"displayName": "Iam Password Less Registration enabled",
|
|
2505
|
-
"type": "boolean",
|
|
2506
|
-
"ormType": "boolean",
|
|
2507
|
-
"required": false,
|
|
2508
|
-
"unique": false,
|
|
2509
|
-
"index": false,
|
|
2510
|
-
"private": false,
|
|
2511
|
-
"encrypt": false,
|
|
2512
|
-
"isSystem": true
|
|
2513
|
-
},
|
|
2514
|
-
{
|
|
2515
|
-
"name": "iamActivateUserOnRegistration",
|
|
2516
|
-
"displayName": "Iam Activate User On Registration",
|
|
2517
|
-
"type": "boolean",
|
|
2518
|
-
"ormType": "boolean",
|
|
2519
|
-
"required": false,
|
|
2520
|
-
"unique": false,
|
|
2521
|
-
"index": false,
|
|
2522
|
-
"private": false,
|
|
2523
|
-
"encrypt": false,
|
|
2524
|
-
"isSystem": true
|
|
2525
|
-
},
|
|
2526
|
-
{
|
|
2527
|
-
"name": "iamDefaultRole",
|
|
2528
|
-
"displayName": "Iam Default Role",
|
|
2529
|
-
"type": "shortText",
|
|
2530
|
-
"ormType": "varchar",
|
|
2531
|
-
"length": 512,
|
|
2532
|
-
"required": false,
|
|
2533
|
-
"unique": false,
|
|
2534
|
-
"index": false,
|
|
2535
|
-
"private": false,
|
|
2536
|
-
"encrypt": false,
|
|
2537
|
-
"isSystem": true
|
|
2538
|
-
},
|
|
2539
|
-
{
|
|
2540
|
-
"name": "iamGoogleOAuthEnabled",
|
|
2541
|
-
"displayName": "Iam Google OAuth Enabled",
|
|
2542
|
-
"type": "boolean",
|
|
2543
|
-
"ormType": "boolean",
|
|
2544
|
-
"required": false,
|
|
2545
|
-
"unique": false,
|
|
2546
|
-
"index": false,
|
|
2547
|
-
"private": false,
|
|
2548
|
-
"encrypt": false,
|
|
2549
|
-
"isSystem": true
|
|
2550
|
-
},
|
|
2551
|
-
{
|
|
2552
|
-
"name": "shouldQueueEmails",
|
|
2553
|
-
"displayName": "Should Queue Emails",
|
|
2554
|
-
"type": "boolean",
|
|
2555
|
-
"ormType": "boolean",
|
|
2556
|
-
"required": false,
|
|
2557
|
-
"unique": false,
|
|
2558
|
-
"index": false,
|
|
2559
|
-
"private": false,
|
|
2560
|
-
"encrypt": false,
|
|
2561
|
-
"isSystem": true
|
|
2562
|
-
},
|
|
2563
|
-
{
|
|
2564
|
-
"name": "shouldQueueSms",
|
|
2565
|
-
"displayName": "Should Queue SMS",
|
|
2566
|
-
"type": "boolean",
|
|
2567
|
-
"ormType": "boolean",
|
|
2400
|
+
"length": 128,
|
|
2568
2401
|
"required": false,
|
|
2569
2402
|
"unique": false,
|
|
2570
2403
|
"index": false,
|
|
@@ -39,6 +39,7 @@ import {
|
|
|
39
39
|
RegistrationValidationSource,
|
|
40
40
|
TransactionalRegistrationValidationSource
|
|
41
41
|
} from "../constants";
|
|
42
|
+
import { SettingService } from './setting.service';
|
|
42
43
|
import { CreateUserDto } from 'src/dtos/create-user.dto';
|
|
43
44
|
|
|
44
45
|
enum LoginProvider {
|
|
@@ -71,6 +72,7 @@ export class AuthenticationService {
|
|
|
71
72
|
private readonly mailService: SMTPEMailService,
|
|
72
73
|
private readonly smsService: Msg91OTPService,
|
|
73
74
|
private readonly eventEmitter: EventEmitter2,
|
|
75
|
+
private readonly settingService: SettingService,
|
|
74
76
|
) { }
|
|
75
77
|
|
|
76
78
|
async resolveUser(username: string, email: string) {
|
|
@@ -108,7 +110,7 @@ export class AuthenticationService {
|
|
|
108
110
|
|
|
109
111
|
async signUp(signUpDto: SignUpDto, activeUser: ActiveUserData = null): Promise<User> {
|
|
110
112
|
// If public registrations are disabled and no activeUser is present when invoking signUp then we throw an exception.
|
|
111
|
-
if (!this.
|
|
113
|
+
if (!(await this.settingService.getConfigValue('allowPublicRegistration')) && !activeUser) {
|
|
112
114
|
throw new BadRequestException('Public registrations are disabled.');
|
|
113
115
|
}
|
|
114
116
|
|
|
@@ -185,16 +187,7 @@ export class AuthenticationService {
|
|
|
185
187
|
}
|
|
186
188
|
|
|
187
189
|
private async handlePostSignup(user: User, roles: string[]=[], pwd: string, autoGeneratedPwd: string) {
|
|
188
|
-
|
|
189
|
-
// Default Internal user role assigned
|
|
190
|
-
userRoles.push("Internal User");
|
|
191
|
-
if (roles) {
|
|
192
|
-
userRoles = [...userRoles, ...roles];
|
|
193
|
-
}
|
|
194
|
-
userRoles = Array.from(new Set([...userRoles]));
|
|
195
|
-
if (userRoles.length > 0) {
|
|
196
|
-
this.userService.addRolesToUser(user.username, userRoles);
|
|
197
|
-
}
|
|
190
|
+
this.userService.initializeRolesForNewUser(roles, user);
|
|
198
191
|
// Tanay: Adding user password to history table
|
|
199
192
|
const userPasswordHistory = new UserPasswordHistory();
|
|
200
193
|
userPasswordHistory.passwordHash = pwd;
|
|
@@ -208,6 +201,7 @@ export class AuthenticationService {
|
|
|
208
201
|
}
|
|
209
202
|
}
|
|
210
203
|
|
|
204
|
+
|
|
211
205
|
generatePassword(length: number = 8): string {
|
|
212
206
|
const upperCase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
|
213
207
|
const lowerCase = "abcdefghijklmnopqrstuvwxyz";
|
|
@@ -278,7 +272,7 @@ export class AuthenticationService {
|
|
|
278
272
|
user = this.createUser(signUpDto);
|
|
279
273
|
this.populateVerificationTokens(finalRegistrationVerificationSources, user);
|
|
280
274
|
await this.userRepository.save(user);
|
|
281
|
-
await this.userService.addRoleToUser(user.username, this.
|
|
275
|
+
await this.userService.addRoleToUser(user.username, await this.settingService.getConfigValue('defaultRole'));
|
|
282
276
|
}
|
|
283
277
|
else {
|
|
284
278
|
this.populateVerificationTokens(finalRegistrationVerificationSources, user);
|
|
@@ -397,7 +391,7 @@ export class AuthenticationService {
|
|
|
397
391
|
user.emailVerifiedOnRegistrationAt = new Date();
|
|
398
392
|
user.emailVerificationTokenOnRegistration = null;
|
|
399
393
|
user.emailVerificationTokenOnRegistrationExpiresAt = null;
|
|
400
|
-
user.active = this.
|
|
394
|
+
user.active = await this.settingService.getConfigValue('activateUserOnRegistration') && this.areRegistrationValidationSourcesVerified(user);
|
|
401
395
|
const savedUser: User = await this.userRepository.save(user);
|
|
402
396
|
this.triggerRegistrationEvent(savedUser);
|
|
403
397
|
return { active: savedUser.active, message: `User registration verified for ${confirmSignUpDto.type}` }
|
|
@@ -419,7 +413,7 @@ export class AuthenticationService {
|
|
|
419
413
|
user.mobileVerifiedOnRegistrationAt = new Date();
|
|
420
414
|
user.mobileVerificationTokenOnRegistration = null;
|
|
421
415
|
user.mobileVerificationTokenOnRegistrationExpiresAt = null;
|
|
422
|
-
user.active = this.
|
|
416
|
+
user.active = await this.settingService.getConfigValue('activateUserOnRegistration') && this.areRegistrationValidationSourcesVerified(user);
|
|
423
417
|
const savedUser: User = await this.userRepository.save(user);
|
|
424
418
|
this.triggerRegistrationEvent(savedUser);
|
|
425
419
|
return { active: savedUser.active, message: `User registration verified for ${confirmSignUpDto.type}` }
|
|
@@ -976,8 +970,8 @@ export class AuthenticationService {
|
|
|
976
970
|
|
|
977
971
|
}
|
|
978
972
|
|
|
979
|
-
private isPasswordlessRegistrationEnabled() {
|
|
980
|
-
return this.
|
|
973
|
+
private async isPasswordlessRegistrationEnabled() {
|
|
974
|
+
return this.settingService.getConfigValue('passwordlessRegistration');
|
|
981
975
|
}
|
|
982
976
|
|
|
983
977
|
//FIXME - Pending implementation
|