@loopstack/auth 0.37.0 → 0.38.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/auth.module.d.ts +1 -1
- package/dist/auth.module.d.ts.map +1 -1
- package/dist/auth.module.js +2 -2
- package/dist/auth.module.js.map +1 -1
- package/dist/services/config-validation.service.d.ts +3 -0
- package/dist/services/config-validation.service.d.ts.map +1 -1
- package/dist/services/config-validation.service.js +40 -15
- package/dist/services/config-validation.service.js.map +1 -1
- package/package.json +4 -4
package/dist/auth.module.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DynamicModule, MiddlewareConsumer, NestModule } from '@nestjs/common';
|
|
2
2
|
export declare class AuthModule implements NestModule {
|
|
3
3
|
configure(consumer: MiddlewareConsumer): void;
|
|
4
|
-
static forRoot(
|
|
4
|
+
static forRoot(): DynamicModule;
|
|
5
5
|
}
|
|
6
6
|
//# sourceMappingURL=auth.module.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.module.d.ts","sourceRoot":"","sources":["../src/auth.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAU,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAgBvF,qBACa,UAAW,YAAW,UAAU;IAC3C,SAAS,CAAC,QAAQ,EAAE,kBAAkB;IAItC,MAAM,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"auth.module.d.ts","sourceRoot":"","sources":["../src/auth.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAU,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAgBvF,qBACa,UAAW,YAAW,UAAU;IAC3C,SAAS,CAAC,QAAQ,EAAE,kBAAkB;IAItC,MAAM,CAAC,OAAO,IAAI,aAAa;CAgChC"}
|
package/dist/auth.module.js
CHANGED
|
@@ -23,7 +23,7 @@ let AuthModule = AuthModule_1 = class AuthModule {
|
|
|
23
23
|
configure(consumer) {
|
|
24
24
|
consumer.apply(cookieParser()).forRoutes('*');
|
|
25
25
|
}
|
|
26
|
-
static forRoot(
|
|
26
|
+
static forRoot() {
|
|
27
27
|
return {
|
|
28
28
|
module: AuthModule_1,
|
|
29
29
|
imports: [
|
|
@@ -37,7 +37,7 @@ let AuthModule = AuthModule_1 = class AuthModule {
|
|
|
37
37
|
}),
|
|
38
38
|
inject: [ConfigService],
|
|
39
39
|
}),
|
|
40
|
-
TypeOrmModule.forFeature([User, Role, ApiTokenEntity]
|
|
40
|
+
TypeOrmModule.forFeature([User, Role, ApiTokenEntity]),
|
|
41
41
|
],
|
|
42
42
|
controllers: [ApiTokenController, AuthController],
|
|
43
43
|
providers: [
|
package/dist/auth.module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.module.js","sourceRoot":"","sources":["../src/auth.module.ts"],"names":[],"mappings":";;;;;;;AAAA,OAAO,EAAqC,MAAM,EAAc,MAAM,gBAAgB,CAAC;AACvF,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,YAAY,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAG1D,IAAM,UAAU,kBAAhB,MAAM,UAAU;IACrB,SAAS,CAAC,QAA4B;QACpC,QAAQ,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,CAAC,OAAO
|
|
1
|
+
{"version":3,"file":"auth.module.js","sourceRoot":"","sources":["../src/auth.module.ts"],"names":[],"mappings":";;;;;;;AAAA,OAAO,EAAqC,MAAM,EAAc,MAAM,gBAAgB,CAAC;AACvF,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,YAAY,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAG1D,IAAM,UAAU,kBAAhB,MAAM,UAAU;IACrB,SAAS,CAAC,QAA4B;QACpC,QAAQ,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,CAAC,OAAO;QACZ,OAAO;YACL,MAAM,EAAE,YAAU;YAClB,OAAO,EAAE;gBACP,cAAc,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC;gBACnD,SAAS,CAAC,aAAa,CAAC;oBACtB,UAAU,EAAE,CAAC,aAA4B,EAAE,EAAE,CAAC,CAAC;wBAC7C,MAAM,EAAE,aAAa,CAAC,GAAG,CAAS,iBAAiB,CAAC;wBACpD,WAAW,EAAE;4BACX,SAAS,EAAE,aAAa,CAAC,GAAG,CAAmC,oBAAoB,CAAC,IAAI,IAAI;yBAC7F;qBACF,CAAC;oBACF,MAAM,EAAE,CAAC,aAAa,CAAC;iBACxB,CAAC;gBACF,aAAa,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;aACvD;YACD,WAAW,EAAE,CAAC,kBAAkB,EAAE,cAAc,CAAC;YACjD,SAAS,EAAE;gBACT,uBAAuB;gBACvB,eAAe;gBACf,WAAW;gBACX,cAAc;gBACd,YAAY;gBACZ,WAAW;gBACX,WAAW;gBACX,YAAY;gBACZ,UAAU;gBACV,iBAAiB;aAClB;YACD,OAAO,EAAE,CAAC,eAAe,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,CAAC;SAClF,CAAC;IACJ,CAAC;CACF,CAAA;AArCY,UAAU;IADtB,MAAM,CAAC,EAAE,CAAC;GACE,UAAU,CAqCtB"}
|
|
@@ -2,8 +2,11 @@ import { OnModuleInit } from '@nestjs/common';
|
|
|
2
2
|
import { ConfigService } from '@nestjs/config';
|
|
3
3
|
export declare class ConfigValidationService implements OnModuleInit {
|
|
4
4
|
private configService;
|
|
5
|
+
private readonly logger;
|
|
5
6
|
constructor(configService: ConfigService);
|
|
6
7
|
onModuleInit(): void;
|
|
7
8
|
private validateAuthConfig;
|
|
9
|
+
private assertNoAuthAllowed;
|
|
10
|
+
private assertStrongSecret;
|
|
8
11
|
}
|
|
9
12
|
//# sourceMappingURL=config-validation.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-validation.service.d.ts","sourceRoot":"","sources":["../../src/services/config-validation.service.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"config-validation.service.d.ts","sourceRoot":"","sources":["../../src/services/config-validation.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAe/C,qBACa,uBAAwB,YAAW,YAAY;IAG9C,OAAO,CAAC,aAAa;IAFjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4C;gBAE/C,aAAa,EAAE,aAAa;IAEhD,YAAY;IAIZ,OAAO,CAAC,kBAAkB;IAa1B,OAAO,CAAC,mBAAmB;IAqB3B,OAAO,CAAC,kBAAkB;CAW3B"}
|
|
@@ -7,10 +7,19 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
9
|
};
|
|
10
|
-
|
|
10
|
+
var ConfigValidationService_1;
|
|
11
|
+
import { Injectable, Logger } from '@nestjs/common';
|
|
11
12
|
import { ConfigService } from '@nestjs/config';
|
|
12
|
-
|
|
13
|
+
const FORBIDDEN_SECRETS = new Set([
|
|
14
|
+
'dev-secret-change-me',
|
|
15
|
+
'dev-insecure-secret-auth-disabled',
|
|
16
|
+
'JWT_SECRET',
|
|
17
|
+
'JWT_REFRESH_SECRET',
|
|
18
|
+
]);
|
|
19
|
+
const MIN_SECRET_LENGTH = 32;
|
|
20
|
+
let ConfigValidationService = ConfigValidationService_1 = class ConfigValidationService {
|
|
13
21
|
configService;
|
|
22
|
+
logger = new Logger(ConfigValidationService_1.name);
|
|
14
23
|
constructor(configService) {
|
|
15
24
|
this.configService = configService;
|
|
16
25
|
}
|
|
@@ -18,22 +27,38 @@ let ConfigValidationService = class ConfigValidationService {
|
|
|
18
27
|
this.validateAuthConfig();
|
|
19
28
|
}
|
|
20
29
|
validateAuthConfig() {
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
const enableAuth = this.configService.get('app.enableAuth');
|
|
31
|
+
if (!enableAuth) {
|
|
32
|
+
this.assertNoAuthAllowed();
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
this.assertStrongSecret(this.configService.get('auth.jwt.secret'), 'JWT_SECRET');
|
|
36
|
+
this.assertStrongSecret(this.configService.get('auth.jwt.refreshSecret'), 'JWT_REFRESH_SECRET');
|
|
37
|
+
}
|
|
38
|
+
assertNoAuthAllowed() {
|
|
39
|
+
const nodeEnv = this.configService.get('app.nodeEnv');
|
|
40
|
+
const acknowledged = process.env.LOOPSTACK_ALLOW_NO_AUTH === 'true';
|
|
41
|
+
if (nodeEnv === 'production' && !acknowledged) {
|
|
42
|
+
throw new Error('Authentication is disabled (LOOPSTACK_AUTH is not "true") while NODE_ENV=production. ' +
|
|
43
|
+
'Refusing to start, as this would serve the API unauthenticated. Enable auth with ' +
|
|
44
|
+
'LOOPSTACK_AUTH=true, or explicitly acknowledge an unauthenticated deployment with ' +
|
|
45
|
+
'LOOPSTACK_ALLOW_NO_AUTH=true.');
|
|
46
|
+
}
|
|
47
|
+
this.logger.warn('Authentication is DISABLED — every request resolves to the local user. Set LOOPSTACK_AUTH=true to enable authentication.');
|
|
48
|
+
}
|
|
49
|
+
assertStrongSecret(value, name) {
|
|
50
|
+
if (!value) {
|
|
51
|
+
throw new Error(`${name} is required when auth is enabled (LOOPSTACK_AUTH=true). Set a strong, unique secret.`);
|
|
52
|
+
}
|
|
53
|
+
if (FORBIDDEN_SECRETS.has(value)) {
|
|
54
|
+
throw new Error(`${name} is set to a known default/insecure value. Set a strong, unique secret.`);
|
|
55
|
+
}
|
|
56
|
+
if (value.length < MIN_SECRET_LENGTH) {
|
|
57
|
+
throw new Error(`${name} must be at least ${MIN_SECRET_LENGTH} characters when auth is enabled.`);
|
|
33
58
|
}
|
|
34
59
|
}
|
|
35
60
|
};
|
|
36
|
-
ConfigValidationService = __decorate([
|
|
61
|
+
ConfigValidationService = ConfigValidationService_1 = __decorate([
|
|
37
62
|
Injectable(),
|
|
38
63
|
__metadata("design:paramtypes", [ConfigService])
|
|
39
64
|
], ConfigValidationService);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-validation.service.js","sourceRoot":"","sources":["../../src/services/config-validation.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config-validation.service.js","sourceRoot":"","sources":["../../src/services/config-validation.service.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAgB,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAM/C,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IAChC,sBAAsB;IACtB,mCAAmC;IACnC,YAAY;IACZ,oBAAoB;CACrB,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAGtB,IAAM,uBAAuB,+BAA7B,MAAM,uBAAuB;IAGd;IAFH,MAAM,GAAG,IAAI,MAAM,CAAC,yBAAuB,CAAC,IAAI,CAAC,CAAC;IAEnE,YAAoB,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;IAAG,CAAC;IAEpD,YAAY;QACV,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAEO,kBAAkB;QAGxB,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAU,gBAAgB,CAAC,CAAC;QACrE,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAS,iBAAiB,CAAC,EAAE,YAAY,CAAC,CAAC;QACzF,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAS,wBAAwB,CAAC,EAAE,oBAAoB,CAAC,CAAC;IAC1G,CAAC;IAEO,mBAAmB;QAIzB,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAS,aAAa,CAAC,CAAC;QAC9D,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,MAAM,CAAC;QAEpE,IAAI,OAAO,KAAK,YAAY,IAAI,CAAC,YAAY,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CACb,uFAAuF;gBACrF,mFAAmF;gBACnF,oFAAoF;gBACpF,+BAA+B,CAClC,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,0HAA0H,CAC3H,CAAC;IACJ,CAAC;IAEO,kBAAkB,CAAC,KAAyB,EAAE,IAAY;QAChE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,uFAAuF,CAAC,CAAC;QAClH,CAAC;QACD,IAAI,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,yEAAyE,CAAC,CAAC;QACpG,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,qBAAqB,iBAAiB,mCAAmC,CAAC,CAAC;QACpG,CAAC;IACH,CAAC;CACF,CAAA;AAtDY,uBAAuB;IADnC,UAAU,EAAE;qCAIwB,aAAa;GAHrC,uBAAuB,CAsDnC"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@loopstack/auth",
|
|
3
3
|
"displayName": "Loopstack Auth Module",
|
|
4
4
|
"description": "The auth module of the loopstack automation framework",
|
|
5
|
-
"version": "0.
|
|
5
|
+
"version": "0.38.0",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "Jakob Klippel",
|
|
@@ -30,9 +30,9 @@
|
|
|
30
30
|
"watch": "nest build --watch"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@loopstack/common": "^0.
|
|
34
|
-
"@loopstack/contracts": "^0.
|
|
35
|
-
"@loopstack/core": "^0.
|
|
33
|
+
"@loopstack/common": "^0.38.0",
|
|
34
|
+
"@loopstack/contracts": "^0.38.0",
|
|
35
|
+
"@loopstack/core": "^0.38.0",
|
|
36
36
|
"axios": "^1.15.0",
|
|
37
37
|
"cookie-parser": "^1.4.7",
|
|
38
38
|
"jose": "^6.2.2",
|