@spinajs/rbac-http-user 2.0.372 → 2.0.374
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/Default2FaToken.d.ts +20 -0
- package/lib/cjs/2fa/Default2FaToken.d.ts.map +1 -0
- package/lib/cjs/2fa/Default2FaToken.js +122 -0
- package/lib/cjs/2fa/Default2FaToken.js.map +1 -0
- package/lib/cjs/actions/2fa.d.ts +11 -0
- package/lib/cjs/actions/2fa.d.ts.map +1 -0
- package/lib/cjs/actions/2fa.js +34 -0
- package/lib/cjs/actions/2fa.js.map +1 -0
- package/lib/cjs/config/rbac-http.d.ts +13 -0
- package/lib/cjs/config/rbac-http.d.ts.map +1 -1
- package/lib/cjs/config/rbac-http.js +14 -1
- package/lib/cjs/config/rbac-http.js.map +1 -1
- package/lib/cjs/controllers/LoginController.d.ts +1 -0
- package/lib/cjs/controllers/LoginController.d.ts.map +1 -1
- package/lib/cjs/controllers/LoginController.js +39 -108
- package/lib/cjs/controllers/LoginController.js.map +1 -1
- package/lib/cjs/controllers/TwoFactorAuthController.d.ts +9 -0
- package/lib/cjs/controllers/TwoFactorAuthController.d.ts.map +1 -1
- package/lib/cjs/controllers/TwoFactorAuthController.js +81 -56
- package/lib/cjs/controllers/TwoFactorAuthController.js.map +1 -1
- package/lib/cjs/policies/2FaPolicy.d.ts +2 -2
- package/lib/cjs/policies/2FaPolicy.d.ts.map +1 -1
- package/lib/cjs/policies/2FaPolicy.js +8 -1
- package/lib/cjs/policies/2FaPolicy.js.map +1 -1
- package/lib/mjs/2fa/Default2FaToken.d.ts +20 -0
- package/lib/mjs/2fa/Default2FaToken.d.ts.map +1 -0
- package/lib/mjs/2fa/Default2FaToken.js +96 -0
- package/lib/mjs/2fa/Default2FaToken.js.map +1 -0
- package/lib/mjs/actions/2fa.d.ts +11 -0
- package/lib/mjs/actions/2fa.d.ts.map +1 -0
- package/lib/mjs/actions/2fa.js +30 -0
- package/lib/mjs/actions/2fa.js.map +1 -0
- package/lib/mjs/config/rbac-http.d.ts +13 -0
- package/lib/mjs/config/rbac-http.d.ts.map +1 -1
- package/lib/mjs/config/rbac-http.js +14 -1
- package/lib/mjs/config/rbac-http.js.map +1 -1
- package/lib/mjs/controllers/LoginController.d.ts +1 -0
- package/lib/mjs/controllers/LoginController.d.ts.map +1 -1
- package/lib/mjs/controllers/LoginController.js +39 -108
- package/lib/mjs/controllers/LoginController.js.map +1 -1
- package/lib/mjs/controllers/TwoFactorAuthController.d.ts +9 -1
- package/lib/mjs/controllers/TwoFactorAuthController.d.ts.map +1 -1
- package/lib/mjs/controllers/TwoFactorAuthController.js +78 -57
- package/lib/mjs/controllers/TwoFactorAuthController.js.map +1 -1
- package/lib/mjs/policies/2FaPolicy.d.ts +2 -2
- package/lib/mjs/policies/2FaPolicy.d.ts.map +1 -1
- package/lib/mjs/policies/2FaPolicy.js +8 -1
- package/lib/mjs/policies/2FaPolicy.js.map +1 -1
- package/lib/tsconfig.cjs.tsbuildinfo +1 -1
- package/lib/tsconfig.mjs.tsbuildinfo +1 -1
- package/package.json +12 -11
- package/lib/cjs/2fa/SpeakEasy2FaToken.d.ts +0 -1
- package/lib/cjs/2fa/SpeakEasy2FaToken.d.ts.map +0 -1
- package/lib/cjs/2fa/SpeakEasy2FaToken.js +0 -48
- package/lib/cjs/2fa/SpeakEasy2FaToken.js.map +0 -1
- package/lib/mjs/2fa/SpeakEasy2FaToken.d.ts +0 -2
- package/lib/mjs/2fa/SpeakEasy2FaToken.d.ts.map +0 -1
- package/lib/mjs/2fa/SpeakEasy2FaToken.js +0 -49
- package/lib/mjs/2fa/SpeakEasy2FaToken.js.map +0 -1
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { User } from '@spinajs/rbac';
|
|
2
|
+
import { Log } from '@spinajs/log';
|
|
3
|
+
import { TwoFactorAuthProvider } from "@spinajs/rbac-http";
|
|
4
|
+
export declare enum TWO_FA_METATADATA_KEYS {
|
|
5
|
+
TOKEN = "2fa:token",
|
|
6
|
+
ENABLED = "2fa:enabled"
|
|
7
|
+
}
|
|
8
|
+
export declare class Default2FaToken extends TwoFactorAuthProvider {
|
|
9
|
+
protected Config: any;
|
|
10
|
+
protected Log: Log;
|
|
11
|
+
constructor();
|
|
12
|
+
private _getOTP;
|
|
13
|
+
execute(_: User): Promise<void>;
|
|
14
|
+
verifyToken(token: string, user: User): Promise<boolean>;
|
|
15
|
+
initialize(user: User): Promise<any>;
|
|
16
|
+
getOtpAuthUrl(user: User): Promise<string | null>;
|
|
17
|
+
isEnabled(user: User): Promise<boolean>;
|
|
18
|
+
isInitialized(user: User): Promise<boolean>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=Default2FaToken.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Default2FaToken.d.ts","sourceRoot":"","sources":["../../../src/2fa/Default2FaToken.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,OAAO,EAAE,GAAG,EAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAG3D,oBAAY,sBAAsB;IAC9B,KAAK,cAAc;IACnB,OAAO,gBAAgB;CAC1B;AAED,qBACa,eAAgB,SAAQ,qBAAqB;IAEtD,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC;IAGtB,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC;;IAMnB,OAAO,CAAC,OAAO;IAYR,OAAO,CAAC,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAMzB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBxD,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC;IAiBpC,aAAa,CAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAYlD,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;IAKvC,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;CAI3D"}
|
|
@@ -0,0 +1,122 @@
|
|
|
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
|
+
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;
|
|
22
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
|
+
};
|
|
24
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
25
|
+
if (mod && mod.__esModule) return mod;
|
|
26
|
+
var result = {};
|
|
27
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
28
|
+
__setModuleDefault(result, mod);
|
|
29
|
+
return result;
|
|
30
|
+
};
|
|
31
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
32
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
33
|
+
};
|
|
34
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
+
exports.Default2FaToken = exports.TWO_FA_METATADATA_KEYS = void 0;
|
|
36
|
+
const di_1 = require("@spinajs/di");
|
|
37
|
+
const configuration_1 = require("@spinajs/configuration");
|
|
38
|
+
const log_1 = require("@spinajs/log");
|
|
39
|
+
const rbac_http_1 = require("@spinajs/rbac-http");
|
|
40
|
+
const OTPAuth = __importStar(require("otpauth"));
|
|
41
|
+
var TWO_FA_METATADATA_KEYS;
|
|
42
|
+
(function (TWO_FA_METATADATA_KEYS) {
|
|
43
|
+
TWO_FA_METATADATA_KEYS["TOKEN"] = "2fa:token";
|
|
44
|
+
TWO_FA_METATADATA_KEYS["ENABLED"] = "2fa:enabled";
|
|
45
|
+
})(TWO_FA_METATADATA_KEYS || (exports.TWO_FA_METATADATA_KEYS = TWO_FA_METATADATA_KEYS = {}));
|
|
46
|
+
let Default2FaToken = class Default2FaToken extends rbac_http_1.TwoFactorAuthProvider {
|
|
47
|
+
constructor() {
|
|
48
|
+
super();
|
|
49
|
+
}
|
|
50
|
+
_getOTP(user, secret) {
|
|
51
|
+
return new OTPAuth.TOTP({
|
|
52
|
+
issuer: this.Config.issuer,
|
|
53
|
+
label: user.Email,
|
|
54
|
+
algorithm: this.Config.algorithm,
|
|
55
|
+
digits: this.Config.digits,
|
|
56
|
+
period: this.Config.period,
|
|
57
|
+
secret: OTPAuth.Secret.fromBase32(secret),
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
execute(_) {
|
|
61
|
+
// empty, speakasy works offline eg. google authenticator
|
|
62
|
+
// we dont send any email or sms
|
|
63
|
+
return Promise.resolve();
|
|
64
|
+
}
|
|
65
|
+
async verifyToken(token, user) {
|
|
66
|
+
const twoFaToken = user.Metadata[TWO_FA_METATADATA_KEYS.TOKEN];
|
|
67
|
+
if (!twoFaToken) {
|
|
68
|
+
this.Log.trace(`Cannot verify 2fa token, no 2fa token for user ${user.Id}`);
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
const totp = this._getOTP(user, twoFaToken);
|
|
72
|
+
const verified = totp.validate({
|
|
73
|
+
token: token,
|
|
74
|
+
window: this.Config.window,
|
|
75
|
+
});
|
|
76
|
+
return verified == null;
|
|
77
|
+
}
|
|
78
|
+
async initialize(user) {
|
|
79
|
+
const secret = new OTPAuth.Secret({ size: this.Config.secretSize });
|
|
80
|
+
const totp = this._getOTP(user, secret.base32);
|
|
81
|
+
user.Metadata[TWO_FA_METATADATA_KEYS.TOKEN] = secret.base32;
|
|
82
|
+
await user.Metadata.sync();
|
|
83
|
+
this.Log.trace(`2fa token initialized for user ${user.Id}`, {
|
|
84
|
+
userId: user.Id,
|
|
85
|
+
});
|
|
86
|
+
/**
|
|
87
|
+
* returns: `otpauth://totp/ACME:Alice?issuer=ACME&secret=US3WHSG7X5KAPV27VANWKQHF3SH3HULL&algorithm=SHA1&digits=6&period=30`
|
|
88
|
+
*/
|
|
89
|
+
return totp.toString();
|
|
90
|
+
}
|
|
91
|
+
async getOtpAuthUrl(user) {
|
|
92
|
+
const token = user.Metadata[TWO_FA_METATADATA_KEYS.TOKEN];
|
|
93
|
+
if (!token) {
|
|
94
|
+
this.Log.trace(`Cannot get 2fa auth url, no 2fa token for user ${user.Id}`);
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
const totp = this._getOTP(user, token);
|
|
98
|
+
return totp.toString();
|
|
99
|
+
}
|
|
100
|
+
async isEnabled(user) {
|
|
101
|
+
const val = await user.Metadata[TWO_FA_METATADATA_KEYS.ENABLED];
|
|
102
|
+
return val;
|
|
103
|
+
}
|
|
104
|
+
async isInitialized(user) {
|
|
105
|
+
const token = user.Metadata[TWO_FA_METATADATA_KEYS.TOKEN];
|
|
106
|
+
return token !== null && token !== undefined && token !== '';
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
exports.Default2FaToken = Default2FaToken;
|
|
110
|
+
__decorate([
|
|
111
|
+
(0, configuration_1.Config)('rbac.otpauth'),
|
|
112
|
+
__metadata("design:type", Object)
|
|
113
|
+
], Default2FaToken.prototype, "Config", void 0);
|
|
114
|
+
__decorate([
|
|
115
|
+
(0, log_1.Logger)('2fa-token'),
|
|
116
|
+
__metadata("design:type", log_1.Log)
|
|
117
|
+
], Default2FaToken.prototype, "Log", void 0);
|
|
118
|
+
exports.Default2FaToken = Default2FaToken = __decorate([
|
|
119
|
+
(0, di_1.Injectable)(rbac_http_1.TwoFactorAuthProvider),
|
|
120
|
+
__metadata("design:paramtypes", [])
|
|
121
|
+
], Default2FaToken);
|
|
122
|
+
//# sourceMappingURL=Default2FaToken.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Default2FaToken.js","sourceRoot":"","sources":["../../../src/2fa/Default2FaToken.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { User } from '@spinajs/rbac';
|
|
2
|
+
/**
|
|
3
|
+
*
|
|
4
|
+
* Verify 2fa token for user
|
|
5
|
+
*
|
|
6
|
+
* @param user
|
|
7
|
+
* @param token
|
|
8
|
+
* @returns
|
|
9
|
+
*/
|
|
10
|
+
export declare function auth2Fa(identifier: number | string | User, token: string): Promise<unknown>;
|
|
11
|
+
//# sourceMappingURL=2fa.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"2fa.d.ts","sourceRoot":"","sources":["../../../src/actions/2fa.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAwC,MAAM,eAAe,CAAC;AAU3E;;;;;;;GAOG;AACH,wBAAsB,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,oBAwB9E"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.auth2Fa = void 0;
|
|
4
|
+
const rbac_1 = require("@spinajs/rbac");
|
|
5
|
+
const configuration_1 = require("@spinajs/configuration");
|
|
6
|
+
const luxon_1 = require("luxon");
|
|
7
|
+
const util_1 = require("@spinajs/util");
|
|
8
|
+
const User2FaPassed_js_1 = require("../events/User2FaPassed.js");
|
|
9
|
+
const rbac_http_1 = require("@spinajs/rbac-http");
|
|
10
|
+
const rbac_2 = require("@spinajs/rbac");
|
|
11
|
+
/**
|
|
12
|
+
*
|
|
13
|
+
* Verify 2fa token for user
|
|
14
|
+
*
|
|
15
|
+
* @param user
|
|
16
|
+
* @param token
|
|
17
|
+
* @returns
|
|
18
|
+
*/
|
|
19
|
+
async function auth2Fa(identifier, token) {
|
|
20
|
+
token = (0, util_1._check_arg)((0, util_1._trim)(), util_1._non_empty)(token, 'token');
|
|
21
|
+
return (0, util_1._chain)((0, rbac_1._user_unsafe)(identifier), (0, util_1._catch)((u) => {
|
|
22
|
+
return (0, util_1._chain)((0, configuration_1._service)('rbac.twoFactorAuth', rbac_http_1.TwoFactorAuthProvider), async (twoFa) => twoFa.verifyToken(token, u), (0, rbac_1._user_update)({ LastLoginAt: luxon_1.DateTime.now() }), (0, rbac_1._user_ev)(User2FaPassed_js_1.User2FaPassed));
|
|
23
|
+
}, (err, u) => {
|
|
24
|
+
return (0, util_1._chain)(() => u,
|
|
25
|
+
// send event of failed login
|
|
26
|
+
(0, rbac_1._user_ev)(rbac_2.UserLoginFailed, err),
|
|
27
|
+
// rethrow error for caller
|
|
28
|
+
() => {
|
|
29
|
+
throw err;
|
|
30
|
+
});
|
|
31
|
+
}));
|
|
32
|
+
}
|
|
33
|
+
exports.auth2Fa = auth2Fa;
|
|
34
|
+
//# sourceMappingURL=2fa.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"2fa.js","sourceRoot":"","sources":["../../../src/actions/2fa.ts"],"names":[],"mappings":";;;AAAA,wCAA2E;AAE3E,0DAAkD;AAClD,iCAAiC;AACjC,wCAAqG;AACrG,iEAA2D;AAC3D,kDAA2D;AAC3D,wCAAgD;AAGhD;;;;;;;GAOG;AACI,KAAK,UAAU,OAAO,CAAC,UAAkC,EAAE,KAAa;IAC3E,KAAK,GAAG,IAAA,iBAAU,EAAC,IAAA,YAAK,GAAE,EAAE,iBAAU,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAExD,OAAO,IAAA,aAAM,EACT,IAAA,mBAAY,EAAC,UAAU,CAAC,EACxB,IAAA,aAAM,EACF,CAAC,CAAO,EAAE,EAAE;QACR,OAAO,IAAA,aAAM,EAAC,IAAA,wBAAQ,EAAC,oBAAoB,EAAE,iCAAqB,CAAC,EAAE,KAAK,EAAE,KAA4B,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,IAAA,mBAAY,EAAC,EAAE,WAAW,EAAE,gBAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,IAAA,eAAQ,EAAC,gCAAa,CAAC,CAAC,CAAC;IACtN,CAAC,EACD,CAAC,GAAG,EAAE,CAAO,EAAE,EAAE;QACb,OAAO,IAAA,aAAM,EACT,GAAG,EAAE,CAAC,CAAC;QAEP,6BAA6B;QAC7B,IAAA,eAAQ,EAAC,sBAAe,EAAE,GAAG,CAAC;QAE9B,2BAA2B;QAC3B,GAAG,EAAE;YACD,MAAM,GAAG,CAAC;QACd,CAAC,CACJ,CAAC;IACN,CAAC,CACJ,CACJ,CAAC;AACN,CAAC;AAxBD,0BAwBC"}
|
|
@@ -7,6 +7,19 @@ declare const rbacHttp: {
|
|
|
7
7
|
};
|
|
8
8
|
};
|
|
9
9
|
rbac: {
|
|
10
|
+
otpauth: {
|
|
11
|
+
/**
|
|
12
|
+
* change this to your app name, it will be used as issuer in otpauth token
|
|
13
|
+
*/
|
|
14
|
+
issuer: string;
|
|
15
|
+
/**
|
|
16
|
+
* recommended defaults for rest
|
|
17
|
+
*/
|
|
18
|
+
algorithm: string;
|
|
19
|
+
digits: number;
|
|
20
|
+
period: number;
|
|
21
|
+
window: number;
|
|
22
|
+
};
|
|
10
23
|
twoFactorAuth: {
|
|
11
24
|
enabled: boolean;
|
|
12
25
|
service: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rbac-http.d.ts","sourceRoot":"","sources":["../../../src/config/rbac-http.ts"],"names":[],"mappings":"AAQA,QAAA,MAAM,QAAQ
|
|
1
|
+
{"version":3,"file":"rbac-http.d.ts","sourceRoot":"","sources":["../../../src/config/rbac-http.ts"],"names":[],"mappings":"AAQA,QAAA,MAAM,QAAQ;;;;;;;;;;YAUR;;eAEG;;YAGH;;eAEG;;;;;;;;;;;;;;;;;;;;;;YAwBH;;eAEG;;;QAGL;;WAEG;;;;CAQN,CAAC;AAEF,eAAe,QAAQ,CAAC"}
|
|
@@ -14,9 +14,22 @@ const rbacHttp = {
|
|
|
14
14
|
},
|
|
15
15
|
},
|
|
16
16
|
rbac: {
|
|
17
|
+
otpauth: {
|
|
18
|
+
/**
|
|
19
|
+
* change this to your app name, it will be used as issuer in otpauth token
|
|
20
|
+
*/
|
|
21
|
+
issuer: 'Spinajs',
|
|
22
|
+
/**
|
|
23
|
+
* recommended defaults for rest
|
|
24
|
+
*/
|
|
25
|
+
algorithm: 'SHA1',
|
|
26
|
+
digits: 6,
|
|
27
|
+
period: 30,
|
|
28
|
+
window: 1,
|
|
29
|
+
},
|
|
17
30
|
twoFactorAuth: {
|
|
18
31
|
enabled: true,
|
|
19
|
-
service: '
|
|
32
|
+
service: 'Default2FaToken',
|
|
20
33
|
},
|
|
21
34
|
fingerprint: {
|
|
22
35
|
enabled: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rbac-http.js","sourceRoot":"","sources":["../../../src/config/rbac-http.ts"],"names":[],"mappings":";;AAAA,+BAAgD;AAEhD,SAAS,GAAG,CAAC,IAAY;IACvB,MAAM,UAAU,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC;IACjD,OAAO,IAAA,cAAO,EAAC,IAAA,gBAAS,EAAC,IAAA,WAAI,EAAC,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,
|
|
1
|
+
{"version":3,"file":"rbac-http.js","sourceRoot":"","sources":["../../../src/config/rbac-http.ts"],"names":[],"mappings":";;AAAA,+BAAgD;AAEhD,SAAS,GAAG,CAAC,IAAY;IACvB,MAAM,UAAU,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC;IACjD,OAAO,IAAA,cAAO,EAAC,IAAA,gBAAS,EAAC,IAAA,WAAI,EAAC,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,OAAO,EAAE;YACP;;eAEG;YACH,MAAM,EAAE,SAAS;YAEjB;;eAEG;YACH,SAAS,EAAE,MAAM;YACjB,MAAM,EAAE,CAAC;YACT,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,CAAC;SACV;QACD,aAAa,EAAE;YACb,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,iBAAiB;SAC3B;QACD,WAAW,EAAE;YACX,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,CAAC;YACb,OAAO,EAAE,eAAe;SACzB;QACD,OAAO,EAAC;YACN,MAAM,EAAE;gBACN,QAAQ,EAAE,KAAK;aAChB;SACF;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,kBAAe,QAAQ,CAAC"}
|
|
@@ -8,6 +8,7 @@ export declare class LoginController extends BaseController {
|
|
|
8
8
|
protected AuthProvider: AuthProvider;
|
|
9
9
|
protected SessionProvider: SessionProvider;
|
|
10
10
|
protected SessionExpirationTime: number;
|
|
11
|
+
protected TwoFactorAuthEnabled: boolean;
|
|
11
12
|
protected SessionCookieConfig: any;
|
|
12
13
|
protected AC: AccessControl;
|
|
13
14
|
login(credentials: UserLoginDto): Promise<Ok | Unauthorized>;
|
|
@@ -1 +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,aAAa,EAAiB,MAAM,eAAe,CAAC;AAE/G,OAAO,EAA6B,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGlF,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,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;
|
|
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,aAAa,EAAiB,MAAM,eAAe,CAAC;AAE/G,OAAO,EAA6B,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGlF,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,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;IAKxC,SAAS,CAAC,oBAAoB,EAAE,OAAO,CAAC;IAKxC,SAAS,CAAC,mBAAmB,EAAE,GAAG,CAAC;IAGnC,SAAS,CAAC,EAAE,EAAE,aAAa,CAAC;IAIf,KAAK,CAAS,WAAW,EAAE,YAAY;IA0EvC,MAAM,CAAW,IAAI,EAAE,MAAM;IA4B7B,MAAM,CAAiB,IAAI,EAAE,IAAI;CA0F/C"}
|
|
@@ -25,38 +25,51 @@ let LoginController = class LoginController extends http_1.BaseController {
|
|
|
25
25
|
try {
|
|
26
26
|
const user = await (0, rbac_1.auth)(credentials.Email, credentials.Password);
|
|
27
27
|
const session = new rbac_1.UserSession();
|
|
28
|
+
const coockies = [
|
|
29
|
+
{
|
|
30
|
+
Name: 'ssid',
|
|
31
|
+
Value: session.SessionId,
|
|
32
|
+
Options: {
|
|
33
|
+
signed: true,
|
|
34
|
+
httpOnly: true,
|
|
35
|
+
// set expiration time in ms
|
|
36
|
+
maxAge: this.SessionExpirationTime * 1000,
|
|
37
|
+
// any optopnal cookie options
|
|
38
|
+
// or override default ones
|
|
39
|
+
...this.SessionCookieConfig
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
];
|
|
28
43
|
session.Data.set('User', user.Uuid);
|
|
29
|
-
// TEMP
|
|
30
|
-
session.Data.set('Authorized', true);
|
|
31
44
|
// set expiration time ( default val in config )
|
|
32
45
|
session.extend();
|
|
33
46
|
await this.SessionProvider.save(session);
|
|
34
|
-
this.
|
|
47
|
+
if (this.TwoFactorAuthEnabled) {
|
|
48
|
+
this._log.trace('User logged in, 2fa required', {
|
|
49
|
+
Uuid: user.Uuid
|
|
50
|
+
});
|
|
51
|
+
session.Data.set('Authorized', false);
|
|
52
|
+
session.Data.set('TwoFactorAuth', true);
|
|
53
|
+
return new http_1.Ok({
|
|
54
|
+
TwoFactorAuthRequired: true,
|
|
55
|
+
Authorized: false
|
|
56
|
+
}, {
|
|
57
|
+
Coockies: coockies,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
this._log.trace('User logged in, no 2fa required', {
|
|
35
61
|
Uuid: user.Uuid
|
|
36
62
|
});
|
|
37
63
|
const grants = this.AC.getGrants();
|
|
38
64
|
const userGrants = user.Role.map(r => (0, rbac_1._unwindGrants)(r, grants));
|
|
39
65
|
const combinedGrants = Object.assign({}, ...userGrants);
|
|
40
66
|
return new http_1.Ok({
|
|
41
|
-
...user.
|
|
67
|
+
...user.dehydrateWithRelations({
|
|
68
|
+
dateTimeFormat: "iso"
|
|
69
|
+
}),
|
|
42
70
|
Grants: combinedGrants,
|
|
43
|
-
Metadata: user.Metadata.map(m => m.dehydrate())
|
|
44
71
|
}, {
|
|
45
|
-
Coockies:
|
|
46
|
-
{
|
|
47
|
-
Name: 'ssid',
|
|
48
|
-
Value: session.SessionId,
|
|
49
|
-
Options: {
|
|
50
|
-
signed: true,
|
|
51
|
-
httpOnly: true,
|
|
52
|
-
// set expiration time in ms
|
|
53
|
-
maxAge: this.SessionExpirationTime * 1000,
|
|
54
|
-
// any optopnal cookie options
|
|
55
|
-
// or override default ones
|
|
56
|
-
...this.SessionCookieConfig
|
|
57
|
-
},
|
|
58
|
-
},
|
|
59
|
-
],
|
|
72
|
+
Coockies: coockies
|
|
60
73
|
});
|
|
61
74
|
}
|
|
62
75
|
catch (err) {
|
|
@@ -69,94 +82,6 @@ let LoginController = class LoginController extends http_1.BaseController {
|
|
|
69
82
|
});
|
|
70
83
|
}
|
|
71
84
|
}
|
|
72
|
-
// @Post('new-password')
|
|
73
|
-
// @Policy(NotLoggedPolicy)
|
|
74
|
-
// public async setNewPassword(@Query() token: string, @Body() pwd: RestorePasswordDto) {
|
|
75
|
-
// const user = await User.query()
|
|
76
|
-
// .innerJoin(UserMetadata, function () {
|
|
77
|
-
// this.where({
|
|
78
|
-
// Key: 'password:reset:token',
|
|
79
|
-
// Value: token,
|
|
80
|
-
// });
|
|
81
|
-
// })
|
|
82
|
-
// .populate('Metadata')
|
|
83
|
-
// .first();
|
|
84
|
-
// if (!user) {
|
|
85
|
-
// return new NotFound({
|
|
86
|
-
// error: {
|
|
87
|
-
// code: 'ERR_USER_NOT_FOUND',
|
|
88
|
-
// message: 'No user found for this reset token',
|
|
89
|
-
// },
|
|
90
|
-
// });
|
|
91
|
-
// }
|
|
92
|
-
// const val = (await user.Metadata['password:reset:start']) as DateTime;
|
|
93
|
-
// const now = DateTime.now().plus({ seconds: -this.PasswordResetTokenTTL });
|
|
94
|
-
// if (val < now) {
|
|
95
|
-
// return new BadRequest({
|
|
96
|
-
// error: {
|
|
97
|
-
// code: 'ERR_RESET_TOKEN_EXPIRED',
|
|
98
|
-
// message: 'Password reset token expired',
|
|
99
|
-
// },
|
|
100
|
-
// });
|
|
101
|
-
// }
|
|
102
|
-
// if (!this.PasswordValidationService.check(pwd.Password)) {
|
|
103
|
-
// return new BadRequest({
|
|
104
|
-
// error: {
|
|
105
|
-
// code: 'ERR_PASSWORD_RULE',
|
|
106
|
-
// message: 'Invalid password, does not match password rules',
|
|
107
|
-
// },
|
|
108
|
-
// });
|
|
109
|
-
// }
|
|
110
|
-
// if (pwd.Password !== pwd.ConfirmPassword) {
|
|
111
|
-
// return new BadRequest({
|
|
112
|
-
// error: {
|
|
113
|
-
// code: 'ERR_PASSWORD_NOT_MATCH',
|
|
114
|
-
// message: 'Password and repeat password does not match',
|
|
115
|
-
// },
|
|
116
|
-
// });
|
|
117
|
-
// }
|
|
118
|
-
// const hashedPassword = await this.PasswordProvider.hash(pwd.Password);
|
|
119
|
-
// user.Password = hashedPassword;
|
|
120
|
-
// await user.update();
|
|
121
|
-
// /**
|
|
122
|
-
// * Delete all reset related meta for user
|
|
123
|
-
// */
|
|
124
|
-
// await user.Metadata.delete(/password:reset.*/);
|
|
125
|
-
// // add to action list
|
|
126
|
-
// await user.Actions.add(
|
|
127
|
-
// new UserAction({
|
|
128
|
-
// Persistent: true,
|
|
129
|
-
// Action: 'password:reset',
|
|
130
|
-
// }),
|
|
131
|
-
// );
|
|
132
|
-
// // inform others
|
|
133
|
-
// await this.Queue.emit(new UserPasswordChanged(user.Uuid));
|
|
134
|
-
// }
|
|
135
|
-
// @Post('forgot-password')
|
|
136
|
-
// @Policy(NotLoggedPolicy)
|
|
137
|
-
// public async forgotPassword(@Body() login: UserLoginDto) {
|
|
138
|
-
// const user = await this.AuthProvider.getByEmail(login.Email);
|
|
139
|
-
// if (!user.IsActive || user.IsBanned || user.DeletedAt !== null) {
|
|
140
|
-
// return new InvalidOperation('User is inactive, banned or deleted. Contact system administrator');
|
|
141
|
-
// }
|
|
142
|
-
// const token = uuidv4();
|
|
143
|
-
// // assign meta to user
|
|
144
|
-
// await (user.Metadata['password:reset'] = true);
|
|
145
|
-
// await (user.Metadata['password:reset:token'] = token);
|
|
146
|
-
// await (user.Metadata['password:reset:start'] = DateTime.now());
|
|
147
|
-
// await user.Actions.add(
|
|
148
|
-
// new UserAction({
|
|
149
|
-
// Action: 'user:password:reset',
|
|
150
|
-
// Data: DateTime.now().toISO(),
|
|
151
|
-
// Persistent: true,
|
|
152
|
-
// }),
|
|
153
|
-
// );
|
|
154
|
-
// await this.Queue.emit(new UserPasswordRestore(user.Uuid, token));
|
|
155
|
-
// return new Ok({
|
|
156
|
-
// reset_token: token,
|
|
157
|
-
// ttl: this.PasswordResetTokenTTL,
|
|
158
|
-
// });
|
|
159
|
-
// }
|
|
160
85
|
async logout(ssid) {
|
|
161
86
|
if (!ssid) {
|
|
162
87
|
return new http_1.Ok();
|
|
@@ -203,6 +128,12 @@ __decorate([
|
|
|
203
128
|
}),
|
|
204
129
|
__metadata("design:type", Number)
|
|
205
130
|
], LoginController.prototype, "SessionExpirationTime", void 0);
|
|
131
|
+
__decorate([
|
|
132
|
+
(0, configuration_1.Config)('rbac.twoFactorAuth.enabled', {
|
|
133
|
+
defaultValue: false,
|
|
134
|
+
}),
|
|
135
|
+
__metadata("design:type", Boolean)
|
|
136
|
+
], LoginController.prototype, "TwoFactorAuthEnabled", void 0);
|
|
206
137
|
__decorate([
|
|
207
138
|
(0, configuration_1.Config)('rbac.session.cookie', {}),
|
|
208
139
|
__metadata("design:type", Object)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoginController.js","sourceRoot":"","sources":["../../../src/controllers/LoginController.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,8DAAuD;AACvD,wCAA4G;AAC5G,wCAA+G;AAC/G,oCAAyC;AACzC,0DAAkF;AAElF,kDAAyF;AACzF,wCAAqC;AAE9B,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,qBAAc;
|
|
1
|
+
{"version":3,"file":"LoginController.js","sourceRoot":"","sources":["../../../src/controllers/LoginController.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1,10 @@
|
|
|
1
|
+
import { TokenDto } from './../dto/token-dto.js';
|
|
2
|
+
import { BaseController, Ok, Unauthorized } from '@spinajs/http';
|
|
3
|
+
import { ISession, SessionProvider, User as UserModel } from '@spinajs/rbac';
|
|
4
|
+
import { QueueService } from '@spinajs/queue';
|
|
5
|
+
export declare class TwoFactorAuthController extends BaseController {
|
|
6
|
+
protected Queue: QueueService;
|
|
7
|
+
protected SessionProvider: SessionProvider;
|
|
8
|
+
verifyToken(logged: UserModel, token: TokenDto, session: ISession): Promise<Ok | Unauthorized>;
|
|
9
|
+
}
|
|
1
10
|
//# sourceMappingURL=TwoFactorAuthController.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TwoFactorAuthController.d.ts","sourceRoot":"","sources":["../../../src/controllers/TwoFactorAuthController.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"TwoFactorAuthController.d.ts","sourceRoot":"","sources":["../../../src/controllers/TwoFactorAuthController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAY,EAAE,EAAQ,YAAY,EAAE,MAAM,eAAe,CAAC;AACjF,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,IAAI,IAAI,SAAS,EAAyC,MAAM,eAAe,CAAC;AAOpH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAK9C,qBAEa,uBAAwB,SAAQ,cAAc;IAEvD,SAAS,CAAC,KAAK,EAAE,YAAY,CAAC;IAG9B,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC;IAG9B,WAAW,CAAS,MAAM,EAAE,SAAS,EAAU,KAAK,EAAE,QAAQ,EAAa,OAAO,EAAE,QAAQ;CAuC5G"}
|