@ackplus/nest-auth 2.7.6 → 2.8.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/dist/lib/admin-console/admin-console.module.d.ts +3 -1
- package/dist/lib/admin-console/admin-console.module.d.ts.map +1 -1
- package/dist/lib/admin-console/admin-console.module.js +10 -0
- package/dist/lib/admin-console/admin-console.module.js.map +1 -1
- package/dist/lib/admin-console/controllers/admin-auth.controller.d.ts +13 -5
- package/dist/lib/admin-console/controllers/admin-auth.controller.d.ts.map +1 -1
- package/dist/lib/admin-console/controllers/admin-auth.controller.js +112 -15
- package/dist/lib/admin-console/controllers/admin-auth.controller.js.map +1 -1
- package/dist/lib/admin-console/controllers/admin-blocked-domains.controller.d.ts +23 -0
- package/dist/lib/admin-console/controllers/admin-blocked-domains.controller.d.ts.map +1 -0
- package/dist/lib/admin-console/controllers/admin-blocked-domains.controller.js +105 -0
- package/dist/lib/admin-console/controllers/admin-blocked-domains.controller.js.map +1 -0
- package/dist/lib/admin-console/controllers/admin-console.controller.d.ts.map +1 -1
- package/dist/lib/admin-console/controllers/admin-console.controller.js +5 -1
- package/dist/lib/admin-console/controllers/admin-console.controller.js.map +1 -1
- package/dist/lib/admin-console/decorators/admin-throttle.decorator.d.ts +4 -0
- package/dist/lib/admin-console/decorators/admin-throttle.decorator.d.ts.map +1 -0
- package/dist/lib/admin-console/decorators/admin-throttle.decorator.js +11 -0
- package/dist/lib/admin-console/decorators/admin-throttle.decorator.js.map +1 -0
- package/dist/lib/admin-console/dto/admin-blocked-domain.dto.d.ts +4 -0
- package/dist/lib/admin-console/dto/admin-blocked-domain.dto.d.ts.map +1 -0
- package/dist/lib/admin-console/dto/admin-blocked-domain.dto.js +32 -0
- package/dist/lib/admin-console/dto/admin-blocked-domain.dto.js.map +1 -0
- package/dist/lib/admin-console/entities/admin-user.entity.d.ts +1 -0
- package/dist/lib/admin-console/entities/admin-user.entity.d.ts.map +1 -1
- package/dist/lib/admin-console/entities/admin-user.entity.js +15 -0
- package/dist/lib/admin-console/entities/admin-user.entity.js.map +1 -1
- package/dist/lib/admin-console/guards/admin-brute-force.guard.d.ts +12 -0
- package/dist/lib/admin-console/guards/admin-brute-force.guard.d.ts.map +1 -0
- package/dist/lib/admin-console/guards/admin-brute-force.guard.js +45 -0
- package/dist/lib/admin-console/guards/admin-brute-force.guard.js.map +1 -0
- package/dist/lib/admin-console/guards/admin-session.guard.d.ts +3 -1
- package/dist/lib/admin-console/guards/admin-session.guard.d.ts.map +1 -1
- package/dist/lib/admin-console/guards/admin-session.guard.js +10 -2
- package/dist/lib/admin-console/guards/admin-session.guard.js.map +1 -1
- package/dist/lib/admin-console/middleware/admin-security-headers.middleware.d.ts +6 -0
- package/dist/lib/admin-console/middleware/admin-security-headers.middleware.d.ts.map +1 -0
- package/dist/lib/admin-console/middleware/admin-security-headers.middleware.js +35 -0
- package/dist/lib/admin-console/middleware/admin-security-headers.middleware.js.map +1 -0
- package/dist/lib/admin-console/services/admin-auth.service.d.ts +2 -0
- package/dist/lib/admin-console/services/admin-auth.service.d.ts.map +1 -1
- package/dist/lib/admin-console/services/admin-auth.service.js +14 -0
- package/dist/lib/admin-console/services/admin-auth.service.js.map +1 -1
- package/dist/lib/admin-console/services/admin-console-config.service.d.ts +2 -0
- package/dist/lib/admin-console/services/admin-console-config.service.d.ts.map +1 -1
- package/dist/lib/admin-console/services/admin-console-config.service.js +25 -3
- package/dist/lib/admin-console/services/admin-console-config.service.js.map +1 -1
- package/dist/lib/admin-console/services/admin-session.service.d.ts +1 -0
- package/dist/lib/admin-console/services/admin-session.service.d.ts.map +1 -1
- package/dist/lib/admin-console/services/admin-session.service.js +4 -3
- package/dist/lib/admin-console/services/admin-session.service.js.map +1 -1
- package/dist/lib/admin-console/services/admin-user.service.d.ts +1 -0
- package/dist/lib/admin-console/services/admin-user.service.d.ts.map +1 -1
- package/dist/lib/admin-console/services/admin-user.service.js +11 -0
- package/dist/lib/admin-console/services/admin-user.service.js.map +1 -1
- package/dist/lib/admin-console/static/index.html +387 -372
- package/dist/lib/admin-console/static/nest-auth.json +371 -4
- package/dist/lib/auth/auth.module.d.ts.map +1 -1
- package/dist/lib/auth/auth.module.js +5 -0
- package/dist/lib/auth/auth.module.js.map +1 -1
- package/dist/lib/auth/controllers/auth.controller.d.ts +14 -1
- package/dist/lib/auth/controllers/auth.controller.d.ts.map +1 -1
- package/dist/lib/auth/controllers/auth.controller.js +62 -2
- package/dist/lib/auth/controllers/auth.controller.js.map +1 -1
- package/dist/lib/auth/controllers/mfa.controller.d.ts.map +1 -1
- package/dist/lib/auth/controllers/mfa.controller.js +2 -1
- package/dist/lib/auth/controllers/mfa.controller.js.map +1 -1
- package/dist/lib/auth/data/disposable-domains.generated.d.ts +2 -0
- package/dist/lib/auth/data/disposable-domains.generated.d.ts.map +1 -0
- package/dist/lib/auth/data/disposable-domains.generated.js +8061 -0
- package/dist/lib/auth/data/disposable-domains.generated.js.map +1 -0
- package/dist/lib/auth/dto/credentials/social-credentials.dto.d.ts +3 -0
- package/dist/lib/auth/dto/credentials/social-credentials.dto.d.ts.map +1 -1
- package/dist/lib/auth/dto/credentials/social-credentials.dto.js +34 -1
- package/dist/lib/auth/dto/credentials/social-credentials.dto.js.map +1 -1
- package/dist/lib/auth/entities/blocked-email-domain.entity.d.ts +8 -0
- package/dist/lib/auth/entities/blocked-email-domain.entity.d.ts.map +1 -0
- package/dist/lib/auth/entities/blocked-email-domain.entity.js +41 -0
- package/dist/lib/auth/entities/blocked-email-domain.entity.js.map +1 -0
- package/dist/lib/auth/entities/otp.entity.d.ts +1 -0
- package/dist/lib/auth/entities/otp.entity.d.ts.map +1 -1
- package/dist/lib/auth/entities/otp.entity.js +5 -0
- package/dist/lib/auth/entities/otp.entity.js.map +1 -1
- package/dist/lib/auth/guards/auth.guard.d.ts +4 -1
- package/dist/lib/auth/guards/auth.guard.d.ts.map +1 -1
- package/dist/lib/auth/guards/auth.guard.js +40 -7
- package/dist/lib/auth/guards/auth.guard.js.map +1 -1
- package/dist/lib/auth/interceptors/token-response.interceptor.d.ts +3 -1
- package/dist/lib/auth/interceptors/token-response.interceptor.d.ts.map +1 -1
- package/dist/lib/auth/interceptors/token-response.interceptor.js +15 -2
- package/dist/lib/auth/interceptors/token-response.interceptor.js.map +1 -1
- package/dist/lib/auth/services/auth.service.d.ts +3 -1
- package/dist/lib/auth/services/auth.service.d.ts.map +1 -1
- package/dist/lib/auth/services/auth.service.js +52 -13
- package/dist/lib/auth/services/auth.service.js.map +1 -1
- package/dist/lib/auth/services/disposable-email.service.d.ts +37 -0
- package/dist/lib/auth/services/disposable-email.service.d.ts.map +1 -0
- package/dist/lib/auth/services/disposable-email.service.js +141 -0
- package/dist/lib/auth/services/disposable-email.service.js.map +1 -0
- package/dist/lib/auth/services/mfa.service.d.ts +1 -1
- package/dist/lib/auth/services/mfa.service.d.ts.map +1 -1
- package/dist/lib/auth/services/mfa.service.js +5 -2
- package/dist/lib/auth/services/mfa.service.js.map +1 -1
- package/dist/lib/auth/services/otp-flow.service.d.ts.map +1 -1
- package/dist/lib/auth/services/otp-flow.service.js +19 -0
- package/dist/lib/auth/services/otp-flow.service.js.map +1 -1
- package/dist/lib/auth.constants.d.ts +34 -0
- package/dist/lib/auth.constants.d.ts.map +1 -1
- package/dist/lib/auth.constants.js +22 -1
- package/dist/lib/auth.constants.js.map +1 -1
- package/dist/lib/core/core.module.d.ts.map +1 -1
- package/dist/lib/core/core.module.js +18 -0
- package/dist/lib/core/core.module.js.map +1 -1
- package/dist/lib/core/decorators/captcha.decorator.d.ts +2 -0
- package/dist/lib/core/decorators/captcha.decorator.d.ts.map +1 -0
- package/dist/lib/core/decorators/captcha.decorator.js +10 -0
- package/dist/lib/core/decorators/captcha.decorator.js.map +1 -0
- package/dist/lib/core/decorators/lockout.decorator.d.ts +2 -0
- package/dist/lib/core/decorators/lockout.decorator.d.ts.map +1 -0
- package/dist/lib/core/decorators/lockout.decorator.js +10 -0
- package/dist/lib/core/decorators/lockout.decorator.js.map +1 -0
- package/dist/lib/core/decorators/rate-limit.decorator.d.ts +3 -0
- package/dist/lib/core/decorators/rate-limit.decorator.d.ts.map +1 -0
- package/dist/lib/core/decorators/rate-limit.decorator.js +10 -0
- package/dist/lib/core/decorators/rate-limit.decorator.js.map +1 -0
- package/dist/lib/core/decorators/skip-email-verification.decorator.d.ts +3 -0
- package/dist/lib/core/decorators/skip-email-verification.decorator.d.ts.map +1 -0
- package/dist/lib/core/decorators/skip-email-verification.decorator.js +8 -0
- package/dist/lib/core/decorators/skip-email-verification.decorator.js.map +1 -0
- package/dist/lib/core/guards/captcha.guard.d.ts +8 -0
- package/dist/lib/core/guards/captcha.guard.d.ts.map +1 -0
- package/dist/lib/core/guards/captcha.guard.js +59 -0
- package/dist/lib/core/guards/captcha.guard.js.map +1 -0
- package/dist/lib/core/guards/lockout.guard.d.ts +10 -0
- package/dist/lib/core/guards/lockout.guard.d.ts.map +1 -0
- package/dist/lib/core/guards/lockout.guard.js +55 -0
- package/dist/lib/core/guards/lockout.guard.js.map +1 -0
- package/dist/lib/core/guards/rate-limit.guard.d.ts +10 -0
- package/dist/lib/core/guards/rate-limit.guard.d.ts.map +1 -0
- package/dist/lib/core/guards/rate-limit.guard.js +39 -0
- package/dist/lib/core/guards/rate-limit.guard.js.map +1 -0
- package/dist/lib/core/index.d.ts +1 -0
- package/dist/lib/core/index.d.ts.map +1 -1
- package/dist/lib/core/index.js +1 -0
- package/dist/lib/core/index.js.map +1 -1
- package/dist/lib/core/interfaces/auth-module-options.interface.d.ts +52 -0
- package/dist/lib/core/interfaces/auth-module-options.interface.d.ts.map +1 -1
- package/dist/lib/core/interfaces/rate-limit.interface.d.ts +19 -0
- package/dist/lib/core/interfaces/rate-limit.interface.d.ts.map +1 -0
- package/dist/lib/core/interfaces/rate-limit.interface.js +3 -0
- package/dist/lib/core/interfaces/rate-limit.interface.js.map +1 -0
- package/dist/lib/core/interfaces/session-options.interface.d.ts +5 -0
- package/dist/lib/core/interfaces/session-options.interface.d.ts.map +1 -1
- package/dist/lib/core/providers/apple-auth.provider.d.ts +1 -0
- package/dist/lib/core/providers/apple-auth.provider.d.ts.map +1 -1
- package/dist/lib/core/providers/apple-auth.provider.js +4 -1
- package/dist/lib/core/providers/apple-auth.provider.js.map +1 -1
- package/dist/lib/core/providers/base-auth.provider.d.ts +1 -0
- package/dist/lib/core/providers/base-auth.provider.d.ts.map +1 -1
- package/dist/lib/core/providers/base-auth.provider.js +10 -0
- package/dist/lib/core/providers/base-auth.provider.js.map +1 -1
- package/dist/lib/core/providers/email-auth.provider.js +3 -3
- package/dist/lib/core/providers/email-auth.provider.js.map +1 -1
- package/dist/lib/core/providers/facebook-auth.provider.d.ts +1 -0
- package/dist/lib/core/providers/facebook-auth.provider.d.ts.map +1 -1
- package/dist/lib/core/providers/facebook-auth.provider.js +2 -0
- package/dist/lib/core/providers/facebook-auth.provider.js.map +1 -1
- package/dist/lib/core/providers/github-auth.provider.d.ts.map +1 -1
- package/dist/lib/core/providers/github-auth.provider.js +1 -0
- package/dist/lib/core/providers/github-auth.provider.js.map +1 -1
- package/dist/lib/core/providers/google-auth.provider.d.ts.map +1 -1
- package/dist/lib/core/providers/google-auth.provider.js +1 -0
- package/dist/lib/core/providers/google-auth.provider.js.map +1 -1
- package/dist/lib/core/providers/jwt-auth.provider.d.ts +4 -19
- package/dist/lib/core/providers/jwt-auth.provider.d.ts.map +1 -1
- package/dist/lib/core/providers/jwt-auth.provider.js +14 -10
- package/dist/lib/core/providers/jwt-auth.provider.js.map +1 -1
- package/dist/lib/core/providers/phone-auth.provider.js +3 -3
- package/dist/lib/core/providers/phone-auth.provider.js.map +1 -1
- package/dist/lib/core/services/auth-config.service.d.ts +2 -0
- package/dist/lib/core/services/auth-config.service.d.ts.map +1 -1
- package/dist/lib/core/services/auth-config.service.js +62 -12
- package/dist/lib/core/services/auth-config.service.js.map +1 -1
- package/dist/lib/core/services/auth-provider-registry.service.d.ts.map +1 -1
- package/dist/lib/core/services/auth-provider-registry.service.js +1 -1
- package/dist/lib/core/services/auth-provider-registry.service.js.map +1 -1
- package/dist/lib/core/services/csrf.service.d.ts +13 -0
- package/dist/lib/core/services/csrf.service.d.ts.map +1 -0
- package/dist/lib/core/services/csrf.service.js +88 -0
- package/dist/lib/core/services/csrf.service.js.map +1 -0
- package/dist/lib/core/services/lockout.service.d.ts +24 -0
- package/dist/lib/core/services/lockout.service.d.ts.map +1 -0
- package/dist/lib/core/services/lockout.service.js +129 -0
- package/dist/lib/core/services/lockout.service.js.map +1 -0
- package/dist/lib/core/services/rate-limit.service.d.ts +22 -0
- package/dist/lib/core/services/rate-limit.service.d.ts.map +1 -0
- package/dist/lib/core/services/rate-limit.service.js +116 -0
- package/dist/lib/core/services/rate-limit.service.js.map +1 -0
- package/dist/lib/permission/services/permission.service.d.ts.map +1 -1
- package/dist/lib/permission/services/permission.service.js +2 -1
- package/dist/lib/permission/services/permission.service.js.map +1 -1
- package/dist/lib/user/entities/user.entity.d.ts.map +1 -1
- package/dist/lib/user/entities/user.entity.js +2 -0
- package/dist/lib/user/entities/user.entity.js.map +1 -1
- package/dist/lib/utils/common-passwords.d.ts +2 -0
- package/dist/lib/utils/common-passwords.d.ts.map +1 -0
- package/dist/lib/utils/common-passwords.js +16 -0
- package/dist/lib/utils/common-passwords.js.map +1 -0
- package/dist/lib/utils/otp.d.ts.map +1 -1
- package/dist/lib/utils/otp.js +11 -3
- package/dist/lib/utils/otp.js.map +1 -1
- package/dist/lib/utils/password-policy.util.d.ts +11 -0
- package/dist/lib/utils/password-policy.util.d.ts.map +1 -0
- package/dist/lib/utils/password-policy.util.js +76 -0
- package/dist/lib/utils/password-policy.util.js.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-blocked-domain.dto.d.ts","sourceRoot":"","sources":["../../../../src/lib/admin-console/dto/admin-blocked-domain.dto.ts"],"names":[],"mappings":"AAGA,qBAAa,yBAAyB;IAWlC,OAAO,EAAE,MAAM,EAAE,CAAC;CACrB"}
|
|
@@ -0,0 +1,32 @@
|
|
|
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.AdminAddBlockedDomainsDto = void 0;
|
|
13
|
+
const swagger_1 = require("@nestjs/swagger");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
class AdminAddBlockedDomainsDto {
|
|
16
|
+
domains;
|
|
17
|
+
}
|
|
18
|
+
exports.AdminAddBlockedDomainsDto = AdminAddBlockedDomainsDto;
|
|
19
|
+
__decorate([
|
|
20
|
+
(0, swagger_1.ApiProperty)({
|
|
21
|
+
description: 'One or more email domains to block (e.g. ["mailinator.com", "guerrillamail.com"]). Max 1000 per request; each max 253 chars.',
|
|
22
|
+
type: [String],
|
|
23
|
+
example: ['mailinator.com', 'guerrillamail.com'],
|
|
24
|
+
}),
|
|
25
|
+
(0, class_validator_1.IsArray)(),
|
|
26
|
+
(0, class_validator_1.ArrayNotEmpty)(),
|
|
27
|
+
(0, class_validator_1.ArrayMaxSize)(1000),
|
|
28
|
+
(0, class_validator_1.IsString)({ each: true }),
|
|
29
|
+
(0, class_validator_1.MaxLength)(253, { each: true }),
|
|
30
|
+
__metadata("design:type", Array)
|
|
31
|
+
], AdminAddBlockedDomainsDto.prototype, "domains", void 0);
|
|
32
|
+
//# sourceMappingURL=admin-blocked-domain.dto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-blocked-domain.dto.js","sourceRoot":"","sources":["../../../../src/lib/admin-console/dto/admin-blocked-domain.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAC9C,qDAA4F;AAE5F,MAAa,yBAAyB;IAWlC,OAAO,CAAW;CACrB;AAZD,8DAYC;AADG;IAVC,IAAA,qBAAW,EAAC;QACT,WAAW,EAAE,8HAA8H;QAC3I,IAAI,EAAE,CAAC,MAAM,CAAC;QACd,OAAO,EAAE,CAAC,gBAAgB,EAAE,mBAAmB,CAAC;KACnD,CAAC;IACD,IAAA,yBAAO,GAAE;IACT,IAAA,+BAAa,GAAE;IACf,IAAA,8BAAY,EAAC,IAAI,CAAC;IAClB,IAAA,0BAAQ,EAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACxB,IAAA,2BAAS,EAAC,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;;0DACb"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-user.entity.d.ts","sourceRoot":"","sources":["../../../../src/lib/admin-console/entities/admin-user.entity.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EASX,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"admin-user.entity.d.ts","sourceRoot":"","sources":["../../../../src/lib/admin-console/entities/admin-user.entity.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EASX,MAAM,SAAS,CAAC;AASjB,qBACa,iBAAkB,SAAQ,UAAU;IAE/C,EAAE,EAAE,MAAM,CAAC;IAIX,KAAK,EAAE,MAAM,CAAC;IAGd,IAAI,CAAC,EAAE,MAAM,CAAC;IAGd,YAAY,EAAE,MAAM,CAAC;IAGrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAG/B,WAAW,CAAC,EAAE,IAAI,CAAC;IASnB,YAAY,EAAE,MAAM,CAAC;IAGrB,SAAS,EAAE,IAAI,CAAC;IAGhB,SAAS,EAAE,IAAI,CAAC;IAIhB,cAAc;IAOd,sBAAsB;IAMhB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB5C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAU3D"}
|
|
@@ -11,8 +11,11 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.NestAuthAdminUser = void 0;
|
|
13
13
|
const typeorm_1 = require("typeorm");
|
|
14
|
+
const common_1 = require("@nestjs/common");
|
|
14
15
|
const argon2_1 = require("@node-rs/argon2");
|
|
16
|
+
const password_policy_util_1 = require("../../utils/password-policy.util");
|
|
15
17
|
const utils_1 = require("../../utils");
|
|
18
|
+
const ADMIN_PASSWORD_MIN_LENGTH = 8;
|
|
16
19
|
let NestAuthAdminUser = class NestAuthAdminUser extends typeorm_1.BaseEntity {
|
|
17
20
|
id;
|
|
18
21
|
email;
|
|
@@ -20,6 +23,7 @@ let NestAuthAdminUser = class NestAuthAdminUser extends typeorm_1.BaseEntity {
|
|
|
20
23
|
passwordHash;
|
|
21
24
|
metadata;
|
|
22
25
|
lastLoginAt;
|
|
26
|
+
tokenVersion;
|
|
23
27
|
createdAt;
|
|
24
28
|
updatedAt;
|
|
25
29
|
normalizeEmail() {
|
|
@@ -33,6 +37,13 @@ let NestAuthAdminUser = class NestAuthAdminUser extends typeorm_1.BaseEntity {
|
|
|
33
37
|
}
|
|
34
38
|
}
|
|
35
39
|
async setPassword(password) {
|
|
40
|
+
if (typeof password !== 'string' || password.trim().length < ADMIN_PASSWORD_MIN_LENGTH) {
|
|
41
|
+
throw new common_1.BadRequestException({
|
|
42
|
+
message: `Admin password must be at least ${ADMIN_PASSWORD_MIN_LENGTH} characters`,
|
|
43
|
+
code: 'ADMIN_PASSWORD_TOO_SHORT',
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
await (0, password_policy_util_1.assertPasswordPolicy)(password, { email: this.email });
|
|
36
47
|
this.passwordHash = await (0, argon2_1.hash)(password, {
|
|
37
48
|
algorithm: 2,
|
|
38
49
|
memoryCost: 65536,
|
|
@@ -78,6 +89,10 @@ __decorate([
|
|
|
78
89
|
(0, typeorm_1.Column)({ nullable: true }),
|
|
79
90
|
__metadata("design:type", Date)
|
|
80
91
|
], NestAuthAdminUser.prototype, "lastLoginAt", void 0);
|
|
92
|
+
__decorate([
|
|
93
|
+
(0, typeorm_1.Column)({ default: 0 }),
|
|
94
|
+
__metadata("design:type", Number)
|
|
95
|
+
], NestAuthAdminUser.prototype, "tokenVersion", void 0);
|
|
81
96
|
__decorate([
|
|
82
97
|
(0, typeorm_1.CreateDateColumn)(),
|
|
83
98
|
__metadata("design:type", Date)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-user.entity.js","sourceRoot":"","sources":["../../../../src/lib/admin-console/entities/admin-user.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAUiB;AACjB,4CAA0D;AAC1D,uCAA8C;
|
|
1
|
+
{"version":3,"file":"admin-user.entity.js","sourceRoot":"","sources":["../../../../src/lib/admin-console/entities/admin-user.entity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { CanActivate, ExecutionContext } from '@nestjs/common';
|
|
2
|
+
import { Reflector } from '@nestjs/core';
|
|
3
|
+
import { RateLimitService } from '../../core/services/rate-limit.service';
|
|
4
|
+
import { AdminConsoleConfigService } from '../services/admin-console-config.service';
|
|
5
|
+
export declare class AdminBruteForceGuard implements CanActivate {
|
|
6
|
+
private readonly reflector;
|
|
7
|
+
private readonly rateLimit;
|
|
8
|
+
private readonly config;
|
|
9
|
+
constructor(reflector: Reflector, rateLimit: RateLimitService, config: AdminConsoleConfigService);
|
|
10
|
+
canActivate(context: ExecutionContext): Promise<boolean>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=admin-brute-force.guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-brute-force.guard.d.ts","sourceRoot":"","sources":["../../../../src/lib/admin-console/guards/admin-brute-force.guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAc,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAE1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AAUrF,qBACa,oBAAqB,YAAW,WAAW;IAEpD,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAFN,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,gBAAgB,EAC3B,MAAM,EAAE,yBAAyB;IAG9C,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;CAY/D"}
|
|
@@ -0,0 +1,45 @@
|
|
|
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.AdminBruteForceGuard = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const core_1 = require("@nestjs/core");
|
|
15
|
+
const rate_limit_service_1 = require("../../core/services/rate-limit.service");
|
|
16
|
+
const admin_console_config_service_1 = require("../services/admin-console-config.service");
|
|
17
|
+
const admin_throttle_decorator_1 = require("../decorators/admin-throttle.decorator");
|
|
18
|
+
let AdminBruteForceGuard = class AdminBruteForceGuard {
|
|
19
|
+
reflector;
|
|
20
|
+
rateLimit;
|
|
21
|
+
config;
|
|
22
|
+
constructor(reflector, rateLimit, config) {
|
|
23
|
+
this.reflector = reflector;
|
|
24
|
+
this.rateLimit = rateLimit;
|
|
25
|
+
this.config = config;
|
|
26
|
+
}
|
|
27
|
+
async canActivate(context) {
|
|
28
|
+
const bucket = this.reflector.getAllAndOverride(admin_throttle_decorator_1.ADMIN_THROTTLE_BUCKET, [context.getHandler(), context.getClass()]);
|
|
29
|
+
if (!bucket)
|
|
30
|
+
return true;
|
|
31
|
+
if (!this.config.bruteForceProtectionEnabled())
|
|
32
|
+
return true;
|
|
33
|
+
const http = context.switchToHttp();
|
|
34
|
+
await this.rateLimit.enforceAlways(bucket, http.getRequest(), http.getResponse());
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
exports.AdminBruteForceGuard = AdminBruteForceGuard;
|
|
39
|
+
exports.AdminBruteForceGuard = AdminBruteForceGuard = __decorate([
|
|
40
|
+
(0, common_1.Injectable)(),
|
|
41
|
+
__metadata("design:paramtypes", [core_1.Reflector,
|
|
42
|
+
rate_limit_service_1.RateLimitService,
|
|
43
|
+
admin_console_config_service_1.AdminConsoleConfigService])
|
|
44
|
+
], AdminBruteForceGuard);
|
|
45
|
+
//# sourceMappingURL=admin-brute-force.guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-brute-force.guard.js","sourceRoot":"","sources":["../../../../src/lib/admin-console/guards/admin-brute-force.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA2E;AAC3E,uCAAyC;AACzC,+EAA0E;AAE1E,2FAAqF;AACrF,qFAA+E;AAUxE,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAEZ;IACA;IACA;IAHnB,YACmB,SAAoB,EACpB,SAA2B,EAC3B,MAAiC;QAFjC,cAAS,GAAT,SAAS,CAAW;QACpB,cAAS,GAAT,SAAS,CAAkB;QAC3B,WAAM,GAAN,MAAM,CAA2B;IACjD,CAAC;IAEJ,KAAK,CAAC,WAAW,CAAC,OAAyB;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAC7C,gDAAqB,EACrB,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAC3C,CAAC;QACF,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,2BAA2B,EAAE;YAAE,OAAO,IAAI,CAAC;QAE5D,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;QACpC,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAClF,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AAnBY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,mBAAU,GAAE;qCAGmB,gBAAS;QACT,qCAAgB;QACnB,wDAAyB;GAJzC,oBAAoB,CAmBhC"}
|
|
@@ -3,6 +3,7 @@ import { Request } from 'express';
|
|
|
3
3
|
import { AdminSessionService } from '../services/admin-session.service';
|
|
4
4
|
import { AdminUserService } from '../services/admin-user.service';
|
|
5
5
|
import { AdminConsoleConfigService } from '../services/admin-console-config.service';
|
|
6
|
+
import { CsrfService } from '../../core/services/csrf.service';
|
|
6
7
|
import { NestAuthAdminUser } from '../entities/admin-user.entity';
|
|
7
8
|
export interface AdminRequest extends Request {
|
|
8
9
|
adminUser?: NestAuthAdminUser;
|
|
@@ -11,7 +12,8 @@ export declare class AdminSessionGuard implements CanActivate {
|
|
|
11
12
|
private readonly sessions;
|
|
12
13
|
private readonly adminUsers;
|
|
13
14
|
private readonly config;
|
|
14
|
-
|
|
15
|
+
private readonly csrf;
|
|
16
|
+
constructor(sessions: AdminSessionService, adminUsers: AdminUserService, config: AdminConsoleConfigService, csrf: CsrfService);
|
|
15
17
|
canActivate(context: ExecutionContext): Promise<boolean>;
|
|
16
18
|
}
|
|
17
19
|
//# sourceMappingURL=admin-session.guard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-session.guard.d.ts","sourceRoot":"","sources":["../../../../src/lib/admin-console/guards/admin-session.guard.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,gBAAgB,EAGjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,MAAM,WAAW,YAAa,SAAQ,OAAO;IAC3C,SAAS,CAAC,EAAE,iBAAiB,CAAC;CAC/B;AAED,qBACa,iBAAkB,YAAW,WAAW;IAEjD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM;
|
|
1
|
+
{"version":3,"file":"admin-session.guard.d.ts","sourceRoot":"","sources":["../../../../src/lib/admin-console/guards/admin-session.guard.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,gBAAgB,EAGjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AACrF,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,MAAM,WAAW,YAAa,SAAQ,OAAO;IAC3C,SAAS,CAAC,EAAE,iBAAiB,CAAC;CAC/B;AAED,qBACa,iBAAkB,YAAW,WAAW;IAEjD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAHJ,QAAQ,EAAE,mBAAmB,EAC7B,UAAU,EAAE,gBAAgB,EAC5B,MAAM,EAAE,yBAAyB,EACjC,IAAI,EAAE,WAAW;IAG9B,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;CAgC/D"}
|
|
@@ -14,14 +14,17 @@ const common_1 = require("@nestjs/common");
|
|
|
14
14
|
const admin_session_service_1 = require("../services/admin-session.service");
|
|
15
15
|
const admin_user_service_1 = require("../services/admin-user.service");
|
|
16
16
|
const admin_console_config_service_1 = require("../services/admin-console-config.service");
|
|
17
|
+
const csrf_service_1 = require("../../core/services/csrf.service");
|
|
17
18
|
let AdminSessionGuard = class AdminSessionGuard {
|
|
18
19
|
sessions;
|
|
19
20
|
adminUsers;
|
|
20
21
|
config;
|
|
21
|
-
|
|
22
|
+
csrf;
|
|
23
|
+
constructor(sessions, adminUsers, config, csrf) {
|
|
22
24
|
this.sessions = sessions;
|
|
23
25
|
this.adminUsers = adminUsers;
|
|
24
26
|
this.config = config;
|
|
27
|
+
this.csrf = csrf;
|
|
25
28
|
}
|
|
26
29
|
async canActivate(context) {
|
|
27
30
|
const req = context.switchToHttp().getRequest();
|
|
@@ -30,6 +33,7 @@ let AdminSessionGuard = class AdminSessionGuard {
|
|
|
30
33
|
if (!token) {
|
|
31
34
|
throw new common_1.UnauthorizedException('Admin authentication required');
|
|
32
35
|
}
|
|
36
|
+
this.csrf.assertValidForCookieAuth(req);
|
|
33
37
|
const payload = this.sessions.verifySession(token);
|
|
34
38
|
if (!payload) {
|
|
35
39
|
throw new common_1.UnauthorizedException('Invalid admin session');
|
|
@@ -38,6 +42,9 @@ let AdminSessionGuard = class AdminSessionGuard {
|
|
|
38
42
|
if (!admin) {
|
|
39
43
|
throw new common_1.UnauthorizedException('Admin account not found');
|
|
40
44
|
}
|
|
45
|
+
if ((payload.tv ?? 0) !== (admin.tokenVersion ?? 0)) {
|
|
46
|
+
throw new common_1.UnauthorizedException('Admin session has been revoked');
|
|
47
|
+
}
|
|
41
48
|
req.adminUser = admin;
|
|
42
49
|
return true;
|
|
43
50
|
}
|
|
@@ -47,6 +54,7 @@ exports.AdminSessionGuard = AdminSessionGuard = __decorate([
|
|
|
47
54
|
(0, common_1.Injectable)(),
|
|
48
55
|
__metadata("design:paramtypes", [admin_session_service_1.AdminSessionService,
|
|
49
56
|
admin_user_service_1.AdminUserService,
|
|
50
|
-
admin_console_config_service_1.AdminConsoleConfigService
|
|
57
|
+
admin_console_config_service_1.AdminConsoleConfigService,
|
|
58
|
+
csrf_service_1.CsrfService])
|
|
51
59
|
], AdminSessionGuard);
|
|
52
60
|
//# sourceMappingURL=admin-session.guard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-session.guard.js","sourceRoot":"","sources":["../../../../src/lib/admin-console/guards/admin-session.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAKwB;AAExB,6EAAwE;AACxE,uEAAkE;AAClE,2FAAqF;
|
|
1
|
+
{"version":3,"file":"admin-session.guard.js","sourceRoot":"","sources":["../../../../src/lib/admin-console/guards/admin-session.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAKwB;AAExB,6EAAwE;AACxE,uEAAkE;AAClE,2FAAqF;AACrF,mEAA+D;AAQxD,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAET;IACA;IACA;IACA;IAJnB,YACmB,QAA6B,EAC7B,UAA4B,EAC5B,MAAiC,EACjC,IAAiB;QAHjB,aAAQ,GAAR,QAAQ,CAAqB;QAC7B,eAAU,GAAV,UAAU,CAAkB;QAC5B,WAAM,GAAN,MAAM,CAA2B;QACjC,SAAI,GAAJ,IAAI,CAAa;IAChC,CAAC;IAEL,KAAK,CAAC,WAAW,CAAC,OAAyB;QACzC,MAAM,GAAG,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAgB,CAAC;QAC9D,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;QAE5B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,8BAAqB,CAAC,+BAA+B,CAAC,CAAC;QACnE,CAAC;QAID,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC;QAExC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,8BAAqB,CAAC,uBAAuB,CAAC,CAAC;QAC3D,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,8BAAqB,CAAC,yBAAyB,CAAC,CAAC;QAC7D,CAAC;QAID,IAAI,CAAE,OAAe,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC,EAAE,CAAC;YAC7D,MAAM,IAAI,8BAAqB,CAAC,gCAAgC,CAAC,CAAC;QACpE,CAAC;QAED,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AAxCY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;qCAGkB,2CAAmB;QACjB,qCAAgB;QACpB,wDAAyB;QAC3B,0BAAW;GALzB,iBAAiB,CAwC7B"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { NestMiddleware } from '@nestjs/common';
|
|
2
|
+
import { NextFunction, Request, Response } from 'express';
|
|
3
|
+
export declare class AdminSecurityHeadersMiddleware implements NestMiddleware {
|
|
4
|
+
use(_req: Request, res: Response, next: NextFunction): void;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=admin-security-headers.middleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-security-headers.middleware.d.ts","sourceRoot":"","sources":["../../../../src/lib/admin-console/middleware/admin-security-headers.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAkB1D,qBACa,8BAA+B,YAAW,cAAc;IACnE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI;CA0B5D"}
|
|
@@ -0,0 +1,35 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.AdminSecurityHeadersMiddleware = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
let AdminSecurityHeadersMiddleware = class AdminSecurityHeadersMiddleware {
|
|
12
|
+
use(_req, res, next) {
|
|
13
|
+
res.setHeader('X-Frame-Options', 'DENY');
|
|
14
|
+
res.setHeader('X-Content-Type-Options', 'nosniff');
|
|
15
|
+
res.setHeader('Referrer-Policy', 'no-referrer');
|
|
16
|
+
res.setHeader('Content-Security-Policy', [
|
|
17
|
+
"default-src 'self'",
|
|
18
|
+
"frame-ancestors 'none'",
|
|
19
|
+
"base-uri 'self'",
|
|
20
|
+
"object-src 'none'",
|
|
21
|
+
"form-action 'self'",
|
|
22
|
+
"script-src 'self' 'unsafe-inline'",
|
|
23
|
+
"style-src 'self' 'unsafe-inline'",
|
|
24
|
+
"img-src 'self' data:",
|
|
25
|
+
"font-src 'self' data:",
|
|
26
|
+
"connect-src 'self'",
|
|
27
|
+
].join('; '));
|
|
28
|
+
next();
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
exports.AdminSecurityHeadersMiddleware = AdminSecurityHeadersMiddleware;
|
|
32
|
+
exports.AdminSecurityHeadersMiddleware = AdminSecurityHeadersMiddleware = __decorate([
|
|
33
|
+
(0, common_1.Injectable)()
|
|
34
|
+
], AdminSecurityHeadersMiddleware);
|
|
35
|
+
//# sourceMappingURL=admin-security-headers.middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-security-headers.middleware.js","sourceRoot":"","sources":["../../../../src/lib/admin-console/middleware/admin-security-headers.middleware.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4D;AAoBrD,IAAM,8BAA8B,GAApC,MAAM,8BAA8B;IACzC,GAAG,CAAC,IAAa,EAAE,GAAa,EAAE,IAAkB;QAElD,GAAG,CAAC,SAAS,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;QAEzC,GAAG,CAAC,SAAS,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAC;QAEnD,GAAG,CAAC,SAAS,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAAC;QAChD,GAAG,CAAC,SAAS,CACX,yBAAyB,EACzB;YACE,oBAAoB;YACpB,wBAAwB;YACxB,iBAAiB;YACjB,mBAAmB;YACnB,oBAAoB;YAGpB,mCAAmC;YACnC,kCAAkC;YAClC,sBAAsB;YACtB,uBAAuB;YACvB,oBAAoB;SACrB,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;QACF,IAAI,EAAE,CAAC;IACT,CAAC;CACF,CAAA;AA3BY,wEAA8B;yCAA9B,8BAA8B;IAD1C,IAAA,mBAAU,GAAE;GACA,8BAA8B,CA2B1C"}
|
|
@@ -10,6 +10,8 @@ export declare class AdminAuthService {
|
|
|
10
10
|
private readonly debugLogger;
|
|
11
11
|
constructor(adminUsers: AdminUserService, sessions: AdminSessionService, config: AdminConsoleConfigService, debugLogger: DebugLoggerService);
|
|
12
12
|
validateCredentials(email: string, password: string): Promise<NestAuthAdminUser>;
|
|
13
|
+
private dummyHashPromise?;
|
|
14
|
+
private dummyHash;
|
|
13
15
|
createInitialAdmin(payload: {
|
|
14
16
|
setupKey: string;
|
|
15
17
|
email: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-auth.service.d.ts","sourceRoot":"","sources":["../../../../src/lib/admin-console/services/admin-auth.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"admin-auth.service.d.ts","sourceRoot":"","sources":["../../../../src/lib/admin-console/services/admin-auth.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAG9E,qBACa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAHX,UAAU,EAAE,gBAAgB,EAC5B,QAAQ,EAAE,mBAAmB,EAC7B,MAAM,EAAE,yBAAyB,EACjC,WAAW,EAAE,kBAAkB;IAG5C,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAqBtF,OAAO,CAAC,gBAAgB,CAAC,CAAkB;IAC3C,OAAO,CAAC,SAAS;IAYX,kBAAkB,CAAC,OAAO,EAAE;QAChC,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAChC,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAyC9B,aAAa,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM;CAGhD"}
|
|
@@ -11,6 +11,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.AdminAuthService = void 0;
|
|
13
13
|
const common_1 = require("@nestjs/common");
|
|
14
|
+
const argon2_1 = require("@node-rs/argon2");
|
|
14
15
|
const admin_user_service_1 = require("./admin-user.service");
|
|
15
16
|
const admin_session_service_1 = require("./admin-session.service");
|
|
16
17
|
const admin_console_config_service_1 = require("./admin-console-config.service");
|
|
@@ -30,6 +31,7 @@ let AdminAuthService = class AdminAuthService {
|
|
|
30
31
|
async validateCredentials(email, password) {
|
|
31
32
|
const admin = await this.adminUsers.findByEmail(email);
|
|
32
33
|
if (!admin) {
|
|
34
|
+
await (0, argon2_1.verify)(await this.dummyHash(), password).catch(() => false);
|
|
33
35
|
throw new common_1.UnauthorizedException('Invalid credentials');
|
|
34
36
|
}
|
|
35
37
|
const valid = await admin.validatePassword(password);
|
|
@@ -40,6 +42,18 @@ let AdminAuthService = class AdminAuthService {
|
|
|
40
42
|
await admin.save();
|
|
41
43
|
return admin;
|
|
42
44
|
}
|
|
45
|
+
dummyHashPromise;
|
|
46
|
+
dummyHash() {
|
|
47
|
+
if (!this.dummyHashPromise) {
|
|
48
|
+
this.dummyHashPromise = (0, argon2_1.hash)('nest-auth-admin-timing-equalizer', {
|
|
49
|
+
algorithm: 2,
|
|
50
|
+
memoryCost: 65536,
|
|
51
|
+
timeCost: 3,
|
|
52
|
+
parallelism: 4,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return this.dummyHashPromise;
|
|
56
|
+
}
|
|
43
57
|
async createInitialAdmin(payload) {
|
|
44
58
|
this.config.ensureEnabled();
|
|
45
59
|
const configuredKey = this.config.getSecretKey();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-auth.service.js","sourceRoot":"","sources":["../../../../src/lib/admin-console/services/admin-auth.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAwF;AACxF,6DAAwD;AACxD,mEAA8D;AAC9D,iFAA2E;AAE3E,mFAA8E;AAC9E,6DAAwD;AAGjD,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAER;IACA;IACA;IACA;IAJnB,YACmB,UAA4B,EAC5B,QAA6B,EAC7B,MAAiC,EACjC,WAA+B;QAH/B,eAAU,GAAV,UAAU,CAAkB;QAC5B,aAAQ,GAAR,QAAQ,CAAqB;QAC7B,WAAM,GAAN,MAAM,CAA2B;QACjC,gBAAW,GAAX,WAAW,CAAoB;IAC9C,CAAC;IAEL,KAAK,CAAC,mBAAmB,CAAC,KAAa,EAAE,QAAgB;QACvD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"admin-auth.service.js","sourceRoot":"","sources":["../../../../src/lib/admin-console/services/admin-auth.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,8 @@ export declare class AdminConsoleConfigService {
|
|
|
13
13
|
getSessionDuration(): string | number;
|
|
14
14
|
getCookieOptions(): CookieOptions;
|
|
15
15
|
allowAdminManagement(): boolean;
|
|
16
|
+
bruteForceProtectionEnabled(): boolean;
|
|
17
|
+
allowPublicSignupAfterFirstAdmin(): boolean;
|
|
16
18
|
getSecretKey(): string | undefined;
|
|
17
19
|
getTenantMode(): TenantModeEnum | null;
|
|
18
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-console-config.service.d.ts","sourceRoot":"","sources":["../../../../src/lib/admin-console/services/admin-console-config.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"admin-console-config.service.d.ts","sourceRoot":"","sources":["../../../../src/lib/admin-console/services/admin-console-config.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qDAAqD,CAAC;AAC3F,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,qBACa,yBAAyB;IACxB,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBAAjB,iBAAiB,EAAE,iBAAiB;IAEjE,SAAS,IAAI,oBAAoB;IAmBjC,aAAa,IAAI,IAAI;IAMrB,aAAa,IAAI,MAAM;IAIvB,WAAW,IAAI,MAAM;IAIrB,gBAAgB,IAAI,MAAM;IAyB1B,kBAAkB,IAAI,MAAM,GAAG,MAAM;IAIrC,gBAAgB,IAAI,aAAa;IAkCjC,oBAAoB,IAAI,OAAO;IAK/B,2BAA2B,IAAI,OAAO;IAQtC,gCAAgC,IAAI,OAAO;IAI3C,YAAY,IAAI,MAAM,GAAG,SAAS;IAKlC,aAAa,IAAI,cAAc,GAAG,IAAI;CAKvC"}
|
|
@@ -11,6 +11,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.AdminConsoleConfigService = void 0;
|
|
13
13
|
const common_1 = require("@nestjs/common");
|
|
14
|
+
const crypto_1 = require("crypto");
|
|
14
15
|
const auth_config_service_1 = require("../../core/services/auth-config.service");
|
|
15
16
|
const nest_auth_contracts_1 = require("@ackplus/nest-auth-contracts");
|
|
16
17
|
let AdminConsoleConfigService = class AdminConsoleConfigService {
|
|
@@ -46,13 +47,24 @@ let AdminConsoleConfigService = class AdminConsoleConfigService {
|
|
|
46
47
|
return this.getConfig().basePath;
|
|
47
48
|
}
|
|
48
49
|
getSessionSecret() {
|
|
49
|
-
|
|
50
|
+
const admin = this.authConfigService.getConfig().adminConsole;
|
|
51
|
+
if (admin?.sessionSecret) {
|
|
52
|
+
return admin.sessionSecret;
|
|
53
|
+
}
|
|
54
|
+
if (admin?.secretKey) {
|
|
55
|
+
return (0, crypto_1.createHash)('sha256')
|
|
56
|
+
.update(`nest-auth-admin-session:${admin.secretKey}`)
|
|
57
|
+
.digest('hex');
|
|
58
|
+
}
|
|
59
|
+
throw new Error('Admin console session secret is not configured. Set adminConsole.sessionSecret ' +
|
|
60
|
+
'(recommended) or adminConsole.secretKey to a high-entropy 32+ character random value.');
|
|
50
61
|
}
|
|
51
62
|
getSessionDuration() {
|
|
52
63
|
return this.getConfig().sessionDuration ?? '2h';
|
|
53
64
|
}
|
|
54
65
|
getCookieOptions() {
|
|
55
|
-
const
|
|
66
|
+
const nodeEnv = process.env.NODE_ENV;
|
|
67
|
+
const secureDefault = nodeEnv !== 'development' && nodeEnv !== 'test';
|
|
56
68
|
const config = this.getConfig();
|
|
57
69
|
const base = {
|
|
58
70
|
httpOnly: true,
|
|
@@ -60,15 +72,25 @@ let AdminConsoleConfigService = class AdminConsoleConfigService {
|
|
|
60
72
|
secure: secureDefault,
|
|
61
73
|
path: this.getBasePath(),
|
|
62
74
|
};
|
|
63
|
-
|
|
75
|
+
const merged = {
|
|
64
76
|
...base,
|
|
65
77
|
...(config.cookie ?? {}),
|
|
66
78
|
path: config.cookie?.path ?? base.path,
|
|
67
79
|
};
|
|
80
|
+
if (merged.sameSite === 'none') {
|
|
81
|
+
merged.secure = true;
|
|
82
|
+
}
|
|
83
|
+
return merged;
|
|
68
84
|
}
|
|
69
85
|
allowAdminManagement() {
|
|
70
86
|
return this.getConfig().allowAdminManagement !== false;
|
|
71
87
|
}
|
|
88
|
+
bruteForceProtectionEnabled() {
|
|
89
|
+
return this.getConfig().bruteForce?.enabled !== false;
|
|
90
|
+
}
|
|
91
|
+
allowPublicSignupAfterFirstAdmin() {
|
|
92
|
+
return this.getConfig().allowPublicSignupAfterFirstAdmin === true;
|
|
93
|
+
}
|
|
72
94
|
getSecretKey() {
|
|
73
95
|
return this.authConfigService.getConfig().adminConsole?.secretKey;
|
|
74
96
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-console-config.service.js","sourceRoot":"","sources":["../../../../src/lib/admin-console/services/admin-console-config.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA+D;AAC/D,iFAA4E;AAG5E,sEAA8D;AAGvD,IAAM,yBAAyB,GAA/B,MAAM,yBAAyB;IACP;IAA7B,YAA6B,iBAAoC;QAApC,sBAAiB,GAAjB,iBAAiB,CAAmB;IAAI,CAAC;IAEtE,SAAS;QACP,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,CAAC;QACtD,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,IAAI,MAAM,CAAC;QACrD,MAAM,MAAM,GAAyB;YACnC,OAAO,EAAE,IAAI;YACb,iBAAiB,EAAE,iBAAiB;YACpC,eAAe,EAAE,IAAI;YACrB,GAAG,UAAU,CAAC,YAAY;SAC3B,CAAC;QACF,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,IAAI,OAAO,CAAC;QACzC,OAAO;YACL,GAAG,MAAM;YACT,IAAI,EAAE,SAAS;YAGf,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,IAAI,WAAW,IAAI,SAAS,EAAE;SAC5D,CAAC;IACJ,CAAC;IAED,aAAa;QACX,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YACvC,MAAM,IAAI,0BAAiB,CAAC,2BAA2B,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,iBAAiB,IAAI,iBAAiB,CAAC;IACjE,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,QAAS,CAAC;IACpC,CAAC;IAED,gBAAgB;
|
|
1
|
+
{"version":3,"file":"admin-console-config.service.js","sourceRoot":"","sources":["../../../../src/lib/admin-console/services/admin-console-config.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-session.service.d.ts","sourceRoot":"","sources":["../../../../src/lib/admin-console/services/admin-session.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGlC,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,UAAU,mBAAmB;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"admin-session.service.d.ts","sourceRoot":"","sources":["../../../../src/lib/admin-console/services/admin-session.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGlC,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,UAAU,mBAAmB;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IAEd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAED,qBACa,mBAAmB;IAClB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,yBAAyB;IAE9D,aAAa,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM;IAkB/C,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI;IAexD,aAAa,IAAI,MAAM;IAIvB,SAAS,IAAI,MAAM,GAAG,SAAS;IAW/B,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS;IAqB5C,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO/D,OAAO,CAAC,iBAAiB;CAe1B"}
|
|
@@ -62,8 +62,10 @@ let AdminSessionService = class AdminSessionService {
|
|
|
62
62
|
return jwt.sign({
|
|
63
63
|
sub: admin.id,
|
|
64
64
|
email: admin.email,
|
|
65
|
+
tv: admin.tokenVersion ?? 0,
|
|
65
66
|
}, secret, {
|
|
66
67
|
expiresIn,
|
|
68
|
+
algorithm: 'HS256',
|
|
67
69
|
});
|
|
68
70
|
}
|
|
69
71
|
verifySession(token) {
|
|
@@ -71,10 +73,9 @@ let AdminSessionService = class AdminSessionService {
|
|
|
71
73
|
return null;
|
|
72
74
|
}
|
|
73
75
|
try {
|
|
74
|
-
return jwt.verify(token, this.config.getSessionSecret());
|
|
76
|
+
return jwt.verify(token, this.config.getSessionSecret(), { algorithms: ['HS256'] });
|
|
75
77
|
}
|
|
76
|
-
catch
|
|
77
|
-
console.warn('JWT verification failed:', error.message);
|
|
78
|
+
catch {
|
|
78
79
|
return null;
|
|
79
80
|
}
|
|
80
81
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-session.service.js","sourceRoot":"","sources":["../../../../src/lib/admin-console/services/admin-session.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA4C;AAE5C,kDAAoC;AACpC,4CAAoB;AACpB,iFAA2E;
|
|
1
|
+
{"version":3,"file":"admin-session.service.js","sourceRoot":"","sources":["../../../../src/lib/admin-console/services/admin-session.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,7 @@ export declare class AdminUserService {
|
|
|
19
19
|
password?: string;
|
|
20
20
|
metadata?: Record<string, any>;
|
|
21
21
|
}): Promise<NestAuthAdminUser>;
|
|
22
|
+
revokeSessions(id: string): Promise<void>;
|
|
22
23
|
deleteAdmin(id: string): Promise<void>;
|
|
23
24
|
}
|
|
24
25
|
//# sourceMappingURL=admin-user.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-user.service.d.ts","sourceRoot":"","sources":["../../../../src/lib/admin-console/services/admin-user.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAE9E,qBACa,gBAAgB;IAGzB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,WAAW;gBADX,SAAS,EAAE,UAAU,CAAC,iBAAiB,CAAC,EACxC,WAAW,EAAE,kBAAkB;IAG5C,WAAW,CAAC,IAAI,EAAE;QACtB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAChC,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAsBxB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAO7D,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAOvD,UAAU,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAI1C,WAAW,CACf,EAAE,EAAE,MAAM,EACV,IAAI,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAE,GACzE,OAAO,CAAC,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"admin-user.service.d.ts","sourceRoot":"","sources":["../../../../src/lib/admin-console/services/admin-user.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAE9E,qBACa,gBAAgB;IAGzB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,WAAW;gBADX,SAAS,EAAE,UAAU,CAAC,iBAAiB,CAAC,EACxC,WAAW,EAAE,kBAAkB;IAG5C,WAAW,CAAC,IAAI,EAAE;QACtB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAChC,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAsBxB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAO7D,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAOvD,UAAU,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAI1C,WAAW,CACf,EAAE,EAAE,MAAM,EACV,IAAI,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAE,GACzE,OAAO,CAAC,iBAAiB,CAAC;IA4BvB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzC,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAoB7C"}
|
|
@@ -76,10 +76,14 @@ let AdminUserService = class AdminUserService {
|
|
|
76
76
|
}
|
|
77
77
|
if (data.password) {
|
|
78
78
|
await admin.setPassword(data.password);
|
|
79
|
+
admin.tokenVersion = (admin.tokenVersion ?? 0) + 1;
|
|
79
80
|
}
|
|
80
81
|
await this.adminRepo.save(admin);
|
|
81
82
|
return admin;
|
|
82
83
|
}
|
|
84
|
+
async revokeSessions(id) {
|
|
85
|
+
await this.adminRepo.increment({ id }, 'tokenVersion', 1);
|
|
86
|
+
}
|
|
83
87
|
async deleteAdmin(id) {
|
|
84
88
|
const admin = await this.findById(id);
|
|
85
89
|
if (!admin) {
|
|
@@ -88,6 +92,13 @@ let AdminUserService = class AdminUserService {
|
|
|
88
92
|
code: 'ADMIN_USER_NOT_FOUND',
|
|
89
93
|
});
|
|
90
94
|
}
|
|
95
|
+
const total = await this.adminRepo.count();
|
|
96
|
+
if (total <= 1) {
|
|
97
|
+
throw new common_1.ConflictException({
|
|
98
|
+
message: 'Cannot delete the last remaining admin.',
|
|
99
|
+
code: 'ADMIN_LAST_REMAINING',
|
|
100
|
+
});
|
|
101
|
+
}
|
|
91
102
|
await this.adminRepo.delete(id);
|
|
92
103
|
}
|
|
93
104
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-user.service.js","sourceRoot":"","sources":["../../../../src/lib/admin-console/services/admin-user.service.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"admin-user.service.js","sourceRoot":"","sources":["../../../../src/lib/admin-console/services/admin-user.service.ts"],"names":[],"mappings":"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"}
|