@hed-hog/core 0.0.65 → 0.0.66
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/auth/auth.controller.d.ts +1 -1
- package/dist/auth/auth.service.d.ts +1 -1
- package/dist/core.module.d.ts +6 -2
- package/dist/core.module.d.ts.map +1 -1
- package/dist/core.module.js +18 -1
- package/dist/core.module.js.map +1 -1
- package/dist/dashboard/dashboard-core/dashboard-core.controller.d.ts +1 -1
- package/dist/dashboard/dashboard-core/dashboard-core.service.d.ts +1 -1
- package/dist/dashboard/dashboard-user/dashboard-user.controller.d.ts +3 -3
- package/dist/dashboard/dashboard-user/dashboard-user.service.d.ts +3 -3
- package/dist/user/user.controller.d.ts +1 -1
- package/dist/user/user.service.d.ts +2 -2
- package/dist/validators/is-email-with-settings.validator.d.ts +2 -5
- package/dist/validators/is-email-with-settings.validator.d.ts.map +1 -1
- package/dist/validators/is-email-with-settings.validator.js +28 -28
- package/dist/validators/is-email-with-settings.validator.js.map +1 -1
- package/dist/validators/is-pin-code-with-setting.validator.d.ts +2 -5
- package/dist/validators/is-pin-code-with-setting.validator.d.ts.map +1 -1
- package/dist/validators/is-pin-code-with-setting.validator.js +15 -13
- package/dist/validators/is-pin-code-with-setting.validator.js.map +1 -1
- package/dist/validators/is-strong-password-with-settings.validator.d.ts +2 -5
- package/dist/validators/is-strong-password-with-settings.validator.d.ts.map +1 -1
- package/dist/validators/is-strong-password-with-settings.validator.js +42 -40
- package/dist/validators/is-strong-password-with-settings.validator.js.map +1 -1
- package/dist/validators/service-locator.d.ts +11 -0
- package/dist/validators/service-locator.d.ts.map +1 -0
- package/dist/validators/service-locator.js +20 -0
- package/dist/validators/service-locator.js.map +1 -0
- package/package.json +2 -2
- package/src/core.module.ts +14 -2
- package/src/validators/is-email-with-settings.validator.ts +10 -4
- package/src/validators/is-pin-code-with-setting.validator.ts +17 -12
- package/src/validators/is-strong-password-with-settings.validator.ts +10 -5
- package/src/validators/service-locator.ts +20 -0
|
@@ -21,9 +21,9 @@ export declare class AuthController {
|
|
|
21
21
|
provider: import("@prisma/client").$Enums.user_account_provider_enum;
|
|
22
22
|
created_at: Date;
|
|
23
23
|
updated_at: Date;
|
|
24
|
-
email: string | null;
|
|
25
24
|
user_id: number;
|
|
26
25
|
provider_user_id: string;
|
|
26
|
+
email: string | null;
|
|
27
27
|
scopes: string | null;
|
|
28
28
|
refresh_token: import("@prisma/client/runtime/library").Bytes | null;
|
|
29
29
|
token_expires_at: Date | null;
|
|
@@ -67,9 +67,9 @@ export declare class AuthService {
|
|
|
67
67
|
provider: import("@prisma/client").$Enums.user_account_provider_enum;
|
|
68
68
|
created_at: Date;
|
|
69
69
|
updated_at: Date;
|
|
70
|
-
email: string | null;
|
|
71
70
|
user_id: number;
|
|
72
71
|
provider_user_id: string;
|
|
72
|
+
email: string | null;
|
|
73
73
|
scopes: string | null;
|
|
74
74
|
refresh_token: import("@prisma/client/runtime/library").Bytes | null;
|
|
75
75
|
token_expires_at: Date | null;
|
package/dist/core.module.d.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
import { MiddlewareConsumer, NestModule } from '@nestjs/common';
|
|
2
|
-
|
|
1
|
+
import { MiddlewareConsumer, NestModule, OnModuleInit } from '@nestjs/common';
|
|
2
|
+
import { SettingService } from './setting/setting.service';
|
|
3
|
+
export declare class CoreModule implements NestModule, OnModuleInit {
|
|
4
|
+
private readonly settingService;
|
|
5
|
+
constructor(settingService: SettingService);
|
|
6
|
+
onModuleInit(): void;
|
|
3
7
|
configure(consumer: MiddlewareConsumer): void;
|
|
4
8
|
}
|
|
5
9
|
//# sourceMappingURL=core.module.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.module.d.ts","sourceRoot":"","sources":["../src/core.module.ts"],"names":[],"mappings":"AAMA,OAAO,
|
|
1
|
+
{"version":3,"file":"core.module.d.ts","sourceRoot":"","sources":["../src/core.module.ts"],"names":[],"mappings":"AAMA,OAAO,EAA8B,kBAAkB,EAAU,UAAU,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAqBlH,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAQ3D,qBA2Da,UAAW,YAAW,UAAU,EAAE,YAAY;IAGvD,OAAO,CAAC,QAAQ,CAAC,cAAc;gBAAd,cAAc,EAAE,cAAc;IAGjD,YAAY;IAKZ,SAAS,CAAC,QAAQ,EAAE,kBAAkB;CAKvC"}
|
package/dist/core.module.js
CHANGED
|
@@ -5,6 +5,12 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
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
6
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
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 __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
8
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
15
|
exports.CoreModule = void 0;
|
|
10
16
|
const api_1 = require("@hed-hog/api");
|
|
@@ -34,12 +40,21 @@ const screen_module_1 = require("./screen/screen.module");
|
|
|
34
40
|
const security_module_1 = require("./security/security.module");
|
|
35
41
|
const session_module_1 = require("./session/session.module");
|
|
36
42
|
const setting_module_1 = require("./setting/setting.module");
|
|
43
|
+
const setting_service_1 = require("./setting/setting.service");
|
|
37
44
|
const task_module_1 = require("./task/task.module");
|
|
38
45
|
const user_module_1 = require("./user/user.module");
|
|
39
46
|
const is_email_with_settings_validator_1 = require("./validators/is-email-with-settings.validator");
|
|
40
47
|
const is_pin_code_with_setting_validator_1 = require("./validators/is-pin-code-with-setting.validator");
|
|
41
48
|
const is_strong_password_with_settings_validator_1 = require("./validators/is-strong-password-with-settings.validator");
|
|
49
|
+
const service_locator_1 = require("./validators/service-locator");
|
|
42
50
|
let CoreModule = class CoreModule {
|
|
51
|
+
constructor(settingService) {
|
|
52
|
+
this.settingService = settingService;
|
|
53
|
+
}
|
|
54
|
+
onModuleInit() {
|
|
55
|
+
// Initialize the service locator for validators
|
|
56
|
+
service_locator_1.ValidatorServiceLocator.setSettingService(this.settingService);
|
|
57
|
+
}
|
|
43
58
|
configure(consumer) {
|
|
44
59
|
consumer
|
|
45
60
|
.apply(locale_injection_middleware_1.LocaleInjectionMiddleware)
|
|
@@ -106,6 +121,8 @@ exports.CoreModule = CoreModule = __decorate([
|
|
|
106
121
|
inject: [core_1.Reflector, api_prisma_1.PrismaService],
|
|
107
122
|
},
|
|
108
123
|
]
|
|
109
|
-
})
|
|
124
|
+
}),
|
|
125
|
+
__param(0, (0, common_1.Inject)((0, common_1.forwardRef)(() => setting_service_1.SettingService))),
|
|
126
|
+
__metadata("design:paramtypes", [setting_service_1.SettingService])
|
|
110
127
|
], CoreModule);
|
|
111
128
|
//# sourceMappingURL=core.module.js.map
|
package/dist/core.module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.module.js","sourceRoot":"","sources":["../src/core.module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"core.module.js","sourceRoot":"","sources":["../src/core.module.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,11 +31,11 @@ export declare class DashboardCoreController {
|
|
|
31
31
|
id: number;
|
|
32
32
|
created_at: Date;
|
|
33
33
|
updated_at: Date;
|
|
34
|
-
user_id: number;
|
|
35
34
|
height: number;
|
|
36
35
|
x_axis: number;
|
|
37
36
|
y_axis: number;
|
|
38
37
|
item_id: number;
|
|
38
|
+
user_id: number;
|
|
39
39
|
}[];
|
|
40
40
|
} & {
|
|
41
41
|
width: number;
|
|
@@ -31,11 +31,11 @@ export declare class DashboardCoreService {
|
|
|
31
31
|
id: number;
|
|
32
32
|
created_at: Date;
|
|
33
33
|
updated_at: Date;
|
|
34
|
-
user_id: number;
|
|
35
34
|
height: number;
|
|
36
35
|
x_axis: number;
|
|
37
36
|
y_axis: number;
|
|
38
37
|
item_id: number;
|
|
38
|
+
user_id: number;
|
|
39
39
|
}[];
|
|
40
40
|
} & {
|
|
41
41
|
width: number;
|
|
@@ -19,33 +19,33 @@ export declare class DashboardUserController {
|
|
|
19
19
|
id: number;
|
|
20
20
|
created_at: Date;
|
|
21
21
|
updated_at: Date;
|
|
22
|
-
user_id: number;
|
|
23
22
|
height: number;
|
|
24
23
|
x_axis: number;
|
|
25
24
|
y_axis: number;
|
|
26
25
|
item_id: number;
|
|
26
|
+
user_id: number;
|
|
27
27
|
}>;
|
|
28
28
|
create(data: CreateDTO): Promise<{
|
|
29
29
|
width: number;
|
|
30
30
|
id: number;
|
|
31
31
|
created_at: Date;
|
|
32
32
|
updated_at: Date;
|
|
33
|
-
user_id: number;
|
|
34
33
|
height: number;
|
|
35
34
|
x_axis: number;
|
|
36
35
|
y_axis: number;
|
|
37
36
|
item_id: number;
|
|
37
|
+
user_id: number;
|
|
38
38
|
}>;
|
|
39
39
|
update(id: number, data: UpdateDTO): Promise<{
|
|
40
40
|
width: number;
|
|
41
41
|
id: number;
|
|
42
42
|
created_at: Date;
|
|
43
43
|
updated_at: Date;
|
|
44
|
-
user_id: number;
|
|
45
44
|
height: number;
|
|
46
45
|
x_axis: number;
|
|
47
46
|
y_axis: number;
|
|
48
47
|
item_id: number;
|
|
48
|
+
user_id: number;
|
|
49
49
|
}>;
|
|
50
50
|
delete(data: DeleteDTO): Promise<{
|
|
51
51
|
count: number;
|
|
@@ -23,22 +23,22 @@ export declare class DashboardUserService {
|
|
|
23
23
|
id: number;
|
|
24
24
|
created_at: Date;
|
|
25
25
|
updated_at: Date;
|
|
26
|
-
user_id: number;
|
|
27
26
|
height: number;
|
|
28
27
|
x_axis: number;
|
|
29
28
|
y_axis: number;
|
|
30
29
|
item_id: number;
|
|
30
|
+
user_id: number;
|
|
31
31
|
}>;
|
|
32
32
|
create(data: CreateDTO): Promise<{
|
|
33
33
|
width: number;
|
|
34
34
|
id: number;
|
|
35
35
|
created_at: Date;
|
|
36
36
|
updated_at: Date;
|
|
37
|
-
user_id: number;
|
|
38
37
|
height: number;
|
|
39
38
|
x_axis: number;
|
|
40
39
|
y_axis: number;
|
|
41
40
|
item_id: number;
|
|
41
|
+
user_id: number;
|
|
42
42
|
}>;
|
|
43
43
|
update({ id, data }: {
|
|
44
44
|
id: number;
|
|
@@ -48,11 +48,11 @@ export declare class DashboardUserService {
|
|
|
48
48
|
id: number;
|
|
49
49
|
created_at: Date;
|
|
50
50
|
updated_at: Date;
|
|
51
|
-
user_id: number;
|
|
52
51
|
height: number;
|
|
53
52
|
x_axis: number;
|
|
54
53
|
y_axis: number;
|
|
55
54
|
item_id: number;
|
|
55
|
+
user_id: number;
|
|
56
56
|
}>;
|
|
57
57
|
delete({ ids }: DeleteDTO): Promise<{
|
|
58
58
|
count: number;
|
|
@@ -25,9 +25,9 @@ export declare class UserController {
|
|
|
25
25
|
provider: import("@prisma/client").$Enums.user_account_provider_enum;
|
|
26
26
|
created_at: Date;
|
|
27
27
|
updated_at: Date;
|
|
28
|
-
email: string | null;
|
|
29
28
|
user_id: number;
|
|
30
29
|
provider_user_id: string;
|
|
30
|
+
email: string | null;
|
|
31
31
|
scopes: string | null;
|
|
32
32
|
refresh_token: import("@prisma/client/runtime/library").Bytes | null;
|
|
33
33
|
token_expires_at: Date | null;
|
|
@@ -30,9 +30,9 @@ export declare class UserService {
|
|
|
30
30
|
provider: import("@prisma/client").$Enums.user_account_provider_enum;
|
|
31
31
|
created_at: Date;
|
|
32
32
|
updated_at: Date;
|
|
33
|
-
email: string | null;
|
|
34
33
|
user_id: number;
|
|
35
34
|
provider_user_id: string;
|
|
35
|
+
email: string | null;
|
|
36
36
|
scopes: string | null;
|
|
37
37
|
refresh_token: import("@prisma/client/runtime/library").Bytes | null;
|
|
38
38
|
token_expires_at: Date | null;
|
|
@@ -124,9 +124,9 @@ export declare class UserService {
|
|
|
124
124
|
provider: import("@prisma/client").$Enums.user_account_provider_enum;
|
|
125
125
|
created_at: Date;
|
|
126
126
|
updated_at: Date;
|
|
127
|
-
email: string | null;
|
|
128
127
|
user_id: number;
|
|
129
128
|
provider_user_id: string;
|
|
129
|
+
email: string | null;
|
|
130
130
|
scopes: string | null;
|
|
131
131
|
refresh_token: import("@prisma/client/runtime/library").Bytes | null;
|
|
132
132
|
token_expires_at: Date | null;
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
import { ValidationOptions, ValidatorConstraintInterface } from 'class-validator';
|
|
2
|
-
import { SettingService } from '../setting/setting.service';
|
|
1
|
+
import { ValidationArguments, ValidationOptions, ValidatorConstraintInterface } from 'class-validator';
|
|
3
2
|
export declare class IsEmailWithSettingsConstraint implements ValidatorConstraintInterface {
|
|
4
|
-
|
|
5
|
-
constructor(settingService: SettingService);
|
|
6
|
-
validate(email: string): Promise<boolean>;
|
|
3
|
+
validate(email: string, args: ValidationArguments): Promise<boolean>;
|
|
7
4
|
defaultMessage(): string;
|
|
8
5
|
}
|
|
9
6
|
export declare function IsEmailWithSettings(validationOptions?: ValidationOptions): (object: object, propertyName: string) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-email-with-settings.validator.d.ts","sourceRoot":"","sources":["../../src/validators/is-email-with-settings.validator.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,iBAAiB,EAEjB,4BAA4B,EAC7B,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"is-email-with-settings.validator.d.ts","sourceRoot":"","sources":["../../src/validators/is-email-with-settings.validator.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,mBAAmB,EACnB,iBAAiB,EAEjB,4BAA4B,EAC7B,MAAM,iBAAiB,CAAC;AAIzB,qBAEa,6BACX,YAAW,4BAA4B;IAGjC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;IAkD1E,cAAc,IAAI,MAAM;CAOzB;AAED,wBAAgB,mBAAmB,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,IACtD,QAAQ,MAAM,EAAE,cAAc,MAAM,UAStD"}
|
|
@@ -5,22 +5,16 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
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
6
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
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
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
9
|
exports.IsEmailWithSettingsConstraint = void 0;
|
|
13
10
|
exports.IsEmailWithSettings = IsEmailWithSettings;
|
|
14
11
|
const api_locale_1 = require("@hed-hog/api-locale");
|
|
15
12
|
const common_1 = require("@nestjs/common");
|
|
16
13
|
const class_validator_1 = require("class-validator");
|
|
17
|
-
const setting_service_1 = require("../setting/setting.service");
|
|
18
14
|
const locale_context_1 = require("../utils/locale-context");
|
|
15
|
+
const service_locator_1 = require("./service-locator");
|
|
19
16
|
let IsEmailWithSettingsConstraint = class IsEmailWithSettingsConstraint {
|
|
20
|
-
|
|
21
|
-
this.settingService = settingService;
|
|
22
|
-
}
|
|
23
|
-
async validate(email) {
|
|
17
|
+
async validate(email, args) {
|
|
24
18
|
var _a;
|
|
25
19
|
if (!email) {
|
|
26
20
|
return false;
|
|
@@ -35,26 +29,33 @@ let IsEmailWithSettingsConstraint = class IsEmailWithSettingsConstraint {
|
|
|
35
29
|
if (!domain) {
|
|
36
30
|
return false;
|
|
37
31
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
32
|
+
try {
|
|
33
|
+
const settingService = service_locator_1.ValidatorServiceLocator.getSettingService();
|
|
34
|
+
const settings = await settingService.getSystemSettings();
|
|
35
|
+
const blacklist = settings.setting['email-host-blacklist'] || [];
|
|
36
|
+
const whitelist = settings.setting['email-host-whitelist'] || [];
|
|
37
|
+
// blacklist e whitelist já são arrays
|
|
38
|
+
const blacklistHosts = Array.isArray(blacklist)
|
|
39
|
+
? blacklist.map((host) => host.trim().toLowerCase()).filter((host) => host.length > 0)
|
|
40
|
+
: [];
|
|
41
|
+
const whitelistHosts = Array.isArray(whitelist)
|
|
42
|
+
? whitelist.map((host) => host.trim().toLowerCase()).filter((host) => host.length > 0)
|
|
43
|
+
: [];
|
|
44
|
+
// If whitelist is defined and not empty, domain must be in whitelist
|
|
45
|
+
if (whitelistHosts.length > 0) {
|
|
46
|
+
return whitelistHosts.includes(domain);
|
|
47
|
+
}
|
|
48
|
+
// If blacklist is defined, domain must not be in blacklist
|
|
49
|
+
if (blacklistHosts.length > 0) {
|
|
50
|
+
return !blacklistHosts.includes(domain);
|
|
51
|
+
}
|
|
52
|
+
// No restrictions, email is valid
|
|
53
|
+
return true;
|
|
51
54
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
return
|
|
55
|
+
catch (error) {
|
|
56
|
+
console.warn('[IsEmailWithSettingsConstraint] Error getting SettingService:', error);
|
|
57
|
+
return true; // Allow if service is not available
|
|
55
58
|
}
|
|
56
|
-
// No restrictions, email is valid
|
|
57
|
-
return true;
|
|
58
59
|
}
|
|
59
60
|
defaultMessage() {
|
|
60
61
|
return (0, api_locale_1.getLocaleText)('email.invalidEmail', (0, locale_context_1.getLocaleFromContext)(), 'Email does not meet the security requirements defined in system settings.');
|
|
@@ -63,8 +64,7 @@ let IsEmailWithSettingsConstraint = class IsEmailWithSettingsConstraint {
|
|
|
63
64
|
exports.IsEmailWithSettingsConstraint = IsEmailWithSettingsConstraint;
|
|
64
65
|
exports.IsEmailWithSettingsConstraint = IsEmailWithSettingsConstraint = __decorate([
|
|
65
66
|
(0, class_validator_1.ValidatorConstraint)({ async: true }),
|
|
66
|
-
(0, common_1.Injectable)()
|
|
67
|
-
__metadata("design:paramtypes", [setting_service_1.SettingService])
|
|
67
|
+
(0, common_1.Injectable)()
|
|
68
68
|
], IsEmailWithSettingsConstraint);
|
|
69
69
|
function IsEmailWithSettings(validationOptions) {
|
|
70
70
|
return function (object, propertyName) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-email-with-settings.validator.js","sourceRoot":"","sources":["../../src/validators/is-email-with-settings.validator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"is-email-with-settings.validator.js","sourceRoot":"","sources":["../../src/validators/is-email-with-settings.validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
import { ValidationOptions, ValidatorConstraintInterface } from 'class-validator';
|
|
2
|
-
import { SettingService } from '../setting/setting.service';
|
|
1
|
+
import { ValidationArguments, ValidationOptions, ValidatorConstraintInterface } from 'class-validator';
|
|
3
2
|
export declare class IsPinCodeWithSettingConstraint implements ValidatorConstraintInterface {
|
|
4
|
-
private readonly settingService;
|
|
5
3
|
private settings;
|
|
6
|
-
|
|
7
|
-
validate(pinCode: string): Promise<boolean>;
|
|
4
|
+
validate(pinCode: string, args: ValidationArguments): Promise<boolean>;
|
|
8
5
|
defaultMessage(): string;
|
|
9
6
|
}
|
|
10
7
|
export declare function IsPinCodeWithSetting(validationOptions?: ValidationOptions): (object: object, propertyName: string) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-pin-code-with-setting.validator.d.ts","sourceRoot":"","sources":["../../src/validators/is-pin-code-with-setting.validator.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"is-pin-code-with-setting.validator.d.ts","sourceRoot":"","sources":["../../src/validators/is-pin-code-with-setting.validator.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,mBAAmB,EACnB,iBAAiB,EAEjB,4BAA4B,EAC7B,MAAM,iBAAiB,CAAC;AAIzB,qBAEa,8BAA+B,YAAW,4BAA4B;IACjF,OAAO,CAAC,QAAQ,CAAa;IAEvB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;IA0B5E,cAAc,IAAI,MAAM;CA8BzB;AAED,wBAAgB,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,IACvD,QAAQ,MAAM,EAAE,cAAc,MAAM,UAStD"}
|
|
@@ -5,23 +5,19 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
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
6
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
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
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
9
|
exports.IsPinCodeWithSettingConstraint = void 0;
|
|
13
10
|
exports.IsPinCodeWithSetting = IsPinCodeWithSetting;
|
|
14
11
|
const api_locale_1 = require("@hed-hog/api-locale");
|
|
15
12
|
const common_1 = require("@nestjs/common");
|
|
16
13
|
const class_validator_1 = require("class-validator");
|
|
17
|
-
const setting_service_1 = require("../setting/setting.service");
|
|
18
14
|
const locale_context_1 = require("../utils/locale-context");
|
|
15
|
+
const service_locator_1 = require("./service-locator");
|
|
19
16
|
let IsPinCodeWithSettingConstraint = class IsPinCodeWithSettingConstraint {
|
|
20
|
-
constructor(
|
|
21
|
-
this.settingService = settingService;
|
|
17
|
+
constructor() {
|
|
22
18
|
this.settings = null;
|
|
23
19
|
}
|
|
24
|
-
async validate(pinCode) {
|
|
20
|
+
async validate(pinCode, args) {
|
|
25
21
|
this.settings = null;
|
|
26
22
|
if (!pinCode) {
|
|
27
23
|
return false;
|
|
@@ -31,10 +27,17 @@ let IsPinCodeWithSettingConstraint = class IsPinCodeWithSettingConstraint {
|
|
|
31
27
|
if (!digitRegex.test(pinCode)) {
|
|
32
28
|
return false;
|
|
33
29
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
30
|
+
try {
|
|
31
|
+
const settingService = service_locator_1.ValidatorServiceLocator.getSettingService();
|
|
32
|
+
this.settings = await settingService.getSystemSettings();
|
|
33
|
+
const codeLength = this.settings.setting['mfa-email-code-length'] || 6;
|
|
34
|
+
// Validate pin code length matches the configured length
|
|
35
|
+
return pinCode.length === Number(codeLength);
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
console.warn('[IsPinCodeWithSettingConstraint] Error getting SettingService:', error);
|
|
39
|
+
return true; // Allow if service is not available
|
|
40
|
+
}
|
|
38
41
|
}
|
|
39
42
|
defaultMessage() {
|
|
40
43
|
const locale = (0, locale_context_1.getLocaleFromContext)();
|
|
@@ -56,8 +59,7 @@ let IsPinCodeWithSettingConstraint = class IsPinCodeWithSettingConstraint {
|
|
|
56
59
|
exports.IsPinCodeWithSettingConstraint = IsPinCodeWithSettingConstraint;
|
|
57
60
|
exports.IsPinCodeWithSettingConstraint = IsPinCodeWithSettingConstraint = __decorate([
|
|
58
61
|
(0, class_validator_1.ValidatorConstraint)({ async: true }),
|
|
59
|
-
(0, common_1.Injectable)()
|
|
60
|
-
__metadata("design:paramtypes", [setting_service_1.SettingService])
|
|
62
|
+
(0, common_1.Injectable)()
|
|
61
63
|
], IsPinCodeWithSettingConstraint);
|
|
62
64
|
function IsPinCodeWithSetting(validationOptions) {
|
|
63
65
|
return function (object, propertyName) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-pin-code-with-setting.validator.js","sourceRoot":"","sources":["../../src/validators/is-pin-code-with-setting.validator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"is-pin-code-with-setting.validator.js","sourceRoot":"","sources":["../../src/validators/is-pin-code-with-setting.validator.ts"],"names":[],"mappings":";;;;;;;;;AA2EA,oDAUC;AArFD,oDAAoD;AACpD,2CAA4C;AAC5C,qDAMyB;AACzB,4DAA+D;AAC/D,uDAA4D;AAIrD,IAAM,8BAA8B,GAApC,MAAM,8BAA8B;IAApC;QACG,aAAQ,GAAQ,IAAI,CAAC;IA0D/B,CAAC;IAxDC,KAAK,CAAC,QAAQ,CAAC,OAAe,EAAE,IAAyB;QACvD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,KAAK,CAAC;QACf,CAAC;QAED,6CAA6C;QAC7C,MAAM,UAAU,GAAG,OAAO,CAAC;QAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,yCAAuB,CAAC,iBAAiB,EAAE,CAAC;YACnE,IAAI,CAAC,QAAQ,GAAG,MAAM,cAAc,CAAC,iBAAiB,EAAE,CAAC;YACzD,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;YAEvE,yDAAyD;YACzD,OAAO,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,UAAU,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,gEAAgE,EAAE,KAAK,CAAC,CAAC;YACtF,OAAO,IAAI,CAAC,CAAC,oCAAoC;QACnD,CAAC;IACH,CAAC;IAED,cAAc;QACZ,MAAM,MAAM,GAAG,IAAA,qCAAoB,GAAE,CAAC;QAEtC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;YAEvE,MAAM,YAAY,GAA2B;gBAC3C,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;aAC/B,CAAC;YAEF,IAAI,OAAO,GAAG,IAAA,0BAAa,EACzB,uBAAuB,EACvB,MAAM,EACN,wEAAwE,CACzE,CAAC;YAEF,uBAAuB;YACvB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,EAAE;gBAC5D,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;YACjE,CAAC,CAAC,CAAC;YAEH,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,OAAO,IAAA,0BAAa,EAClB,uBAAuB,EACvB,MAAM,EACN,wEAAwE,CACzE,CAAC;IACJ,CAAC;CACF,CAAA;AA3DY,wEAA8B;yCAA9B,8BAA8B;IAF1C,IAAA,qCAAmB,EAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACpC,IAAA,mBAAU,GAAE;GACA,8BAA8B,CA2D1C;AAED,SAAgB,oBAAoB,CAAC,iBAAqC;IACxE,OAAO,UAAU,MAAc,EAAE,YAAoB;QACnD,IAAA,mCAAiB,EAAC;YAChB,MAAM,EAAE,MAAM,CAAC,WAAW;YAC1B,YAAY,EAAE,YAAY;YAC1B,OAAO,EAAE,iBAAiB;YAC1B,WAAW,EAAE,EAAE;YACf,SAAS,EAAE,8BAA8B;SAC1C,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
import { ValidationOptions, ValidatorConstraintInterface } from 'class-validator';
|
|
2
|
-
import { SettingService } from '../setting/setting.service';
|
|
1
|
+
import { ValidationArguments, ValidationOptions, ValidatorConstraintInterface } from 'class-validator';
|
|
3
2
|
export declare class IsStrongPasswordWithSettingsConstraint implements ValidatorConstraintInterface {
|
|
4
|
-
private readonly settingService;
|
|
5
3
|
private failedRule;
|
|
6
4
|
private settings;
|
|
7
|
-
|
|
8
|
-
validate(password: string): Promise<boolean>;
|
|
5
|
+
validate(password: string, args: ValidationArguments): Promise<boolean>;
|
|
9
6
|
defaultMessage(): string;
|
|
10
7
|
}
|
|
11
8
|
export declare function IsStrongPasswordWithSettings(validationOptions?: ValidationOptions): (object: object, propertyName: string) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-strong-password-with-settings.validator.d.ts","sourceRoot":"","sources":["../../src/validators/is-strong-password-with-settings.validator.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,iBAAiB,EAEjB,4BAA4B,EAC7B,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"is-strong-password-with-settings.validator.d.ts","sourceRoot":"","sources":["../../src/validators/is-strong-password-with-settings.validator.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,mBAAmB,EACnB,iBAAiB,EAEjB,4BAA4B,EAC7B,MAAM,iBAAiB,CAAC;AAIzB,qBAEa,sCACX,YAAW,4BAA4B;IAEvC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,QAAQ,CAAa;IAEvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;IAyD7E,cAAc,IAAI,MAAM;CAsCzB;AAED,wBAAgB,4BAA4B,CAC1C,iBAAiB,CAAC,EAAE,iBAAiB,IAEpB,QAAQ,MAAM,EAAE,cAAc,MAAM,UAStD"}
|
|
@@ -5,63 +5,66 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
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
6
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
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
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
9
|
exports.IsStrongPasswordWithSettingsConstraint = void 0;
|
|
13
10
|
exports.IsStrongPasswordWithSettings = IsStrongPasswordWithSettings;
|
|
14
11
|
const api_locale_1 = require("@hed-hog/api-locale");
|
|
15
12
|
const common_1 = require("@nestjs/common");
|
|
16
13
|
const class_validator_1 = require("class-validator");
|
|
17
|
-
const setting_service_1 = require("../setting/setting.service");
|
|
18
14
|
const locale_context_1 = require("../utils/locale-context");
|
|
15
|
+
const service_locator_1 = require("./service-locator");
|
|
19
16
|
let IsStrongPasswordWithSettingsConstraint = class IsStrongPasswordWithSettingsConstraint {
|
|
20
|
-
constructor(
|
|
21
|
-
this.settingService = settingService;
|
|
17
|
+
constructor() {
|
|
22
18
|
this.failedRule = null;
|
|
23
19
|
this.settings = null;
|
|
24
20
|
}
|
|
25
|
-
async validate(password) {
|
|
21
|
+
async validate(password, args) {
|
|
26
22
|
this.failedRule = null;
|
|
27
23
|
this.settings = null;
|
|
28
24
|
if (!password) {
|
|
29
25
|
this.failedRule = 'password.required';
|
|
30
26
|
return false;
|
|
31
27
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
28
|
+
try {
|
|
29
|
+
const settingService = service_locator_1.ValidatorServiceLocator.getSettingService();
|
|
30
|
+
this.settings = await settingService.getSystemSettings();
|
|
31
|
+
const minLength = this.settings.setting['password-min-length'] || 6;
|
|
32
|
+
const minLowercase = this.settings.setting['password-min-lowercase'] || 0;
|
|
33
|
+
const minUppercase = this.settings.setting['password-min-uppercase'] || 0;
|
|
34
|
+
const minNumbers = this.settings.setting['password-min-numbers'] || 0;
|
|
35
|
+
const minSymbols = this.settings.setting['password-min-symbols'] || 0;
|
|
36
|
+
// Validate length
|
|
37
|
+
if (password.length < minLength) {
|
|
38
|
+
this.failedRule = 'password.minLength';
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
// Count character types
|
|
42
|
+
const lowercase = (password.match(/[a-z]/g) || []).length;
|
|
43
|
+
const uppercase = (password.match(/[A-Z]/g) || []).length;
|
|
44
|
+
const numbers = (password.match(/[0-9]/g) || []).length;
|
|
45
|
+
const symbols = (password.match(/[^a-zA-Z0-9]/g) || []).length;
|
|
46
|
+
if (lowercase < minLowercase) {
|
|
47
|
+
this.failedRule = 'password.minLowercase';
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
if (uppercase < minUppercase) {
|
|
51
|
+
this.failedRule = 'password.minUppercase';
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
if (numbers < minNumbers) {
|
|
55
|
+
this.failedRule = 'password.minNumbers';
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
if (symbols < minSymbols) {
|
|
59
|
+
this.failedRule = 'password.minSymbols';
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
return true;
|
|
59
63
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
return
|
|
64
|
+
catch (error) {
|
|
65
|
+
console.warn('[IsStrongPasswordWithSettingsConstraint] Error getting SettingService:', error);
|
|
66
|
+
return true; // Allow if service is not available
|
|
63
67
|
}
|
|
64
|
-
return true;
|
|
65
68
|
}
|
|
66
69
|
defaultMessage() {
|
|
67
70
|
const locale = (0, locale_context_1.getLocaleFromContext)();
|
|
@@ -91,8 +94,7 @@ let IsStrongPasswordWithSettingsConstraint = class IsStrongPasswordWithSettingsC
|
|
|
91
94
|
exports.IsStrongPasswordWithSettingsConstraint = IsStrongPasswordWithSettingsConstraint;
|
|
92
95
|
exports.IsStrongPasswordWithSettingsConstraint = IsStrongPasswordWithSettingsConstraint = __decorate([
|
|
93
96
|
(0, class_validator_1.ValidatorConstraint)({ async: true }),
|
|
94
|
-
(0, common_1.Injectable)()
|
|
95
|
-
__metadata("design:paramtypes", [setting_service_1.SettingService])
|
|
97
|
+
(0, common_1.Injectable)()
|
|
96
98
|
], IsStrongPasswordWithSettingsConstraint);
|
|
97
99
|
function IsStrongPasswordWithSettings(validationOptions) {
|
|
98
100
|
return function (object, propertyName) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-strong-password-with-settings.validator.js","sourceRoot":"","sources":["../../src/validators/is-strong-password-with-settings.validator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"is-strong-password-with-settings.validator.js","sourceRoot":"","sources":["../../src/validators/is-strong-password-with-settings.validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { SettingService } from '../setting/setting.service';
|
|
2
|
+
/**
|
|
3
|
+
* Service locator for validators that can't use dependency injection
|
|
4
|
+
* This is set up during application bootstrap
|
|
5
|
+
*/
|
|
6
|
+
export declare class ValidatorServiceLocator {
|
|
7
|
+
private static settingService;
|
|
8
|
+
static setSettingService(service: SettingService): void;
|
|
9
|
+
static getSettingService(): SettingService;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=service-locator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-locator.d.ts","sourceRoot":"","sources":["../../src/validators/service-locator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D;;;GAGG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAiB;IAE9C,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAIvD,MAAM,CAAC,iBAAiB,IAAI,cAAc;CAM3C"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ValidatorServiceLocator = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Service locator for validators that can't use dependency injection
|
|
6
|
+
* This is set up during application bootstrap
|
|
7
|
+
*/
|
|
8
|
+
class ValidatorServiceLocator {
|
|
9
|
+
static setSettingService(service) {
|
|
10
|
+
this.settingService = service;
|
|
11
|
+
}
|
|
12
|
+
static getSettingService() {
|
|
13
|
+
if (!this.settingService) {
|
|
14
|
+
throw new Error('SettingService not initialized in ValidatorServiceLocator');
|
|
15
|
+
}
|
|
16
|
+
return this.settingService;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.ValidatorServiceLocator = ValidatorServiceLocator;
|
|
20
|
+
//# sourceMappingURL=service-locator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-locator.js","sourceRoot":"","sources":["../../src/validators/service-locator.ts"],"names":[],"mappings":";;;AAEA;;;GAGG;AACH,MAAa,uBAAuB;IAGlC,MAAM,CAAC,iBAAiB,CAAC,OAAuB;QAC9C,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;IAChC,CAAC;IAED,MAAM,CAAC,iBAAiB;QACtB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC/E,CAAC;QACD,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;CACF;AAbD,0DAaC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hed-hog/core",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.66",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"dependencies": {
|
|
@@ -30,8 +30,8 @@
|
|
|
30
30
|
"speakeasy": "^2.0.0",
|
|
31
31
|
"uuid": "^11.1.0",
|
|
32
32
|
"@hed-hog/types": "0.0.1",
|
|
33
|
-
"@hed-hog/api-mail": "0.0.7",
|
|
34
33
|
"@hed-hog/api-pagination": "0.0.3",
|
|
34
|
+
"@hed-hog/api-mail": "0.0.7",
|
|
35
35
|
"@hed-hog/api-prisma": "0.0.4",
|
|
36
36
|
"@hed-hog/api-locale": "0.0.10",
|
|
37
37
|
"@hed-hog/api": "0.0.3"
|
package/src/core.module.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { MailModule as MailSendModule } from '@hed-hog/api-mail';
|
|
|
4
4
|
import { PaginationModule } from '@hed-hog/api-pagination';
|
|
5
5
|
import { PrismaModule, PrismaService } from '@hed-hog/api-prisma';
|
|
6
6
|
import { HttpModule } from '@nestjs/axios';
|
|
7
|
-
import { forwardRef, Global, MiddlewareConsumer, Module, NestModule } from '@nestjs/common';
|
|
7
|
+
import { forwardRef, Global, Inject, MiddlewareConsumer, Module, NestModule, OnModuleInit } from '@nestjs/common';
|
|
8
8
|
import { ConfigModule } from '@nestjs/config';
|
|
9
9
|
import { APP_INTERCEPTOR, Reflector } from '@nestjs/core';
|
|
10
10
|
import { AuthModule } from './auth/auth.module';
|
|
@@ -25,11 +25,13 @@ import { ScreenModule } from './screen/screen.module';
|
|
|
25
25
|
import { SecurityModule } from './security/security.module';
|
|
26
26
|
import { SessionModule } from './session/session.module';
|
|
27
27
|
import { SettingModule } from './setting/setting.module';
|
|
28
|
+
import { SettingService } from './setting/setting.service';
|
|
28
29
|
import { TaskModule } from './task/task.module';
|
|
29
30
|
import { UserModule } from './user/user.module';
|
|
30
31
|
import { IsEmailWithSettingsConstraint } from './validators/is-email-with-settings.validator';
|
|
31
32
|
import { IsPinCodeWithSettingConstraint } from './validators/is-pin-code-with-setting.validator';
|
|
32
33
|
import { IsStrongPasswordWithSettingsConstraint } from './validators/is-strong-password-with-settings.validator';
|
|
34
|
+
import { ValidatorServiceLocator } from './validators/service-locator';
|
|
33
35
|
|
|
34
36
|
@Global()
|
|
35
37
|
@Module({
|
|
@@ -90,7 +92,17 @@ import { IsStrongPasswordWithSettingsConstraint } from './validators/is-strong-p
|
|
|
90
92
|
},
|
|
91
93
|
]
|
|
92
94
|
})
|
|
93
|
-
export class CoreModule implements NestModule {
|
|
95
|
+
export class CoreModule implements NestModule, OnModuleInit {
|
|
96
|
+
constructor(
|
|
97
|
+
@Inject(forwardRef(() => SettingService))
|
|
98
|
+
private readonly settingService: SettingService
|
|
99
|
+
) {}
|
|
100
|
+
|
|
101
|
+
onModuleInit() {
|
|
102
|
+
// Initialize the service locator for validators
|
|
103
|
+
ValidatorServiceLocator.setSettingService(this.settingService);
|
|
104
|
+
}
|
|
105
|
+
|
|
94
106
|
configure(consumer: MiddlewareConsumer) {
|
|
95
107
|
consumer
|
|
96
108
|
.apply(LocaleInjectionMiddleware)
|
|
@@ -2,21 +2,21 @@ import { getLocaleText } from '@hed-hog/api-locale';
|
|
|
2
2
|
import { Injectable } from '@nestjs/common';
|
|
3
3
|
import {
|
|
4
4
|
registerDecorator,
|
|
5
|
+
ValidationArguments,
|
|
5
6
|
ValidationOptions,
|
|
6
7
|
ValidatorConstraint,
|
|
7
8
|
ValidatorConstraintInterface
|
|
8
9
|
} from 'class-validator';
|
|
9
|
-
import { SettingService } from '../setting/setting.service';
|
|
10
10
|
import { getLocaleFromContext } from '../utils/locale-context';
|
|
11
|
+
import { ValidatorServiceLocator } from './service-locator';
|
|
11
12
|
|
|
12
13
|
@ValidatorConstraint({ async: true })
|
|
13
14
|
@Injectable()
|
|
14
15
|
export class IsEmailWithSettingsConstraint
|
|
15
16
|
implements ValidatorConstraintInterface
|
|
16
17
|
{
|
|
17
|
-
constructor(private readonly settingService: SettingService) {}
|
|
18
18
|
|
|
19
|
-
async validate(email: string): Promise<boolean> {
|
|
19
|
+
async validate(email: string, args: ValidationArguments): Promise<boolean> {
|
|
20
20
|
if (!email) {
|
|
21
21
|
return false;
|
|
22
22
|
}
|
|
@@ -33,7 +33,9 @@ export class IsEmailWithSettingsConstraint
|
|
|
33
33
|
return false;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
try {
|
|
37
|
+
const settingService = ValidatorServiceLocator.getSettingService();
|
|
38
|
+
const settings = await settingService.getSystemSettings();
|
|
37
39
|
const blacklist = settings.setting['email-host-blacklist'] || [];
|
|
38
40
|
const whitelist = settings.setting['email-host-whitelist'] || [];
|
|
39
41
|
|
|
@@ -58,6 +60,10 @@ export class IsEmailWithSettingsConstraint
|
|
|
58
60
|
|
|
59
61
|
// No restrictions, email is valid
|
|
60
62
|
return true;
|
|
63
|
+
} catch (error) {
|
|
64
|
+
console.warn('[IsEmailWithSettingsConstraint] Error getting SettingService:', error);
|
|
65
|
+
return true; // Allow if service is not available
|
|
66
|
+
}
|
|
61
67
|
}
|
|
62
68
|
|
|
63
69
|
defaultMessage(): string {
|
|
@@ -1,22 +1,21 @@
|
|
|
1
1
|
import { getLocaleText } from '@hed-hog/api-locale';
|
|
2
2
|
import { Injectable } from '@nestjs/common';
|
|
3
3
|
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
registerDecorator,
|
|
5
|
+
ValidationArguments,
|
|
6
|
+
ValidationOptions,
|
|
7
|
+
ValidatorConstraint,
|
|
8
|
+
ValidatorConstraintInterface
|
|
8
9
|
} from 'class-validator';
|
|
9
|
-
import { SettingService } from '../setting/setting.service';
|
|
10
10
|
import { getLocaleFromContext } from '../utils/locale-context';
|
|
11
|
+
import { ValidatorServiceLocator } from './service-locator';
|
|
11
12
|
|
|
12
13
|
@ValidatorConstraint({ async: true })
|
|
13
14
|
@Injectable()
|
|
14
15
|
export class IsPinCodeWithSettingConstraint implements ValidatorConstraintInterface {
|
|
15
16
|
private settings: any = null;
|
|
16
17
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
async validate(pinCode: string): Promise<boolean> {
|
|
18
|
+
async validate(pinCode: string, args: ValidationArguments): Promise<boolean> {
|
|
20
19
|
this.settings = null;
|
|
21
20
|
|
|
22
21
|
if (!pinCode) {
|
|
@@ -29,11 +28,17 @@ export class IsPinCodeWithSettingConstraint implements ValidatorConstraintInterf
|
|
|
29
28
|
return false;
|
|
30
29
|
}
|
|
31
30
|
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
try {
|
|
32
|
+
const settingService = ValidatorServiceLocator.getSettingService();
|
|
33
|
+
this.settings = await settingService.getSystemSettings();
|
|
34
|
+
const codeLength = this.settings.setting['mfa-email-code-length'] || 6;
|
|
34
35
|
|
|
35
|
-
|
|
36
|
-
|
|
36
|
+
// Validate pin code length matches the configured length
|
|
37
|
+
return pinCode.length === Number(codeLength);
|
|
38
|
+
} catch (error) {
|
|
39
|
+
console.warn('[IsPinCodeWithSettingConstraint] Error getting SettingService:', error);
|
|
40
|
+
return true; // Allow if service is not available
|
|
41
|
+
}
|
|
37
42
|
}
|
|
38
43
|
|
|
39
44
|
defaultMessage(): string {
|
|
@@ -2,12 +2,13 @@ import { getLocaleText } from '@hed-hog/api-locale';
|
|
|
2
2
|
import { Injectable } from '@nestjs/common';
|
|
3
3
|
import {
|
|
4
4
|
registerDecorator,
|
|
5
|
+
ValidationArguments,
|
|
5
6
|
ValidationOptions,
|
|
6
7
|
ValidatorConstraint,
|
|
7
8
|
ValidatorConstraintInterface
|
|
8
9
|
} from 'class-validator';
|
|
9
|
-
import { SettingService } from '../setting/setting.service';
|
|
10
10
|
import { getLocaleFromContext } from '../utils/locale-context';
|
|
11
|
+
import { ValidatorServiceLocator } from './service-locator';
|
|
11
12
|
|
|
12
13
|
@ValidatorConstraint({ async: true })
|
|
13
14
|
@Injectable()
|
|
@@ -17,9 +18,7 @@ export class IsStrongPasswordWithSettingsConstraint
|
|
|
17
18
|
private failedRule: string | null = null;
|
|
18
19
|
private settings: any = null;
|
|
19
20
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
async validate(password: string): Promise<boolean> {
|
|
21
|
+
async validate(password: string, args: ValidationArguments): Promise<boolean> {
|
|
23
22
|
this.failedRule = null;
|
|
24
23
|
this.settings = null;
|
|
25
24
|
|
|
@@ -28,7 +27,9 @@ export class IsStrongPasswordWithSettingsConstraint
|
|
|
28
27
|
return false;
|
|
29
28
|
}
|
|
30
29
|
|
|
31
|
-
|
|
30
|
+
try {
|
|
31
|
+
const settingService = ValidatorServiceLocator.getSettingService();
|
|
32
|
+
this.settings = await settingService.getSystemSettings();
|
|
32
33
|
const minLength = this.settings.setting['password-min-length'] || 6;
|
|
33
34
|
const minLowercase = this.settings.setting['password-min-lowercase'] || 0;
|
|
34
35
|
const minUppercase = this.settings.setting['password-min-uppercase'] || 0;
|
|
@@ -68,6 +69,10 @@ export class IsStrongPasswordWithSettingsConstraint
|
|
|
68
69
|
}
|
|
69
70
|
|
|
70
71
|
return true;
|
|
72
|
+
} catch (error) {
|
|
73
|
+
console.warn('[IsStrongPasswordWithSettingsConstraint] Error getting SettingService:', error);
|
|
74
|
+
return true; // Allow if service is not available
|
|
75
|
+
}
|
|
71
76
|
}
|
|
72
77
|
|
|
73
78
|
defaultMessage(): string {
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { SettingService } from '../setting/setting.service';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Service locator for validators that can't use dependency injection
|
|
5
|
+
* This is set up during application bootstrap
|
|
6
|
+
*/
|
|
7
|
+
export class ValidatorServiceLocator {
|
|
8
|
+
private static settingService: SettingService;
|
|
9
|
+
|
|
10
|
+
static setSettingService(service: SettingService): void {
|
|
11
|
+
this.settingService = service;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
static getSettingService(): SettingService {
|
|
15
|
+
if (!this.settingService) {
|
|
16
|
+
throw new Error('SettingService not initialized in ValidatorServiceLocator');
|
|
17
|
+
}
|
|
18
|
+
return this.settingService;
|
|
19
|
+
}
|
|
20
|
+
}
|