@spinajs/rbac-http-user 2.0.187 → 2.0.189
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/lib/cjs/2fa/SpeakEasy2FaToken.d.ts +1 -0
- package/lib/cjs/2fa/SpeakEasy2FaToken.d.ts.map +1 -0
- package/lib/cjs/2fa/SpeakEasy2FaToken.js +48 -0
- package/lib/cjs/2fa/SpeakEasy2FaToken.js.map +1 -0
- package/lib/cjs/config/rbac-http.d.ts +34 -0
- package/lib/cjs/config/rbac-http.d.ts.map +1 -0
- package/lib/cjs/config/rbac-http.js +46 -0
- package/lib/cjs/config/rbac-http.js.map +1 -0
- package/lib/cjs/controllers/AuthController.d.ts +1 -0
- package/lib/cjs/controllers/AuthController.d.ts.map +1 -0
- package/lib/cjs/controllers/AuthController.js +211 -0
- package/lib/cjs/controllers/AuthController.js.map +1 -0
- package/lib/cjs/controllers/FederatedLoginController.d.ts +1 -0
- package/lib/cjs/controllers/FederatedLoginController.d.ts.map +1 -0
- package/lib/cjs/controllers/FederatedLoginController.js +38 -0
- package/lib/cjs/controllers/FederatedLoginController.js.map +1 -0
- package/lib/cjs/controllers/LoginController.d.ts +13 -0
- package/lib/cjs/controllers/LoginController.d.ts.map +1 -0
- package/lib/cjs/controllers/LoginController.js +202 -0
- package/lib/cjs/controllers/LoginController.js.map +1 -0
- package/lib/cjs/controllers/TwoFactorAuthController.d.ts +1 -0
- package/lib/cjs/controllers/TwoFactorAuthController.d.ts.map +1 -0
- package/lib/cjs/controllers/TwoFactorAuthController.js +57 -0
- package/lib/cjs/controllers/TwoFactorAuthController.js.map +1 -0
- package/lib/cjs/controllers/UserController.d.ts +1 -0
- package/lib/cjs/controllers/UserController.d.ts.map +1 -0
- package/lib/cjs/controllers/UserController.js +50 -0
- package/lib/cjs/controllers/UserController.js.map +1 -0
- package/lib/cjs/controllers/UserMetadata.d.ts +1 -0
- package/lib/cjs/controllers/UserMetadata.d.ts.map +1 -0
- package/lib/cjs/controllers/UserMetadata.js +35 -0
- package/lib/cjs/controllers/UserMetadata.js.map +1 -0
- package/lib/cjs/dto/login-dto.d.ts +17 -0
- package/lib/cjs/dto/login-dto.d.ts.map +1 -0
- package/lib/cjs/dto/login-dto.js +33 -0
- package/lib/cjs/dto/login-dto.js.map +1 -0
- package/lib/cjs/dto/password-dto.d.ts +30 -0
- package/lib/cjs/dto/password-dto.d.ts.map +1 -0
- package/lib/cjs/dto/password-dto.js +35 -0
- package/lib/cjs/dto/password-dto.js.map +1 -0
- package/lib/cjs/dto/restore-password-dto.d.ts +24 -0
- package/lib/cjs/dto/restore-password-dto.d.ts.map +1 -0
- package/lib/cjs/dto/restore-password-dto.js +34 -0
- package/lib/cjs/dto/restore-password-dto.js.map +1 -0
- package/lib/cjs/dto/token-dto.d.ts +16 -0
- package/lib/cjs/dto/token-dto.d.ts.map +1 -0
- package/lib/cjs/dto/token-dto.js +32 -0
- package/lib/cjs/dto/token-dto.js.map +1 -0
- package/lib/cjs/dto/user-dto.d.ts +22 -0
- package/lib/cjs/dto/user-dto.d.ts.map +1 -0
- package/lib/cjs/dto/user-dto.js +33 -0
- package/lib/cjs/dto/user-dto.js.map +1 -0
- package/lib/cjs/dto/userLogin-dto.d.ts +22 -0
- package/lib/cjs/dto/userLogin-dto.d.ts.map +1 -0
- package/lib/cjs/dto/userLogin-dto.js +34 -0
- package/lib/cjs/dto/userLogin-dto.js.map +1 -0
- package/lib/cjs/events/User2FaPassed.d.ts +4 -0
- package/lib/cjs/events/User2FaPassed.d.ts.map +1 -0
- package/lib/cjs/events/User2FaPassed.js +18 -0
- package/lib/cjs/events/User2FaPassed.js.map +1 -0
- package/lib/cjs/fingerprint/FingerprintJs.d.ts +1 -0
- package/lib/cjs/fingerprint/FingerprintJs.d.ts.map +1 -0
- package/lib/cjs/fingerprint/FingerprintJs.js +5 -0
- package/lib/cjs/fingerprint/FingerprintJs.js.map +1 -0
- package/lib/cjs/index.d.ts +2 -0
- package/lib/cjs/index.d.ts.map +1 -0
- package/lib/cjs/index.js +21 -0
- package/lib/cjs/index.js.map +1 -0
- package/lib/cjs/middlewares/AttributeFilter.d.ts +11 -0
- package/lib/cjs/middlewares/AttributeFilter.d.ts.map +1 -0
- package/lib/cjs/middlewares/AttributeFilter.js +19 -0
- package/lib/cjs/middlewares/AttributeFilter.js.map +1 -0
- package/lib/cjs/package.json +1 -0
- package/lib/cjs/policies/2FaPolicy.d.ts +8 -0
- package/lib/cjs/policies/2FaPolicy.d.ts.map +1 -0
- package/lib/cjs/policies/2FaPolicy.js +32 -0
- package/lib/cjs/policies/2FaPolicy.js.map +1 -0
- package/lib/cjs/policies/AllowFederatedLoginPolicy.d.ts +7 -0
- package/lib/cjs/policies/AllowFederatedLoginPolicy.d.ts.map +1 -0
- package/lib/cjs/policies/AllowFederatedLoginPolicy.js +32 -0
- package/lib/cjs/policies/AllowFederatedLoginPolicy.js.map +1 -0
- package/lib/cjs/policies/CaptchaPolicy.d.ts +1 -0
- package/lib/cjs/policies/CaptchaPolicy.d.ts.map +1 -0
- package/lib/cjs/policies/CaptchaPolicy.js +1 -0
- package/lib/cjs/policies/CaptchaPolicy.js.map +1 -0
- package/lib/mjs/2fa/SpeakEasy2FaToken.d.ts +2 -0
- package/lib/mjs/2fa/SpeakEasy2FaToken.d.ts.map +1 -0
- package/lib/mjs/2fa/SpeakEasy2FaToken.js +49 -0
- package/lib/mjs/2fa/SpeakEasy2FaToken.js.map +1 -0
- package/lib/mjs/config/rbac-http.d.ts +34 -0
- package/lib/mjs/config/rbac-http.d.ts.map +1 -0
- package/lib/mjs/config/rbac-http.js +44 -0
- package/lib/mjs/config/rbac-http.js.map +1 -0
- package/lib/mjs/controllers/AuthController.d.ts +2 -0
- package/lib/mjs/controllers/AuthController.d.ts.map +1 -0
- package/lib/mjs/controllers/AuthController.js +212 -0
- package/lib/mjs/controllers/AuthController.js.map +1 -0
- package/lib/mjs/controllers/FederatedLoginController.d.ts +2 -0
- package/lib/mjs/controllers/FederatedLoginController.d.ts.map +1 -0
- package/lib/mjs/controllers/FederatedLoginController.js +39 -0
- package/lib/mjs/controllers/FederatedLoginController.js.map +1 -0
- package/lib/mjs/controllers/LoginController.d.ts +13 -0
- package/lib/mjs/controllers/LoginController.d.ts.map +1 -0
- package/lib/mjs/controllers/LoginController.js +199 -0
- package/lib/mjs/controllers/LoginController.js.map +1 -0
- package/lib/mjs/controllers/TwoFactorAuthController.d.ts +2 -0
- package/lib/mjs/controllers/TwoFactorAuthController.d.ts.map +1 -0
- package/lib/mjs/controllers/TwoFactorAuthController.js +58 -0
- package/lib/mjs/controllers/TwoFactorAuthController.js.map +1 -0
- package/lib/mjs/controllers/UserController.d.ts +2 -0
- package/lib/mjs/controllers/UserController.d.ts.map +1 -0
- package/lib/mjs/controllers/UserController.js +51 -0
- package/lib/mjs/controllers/UserController.js.map +1 -0
- package/lib/mjs/controllers/UserMetadata.d.ts +2 -0
- package/lib/mjs/controllers/UserMetadata.d.ts.map +1 -0
- package/lib/mjs/controllers/UserMetadata.js +36 -0
- package/lib/mjs/controllers/UserMetadata.js.map +1 -0
- package/lib/mjs/dto/login-dto.d.ts +17 -0
- package/lib/mjs/dto/login-dto.d.ts.map +1 -0
- package/lib/mjs/dto/login-dto.js +30 -0
- package/lib/mjs/dto/login-dto.js.map +1 -0
- package/lib/mjs/dto/password-dto.d.ts +30 -0
- package/lib/mjs/dto/password-dto.d.ts.map +1 -0
- package/lib/mjs/dto/password-dto.js +32 -0
- package/lib/mjs/dto/password-dto.js.map +1 -0
- package/lib/mjs/dto/restore-password-dto.d.ts +24 -0
- package/lib/mjs/dto/restore-password-dto.d.ts.map +1 -0
- package/lib/mjs/dto/restore-password-dto.js +31 -0
- package/lib/mjs/dto/restore-password-dto.js.map +1 -0
- package/lib/mjs/dto/token-dto.d.ts +16 -0
- package/lib/mjs/dto/token-dto.d.ts.map +1 -0
- package/lib/mjs/dto/token-dto.js +29 -0
- package/lib/mjs/dto/token-dto.js.map +1 -0
- package/lib/mjs/dto/user-dto.d.ts +22 -0
- package/lib/mjs/dto/user-dto.d.ts.map +1 -0
- package/lib/mjs/dto/user-dto.js +30 -0
- package/lib/mjs/dto/user-dto.js.map +1 -0
- package/lib/mjs/dto/userLogin-dto.d.ts +22 -0
- package/lib/mjs/dto/userLogin-dto.d.ts.map +1 -0
- package/lib/mjs/dto/userLogin-dto.js +31 -0
- package/lib/mjs/dto/userLogin-dto.js.map +1 -0
- package/lib/mjs/events/User2FaPassed.d.ts +4 -0
- package/lib/mjs/events/User2FaPassed.d.ts.map +1 -0
- package/lib/mjs/events/User2FaPassed.js +15 -0
- package/lib/mjs/events/User2FaPassed.js.map +1 -0
- package/lib/mjs/fingerprint/FingerprintJs.d.ts +2 -0
- package/lib/mjs/fingerprint/FingerprintJs.d.ts.map +1 -0
- package/lib/mjs/fingerprint/FingerprintJs.js +6 -0
- package/lib/mjs/fingerprint/FingerprintJs.js.map +1 -0
- package/lib/mjs/index.d.ts +2 -0
- package/lib/mjs/index.d.ts.map +1 -0
- package/lib/mjs/index.js +5 -0
- package/lib/mjs/index.js.map +1 -0
- package/lib/mjs/middlewares/AttributeFilter.d.ts +11 -0
- package/lib/mjs/middlewares/AttributeFilter.d.ts.map +1 -0
- package/lib/mjs/middlewares/AttributeFilter.js +15 -0
- package/lib/mjs/middlewares/AttributeFilter.js.map +1 -0
- package/lib/mjs/package.json +1 -0
- package/lib/mjs/policies/2FaPolicy.d.ts +8 -0
- package/lib/mjs/policies/2FaPolicy.d.ts.map +1 -0
- package/lib/mjs/policies/2FaPolicy.js +28 -0
- package/lib/mjs/policies/2FaPolicy.js.map +1 -0
- package/lib/mjs/policies/AllowFederatedLoginPolicy.d.ts +7 -0
- package/lib/mjs/policies/AllowFederatedLoginPolicy.d.ts.map +1 -0
- package/lib/mjs/policies/AllowFederatedLoginPolicy.js +28 -0
- package/lib/mjs/policies/AllowFederatedLoginPolicy.js.map +1 -0
- package/lib/mjs/policies/CaptchaPolicy.d.ts +2 -0
- package/lib/mjs/policies/CaptchaPolicy.d.ts.map +1 -0
- package/lib/mjs/policies/CaptchaPolicy.js +2 -0
- package/lib/mjs/policies/CaptchaPolicy.js.map +1 -0
- package/lib/tsconfig.cjs.tsbuildinfo +1 -0
- package/lib/tsconfig.mjs.tsbuildinfo +1 -0
- package/package.json +11 -11
package/lib/cjs/index.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./controllers/LoginController.js"), exports);
|
|
18
|
+
// export * from './controllers/UserController.js';
|
|
19
|
+
// export * from './2fa/SpeakEasy2FaToken.js';
|
|
20
|
+
// export * from "./fingerprint/FingerprintJs.js";
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mEAAiD;AACjD,mDAAmD;AACnD,8CAA8C;AAC9C,kDAAkD"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { RouteMiddleware, IController, IRoute } from '@spinajs/http';
|
|
2
|
+
/**
|
|
3
|
+
* Filters attributes of db models
|
|
4
|
+
*/
|
|
5
|
+
export declare class FilterAttribute extends RouteMiddleware {
|
|
6
|
+
onResponse(): Promise<void>;
|
|
7
|
+
isEnabled(_action: IRoute, _instance: IController): boolean;
|
|
8
|
+
onBefore(): Promise<void>;
|
|
9
|
+
onAfter(): Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=AttributeFilter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AttributeFilter.d.ts","sourceRoot":"","sources":["../../../src/middlewares/AttributeFilter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAErE;;GAEG;AACH,qBAAa,eAAgB,SAAQ,eAAe;IACrC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAEjC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,GAAG,OAAO;IAKrD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAGzB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CACtC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FilterAttribute = void 0;
|
|
4
|
+
const http_1 = require("@spinajs/http");
|
|
5
|
+
/**
|
|
6
|
+
* Filters attributes of db models
|
|
7
|
+
*/
|
|
8
|
+
class FilterAttribute extends http_1.RouteMiddleware {
|
|
9
|
+
async onResponse() { }
|
|
10
|
+
isEnabled(_action, _instance) {
|
|
11
|
+
return true;
|
|
12
|
+
}
|
|
13
|
+
// tslint:disable-next-line: no-empty
|
|
14
|
+
async onBefore() { }
|
|
15
|
+
// tslint:disable-next-line: no-empty
|
|
16
|
+
async onAfter() { }
|
|
17
|
+
}
|
|
18
|
+
exports.FilterAttribute = FilterAttribute;
|
|
19
|
+
//# sourceMappingURL=AttributeFilter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AttributeFilter.js","sourceRoot":"","sources":["../../../src/middlewares/AttributeFilter.ts"],"names":[],"mappings":";;;AAAA,wCAAqE;AAErE;;GAEG;AACH,MAAa,eAAgB,SAAQ,sBAAe;IAC3C,KAAK,CAAC,UAAU,KAAmB,CAAC;IAEpC,SAAS,CAAC,OAAe,EAAE,SAAsB;QACtD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qCAAqC;IAC9B,KAAK,CAAC,QAAQ,KAAmB,CAAC;IAEzC,qCAAqC;IAC9B,KAAK,CAAC,OAAO,KAAmB,CAAC;CACzC;AAZD,0CAYC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"commonjs"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { BasePolicy } from '@spinajs/http';
|
|
2
|
+
import { TwoFactorAuthConfig } from '@spinajs/rbac-http';
|
|
3
|
+
export declare class TwoFacRouteEnabled extends BasePolicy {
|
|
4
|
+
protected TwoFactorConfig: TwoFactorAuthConfig;
|
|
5
|
+
isEnabled(): boolean;
|
|
6
|
+
execute(): Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=2FaPolicy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"2FaPolicy.d.ts","sourceRoot":"","sources":["../../../src/policies/2FaPolicy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,qBAAa,kBAAmB,SAAQ,UAAU;IAEhD,SAAS,CAAC,eAAe,EAAE,mBAAmB,CAAC;IAExC,SAAS,IAAI,OAAO;IAGpB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAOhC"}
|
|
@@ -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.TwoFacRouteEnabled = void 0;
|
|
13
|
+
const exceptions_1 = require("@spinajs/exceptions");
|
|
14
|
+
const configuration_1 = require("@spinajs/configuration");
|
|
15
|
+
const http_1 = require("@spinajs/http");
|
|
16
|
+
class TwoFacRouteEnabled extends http_1.BasePolicy {
|
|
17
|
+
isEnabled() {
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
execute() {
|
|
21
|
+
if (this.TwoFactorConfig.enabled === false) {
|
|
22
|
+
throw new exceptions_1.InvalidOperation('2 factor auth is not enabled');
|
|
23
|
+
}
|
|
24
|
+
return Promise.resolve();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.TwoFacRouteEnabled = TwoFacRouteEnabled;
|
|
28
|
+
__decorate([
|
|
29
|
+
(0, configuration_1.Config)('rbac.twoFactorAuth'),
|
|
30
|
+
__metadata("design:type", Object)
|
|
31
|
+
], TwoFacRouteEnabled.prototype, "TwoFactorConfig", void 0);
|
|
32
|
+
//# sourceMappingURL=2FaPolicy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"2FaPolicy.js","sourceRoot":"","sources":["../../../src/policies/2FaPolicy.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAAuD;AACvD,0DAAgD;AAChD,wCAA2C;AAG3C,MAAa,kBAAmB,SAAQ,iBAAU;IAIzC,SAAS;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IACM,OAAO;QACZ,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,KAAK,KAAK,EAAE;YAC1C,MAAM,IAAI,6BAAgB,CAAC,8BAA8B,CAAC,CAAC;SAC5D;QAED,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CACF;AAdD,gDAcC;AAZW;IADT,IAAA,sBAAM,EAAC,oBAAoB,CAAC;;2DACkB"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { BasePolicy } from '@spinajs/http';
|
|
2
|
+
export declare class AllowFederatedLoginPolicy extends BasePolicy {
|
|
3
|
+
protected allowFeredatedLogin: boolean;
|
|
4
|
+
isEnabled(): boolean;
|
|
5
|
+
execute(): Promise<void>;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=AllowFederatedLoginPolicy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AllowFederatedLoginPolicy.d.ts","sourceRoot":"","sources":["../../../src/policies/AllowFederatedLoginPolicy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,qBAAa,yBAA0B,SAAQ,UAAU;IAEvD,SAAS,CAAC,mBAAmB,EAAE,OAAO,CAAC;IAEhC,SAAS,IAAI,OAAO;IAGpB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAOhC"}
|
|
@@ -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.AllowFederatedLoginPolicy = void 0;
|
|
13
|
+
const exceptions_1 = require("@spinajs/exceptions");
|
|
14
|
+
const configuration_1 = require("@spinajs/configuration");
|
|
15
|
+
const http_1 = require("@spinajs/http");
|
|
16
|
+
class AllowFederatedLoginPolicy extends http_1.BasePolicy {
|
|
17
|
+
isEnabled() {
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
execute() {
|
|
21
|
+
if (!this.allowFeredatedLogin) {
|
|
22
|
+
throw new exceptions_1.InvalidOperation('federated login is not enabled');
|
|
23
|
+
}
|
|
24
|
+
return Promise.resolve();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.AllowFederatedLoginPolicy = AllowFederatedLoginPolicy;
|
|
28
|
+
__decorate([
|
|
29
|
+
(0, configuration_1.Config)('rbac.allowFederated'),
|
|
30
|
+
__metadata("design:type", Boolean)
|
|
31
|
+
], AllowFederatedLoginPolicy.prototype, "allowFeredatedLogin", void 0);
|
|
32
|
+
//# sourceMappingURL=AllowFederatedLoginPolicy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AllowFederatedLoginPolicy.js","sourceRoot":"","sources":["../../../src/policies/AllowFederatedLoginPolicy.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAAuD;AACvD,0DAAgD;AAChD,wCAA2C;AAE3C,MAAa,yBAA0B,SAAQ,iBAAU;IAIhD,SAAS;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IACM,OAAO;QACZ,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;YAC7B,MAAM,IAAI,6BAAgB,CAAC,gCAAgC,CAAC,CAAC;SAC9D;QAED,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CACF;AAdD,8DAcC;AAZW;IADT,IAAA,sBAAM,EAAC,qBAAqB,CAAC;;sEACS"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=CaptchaPolicy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CaptchaPolicy.d.ts","sourceRoot":"","sources":["../../../src/policies/CaptchaPolicy.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=CaptchaPolicy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CaptchaPolicy.js","sourceRoot":"","sources":["../../../src/policies/CaptchaPolicy.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SpeakEasy2FaToken.d.ts","sourceRoot":"","sources":["../../../src/2fa/SpeakEasy2FaToken.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// import { Injectable } from '@spinajs/di';
|
|
2
|
+
// import * as speakeasy from 'speakeasy';
|
|
3
|
+
// import { User } from '@spinajs/rbac';
|
|
4
|
+
// import { Config } from '@spinajs/configuration';
|
|
5
|
+
// import { Log, Logger } from '@spinajs/log';
|
|
6
|
+
export {};
|
|
7
|
+
// @Injectable(TwoFactorAuthProvider)
|
|
8
|
+
// export class SpeakEasy2FaToken extends TwoFactorAuthProvider {
|
|
9
|
+
// @Config('rbac.speakeasy')
|
|
10
|
+
// protected Config: any;
|
|
11
|
+
// @Logger('SPEAKEASY_2FA_TOKEN')
|
|
12
|
+
// protected Log: Log;
|
|
13
|
+
// constructor() {
|
|
14
|
+
// super();
|
|
15
|
+
// }
|
|
16
|
+
// public execute(_: User): Promise<void> {
|
|
17
|
+
// // empty, speakasy works offline eg. google authenticator
|
|
18
|
+
// // we dont send any email or sms
|
|
19
|
+
// return Promise.resolve();
|
|
20
|
+
// }
|
|
21
|
+
// public async verifyToken(token: string, user: User): Promise<boolean> {
|
|
22
|
+
// const meta = user.Metadata.find((x) => x.Key === '2fa_speakeasy_token');
|
|
23
|
+
// if (!meta || meta.Value === '') {
|
|
24
|
+
// this.Log.trace(`Cannot verify 2fa token, no 2fa token for user ${user.Id}`);
|
|
25
|
+
// return false;
|
|
26
|
+
// }
|
|
27
|
+
// const verified = speakeasy.totp.verify({
|
|
28
|
+
// secret: meta.Value,
|
|
29
|
+
// encoding: 'base32',
|
|
30
|
+
// token,
|
|
31
|
+
// window: 5,
|
|
32
|
+
// });
|
|
33
|
+
// return verified;
|
|
34
|
+
// }
|
|
35
|
+
// public async initialize(user: User): Promise<any> {
|
|
36
|
+
// const secret = speakeasy.generateSecret(this.Config);
|
|
37
|
+
// await (user.Metadata['2fa_speakeasy_token'] = secret.base32);
|
|
38
|
+
// return secret.base32;
|
|
39
|
+
// }
|
|
40
|
+
// public async isEnabled(user: User): Promise<boolean> {
|
|
41
|
+
// const val = await user.Metadata['2fa_enabled'];
|
|
42
|
+
// return val as boolean;
|
|
43
|
+
// }
|
|
44
|
+
// public async isInitialized(user: User): Promise<boolean> {
|
|
45
|
+
// const val = await user.Metadata['2fa_speakeasy_token'];
|
|
46
|
+
// return val !== '';
|
|
47
|
+
// }
|
|
48
|
+
// }
|
|
49
|
+
//# sourceMappingURL=SpeakEasy2FaToken.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SpeakEasy2FaToken.js","sourceRoot":"","sources":["../../../src/2fa/SpeakEasy2FaToken.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,0CAA0C;AAC1C,wCAAwC;AACxC,mDAAmD;AACnD,8CAA8C;;AAE9C,qCAAqC;AACrC,iEAAiE;AACjE,8BAA8B;AAC9B,2BAA2B;AAE3B,mCAAmC;AACnC,wBAAwB;AAExB,oBAAoB;AACpB,eAAe;AACf,MAAM;AAEN,6CAA6C;AAC7C,gEAAgE;AAChE,uCAAuC;AACvC,gCAAgC;AAChC,MAAM;AAEN,4EAA4E;AAC5E,+EAA+E;AAE/E,wCAAwC;AACxC,qFAAqF;AAErF,sBAAsB;AACtB,QAAQ;AAER,+CAA+C;AAC/C,4BAA4B;AAC5B,4BAA4B;AAC5B,eAAe;AACf,mBAAmB;AACnB,UAAU;AAEV,uBAAuB;AACvB,MAAM;AAEN,wDAAwD;AACxD,4DAA4D;AAC5D,oEAAoE;AACpE,4BAA4B;AAC5B,MAAM;AAEN,2DAA2D;AAC3D,sDAAsD;AACtD,6BAA6B;AAC7B,MAAM;AAEN,+DAA+D;AAC/D,8DAA8D;AAC9D,yBAAyB;AACzB,MAAM;AACN,IAAI"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
declare const rbacHttp: {
|
|
2
|
+
system: {
|
|
3
|
+
dirs: {
|
|
4
|
+
controllers: string[];
|
|
5
|
+
locales: string[];
|
|
6
|
+
views: string[];
|
|
7
|
+
};
|
|
8
|
+
};
|
|
9
|
+
rbac: {
|
|
10
|
+
twoFactorAuth: {
|
|
11
|
+
enabled: boolean;
|
|
12
|
+
service: string;
|
|
13
|
+
};
|
|
14
|
+
fingerprint: {
|
|
15
|
+
enabled: boolean;
|
|
16
|
+
maxDevices: number;
|
|
17
|
+
service: string;
|
|
18
|
+
};
|
|
19
|
+
password: {
|
|
20
|
+
tokenTTL: number;
|
|
21
|
+
/**
|
|
22
|
+
* Block account after invalid login attempts
|
|
23
|
+
*/
|
|
24
|
+
blockAfterAttempts: number;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Should federated login be enabled ? eg. facebook
|
|
28
|
+
*/
|
|
29
|
+
allowFederated: boolean;
|
|
30
|
+
};
|
|
31
|
+
http: {};
|
|
32
|
+
};
|
|
33
|
+
export default rbacHttp;
|
|
34
|
+
//# sourceMappingURL=rbac-http.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rbac-http.d.ts","sourceRoot":"","sources":["../../../src/config/rbac-http.ts"],"names":[],"mappings":"AAQA,QAAA,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;YAsBR;;eAEG;;;QAGL;;WAEG;;;;CAQN,CAAC;AAEF,eAAe,QAAQ,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { join, normalize, resolve } from 'path';
|
|
2
|
+
function dir(path) {
|
|
3
|
+
const inCommonJs = typeof module !== 'undefined';
|
|
4
|
+
return resolve(normalize(join(process.cwd(), 'node_modules', '@spinajs', 'rbac-http-user', 'lib', inCommonJs ? 'cjs' : 'mjs', path)));
|
|
5
|
+
}
|
|
6
|
+
const rbacHttp = {
|
|
7
|
+
system: {
|
|
8
|
+
dirs: {
|
|
9
|
+
controllers: [dir('controllers')],
|
|
10
|
+
locales: [dir('locales')],
|
|
11
|
+
views: [dir('views')],
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
rbac: {
|
|
15
|
+
twoFactorAuth: {
|
|
16
|
+
enabled: true,
|
|
17
|
+
service: 'SpeakEasy2FaToken',
|
|
18
|
+
},
|
|
19
|
+
fingerprint: {
|
|
20
|
+
enabled: false,
|
|
21
|
+
maxDevices: 3,
|
|
22
|
+
service: 'FingerprintJs',
|
|
23
|
+
},
|
|
24
|
+
password: {
|
|
25
|
+
// password reset token ttl in minutes
|
|
26
|
+
tokenTTL: 60,
|
|
27
|
+
/**
|
|
28
|
+
* Block account after invalid login attempts
|
|
29
|
+
*/
|
|
30
|
+
blockAfterAttempts: 3,
|
|
31
|
+
},
|
|
32
|
+
/**
|
|
33
|
+
* Should federated login be enabled ? eg. facebook
|
|
34
|
+
*/
|
|
35
|
+
allowFederated: false,
|
|
36
|
+
},
|
|
37
|
+
http: {
|
|
38
|
+
// middlewares: [
|
|
39
|
+
// // add global user from session middleware
|
|
40
|
+
// ],
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
export default rbacHttp;
|
|
44
|
+
//# sourceMappingURL=rbac-http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rbac-http.js","sourceRoot":"","sources":["../../../src/config/rbac-http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEhD,SAAS,GAAG,CAAC,IAAY;IACvB,MAAM,UAAU,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC;IACjD,OAAO,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,UAAU,EAAE,gBAAgB,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AACxI,CAAC;AAGD,MAAM,QAAQ,GAAG;IACf,MAAM,EAAE;QACN,IAAI,EAAE;YACJ,WAAW,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YACjC,OAAO,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACzB,KAAK,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;SACtB;KACF;IACD,IAAI,EAAE;QACJ,aAAa,EAAE;YACb,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,mBAAmB;SAC7B;QACD,WAAW,EAAE;YACX,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,CAAC;YACb,OAAO,EAAE,eAAe;SACzB;QACD,QAAQ,EAAE;YACR,sCAAsC;YACtC,QAAQ,EAAE,EAAE;YAEZ;;eAEG;YACH,kBAAkB,EAAE,CAAC;SACtB;QACD;;WAEG;QACH,cAAc,EAAE,KAAK;KACtB;IACD,IAAI,EAAE;IACJ,iBAAiB;IACjB,+CAA+C;IAC/C,KAAK;KACN;CACF,CAAC;AAEF,eAAe,QAAQ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthController.d.ts","sourceRoot":"","sources":["../../../src/controllers/AuthController.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
// import { InvalidOperation } from '@spinajs/exceptions';
|
|
2
|
+
// import { UserLoginDto } from '../dto/userLogin-dto.js';
|
|
3
|
+
// import { BaseController, BasePath, Post, Body, Ok, Get, Cookie, CookieResponse, Unauthorized, Policy, Query, BadRequest, NotFound } from '@spinajs/http';
|
|
4
|
+
// import { AuthProvider, FederatedAuthProvider, PasswordProvider, PasswordValidationProvider, Session, SessionProvider, User, User as UserModel, UserMetadata, UserPasswordChanged } from '@spinajs/rbac';
|
|
5
|
+
// import { Autoinject } from '@spinajs/di';
|
|
6
|
+
// import { AutoinjectService, Config, Configuration } from '@spinajs/configuration';
|
|
7
|
+
// import _ from 'lodash';
|
|
8
|
+
// import { FingerprintProvider, TwoFactorAuthProvider } from '../interfaces.js';
|
|
9
|
+
// import { QueueService } from '@spinajs/queue';
|
|
10
|
+
export {};
|
|
11
|
+
// import { NotLoggedPolicy } from '../policies/NotLoggedPolicy.js';
|
|
12
|
+
// import { UserPasswordRestore } from '../events/UserPassordRestore.js';
|
|
13
|
+
// import { RestorePasswordDto } from '../dto/restore-password-dto.js';
|
|
14
|
+
// import { v4 as uuidv4 } from 'uuid';
|
|
15
|
+
// import { DateTime } from 'luxon';
|
|
16
|
+
// import { UserAction } from '@spinajs/rbac';
|
|
17
|
+
// import { UserLoginSuccess } from '../events/UserLoginSuccess.js';
|
|
18
|
+
// @BasePath('auth')
|
|
19
|
+
// @Policy(NotLoggedPolicy)
|
|
20
|
+
// export class LoginController extends BaseController {
|
|
21
|
+
// @Autoinject()
|
|
22
|
+
// protected Configuration: Configuration;
|
|
23
|
+
// @AutoinjectService('rbac.auth')
|
|
24
|
+
// protected AuthProvider: AuthProvider;
|
|
25
|
+
// @AutoinjectService('rbac.session')
|
|
26
|
+
// protected SessionProvider: SessionProvider;
|
|
27
|
+
// @Config('rbac.session.expiration', {
|
|
28
|
+
// defaultValue: 120,
|
|
29
|
+
// })
|
|
30
|
+
// protected SessionExpirationTime: number;
|
|
31
|
+
// @Config('rbac.password_reset.ttl')
|
|
32
|
+
// protected PasswordResetTokenTTL: number;
|
|
33
|
+
// @AutoinjectService('rbac.twoFactorAuth')
|
|
34
|
+
// protected TwoFactorAuthProvider: TwoFactorAuthProvider;
|
|
35
|
+
// @AutoinjectService('rbac.fingerprint')
|
|
36
|
+
// protected FingerprintProvider: FingerprintProvider;
|
|
37
|
+
// @AutoinjectService('rbac.password.validation')
|
|
38
|
+
// protected PasswordValidationService: PasswordValidationProvider;
|
|
39
|
+
// @Autoinject(FederatedAuthProvider)
|
|
40
|
+
// protected FederatedLoginStrategies: FederatedAuthProvider<any>[];
|
|
41
|
+
// @Autoinject()
|
|
42
|
+
// protected PasswordProvider: PasswordProvider;
|
|
43
|
+
// @Autoinject(QueueService)
|
|
44
|
+
// protected Queue: QueueService;
|
|
45
|
+
// @Post()
|
|
46
|
+
// public async login(@Body() credentials: UserLoginDto) {
|
|
47
|
+
// const result = await this.AuthProvider.authenticate(credentials.Email, credentials.Password);
|
|
48
|
+
// if (!result.Error) {
|
|
49
|
+
// // proceed with standard authentication
|
|
50
|
+
// return await this.authenticate(result.User);
|
|
51
|
+
// }
|
|
52
|
+
// return new Unauthorized(result.Error);
|
|
53
|
+
// }
|
|
54
|
+
// @Post('new-password')
|
|
55
|
+
// public async setNewPassword(@Query() token: string, @Body() pwd: RestorePasswordDto) {
|
|
56
|
+
// const user = await User.query()
|
|
57
|
+
// .innerJoin(UserMetadata, function () {
|
|
58
|
+
// this.where({
|
|
59
|
+
// Key: 'password:reset:token',
|
|
60
|
+
// Value: token,
|
|
61
|
+
// });
|
|
62
|
+
// })
|
|
63
|
+
// .populate('Metadata')
|
|
64
|
+
// .first();
|
|
65
|
+
// if (!user) {
|
|
66
|
+
// return new NotFound({
|
|
67
|
+
// error: {
|
|
68
|
+
// code: 'ERR_USER_NOT_FOUND',
|
|
69
|
+
// message: 'No user found for this reset token',
|
|
70
|
+
// },
|
|
71
|
+
// });
|
|
72
|
+
// }
|
|
73
|
+
// const val = (await user.Metadata['password:reset:start']) as DateTime;
|
|
74
|
+
// const now = DateTime.now().plus({ seconds: -this.PasswordResetTokenTTL });
|
|
75
|
+
// if (val < now) {
|
|
76
|
+
// return new BadRequest({
|
|
77
|
+
// error: {
|
|
78
|
+
// code: 'ERR_RESET_TOKEN_EXPIRED',
|
|
79
|
+
// message: 'Password reset token expired',
|
|
80
|
+
// },
|
|
81
|
+
// });
|
|
82
|
+
// }
|
|
83
|
+
// if (!this.PasswordValidationService.check(pwd.Password)) {
|
|
84
|
+
// return new BadRequest({
|
|
85
|
+
// error: {
|
|
86
|
+
// code: 'ERR_PASSWORD_RULE',
|
|
87
|
+
// message: 'Invalid password, does not match password rules',
|
|
88
|
+
// },
|
|
89
|
+
// });
|
|
90
|
+
// }
|
|
91
|
+
// if (pwd.Password !== pwd.ConfirmPassword) {
|
|
92
|
+
// return new BadRequest({
|
|
93
|
+
// error: {
|
|
94
|
+
// code: 'ERR_PASSWORD_NOT_MATCH',
|
|
95
|
+
// message: 'Password and repeat password does not match',
|
|
96
|
+
// },
|
|
97
|
+
// });
|
|
98
|
+
// }
|
|
99
|
+
// const hashedPassword = await this.PasswordProvider.hash(pwd.Password);
|
|
100
|
+
// user.Password = hashedPassword;
|
|
101
|
+
// await user.update();
|
|
102
|
+
// /**
|
|
103
|
+
// * Delete all reset related meta for user
|
|
104
|
+
// */
|
|
105
|
+
// await user.Metadata.delete(/password:reset.*/);
|
|
106
|
+
// // add to action list
|
|
107
|
+
// await user.Actions.add(
|
|
108
|
+
// new UserAction({
|
|
109
|
+
// Persistent: true,
|
|
110
|
+
// Action: 'password:reset',
|
|
111
|
+
// }),
|
|
112
|
+
// );
|
|
113
|
+
// // inform others
|
|
114
|
+
// await this.Queue.emit(new UserPasswordChanged(user.Uuid));
|
|
115
|
+
// }
|
|
116
|
+
// @Post('forgot-password')
|
|
117
|
+
// public async forgotPassword(@Body() login: UserLoginDto) {
|
|
118
|
+
// const user = await this.AuthProvider.getByEmail(login.Email);
|
|
119
|
+
// if (!user.IsActive || user.IsBanned || user.DeletedAt !== null) {
|
|
120
|
+
// return new InvalidOperation('User is inactive, banned or deleted. Contact system administrator');
|
|
121
|
+
// }
|
|
122
|
+
// const token = uuidv4();
|
|
123
|
+
// // assign meta to user
|
|
124
|
+
// await (user.Metadata['password:reset'] = true);
|
|
125
|
+
// await (user.Metadata['password:reset:token'] = token);
|
|
126
|
+
// await (user.Metadata['password:reset:start'] = DateTime.now());
|
|
127
|
+
// await user.Actions.add(
|
|
128
|
+
// new UserAction({
|
|
129
|
+
// Action: 'user:password:reset',
|
|
130
|
+
// Data: DateTime.now().toISO(),
|
|
131
|
+
// Persistent: true,
|
|
132
|
+
// }),
|
|
133
|
+
// );
|
|
134
|
+
// await this.Queue.emit(new UserPasswordRestore(user.Uuid, token));
|
|
135
|
+
// return new Ok({
|
|
136
|
+
// reset_token: token,
|
|
137
|
+
// ttl: this.PasswordResetTokenTTL,
|
|
138
|
+
// });
|
|
139
|
+
// }
|
|
140
|
+
// protected async authenticate(user: UserModel, federated?: boolean) {
|
|
141
|
+
// if (!user) {
|
|
142
|
+
// return new Unauthorized({
|
|
143
|
+
// error: {
|
|
144
|
+
// message: 'login or password incorrect',
|
|
145
|
+
// },
|
|
146
|
+
// });
|
|
147
|
+
// }
|
|
148
|
+
// await user.Metadata.populate();
|
|
149
|
+
// const session = new Session();
|
|
150
|
+
// const dUser = user.dehydrate();
|
|
151
|
+
// session.Data.set('User', dUser);
|
|
152
|
+
// // we found user but we still dont know if is authorized
|
|
153
|
+
// // eg. 2fa auth is not performed
|
|
154
|
+
// // create session, but user is not yet authorized
|
|
155
|
+
// session.Data.set('Authorized', false);
|
|
156
|
+
// // if its federated login, skip 2fa - assume
|
|
157
|
+
// // external login service provided it
|
|
158
|
+
// if (this.TwoFactorConfig.enabled || !federated) {
|
|
159
|
+
// await this.SessionProvider.save(session);
|
|
160
|
+
// const enabledForUser = await this.TwoFactorAuthProvider.isEnabled(user);
|
|
161
|
+
// /**
|
|
162
|
+
// * if 2fa is enabled for user, proceed
|
|
163
|
+
// */
|
|
164
|
+
// if (enabledForUser) {
|
|
165
|
+
// /**
|
|
166
|
+
// * check if 2fa system is initialized for user eg. private key is generated.
|
|
167
|
+
// */
|
|
168
|
+
// const isInitialized = await this.TwoFactorAuthProvider.isInitialized(user);
|
|
169
|
+
// if (!isInitialized) {
|
|
170
|
+
// const twoFaResult = await this.TwoFactorAuthProvider.initialize(user);
|
|
171
|
+
// return new CookieResponse(
|
|
172
|
+
// 'ssid',
|
|
173
|
+
// session.SessionId,
|
|
174
|
+
// this.SessionExpirationTime,
|
|
175
|
+
// true,
|
|
176
|
+
// {
|
|
177
|
+
// toFactorAuth: true,
|
|
178
|
+
// twoFactorAuthFirstTime: true,
|
|
179
|
+
// method: this.TwoFactorConfig.service,
|
|
180
|
+
// data: twoFaResult,
|
|
181
|
+
// },
|
|
182
|
+
// { httpOnly: true },
|
|
183
|
+
// );
|
|
184
|
+
// }
|
|
185
|
+
// // give chance to execute 2fa eg. send sms or email
|
|
186
|
+
// await this.TwoFactorAuthProvider.execute(user);
|
|
187
|
+
// // return session to identify user
|
|
188
|
+
// // and only info that twoFactor auth is requested
|
|
189
|
+
// return new CookieResponse(
|
|
190
|
+
// 'ssid',
|
|
191
|
+
// session.SessionId,
|
|
192
|
+
// this.SessionExpirationTime,
|
|
193
|
+
// true,
|
|
194
|
+
// {
|
|
195
|
+
// toFactorAuth: true,
|
|
196
|
+
// },
|
|
197
|
+
// { httpOnly: true },
|
|
198
|
+
// );
|
|
199
|
+
// }
|
|
200
|
+
// }
|
|
201
|
+
// // 2fa is not enabled, so we found user, it means it is logged
|
|
202
|
+
// session.Data.set('Authorized', true);
|
|
203
|
+
// await this.SessionProvider.save(session);
|
|
204
|
+
// await this.Queue.emit(new UserLoginSuccess(user.Uuid));
|
|
205
|
+
// user.LastLoginAt = DateTime.now();
|
|
206
|
+
// await user.update();
|
|
207
|
+
// // BEWARE: httpOnly coockie, only accesible via http method in browser
|
|
208
|
+
// // return coockie session id with additional user data
|
|
209
|
+
// return new CookieResponse('ssid', session.SessionId, this.SessionExpirationTime, true, dUser, { httpOnly: true });
|
|
210
|
+
// }
|
|
211
|
+
// }
|
|
212
|
+
//# sourceMappingURL=AuthController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthController.js","sourceRoot":"","sources":["../../../src/controllers/AuthController.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FederatedLoginController.d.ts","sourceRoot":"","sources":["../../../src/controllers/FederatedLoginController.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// import { InvalidOperation } from '@spinajs/exceptions';
|
|
2
|
+
// import { BaseController, BasePath, Post, Body, Ok, Get, Unauthorized, Header, Policy } from '@spinajs/http';
|
|
3
|
+
// import { FederatedAuthProvider } from '@spinajs/rbac';
|
|
4
|
+
// import { Autoinject } from '@spinajs/di';
|
|
5
|
+
// import _ from 'lodash';
|
|
6
|
+
// import { AllowFederatedLoginPolicy } from '../policies/AllowFederatedLoginPolicy.js';
|
|
7
|
+
export {};
|
|
8
|
+
// @BasePath('user/auth')
|
|
9
|
+
// export class LoginController extends BaseController {
|
|
10
|
+
// @Autoinject(FederatedAuthProvider)
|
|
11
|
+
// protected FederatedLoginStrategies: FederatedAuthProvider<any>[];
|
|
12
|
+
// @Post('federated-login')
|
|
13
|
+
// @Policy(AllowFederatedLoginPolicy)
|
|
14
|
+
// public async loginFederated(@Body() credentials: unknown, @Header('Host') caller: string) {
|
|
15
|
+
// const strategy = this.FederatedLoginStrategies.find((x) => x.callerCheck(caller));
|
|
16
|
+
// if (!strategy) {
|
|
17
|
+
// throw new InvalidOperation(`No auth stragegy registered for caller ${caller}`);
|
|
18
|
+
// }
|
|
19
|
+
// const result = await strategy.authenticate(credentials);
|
|
20
|
+
// if (!result.Error) {
|
|
21
|
+
// // proceed with standard authentication
|
|
22
|
+
// return await this.authenticate(result.User);
|
|
23
|
+
// }
|
|
24
|
+
// return new Unauthorized(result.Error);
|
|
25
|
+
// }
|
|
26
|
+
// /**
|
|
27
|
+
// *
|
|
28
|
+
// * Api call for listing avaible federated login strategies
|
|
29
|
+
// *
|
|
30
|
+
// * @returns response with avaible login strategies
|
|
31
|
+
// */
|
|
32
|
+
// @Get()
|
|
33
|
+
// @Policy(NotLoggedPolicy)
|
|
34
|
+
// @Policy(AllowFederatedLoginPolicy)
|
|
35
|
+
// public async federatedLoginList() {
|
|
36
|
+
// return new Ok(this.FederatedLoginStrategies.map((x) => x.Name));
|
|
37
|
+
// }
|
|
38
|
+
// }
|
|
39
|
+
//# sourceMappingURL=FederatedLoginController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FederatedLoginController.js","sourceRoot":"","sources":["../../../src/controllers/FederatedLoginController.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,+GAA+G;AAC/G,yDAAyD;AACzD,4CAA4C;AAC5C,0BAA0B;AAC1B,wFAAwF;;AAExF,yBAAyB;AACzB,wDAAwD;AACxD,uCAAuC;AACvC,sEAAsE;AAEtE,6BAA6B;AAC7B,uCAAuC;AACvC,gGAAgG;AAChG,yFAAyF;AACzF,uBAAuB;AACvB,wFAAwF;AACxF,QAAQ;AAER,+DAA+D;AAC/D,2BAA2B;AAC3B,gDAAgD;AAChD,qDAAqD;AACrD,QAAQ;AAER,6CAA6C;AAC7C,MAAM;AAEN,QAAQ;AACR,OAAO;AACP,+DAA+D;AAC/D,OAAO;AACP,uDAAuD;AACvD,QAAQ;AACR,WAAW;AACX,6BAA6B;AAC7B,uCAAuC;AACvC,wCAAwC;AACxC,uEAAuE;AACvE,MAAM;AACN,IAAI"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { UserLoginDto } from '../dto/userLogin-dto.js';
|
|
2
|
+
import { BaseController, Ok, Unauthorized } from '@spinajs/http';
|
|
3
|
+
import { AuthProvider, SessionProvider } from '@spinajs/rbac';
|
|
4
|
+
import { Configuration } from '@spinajs/configuration';
|
|
5
|
+
export declare class LoginController extends BaseController {
|
|
6
|
+
protected Configuration: Configuration;
|
|
7
|
+
protected AuthProvider: AuthProvider;
|
|
8
|
+
protected SessionProvider: SessionProvider;
|
|
9
|
+
protected SessionExpirationTime: number;
|
|
10
|
+
login(credentials: UserLoginDto): Promise<Ok | Unauthorized>;
|
|
11
|
+
logout(ssid: string): Promise<Ok>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=LoginController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoginController.d.ts","sourceRoot":"","sources":["../../../src/controllers/LoginController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAwB,EAAE,EAAe,YAAY,EAAU,MAAM,eAAe,CAAC;AAC5G,OAAO,EAAE,YAAY,EAAE,eAAe,EAAqB,MAAM,eAAe,CAAC;AAEjF,OAAO,EAA6B,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAIlF,qBACa,eAAgB,SAAQ,cAAc;IAEjD,SAAS,CAAC,aAAa,EAAE,aAAa,CAAC;IAGvC,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC;IAGrC,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC;IAK3C,SAAS,CAAC,qBAAqB,EAAE,MAAM,CAAC;IAI3B,KAAK,CAAS,WAAW,EAAE,YAAY;IAkJvC,MAAM,CAAW,IAAI,EAAE,MAAM;CA0G3C"}
|