cnpmcore 3.10.0 → 3.11.1
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/app/common/CryptoUtil.d.ts +6 -0
- package/dist/app/common/CryptoUtil.js +37 -0
- package/dist/app/common/UserUtil.d.ts +2 -0
- package/dist/app/common/UserUtil.js +21 -2
- package/dist/app/common/enum/User.d.ts +5 -0
- package/dist/app/common/enum/User.js +8 -2
- package/dist/app/core/entity/WebauthnCredential.d.ts +19 -0
- package/dist/app/core/entity/WebauthnCredential.js +21 -0
- package/dist/app/core/service/UserService.d.ts +14 -1
- package/dist/app/core/service/UserService.js +26 -2
- package/dist/app/port/webauth/WebauthController.d.ts +18 -2
- package/dist/app/port/webauth/WebauthController.js +201 -47
- package/dist/app/repository/UserRepository.d.ts +5 -0
- package/dist/app/repository/UserRepository.js +31 -1
- package/dist/app/repository/model/WebauthnCredential.d.ts +11 -0
- package/dist/app/repository/model/WebauthnCredential.js +58 -0
- package/dist/config/config.default.js +8 -1
- package/dist/config/plugin.js +6 -2
- package/package.json +7 -2
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.decryptRSA = exports.encryptRSA = exports.genRSAKeys = void 0;
|
|
4
|
+
const crypto_1 = require("crypto");
|
|
5
|
+
// generate rsa key pair
|
|
6
|
+
function genRSAKeys() {
|
|
7
|
+
const key = (0, crypto_1.generateKeyPairSync)('rsa', {
|
|
8
|
+
modulusLength: 512,
|
|
9
|
+
});
|
|
10
|
+
const publicKey = key.publicKey.export({
|
|
11
|
+
type: 'pkcs1',
|
|
12
|
+
format: 'pem',
|
|
13
|
+
}).toString('base64');
|
|
14
|
+
const privateKey = key.privateKey.export({
|
|
15
|
+
type: 'pkcs1',
|
|
16
|
+
format: 'pem',
|
|
17
|
+
}).toString('base64');
|
|
18
|
+
return { publicKey, privateKey };
|
|
19
|
+
}
|
|
20
|
+
exports.genRSAKeys = genRSAKeys;
|
|
21
|
+
// encrypt rsa private key
|
|
22
|
+
function encryptRSA(publicKey, data) {
|
|
23
|
+
return (0, crypto_1.publicEncrypt)({
|
|
24
|
+
key: publicKey,
|
|
25
|
+
padding: crypto_1.constants.RSA_PKCS1_PADDING,
|
|
26
|
+
}, Buffer.from(data, 'utf8')).toString('base64');
|
|
27
|
+
}
|
|
28
|
+
exports.encryptRSA = encryptRSA;
|
|
29
|
+
// decrypt rsa private key
|
|
30
|
+
function decryptRSA(privateKey, data) {
|
|
31
|
+
return (0, crypto_1.privateDecrypt)({
|
|
32
|
+
key: privateKey,
|
|
33
|
+
padding: crypto_1.constants.RSA_PKCS1_PADDING,
|
|
34
|
+
}, Buffer.from(data, 'base64')).toString('utf8');
|
|
35
|
+
}
|
|
36
|
+
exports.decryptRSA = decryptRSA;
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3J5cHRvVXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2FwcC9jb21tb24vQ3J5cHRvVXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBdUY7QUFFdkYsd0JBQXdCO0FBQ3hCLFNBQWdCLFVBQVU7SUFDeEIsTUFBTSxHQUFHLEdBQUcsSUFBQSw0QkFBbUIsRUFBQyxLQUFLLEVBQUU7UUFDckMsYUFBYSxFQUFFLEdBQUc7S0FDbkIsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDckMsSUFBSSxFQUFFLE9BQU87UUFDYixNQUFNLEVBQUUsS0FBSztLQUNkLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdEIsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFDdkMsSUFBSSxFQUFFLE9BQU87UUFDYixNQUFNLEVBQUUsS0FBSztLQUNkLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdEIsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNuQyxDQUFDO0FBYkQsZ0NBYUM7QUFFRCwwQkFBMEI7QUFDMUIsU0FBZ0IsVUFBVSxDQUFDLFNBQWlCLEVBQUUsSUFBWTtJQUN4RCxPQUFPLElBQUEsc0JBQWEsRUFBQztRQUNuQixHQUFHLEVBQUUsU0FBUztRQUNkLE9BQU8sRUFBRSxrQkFBUyxDQUFDLGlCQUFpQjtLQUNyQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ25ELENBQUM7QUFMRCxnQ0FLQztBQUVELDBCQUEwQjtBQUMxQixTQUFnQixVQUFVLENBQUMsVUFBa0IsRUFBRSxJQUFZO0lBQ3pELE9BQU8sSUFBQSx1QkFBYyxFQUFDO1FBQ3BCLEdBQUcsRUFBRSxVQUFVO1FBQ2YsT0FBTyxFQUFFLGtCQUFTLENBQUMsaUJBQWlCO0tBQ3JDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbkQsQ0FBQztBQUxELGdDQUtDIn0=
|
|
@@ -3,3 +3,5 @@ export declare function checkToken(token: string, prefix: string): boolean;
|
|
|
3
3
|
export declare function integrity(plain: string): string;
|
|
4
4
|
export declare function checkIntegrity(plain: string, expectedIntegrity: string): boolean;
|
|
5
5
|
export declare function sha512(plain: string): string;
|
|
6
|
+
export declare function getUAInfo(userAgent?: string): any;
|
|
7
|
+
export declare function getBrowserTypeForWebauthn(userAgent?: string): any;
|
|
@@ -26,11 +26,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
26
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.sha512 = exports.checkIntegrity = exports.integrity = exports.checkToken = exports.randomToken = void 0;
|
|
29
|
+
exports.getBrowserTypeForWebauthn = exports.getUAInfo = exports.sha512 = exports.checkIntegrity = exports.integrity = exports.checkToken = exports.randomToken = void 0;
|
|
30
30
|
const crypto_1 = __importDefault(require("crypto"));
|
|
31
31
|
const base_x_1 = __importDefault(require("base-x"));
|
|
32
32
|
const crc32_1 = require("@node-rs/crc32");
|
|
33
33
|
const ssri = __importStar(require("ssri"));
|
|
34
|
+
const ua_parser_js_1 = __importDefault(require("ua-parser-js"));
|
|
34
35
|
const base62 = (0, base_x_1.default)('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');
|
|
35
36
|
const crc32Buffer = Buffer.alloc(4);
|
|
36
37
|
function randomToken(prefix) {
|
|
@@ -69,4 +70,22 @@ function sha512(plain) {
|
|
|
69
70
|
return crypto_1.default.createHash('sha512').update(plain).digest('hex');
|
|
70
71
|
}
|
|
71
72
|
exports.sha512 = sha512;
|
|
72
|
-
|
|
73
|
+
function getUAInfo(userAgent) {
|
|
74
|
+
if (!userAgent)
|
|
75
|
+
return null;
|
|
76
|
+
return new ua_parser_js_1.default(userAgent);
|
|
77
|
+
}
|
|
78
|
+
exports.getUAInfo = getUAInfo;
|
|
79
|
+
function getBrowserTypeForWebauthn(userAgent) {
|
|
80
|
+
const ua = getUAInfo(userAgent);
|
|
81
|
+
if (!ua)
|
|
82
|
+
return null;
|
|
83
|
+
const os = ua.getOS();
|
|
84
|
+
if (os.name === 'iOS' || os.name === 'Android')
|
|
85
|
+
return 'mobile';
|
|
86
|
+
if (os.name === 'Mac OS')
|
|
87
|
+
return ua.getBrowser().name;
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
exports.getBrowserTypeForWebauthn = getBrowserTypeForWebauthn;
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXNlclV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9hcHAvY29tbW9uL1VzZXJVdGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG9EQUEwQjtBQUMxQiwwQ0FBdUM7QUFDdkMsMkNBQTZCO0FBQzdCLGdFQUFvQztBQUVwQyxNQUFNLE1BQU0sR0FBRyxJQUFBLGdCQUFJLEVBQUMsZ0VBQWdFLENBQUMsQ0FBQztBQUV0RixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRXBDLFNBQWdCLFdBQVcsQ0FBQyxNQUFjO0lBQ3hDLE1BQU0sS0FBSyxHQUFHLGdCQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sR0FBRyxHQUFHLElBQUEsYUFBSyxFQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pCLFdBQVcsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0IsT0FBTyxHQUFHLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztBQUMzRSxDQUFDO0FBTEQsa0NBS0M7QUFFRCxTQUFnQixVQUFVLENBQUMsS0FBYSxFQUFFLE1BQWM7SUFDdEQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3RDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU07UUFBRSxPQUFPLEtBQUssQ0FBQztJQUN2QyxJQUFJO1FBQ0YsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLE9BQU8sUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFBLGFBQUssRUFBQyxLQUFLLENBQUMsQ0FBQztLQUNsRDtJQUFDLE1BQU07UUFDTixPQUFPLEtBQUssQ0FBQztLQUNkO0FBQ0gsQ0FBQztBQVhELGdDQVdDO0FBRUQsU0FBZ0IsU0FBUyxDQUFDLEtBQWE7SUFDckMsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRTtTQUN4QyxRQUFRLEVBQUUsQ0FBQztBQUNoQixDQUFDO0FBSEQsOEJBR0M7QUFFRCxTQUFnQixjQUFjLENBQUMsS0FBYSxFQUFFLGlCQUF5QjtJQUNyRSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLGlCQUFpQixDQUFDLENBQUM7QUFDbEQsQ0FBQztBQUZELHdDQUVDO0FBRUQsU0FBZ0IsTUFBTSxDQUFDLEtBQWE7SUFDbEMsT0FBTyxnQkFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2pFLENBQUM7QUFGRCx3QkFFQztBQUVELFNBQWdCLFNBQVMsQ0FBQyxTQUFrQjtJQUMxQyxJQUFJLENBQUMsU0FBUztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQzVCLE9BQU8sSUFBSSxzQkFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFIRCw4QkFHQztBQUVELFNBQWdCLHlCQUF5QixDQUFDLFNBQWtCO0lBQzFELE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoQyxJQUFJLENBQUMsRUFBRTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3JCLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN0QixJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssU0FBUztRQUFFLE9BQU8sUUFBUSxDQUFDO0lBQ2hFLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxRQUFRO1FBQUUsT0FBTyxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDO0lBQ3RELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQVBELDhEQU9DIn0=
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.LoginResultCode = void 0;
|
|
3
|
+
exports.WanStatusCode = exports.LoginResultCode = void 0;
|
|
4
4
|
var LoginResultCode;
|
|
5
5
|
(function (LoginResultCode) {
|
|
6
6
|
LoginResultCode[LoginResultCode["UserNotFound"] = 0] = "UserNotFound";
|
|
7
7
|
LoginResultCode[LoginResultCode["Success"] = 1] = "Success";
|
|
8
8
|
LoginResultCode[LoginResultCode["Fail"] = 2] = "Fail";
|
|
9
9
|
})(LoginResultCode = exports.LoginResultCode || (exports.LoginResultCode = {}));
|
|
10
|
-
|
|
10
|
+
var WanStatusCode;
|
|
11
|
+
(function (WanStatusCode) {
|
|
12
|
+
WanStatusCode[WanStatusCode["UserNotFound"] = 0] = "UserNotFound";
|
|
13
|
+
WanStatusCode[WanStatusCode["Unbound"] = 1] = "Unbound";
|
|
14
|
+
WanStatusCode[WanStatusCode["Bound"] = 2] = "Bound";
|
|
15
|
+
})(WanStatusCode = exports.WanStatusCode || (exports.WanStatusCode = {}));
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2FwcC9jb21tb24vZW51bS9Vc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLElBQVksZUFJWDtBQUpELFdBQVksZUFBZTtJQUN6QixxRUFBWSxDQUFBO0lBQ1osMkRBQU8sQ0FBQTtJQUNQLHFEQUFJLENBQUE7QUFDTixDQUFDLEVBSlcsZUFBZSxHQUFmLHVCQUFlLEtBQWYsdUJBQWUsUUFJMUI7QUFFRCxJQUFZLGFBSVg7QUFKRCxXQUFZLGFBQWE7SUFDdkIsaUVBQVksQ0FBQTtJQUNaLHVEQUFPLENBQUE7SUFDUCxtREFBSyxDQUFBO0FBQ1AsQ0FBQyxFQUpXLGFBQWEsR0FBYixxQkFBYSxLQUFiLHFCQUFhLFFBSXhCIn0=
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Entity, EntityData } from './Entity';
|
|
2
|
+
import { EasyData } from '../util/EntityUtil';
|
|
3
|
+
interface WebauthnCredentialData extends EntityData {
|
|
4
|
+
wancId: string;
|
|
5
|
+
userId: string;
|
|
6
|
+
credentialId: string;
|
|
7
|
+
publicKey: string;
|
|
8
|
+
browserType?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare class WebauthnCredential extends Entity {
|
|
11
|
+
wancId: string;
|
|
12
|
+
userId: string;
|
|
13
|
+
credentialId: string;
|
|
14
|
+
publicKey: string;
|
|
15
|
+
browserType?: string;
|
|
16
|
+
constructor(data: WebauthnCredentialData);
|
|
17
|
+
static create(data: EasyData<WebauthnCredentialData, 'wancId'>): WebauthnCredential;
|
|
18
|
+
}
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WebauthnCredential = void 0;
|
|
4
|
+
const Entity_1 = require("./Entity");
|
|
5
|
+
const EntityUtil_1 = require("../util/EntityUtil");
|
|
6
|
+
class WebauthnCredential extends Entity_1.Entity {
|
|
7
|
+
constructor(data) {
|
|
8
|
+
super(data);
|
|
9
|
+
this.wancId = data.wancId;
|
|
10
|
+
this.userId = data.userId;
|
|
11
|
+
this.credentialId = data.credentialId;
|
|
12
|
+
this.publicKey = data.publicKey;
|
|
13
|
+
this.browserType = data.browserType;
|
|
14
|
+
}
|
|
15
|
+
static create(data) {
|
|
16
|
+
const newData = EntityUtil_1.EntityUtil.defaultData(data, 'wancId');
|
|
17
|
+
return new WebauthnCredential(newData);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.WebauthnCredential = WebauthnCredential;
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2ViYXV0aG5DcmVkZW50aWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vYXBwL2NvcmUvZW50aXR5L1dlYmF1dGhuQ3JlZGVudGlhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxQ0FBOEM7QUFDOUMsbURBQTBEO0FBVTFELE1BQWEsa0JBQW1CLFNBQVEsZUFBTTtJQU81QyxZQUFZLElBQTRCO1FBQ3RDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNaLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMxQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDMUIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNoQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDdEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBZ0Q7UUFDNUQsTUFBTSxPQUFPLEdBQUcsdUJBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZELE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN6QyxDQUFDO0NBQ0Y7QUFwQkQsZ0RBb0JDIn0=
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { User as UserEntity } from '../entity/User';
|
|
2
2
|
import { Token as TokenEntity } from '../entity/Token';
|
|
3
|
+
import { WebauthnCredential as WebauthnCredentialEntity } from '../entity/WebauthnCredential';
|
|
3
4
|
import { LoginResultCode } from '../../common/enum/User';
|
|
4
5
|
import { AbstractService } from '../../common/AbstractService';
|
|
5
6
|
type Optional<T, K extends keyof T> = Omit<T, K> & Partial<T>;
|
|
@@ -19,11 +20,20 @@ type CreateTokenOptions = {
|
|
|
19
20
|
isAutomation?: boolean;
|
|
20
21
|
cidrWhitelist?: string[];
|
|
21
22
|
};
|
|
23
|
+
type CreateWebauthnCredentialOptions = {
|
|
24
|
+
credentialId: string;
|
|
25
|
+
publicKey: string;
|
|
26
|
+
browserType?: string;
|
|
27
|
+
};
|
|
22
28
|
export declare class UserService extends AbstractService {
|
|
23
29
|
private readonly userRepository;
|
|
24
30
|
checkPassword(user: UserEntity, password: string): boolean;
|
|
31
|
+
findUserByName(name: string): Promise<UserEntity | null>;
|
|
25
32
|
login(name: string, password: string): Promise<LoginResult>;
|
|
26
|
-
ensureTokenByUser({ name, email, password, ip }: Optional<CreateUser, 'password'>): Promise<
|
|
33
|
+
ensureTokenByUser({ name, email, password, ip }: Optional<CreateUser, 'password'>): Promise<{
|
|
34
|
+
user: UserEntity;
|
|
35
|
+
token: TokenEntity;
|
|
36
|
+
}>;
|
|
27
37
|
create(createUser: CreateUser): Promise<{
|
|
28
38
|
user: UserEntity;
|
|
29
39
|
token: TokenEntity;
|
|
@@ -34,5 +44,8 @@ export declare class UserService extends AbstractService {
|
|
|
34
44
|
}>;
|
|
35
45
|
createToken(userId: string, options?: CreateTokenOptions): Promise<TokenEntity>;
|
|
36
46
|
removeToken(userId: string, tokenKeyOrTokenValue: string): Promise<void>;
|
|
47
|
+
findWebauthnCredential(userId: string, browserType?: string): Promise<WebauthnCredentialEntity | null>;
|
|
48
|
+
createWebauthnCredential(userId: string, options: CreateWebauthnCredentialOptions): Promise<WebauthnCredentialEntity>;
|
|
49
|
+
removeWebauthnCredential(userId: string, browserType?: string): Promise<void>;
|
|
37
50
|
}
|
|
38
51
|
export {};
|
|
@@ -19,6 +19,7 @@ const egg_errors_1 = require("egg-errors");
|
|
|
19
19
|
const UserRepository_1 = require("../../repository/UserRepository");
|
|
20
20
|
const User_1 = require("../entity/User");
|
|
21
21
|
const Token_1 = require("../entity/Token");
|
|
22
|
+
const WebauthnCredential_1 = require("../entity/WebauthnCredential");
|
|
22
23
|
const User_2 = require("../../common/enum/User");
|
|
23
24
|
const UserUtil_1 = require("../../common/UserUtil");
|
|
24
25
|
const AbstractService_1 = require("../../common/AbstractService");
|
|
@@ -27,6 +28,9 @@ let UserService = class UserService extends AbstractService_1.AbstractService {
|
|
|
27
28
|
const plain = `${user.passwordSalt}${password}`;
|
|
28
29
|
return (0, UserUtil_1.checkIntegrity)(plain, user.passwordIntegrity);
|
|
29
30
|
}
|
|
31
|
+
async findUserByName(name) {
|
|
32
|
+
return await this.userRepository.findUserByName(name);
|
|
33
|
+
}
|
|
30
34
|
async login(name, password) {
|
|
31
35
|
const user = await this.userRepository.findUserByName(name);
|
|
32
36
|
if (!user)
|
|
@@ -51,7 +55,7 @@ let UserService = class UserService extends AbstractService_1.AbstractService {
|
|
|
51
55
|
user = createRes.user;
|
|
52
56
|
}
|
|
53
57
|
const token = await this.createToken(user.userId);
|
|
54
|
-
return token;
|
|
58
|
+
return { user, token };
|
|
55
59
|
}
|
|
56
60
|
async create(createUser) {
|
|
57
61
|
const passwordSalt = crypto_1.default.randomBytes(30).toString('hex');
|
|
@@ -126,6 +130,26 @@ let UserService = class UserService extends AbstractService_1.AbstractService {
|
|
|
126
130
|
}
|
|
127
131
|
await this.userRepository.removeToken(token.tokenId);
|
|
128
132
|
}
|
|
133
|
+
async findWebauthnCredential(userId, browserType) {
|
|
134
|
+
const credential = await this.userRepository.findCredentialByUserIdAndBrowserType(userId, browserType || null);
|
|
135
|
+
return credential;
|
|
136
|
+
}
|
|
137
|
+
async createWebauthnCredential(userId, options) {
|
|
138
|
+
const credentialEntity = WebauthnCredential_1.WebauthnCredential.create({
|
|
139
|
+
userId,
|
|
140
|
+
credentialId: options.credentialId,
|
|
141
|
+
publicKey: options.publicKey,
|
|
142
|
+
browserType: options.browserType,
|
|
143
|
+
});
|
|
144
|
+
await this.userRepository.saveCredential(credentialEntity);
|
|
145
|
+
return credentialEntity;
|
|
146
|
+
}
|
|
147
|
+
async removeWebauthnCredential(userId, browserType) {
|
|
148
|
+
const credential = await this.userRepository.findCredentialByUserIdAndBrowserType(userId, browserType || null);
|
|
149
|
+
if (credential) {
|
|
150
|
+
await this.userRepository.removeCredential(credential.wancId);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
129
153
|
};
|
|
130
154
|
__decorate([
|
|
131
155
|
(0, tegg_1.Inject)(),
|
|
@@ -137,4 +161,4 @@ UserService = __decorate([
|
|
|
137
161
|
})
|
|
138
162
|
], UserService);
|
|
139
163
|
exports.UserService = UserService;
|
|
140
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
164
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXNlclNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9hcHAvY29yZS9zZXJ2aWNlL1VzZXJTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixzQ0FJcUI7QUFDckIsMkNBQTJEO0FBQzNELG9FQUFpRTtBQUNqRSx5Q0FBb0Q7QUFDcEQsMkNBQXVEO0FBQ3ZELHFFQUE4RjtBQUM5RixpREFBeUQ7QUFDekQsb0RBQXVGO0FBQ3ZGLGtFQUErRDtBQWdDeEQsSUFBTSxXQUFXLEdBQWpCLE1BQU0sV0FBWSxTQUFRLGlDQUFlO0lBSTlDLGFBQWEsQ0FBQyxJQUFnQixFQUFFLFFBQWdCO1FBQzlDLE1BQU0sS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLEVBQUUsQ0FBQztRQUNoRCxPQUFPLElBQUEseUJBQWMsRUFBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBWTtRQUMvQixPQUFPLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBWSxFQUFFLFFBQWdCO1FBQ3hDLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLHNCQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDekQsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxFQUFFO1lBQ3ZDLE9BQU8sRUFBRSxJQUFJLEVBQUUsc0JBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUN2QztRQUNE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
|
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
import { EggContext } from '@eggjs/tegg';
|
|
2
2
|
import { EggLogger, EggAppConfig } from 'egg';
|
|
3
3
|
import { Static } from '@sinclair/typebox';
|
|
4
|
+
import type { PublicKeyCredentialCreationOptionsJSON, PublicKeyCredentialRequestOptionsJSON } from '@simplewebauthn/typescript-types';
|
|
4
5
|
import { UserService } from '../../core/service/UserService';
|
|
5
6
|
import { MiddlewareController } from '../middleware';
|
|
6
7
|
declare const LoginRequestRule: import("@sinclair/typebox").TObject<{
|
|
7
8
|
hostname: import("@sinclair/typebox").TString;
|
|
8
9
|
}>;
|
|
9
10
|
type LoginRequest = Static<typeof LoginRequestRule>;
|
|
11
|
+
type LoginPrepareResult = {
|
|
12
|
+
wanStatus: number;
|
|
13
|
+
wanCredentialRegiOption?: PublicKeyCredentialCreationOptionsJSON;
|
|
14
|
+
wanCredentialAuthOption?: PublicKeyCredentialRequestOptionsJSON;
|
|
15
|
+
};
|
|
10
16
|
export declare class WebauthController extends MiddlewareController {
|
|
11
17
|
private cacheAdapter;
|
|
12
18
|
private authAdapter;
|
|
@@ -14,8 +20,18 @@ export declare class WebauthController extends MiddlewareController {
|
|
|
14
20
|
protected config: EggAppConfig;
|
|
15
21
|
protected userService: UserService;
|
|
16
22
|
login(ctx: EggContext, loginRequest: LoginRequest): Promise<import("../../common/typing").AuthUrlResult>;
|
|
17
|
-
|
|
18
|
-
|
|
23
|
+
loginRender(ctx: EggContext, sessionId: string): Promise<"<h1>😭😭😭 Session not found, please try again on your command line 😭😭😭</h1>" | undefined>;
|
|
24
|
+
loginImplement(ctx: EggContext, sessionId: string, loginImplementRequest: any): Promise<{
|
|
25
|
+
ok: boolean;
|
|
26
|
+
message: string;
|
|
27
|
+
} | {
|
|
28
|
+
ok: boolean;
|
|
29
|
+
message?: undefined;
|
|
30
|
+
}>;
|
|
31
|
+
loginPrepare(ctx: EggContext, sessionId: string, name: string): Promise<LoginPrepareResult | {
|
|
32
|
+
ok: boolean;
|
|
33
|
+
message: string;
|
|
34
|
+
}>;
|
|
19
35
|
ssoRequest(ctx: EggContext, sessionId: string): Promise<{
|
|
20
36
|
success: boolean;
|
|
21
37
|
}>;
|
|
@@ -11,16 +11,24 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
11
11
|
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
12
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
13
|
};
|
|
14
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
15
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
16
|
+
};
|
|
14
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
18
|
exports.WebauthController = void 0;
|
|
16
19
|
const tegg_1 = require("@eggjs/tegg");
|
|
17
20
|
const typebox_1 = require("@sinclair/typebox");
|
|
18
21
|
const egg_errors_1 = require("egg-errors");
|
|
22
|
+
const crypto_1 = require("crypto");
|
|
23
|
+
const base64url_1 = __importDefault(require("base64url"));
|
|
24
|
+
const server_1 = require("@simplewebauthn/server");
|
|
19
25
|
const User_1 = require("../../common/enum/User");
|
|
20
26
|
const CacheAdapter_1 = require("../../common/adapter/CacheAdapter");
|
|
21
27
|
const UserService_1 = require("../../core/service/UserService");
|
|
22
28
|
const middleware_1 = require("../middleware");
|
|
23
29
|
const AuthAdapter_1 = require("../../infra/AuthAdapter");
|
|
30
|
+
const CryptoUtil_1 = require("../../common/CryptoUtil");
|
|
31
|
+
const UserUtil_1 = require("../../common/UserUtil");
|
|
24
32
|
const LoginRequestRule = typebox_1.Type.Object({
|
|
25
33
|
// cli 所在机器的 hostname
|
|
26
34
|
hostname: typebox_1.Type.String({ minLength: 1, maxLength: 100 }),
|
|
@@ -39,11 +47,7 @@ let WebauthController = class WebauthController extends middleware_1.MiddlewareC
|
|
|
39
47
|
ctx.tValidate(LoginRequestRule, loginRequest);
|
|
40
48
|
return this.authAdapter.getAuthUrl(ctx);
|
|
41
49
|
}
|
|
42
|
-
|
|
43
|
-
ctx.status = 401;
|
|
44
|
-
ctx.set('WWW-Authenticate', 'Basic realm="Login to cnpmcore"');
|
|
45
|
-
}
|
|
46
|
-
async loginRequest(ctx, sessionId) {
|
|
50
|
+
async loginRender(ctx, sessionId) {
|
|
47
51
|
ctx.tValidate(SessionRule, { sessionId });
|
|
48
52
|
ctx.type = 'html';
|
|
49
53
|
const sessionToken = await this.cacheAdapter.get(sessionId);
|
|
@@ -51,66 +55,190 @@ let WebauthController = class WebauthController extends middleware_1.MiddlewareC
|
|
|
51
55
|
ctx.status = 404;
|
|
52
56
|
return '<h1>😭😭😭 Session not found, please try again on your command line 😭😭😭</h1>';
|
|
53
57
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
const
|
|
69
|
-
const username =
|
|
70
|
-
const
|
|
71
|
-
const
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
58
|
+
const keys = (0, CryptoUtil_1.genRSAKeys)();
|
|
59
|
+
await this.cacheAdapter.set(`${sessionId}_privateKey`, keys.privateKey);
|
|
60
|
+
await ctx.render('login.html', {
|
|
61
|
+
sessionId,
|
|
62
|
+
publicKey: keys.publicKey,
|
|
63
|
+
enableWebauthn: this.config.cnpmcore.enableWebAuthn,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
async loginImplement(ctx, sessionId, loginImplementRequest) {
|
|
67
|
+
ctx.tValidate(SessionRule, { sessionId });
|
|
68
|
+
const sessionToken = await this.cacheAdapter.get(sessionId);
|
|
69
|
+
if (typeof sessionToken !== 'string') {
|
|
70
|
+
return { ok: false, message: 'Session not found, please try again on your command line' };
|
|
71
|
+
}
|
|
72
|
+
const { accData, wanCredentialRegiData, wanCredentialAuthData, needUnbindWan } = loginImplementRequest;
|
|
73
|
+
const { username, password = '' } = accData;
|
|
74
|
+
const enableWebAuthn = this.config.cnpmcore.enableWebAuthn;
|
|
75
|
+
const isSupportWebAuthn = ctx.protocol === 'https' || ctx.hostname === 'localhost';
|
|
76
|
+
let token = '';
|
|
77
|
+
let user;
|
|
78
|
+
// public registration
|
|
79
|
+
if (this.config.cnpmcore.allowPublicRegistration === false) {
|
|
80
|
+
if (!this.config.cnpmcore.admins[username]) {
|
|
81
|
+
return { ok: false, message: 'Public registration is not allowed' };
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
const browserType = (0, UserUtil_1.getBrowserTypeForWebauthn)(ctx.headers['user-agent']);
|
|
85
|
+
const expectedChallenge = (await this.cacheAdapter.get(`${sessionId}_challenge`)) || '';
|
|
86
|
+
const expectedOrigin = this.config.cnpmcore.registry;
|
|
87
|
+
const expectedRPID = new URL(expectedOrigin).hostname;
|
|
88
|
+
// webauthn authentication
|
|
89
|
+
if (enableWebAuthn && isSupportWebAuthn && wanCredentialAuthData) {
|
|
90
|
+
user = await this.userService.findUserByName(username);
|
|
91
|
+
if (!user) {
|
|
92
|
+
return { ok: false, message: 'Unauthorized, Please check your login name' };
|
|
93
|
+
}
|
|
94
|
+
const credential = await this.userService.findWebauthnCredential(user.userId, browserType);
|
|
95
|
+
if (!credential?.credentialId || !credential?.publicKey) {
|
|
96
|
+
return { ok: false, message: 'Unauthorized, Please check your login name' };
|
|
97
|
+
}
|
|
98
|
+
try {
|
|
99
|
+
const verification = await (0, server_1.verifyAuthenticationResponse)({
|
|
100
|
+
response: wanCredentialAuthData,
|
|
101
|
+
expectedChallenge,
|
|
102
|
+
expectedOrigin,
|
|
103
|
+
expectedRPID,
|
|
104
|
+
authenticator: {
|
|
105
|
+
credentialPublicKey: base64url_1.default.toBuffer(credential.publicKey),
|
|
106
|
+
credentialID: base64url_1.default.toBuffer(credential.credentialId),
|
|
107
|
+
counter: 0,
|
|
108
|
+
},
|
|
109
|
+
});
|
|
110
|
+
const { verified } = verification;
|
|
111
|
+
if (!verified) {
|
|
112
|
+
return { ok: false, message: 'Invalid security arguments, please try again on your browser' };
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
this.logger.error('[WebauthController.loginImplement:verify-authentication-fail] expectedChallenge: %s, expectedOrigin: %s, expectedRPID: %s, wanCredentialAuthData: %j, error: %j', expectedChallenge, expectedOrigin, expectedRPID, wanCredentialAuthData, err);
|
|
117
|
+
return { ok: false, message: 'Authentication failed, please continue to sign in with your password' };
|
|
118
|
+
}
|
|
119
|
+
const createToken = await this.userService.createToken(user.userId);
|
|
120
|
+
token = createToken.token;
|
|
121
|
+
await this.cacheAdapter.set(sessionId, token);
|
|
122
|
+
return { ok: true };
|
|
123
|
+
}
|
|
124
|
+
// check privateKey valid
|
|
125
|
+
const privateKey = await this.cacheAdapter.get(`${sessionId}_privateKey`);
|
|
126
|
+
if (!privateKey) {
|
|
127
|
+
return { ok: false, message: 'Invalid security arguments, please try again on your browser' };
|
|
128
|
+
}
|
|
129
|
+
// check login name and password valid
|
|
130
|
+
const realPassword = (0, CryptoUtil_1.decryptRSA)(privateKey, password);
|
|
75
131
|
try {
|
|
76
|
-
ctx.tValidate(UserRule,
|
|
132
|
+
ctx.tValidate(UserRule, {
|
|
133
|
+
name: username,
|
|
134
|
+
password: realPassword,
|
|
135
|
+
});
|
|
77
136
|
}
|
|
78
137
|
catch (err) {
|
|
79
138
|
const message = err.message;
|
|
80
|
-
|
|
81
|
-
return `Unauthorized, ${message}`;
|
|
82
|
-
}
|
|
83
|
-
if (this.config.cnpmcore.allowPublicRegistration === false) {
|
|
84
|
-
if (!this.config.cnpmcore.admins[user.name]) {
|
|
85
|
-
ctx.status = 403;
|
|
86
|
-
return '<h1>😭😭😭 Public registration is not allowed 😭😭😭</h1>';
|
|
87
|
-
}
|
|
139
|
+
return { ok: false, message: `Unauthorized, ${message}` };
|
|
88
140
|
}
|
|
89
|
-
const result = await this.userService.login(
|
|
141
|
+
const result = await this.userService.login(username, realPassword);
|
|
90
142
|
// user exists and password not match
|
|
91
143
|
if (result.code === User_1.LoginResultCode.Fail) {
|
|
92
|
-
|
|
93
|
-
return '<h1>😭😭😭 Please check your login name and password 😭😭😭</h1>';
|
|
144
|
+
return { ok: false, message: 'Please check your login name and password' };
|
|
94
145
|
}
|
|
95
|
-
let token = '';
|
|
96
146
|
if (result.code === User_1.LoginResultCode.Success) {
|
|
97
147
|
// login success
|
|
98
148
|
token = result.token.token;
|
|
149
|
+
user = result.user;
|
|
150
|
+
// need unbind webauthn credential
|
|
151
|
+
if (needUnbindWan) {
|
|
152
|
+
await this.userService.removeWebauthnCredential(user.userId, browserType);
|
|
153
|
+
}
|
|
99
154
|
}
|
|
100
155
|
else {
|
|
101
156
|
// others: LoginResultCode.UserNotFound
|
|
102
157
|
// create user request
|
|
103
158
|
const createRes = await this.userService.ensureTokenByUser({
|
|
104
|
-
name:
|
|
105
|
-
password:
|
|
159
|
+
name: username,
|
|
160
|
+
password: realPassword,
|
|
106
161
|
// FIXME: email verify
|
|
107
|
-
email: `${
|
|
162
|
+
email: `${username}@webauth.cnpmjs.org`,
|
|
108
163
|
ip: ctx.ip,
|
|
109
164
|
});
|
|
110
|
-
token = createRes.token;
|
|
165
|
+
token = createRes.token.token;
|
|
166
|
+
user = createRes.user;
|
|
111
167
|
}
|
|
112
168
|
await this.cacheAdapter.set(sessionId, token);
|
|
113
|
-
|
|
169
|
+
// webauthn registration
|
|
170
|
+
if (enableWebAuthn && isSupportWebAuthn && wanCredentialRegiData) {
|
|
171
|
+
try {
|
|
172
|
+
const verification = await (0, server_1.verifyRegistrationResponse)({
|
|
173
|
+
response: wanCredentialRegiData,
|
|
174
|
+
expectedChallenge,
|
|
175
|
+
expectedOrigin,
|
|
176
|
+
expectedRPID,
|
|
177
|
+
});
|
|
178
|
+
const { verified, registrationInfo } = verification;
|
|
179
|
+
if (verified && registrationInfo) {
|
|
180
|
+
const { credentialPublicKey, credentialID } = registrationInfo;
|
|
181
|
+
const base64CredentialPublicKey = base64url_1.default.encode(Buffer.from(new Uint8Array(credentialPublicKey)));
|
|
182
|
+
const base64CredentialID = base64url_1.default.encode(Buffer.from(new Uint8Array(credentialID)));
|
|
183
|
+
this.userService.createWebauthnCredential(user.userId, {
|
|
184
|
+
credentialId: base64CredentialID,
|
|
185
|
+
publicKey: base64CredentialPublicKey,
|
|
186
|
+
browserType,
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
catch (err) {
|
|
191
|
+
this.logger.error('[WebauthController.loginImplement:verify-registration-fail] expectedChallenge: %s, expectedOrigin: %s, expectedRPID: %s, wanCredentialRegiData: %j, error: %j', expectedChallenge, expectedOrigin, expectedRPID, wanCredentialRegiData, err);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return { ok: true };
|
|
195
|
+
}
|
|
196
|
+
async loginPrepare(ctx, sessionId, name) {
|
|
197
|
+
ctx.tValidate(SessionRule, { sessionId });
|
|
198
|
+
const sessionToken = await this.cacheAdapter.get(sessionId);
|
|
199
|
+
if (typeof sessionToken !== 'string') {
|
|
200
|
+
return { ok: false, message: 'Session not found, please try again on your command line' };
|
|
201
|
+
}
|
|
202
|
+
const browserType = (0, UserUtil_1.getBrowserTypeForWebauthn)(ctx.headers['user-agent']);
|
|
203
|
+
const expectedRPID = new URL(this.config.cnpmcore.registry).hostname;
|
|
204
|
+
const user = await this.userService.findUserByName(name);
|
|
205
|
+
const result = { wanStatus: User_1.WanStatusCode.UserNotFound };
|
|
206
|
+
let credential;
|
|
207
|
+
if (user) {
|
|
208
|
+
credential = await this.userService.findWebauthnCredential(user.userId, browserType);
|
|
209
|
+
result.wanStatus = User_1.WanStatusCode.Unbound;
|
|
210
|
+
}
|
|
211
|
+
if (credential?.credentialId && credential?.publicKey) {
|
|
212
|
+
result.wanStatus = User_1.WanStatusCode.Bound;
|
|
213
|
+
result.wanCredentialAuthOption = (0, server_1.generateAuthenticationOptions)({
|
|
214
|
+
timeout: 60000,
|
|
215
|
+
rpID: expectedRPID,
|
|
216
|
+
allowCredentials: [{
|
|
217
|
+
id: base64url_1.default.toBuffer(credential.credentialId),
|
|
218
|
+
type: 'public-key',
|
|
219
|
+
transports: ['internal'],
|
|
220
|
+
}],
|
|
221
|
+
});
|
|
222
|
+
await this.cacheAdapter.set(`${sessionId}_challenge`, result.wanCredentialAuthOption.challenge);
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
const encoder = new TextEncoder();
|
|
226
|
+
const regUserIdBuffer = (0, crypto_1.createHash)('sha256').update(encoder.encode(name)).digest();
|
|
227
|
+
result.wanCredentialRegiOption = (0, server_1.generateRegistrationOptions)({
|
|
228
|
+
rpName: ctx.app.config.name,
|
|
229
|
+
rpID: expectedRPID,
|
|
230
|
+
userID: base64url_1.default.encode(Buffer.from(regUserIdBuffer)),
|
|
231
|
+
userName: name,
|
|
232
|
+
userDisplayName: name,
|
|
233
|
+
timeout: 60000,
|
|
234
|
+
attestationType: 'direct',
|
|
235
|
+
authenticatorSelection: {
|
|
236
|
+
authenticatorAttachment: 'platform',
|
|
237
|
+
},
|
|
238
|
+
});
|
|
239
|
+
await this.cacheAdapter.set(`${sessionId}_challenge`, result.wanCredentialRegiOption.challenge);
|
|
240
|
+
}
|
|
241
|
+
return result;
|
|
114
242
|
}
|
|
115
243
|
async ssoRequest(ctx, sessionId) {
|
|
116
244
|
ctx.tValidate(SessionRule, { sessionId });
|
|
@@ -126,7 +254,7 @@ let WebauthController = class WebauthController extends middleware_1.MiddlewareC
|
|
|
126
254
|
}
|
|
127
255
|
const { name, email } = userRes;
|
|
128
256
|
const { token } = await this.userService.ensureTokenByUser({ name, email, ip: ctx.ip });
|
|
129
|
-
await this.cacheAdapter.set(sessionId, token);
|
|
257
|
+
await this.cacheAdapter.set(sessionId, token.token);
|
|
130
258
|
return { success: true };
|
|
131
259
|
}
|
|
132
260
|
async loginRequestSuccess(ctx) {
|
|
@@ -147,6 +275,8 @@ let WebauthController = class WebauthController extends middleware_1.MiddlewareC
|
|
|
147
275
|
}
|
|
148
276
|
// only get once
|
|
149
277
|
await this.cacheAdapter.delete(sessionId);
|
|
278
|
+
await this.cacheAdapter.delete(`${sessionId}_challenge`);
|
|
279
|
+
await this.cacheAdapter.delete(`${sessionId}_privateKey`);
|
|
150
280
|
return { token };
|
|
151
281
|
}
|
|
152
282
|
};
|
|
@@ -191,7 +321,31 @@ __decorate([
|
|
|
191
321
|
__metadata("design:type", Function),
|
|
192
322
|
__metadata("design:paramtypes", [Object, String]),
|
|
193
323
|
__metadata("design:returntype", Promise)
|
|
194
|
-
], WebauthController.prototype, "
|
|
324
|
+
], WebauthController.prototype, "loginRender", null);
|
|
325
|
+
__decorate([
|
|
326
|
+
(0, tegg_1.HTTPMethod)({
|
|
327
|
+
path: '/-/v1/login/request/session/:sessionId',
|
|
328
|
+
method: tegg_1.HTTPMethodEnum.POST,
|
|
329
|
+
}),
|
|
330
|
+
__param(0, (0, tegg_1.Context)()),
|
|
331
|
+
__param(1, (0, tegg_1.HTTPParam)()),
|
|
332
|
+
__param(2, (0, tegg_1.HTTPBody)()),
|
|
333
|
+
__metadata("design:type", Function),
|
|
334
|
+
__metadata("design:paramtypes", [Object, String, Object]),
|
|
335
|
+
__metadata("design:returntype", Promise)
|
|
336
|
+
], WebauthController.prototype, "loginImplement", null);
|
|
337
|
+
__decorate([
|
|
338
|
+
(0, tegg_1.HTTPMethod)({
|
|
339
|
+
path: '/-/v1/login/request/prepare/:sessionId',
|
|
340
|
+
method: tegg_1.HTTPMethodEnum.GET,
|
|
341
|
+
}),
|
|
342
|
+
__param(0, (0, tegg_1.Context)()),
|
|
343
|
+
__param(1, (0, tegg_1.HTTPParam)()),
|
|
344
|
+
__param(2, (0, tegg_1.HTTPQuery)()),
|
|
345
|
+
__metadata("design:type", Function),
|
|
346
|
+
__metadata("design:paramtypes", [Object, String, String]),
|
|
347
|
+
__metadata("design:returntype", Promise)
|
|
348
|
+
], WebauthController.prototype, "loginPrepare", null);
|
|
195
349
|
__decorate([
|
|
196
350
|
(0, tegg_1.HTTPMethod)({
|
|
197
351
|
path: '/-/v1/login/sso/:sessionId',
|
|
@@ -228,4 +382,4 @@ WebauthController = __decorate([
|
|
|
228
382
|
(0, tegg_1.HTTPController)()
|
|
229
383
|
], WebauthController);
|
|
230
384
|
exports.WebauthController = WebauthController;
|
|
231
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2ViYXV0aENvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9hcHAvcG9ydC93ZWJhdXRoL1dlYmF1dGhDb250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHNDQVNxQjtBQUtyQiwrQ0FBaUQ7QUFDakQsMkNBQTJEO0FBQzNELGlEQUF5RDtBQUN6RCxvRUFBaUU7QUFDakUsZ0VBQTZEO0FBQzdELDhDQUFxRDtBQUNyRCx5REFBc0Q7QUFFdEQsTUFBTSxnQkFBZ0IsR0FBRyxjQUFJLENBQUMsTUFBTSxDQUFDO0lBQ25DLHFCQUFxQjtJQUNyQixRQUFRLEVBQUUsY0FBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3hELENBQUMsQ0FBQztBQUdILE1BQU0sUUFBUSxHQUFHLGNBQUksQ0FBQyxNQUFNLENBQUM7SUFDM0IsSUFBSSxFQUFFLGNBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNuRCxRQUFRLEVBQUUsY0FBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3hELENBQUMsQ0FBQztBQUdILE1BQU0sV0FBVyxHQUFHLGNBQUksQ0FBQyxNQUFNLENBQUM7SUFDOUIsT0FBTztJQUNQLFNBQVMsRUFBRSxjQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQUM7Q0FDekQsQ0FBQyxDQUFDO0FBR0ksSUFBTSxpQkFBaUIsR0FBdkIsTUFBTSxpQkFBa0IsU0FBUSxpQ0FBb0I7SUFZekQsOENBQThDO0lBS3hDLEFBQU4sS0FBSyxDQUFDLEtBQUssQ0FBWSxHQUFlLEVB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
|
|
385
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2ViYXV0aENvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9hcHAvcG9ydC93ZWJhdXRoL1dlYmF1dGhDb250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHNDQVVxQjtBQUtyQiwrQ0FBaUQ7QUFDakQsMkNBQTJEO0FBQzNELG1DQUFvQztBQUNwQywwREFBa0M7QUFDbEMsbURBS2dDO0FBRWhDLGlEQUF3RTtBQUN4RSxvRUFBaUU7QUFDakUsZ0VBQTZEO0FBQzdELDhDQUFxRDtBQUNyRCx5REFBc0Q7QUFDdEQsd0RBQWlFO0FBQ2pFLG9EQUFrRTtBQUVsRSxNQUFNLGdCQUFnQixHQUFHLGNBQUksQ0FBQyxNQUFNLENBQUM7SUFDbkMscUJBQXFCO0lBQ3JCLFFBQVEsRUFBRSxjQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDeEQsQ0FBQyxDQUFDO0FBU0gsTUFBTSxRQUFRLEdBQUcsY0FBSSxDQUFDLE1BQU0sQ0FBQztJQUMzQixJQUFJLEVBQUUsY0FBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ25ELFFBQVEsRUFBRSxjQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDeEQsQ0FBQyxDQUFDO0FBRUgsTUFBTSxXQUFXLEdBQUcsY0FBSSxDQUFDLE1BQU0sQ0FBQztJQUM5QixPQUFPO0lBQ1AsU0FBUyxFQUFFLGNBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQztDQUN6RCxDQUFDLENBQUM7QUFHSSxJQUFNLGlCQUFpQixHQUF2QixNQUFNLGlC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
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { User as UserEntity } from '../core/entity/User';
|
|
2
2
|
import { Token as TokenEntity } from '../core/entity/Token';
|
|
3
|
+
import { WebauthnCredential as WebauthnCredentialEntity } from '../core/entity/WebauthnCredential';
|
|
3
4
|
import { AbstractRepository } from './AbstractRepository';
|
|
4
5
|
export declare class UserRepository extends AbstractRepository {
|
|
5
6
|
private readonly User;
|
|
6
7
|
private readonly Token;
|
|
8
|
+
private readonly WebauthnCredential;
|
|
7
9
|
saveUser(user: UserEntity): Promise<void>;
|
|
8
10
|
findUserByName(name: string): Promise<UserEntity | null>;
|
|
9
11
|
findUserByUserId(userId: string): Promise<UserEntity | null>;
|
|
@@ -15,4 +17,7 @@ export declare class UserRepository extends AbstractRepository {
|
|
|
15
17
|
saveToken(token: TokenEntity): Promise<void>;
|
|
16
18
|
removeToken(tokenId: string): Promise<void>;
|
|
17
19
|
listTokens(userId: string): Promise<TokenEntity[]>;
|
|
20
|
+
saveCredential(credential: WebauthnCredentialEntity): Promise<void>;
|
|
21
|
+
findCredentialByUserIdAndBrowserType(userId: string, browserType: string | null): Promise<WebauthnCredentialEntity | null>;
|
|
22
|
+
removeCredential(wancId: string): Promise<void>;
|
|
18
23
|
}
|
|
@@ -14,6 +14,7 @@ const tegg_1 = require("@eggjs/tegg");
|
|
|
14
14
|
const ModelConvertor_1 = require("./util/ModelConvertor");
|
|
15
15
|
const User_1 = require("../core/entity/User");
|
|
16
16
|
const Token_1 = require("../core/entity/Token");
|
|
17
|
+
const WebauthnCredential_1 = require("../core/entity/WebauthnCredential");
|
|
17
18
|
const AbstractRepository_1 = require("./AbstractRepository");
|
|
18
19
|
let UserRepository = class UserRepository extends AbstractRepository_1.AbstractRepository {
|
|
19
20
|
async saveUser(user) {
|
|
@@ -78,6 +79,31 @@ let UserRepository = class UserRepository extends AbstractRepository_1.AbstractR
|
|
|
78
79
|
const models = await this.Token.find({ userId });
|
|
79
80
|
return models.map(model => ModelConvertor_1.ModelConvertor.convertModelToEntity(model, Token_1.Token));
|
|
80
81
|
}
|
|
82
|
+
async saveCredential(credential) {
|
|
83
|
+
if (credential.id) {
|
|
84
|
+
const model = await this.WebauthnCredential.findOne({ id: credential.id });
|
|
85
|
+
if (!model)
|
|
86
|
+
return;
|
|
87
|
+
await ModelConvertor_1.ModelConvertor.saveEntityToModel(credential, model);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
const model = await ModelConvertor_1.ModelConvertor.convertEntityToModel(credential, this.WebauthnCredential);
|
|
91
|
+
this.logger.info('[UserRepository:saveCredential:new] id: %s, wancId: %s', model.id, model.wancId);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
async findCredentialByUserIdAndBrowserType(userId, browserType) {
|
|
95
|
+
const model = await this.WebauthnCredential.findOne({
|
|
96
|
+
userId,
|
|
97
|
+
browserType,
|
|
98
|
+
});
|
|
99
|
+
if (!model)
|
|
100
|
+
return null;
|
|
101
|
+
return ModelConvertor_1.ModelConvertor.convertModelToEntity(model, WebauthnCredential_1.WebauthnCredential);
|
|
102
|
+
}
|
|
103
|
+
async removeCredential(wancId) {
|
|
104
|
+
const removeCount = await this.WebauthnCredential.remove({ wancId });
|
|
105
|
+
this.logger.info('[UserRepository:removeCredential:remove] %d rows, wancId: %s', removeCount, wancId);
|
|
106
|
+
}
|
|
81
107
|
};
|
|
82
108
|
__decorate([
|
|
83
109
|
(0, tegg_1.Inject)(),
|
|
@@ -87,10 +113,14 @@ __decorate([
|
|
|
87
113
|
(0, tegg_1.Inject)(),
|
|
88
114
|
__metadata("design:type", Object)
|
|
89
115
|
], UserRepository.prototype, "Token", void 0);
|
|
116
|
+
__decorate([
|
|
117
|
+
(0, tegg_1.Inject)(),
|
|
118
|
+
__metadata("design:type", Object)
|
|
119
|
+
], UserRepository.prototype, "WebauthnCredential", void 0);
|
|
90
120
|
UserRepository = __decorate([
|
|
91
121
|
(0, tegg_1.SingletonProto)({
|
|
92
122
|
accessLevel: tegg_1.AccessLevel.PUBLIC,
|
|
93
123
|
})
|
|
94
124
|
], UserRepository);
|
|
95
125
|
exports.UserRepository = UserRepository;
|
|
96
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
126
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXNlclJlcG9zaXRvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9hcHAvcmVwb3NpdG9yeS9Vc2VyUmVwb3NpdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxzQ0FBa0U7QUFDbEUsMERBQXVEO0FBSXZELDhDQUF5RDtBQUN6RCxnREFBNEQ7QUFDNUQsMEVBQW1HO0FBQ25HLDZEQUEwRDtBQUtuRCxJQUFNLGNBQWMsR0FBcEIsTUFBTSxjQUFlLFNBQVEsdUNBQWtCO0lBVXBELEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBZ0I7UUFDN0IsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFO1lBQ1gsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN2RCxJQUFJLENBQUMsS0FBSztnQkFBRSxPQUFPO1lBQ25CLE1BQU0sK0JBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDckQ7YUFBTTtZQUNMLE1BQU0sS0FBSyxHQUFHLE1BQU0sK0JBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGtEQUFrRCxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzlGO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBWTtRQUMvQixNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3hCLE9BQU8sK0JBQWMsQ0FBQyxv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
|
|
@@ -0,0 +1,58 @@
|
|
|
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.WebauthnCredential = void 0;
|
|
13
|
+
const orm_1 = require("@eggjs/tegg/orm");
|
|
14
|
+
const leoric_1 = require("leoric");
|
|
15
|
+
let WebauthnCredential = class WebauthnCredential extends leoric_1.Bone {
|
|
16
|
+
};
|
|
17
|
+
__decorate([
|
|
18
|
+
(0, orm_1.Attribute)(leoric_1.DataTypes.BIGINT, {
|
|
19
|
+
primary: true,
|
|
20
|
+
autoIncrement: true,
|
|
21
|
+
}),
|
|
22
|
+
__metadata("design:type", BigInt)
|
|
23
|
+
], WebauthnCredential.prototype, "id", void 0);
|
|
24
|
+
__decorate([
|
|
25
|
+
(0, orm_1.Attribute)(leoric_1.DataTypes.DATE, { name: 'gmt_create' }),
|
|
26
|
+
__metadata("design:type", Date)
|
|
27
|
+
], WebauthnCredential.prototype, "createdAt", void 0);
|
|
28
|
+
__decorate([
|
|
29
|
+
(0, orm_1.Attribute)(leoric_1.DataTypes.DATE, { name: 'gmt_modified' }),
|
|
30
|
+
__metadata("design:type", Date)
|
|
31
|
+
], WebauthnCredential.prototype, "updatedAt", void 0);
|
|
32
|
+
__decorate([
|
|
33
|
+
(0, orm_1.Attribute)(leoric_1.DataTypes.STRING(24), {
|
|
34
|
+
unique: true,
|
|
35
|
+
}),
|
|
36
|
+
__metadata("design:type", String)
|
|
37
|
+
], WebauthnCredential.prototype, "wancId", void 0);
|
|
38
|
+
__decorate([
|
|
39
|
+
(0, orm_1.Attribute)(leoric_1.DataTypes.STRING(24)),
|
|
40
|
+
__metadata("design:type", String)
|
|
41
|
+
], WebauthnCredential.prototype, "userId", void 0);
|
|
42
|
+
__decorate([
|
|
43
|
+
(0, orm_1.Attribute)(leoric_1.DataTypes.STRING(200)),
|
|
44
|
+
__metadata("design:type", String)
|
|
45
|
+
], WebauthnCredential.prototype, "credentialId", void 0);
|
|
46
|
+
__decorate([
|
|
47
|
+
(0, orm_1.Attribute)(leoric_1.DataTypes.STRING(512)),
|
|
48
|
+
__metadata("design:type", String)
|
|
49
|
+
], WebauthnCredential.prototype, "publicKey", void 0);
|
|
50
|
+
__decorate([
|
|
51
|
+
(0, orm_1.Attribute)(leoric_1.DataTypes.STRING(24), { allowNull: true }),
|
|
52
|
+
__metadata("design:type", String)
|
|
53
|
+
], WebauthnCredential.prototype, "browserType", void 0);
|
|
54
|
+
WebauthnCredential = __decorate([
|
|
55
|
+
(0, orm_1.Model)()
|
|
56
|
+
], WebauthnCredential);
|
|
57
|
+
exports.WebauthnCredential = WebauthnCredential;
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2ViYXV0aG5DcmVkZW50aWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vYXBwL3JlcG9zaXRvcnkvbW9kZWwvV2ViYXV0aG5DcmVkZW50aWFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLHlDQUFtRDtBQUNuRCxtQ0FBeUM7QUFHbEMsSUFBTSxrQkFBa0IsR0FBeEIsTUFBTSxrQkFBbUIsU0FBUSxhQUFJO0NBNkIzQyxDQUFBO0FBNUJDO0lBQUMsSUFBQSxlQUFTLEVBQUMsa0JBQVMsQ0FBQyxNQUFNLEVBQUU7UUFDM0IsT0FBTyxFQUFFLElBQUk7UUFDYixhQUFhLEVBQUUsSUFBSTtLQUNwQixDQUFDOzs4Q0FDUztBQUVYO0lBQUMsSUFBQSxlQUFTLEVBQUMsa0JBQVMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUM7OEJBQ3ZDLElBQUk7cURBQUM7QUFFaEI7SUFBQyxJQUFBLGVBQVMsRUFBQyxrQkFBUyxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQzs4QkFDekMsSUFBSTtxREFBQztBQUVoQjtJQUFDLElBQUEsZUFBUyxFQUFDLGtCQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1FBQy9CLE1BQU0sRUFBRSxJQUFJO0tBQ2IsQ0FBQzs7a0RBQ2E7QUFFZjtJQUFDLElBQUEsZUFBUyxFQUFDLGtCQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDOztrREFDakI7QUFFZjtJQUFDLElBQUEsZUFBUyxFQUFDLGtCQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDOzt3REFDWjtBQUVyQjtJQUFDLElBQUEsZUFBUyxFQUFDLGtCQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDOztxREFDZjtBQUVsQjtJQUFDLElBQUEsZUFBUyxFQUFDLGtCQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDOzt1REFDakM7QUE1QlQsa0JBQWtCO0lBRDlCLElBQUEsV0FBSyxHQUFFO0dBQ0ssa0JBQWtCLENBNkI5QjtBQTdCWSxnREFBa0IifQ==
|
|
@@ -70,6 +70,9 @@ exports.default = (appInfo) => {
|
|
|
70
70
|
// name: email
|
|
71
71
|
cnpmcore_admin: 'admin@cnpmjs.org',
|
|
72
72
|
},
|
|
73
|
+
// use webauthn for login, https://webauthn.guide/
|
|
74
|
+
// only support platform authenticators, browser support: https://webauthn.me/browser-support
|
|
75
|
+
enableWebAuthn: false,
|
|
73
76
|
// http response cache control header
|
|
74
77
|
enableCDN: false,
|
|
75
78
|
// if you are using CDN, can set it to 'max-age=0, s-maxage=120, must-revalidate'
|
|
@@ -165,6 +168,10 @@ exports.default = (appInfo) => {
|
|
|
165
168
|
config.httpclient = {
|
|
166
169
|
useHttpClientNext: true,
|
|
167
170
|
};
|
|
171
|
+
config.view = {
|
|
172
|
+
root: (0, path_1.join)(appInfo.baseDir, 'app/port'),
|
|
173
|
+
defaultViewEngine: 'nunjucks',
|
|
174
|
+
};
|
|
168
175
|
return config;
|
|
169
176
|
};
|
|
170
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
177
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmRlZmF1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9jb25maWcvY29uZmlnLmRlZmF1bHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsK0JBQTRCO0FBRTVCLHdEQUFpQztBQUNqQyxpREFBK0M7QUFDL0MsdURBQW1FO0FBRW5FLGtCQUFlLENBQUMsT0FBcUIsRUFBRSxFQUFFO0lBQ3ZDLE1BQU0sTUFBTSxHQUFHLEVBQWdDLENBQUM7SUFFaEQsTUFBTSxDQUFDLFFBQVEsR0FBRztRQUNoQixJQUFJLEVBQUUsTUFBTTtRQUNaLFVBQVUsRUFBRSxFQUFFO1FBQ2QsY0FBYyxFQUFFLDRCQUE0QjtRQUM1QyxpREFBaUQ7UUFDakQsZ0VBQWdFO1FBQ2hFLG9CQUFvQixFQUFFLEtBQUs7UUFDM0IsaUJBQWlCLEVBQUUsS0FBSztRQUN4QixTQUFTO1FBQ1QseUJBQXlCLEVBQUUsTUFBTTtRQUNqQyxzQkFBc0IsRUFBRSxHQUFHO1FBQzNCLFlBQVk7UUFDWixzRUFBc0U7UUFDdEUsZ0NBQWdDO1FBQ2hDLHFIQUFxSDtRQUNySCxRQUFRLEVBQUUsb0JBQVEsQ0FBQyxJQUFJO1FBQ3ZCLGNBQWMsRUFBRSwwQkFBYyxDQUFDLE1BQU07UUFDckMsVUFBVSxFQUFFLEtBQUs7UUFDakIsbUNBQW1DLEVBQUUsRUFBRTtRQUN2QyxtQ0FBbUMsRUFBRSxFQUFFO1FBQ3ZDLHlDQUF5QyxFQUFFLEVBQUU7UUFDN0Msd0NBQXdDO1FBQ3hDLG9CQUFvQixFQUFFLEVBQUU7UUFDeEIsMEdBQTBHO1FBQzFHLDhCQUE4QjtRQUM5QiwwQkFBMEIsRUFBRSxJQUFJO1FBQ2hDLGtDQUFrQztRQUNsQyxnQkFBZ0IsRUFBRSxLQUFLO1FBQ3ZCLDhDQUE4QztRQUM5Qyx1QkFBdUIsRUFBRSxFQUFFO1FBQzNCLDhGQUE4RjtRQUM5RiwwRUFBMEU7UUFDMUUsc0JBQXNCLEVBQUUsS0FBSztRQUM3Qiw4QkFBOEIsRUFB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
|
package/dist/config/plugin.js
CHANGED
|
@@ -30,7 +30,11 @@ const plugin = {
|
|
|
30
30
|
package: '@eggjs/tegg-aop-plugin',
|
|
31
31
|
},
|
|
32
32
|
view: {
|
|
33
|
-
enable:
|
|
33
|
+
enable: true,
|
|
34
|
+
},
|
|
35
|
+
nunjucks: {
|
|
36
|
+
enable: true,
|
|
37
|
+
package: 'egg-view-nunjucks',
|
|
34
38
|
},
|
|
35
39
|
tracer: {
|
|
36
40
|
enable: true,
|
|
@@ -50,4 +54,4 @@ const plugin = {
|
|
|
50
54
|
},
|
|
51
55
|
};
|
|
52
56
|
exports.default = plugin;
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vY29uZmlnL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLE1BQU0sTUFBTSxHQUFjO0lBQ3hCLElBQUksRUFBRTtRQUNKLE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLG9CQUFvQjtLQUM5QjtJQUNELFVBQVUsRUFBRTtRQUNWLE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLG9CQUFvQjtLQUM5QjtJQUNELGNBQWMsRUFBRTtRQUNkLE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLCtCQUErQjtLQUN6QztJQUNELFlBQVksRUFBRTtRQUNaLE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLDZCQUE2QjtLQUN2QztJQUNELE9BQU8sRUFBRTtRQUNQLE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLHdCQUF3QjtLQUNsQztJQUNELGNBQWMsRUFBRTtRQUNkLE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLDZCQUE2QjtLQUN2QztJQUNELFNBQVMsRUFBRTtRQUNULE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLHdCQUF3QjtLQUNsQztJQUNELElBQUksRUFBRTtRQUNKLE1BQU0sRUFBRSxJQUFJO0tBQ2I7SUFDRCxRQUFRLEVBQUU7UUFDUixNQUFNLEVBQUUsSUFBSTtRQUNaLE9BQU8sRUFBRSxtQkFBbUI7S0FDN0I7SUFDRCxNQUFNLEVBQUU7UUFDTixNQUFNLEVBQUUsSUFBSTtRQUNaLE9BQU8sRUFBRSxZQUFZO0tBQ3RCO0lBQ0QsZUFBZSxFQUFFO1FBQ2YsTUFBTSxFQUFFLElBQUk7UUFDWixPQUFPLEVBQUUsc0JBQXNCO0tBQ2hDO0lBQ0QsS0FBSyxFQUFFO1FBQ0wsTUFBTSxFQUFFLElBQUk7UUFDWixPQUFPLEVBQUUsV0FBVztLQUNyQjtJQUNELElBQUksRUFBRTtRQUNKLE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLFVBQVU7S0FDcEI7Q0FDRixDQUFDO0FBRUYsa0JBQWUsTUFBTSxDQUFDIn0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cnpmcore",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.11.1",
|
|
4
4
|
"description": "npm core",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist/**/*"
|
|
@@ -77,8 +77,10 @@
|
|
|
77
77
|
"@eggjs/tegg-schedule-plugin": "^3.2.1",
|
|
78
78
|
"@eggjs/tsconfig": "^1.0.0",
|
|
79
79
|
"@node-rs/crc32": "^1.2.2",
|
|
80
|
+
"@simplewebauthn/server": "^7.0.1",
|
|
80
81
|
"@sinclair/typebox": "^0.23.0",
|
|
81
82
|
"base-x": "^3.0.9",
|
|
83
|
+
"base64url": "^3.0.1",
|
|
82
84
|
"bson-objectid": "^2.0.1",
|
|
83
85
|
"dayjs": "^1.10.7",
|
|
84
86
|
"egg": "^3.9.2",
|
|
@@ -88,6 +90,7 @@
|
|
|
88
90
|
"egg-scripts": "^2.15.2",
|
|
89
91
|
"egg-tracer": "^1.1.0",
|
|
90
92
|
"egg-typebox-validate": "^2.0.0",
|
|
93
|
+
"egg-view-nunjucks": "^2.3.0",
|
|
91
94
|
"fs-cnpm": "^2.4.0",
|
|
92
95
|
"ioredis": "^5.3.1",
|
|
93
96
|
"leoric": "^2.6.2",
|
|
@@ -99,9 +102,12 @@
|
|
|
99
102
|
"semver": "^7.3.5",
|
|
100
103
|
"ssri": "^8.0.1",
|
|
101
104
|
"type-fest": "^2.5.3",
|
|
105
|
+
"ua-parser-js": "^1.0.34",
|
|
102
106
|
"validate-npm-package-name": "^3.0.0"
|
|
103
107
|
},
|
|
104
108
|
"devDependencies": {
|
|
109
|
+
"@cnpmjs/npm-cli-login": "^1.1.0",
|
|
110
|
+
"@simplewebauthn/typescript-types": "^7.0.0",
|
|
105
111
|
"@types/mocha": "^10.0.1",
|
|
106
112
|
"@types/mysql": "^2.15.21",
|
|
107
113
|
"@types/semver": "^7.3.12",
|
|
@@ -111,7 +117,6 @@
|
|
|
111
117
|
"eslint": "^8.29.0",
|
|
112
118
|
"eslint-config-egg": "^12.1.0",
|
|
113
119
|
"git-contributor": "2",
|
|
114
|
-
"@cnpmjs/npm-cli-login": "^1.1.0",
|
|
115
120
|
"typescript": "^4.9.4"
|
|
116
121
|
},
|
|
117
122
|
"author": "killagu",
|