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.
@@ -0,0 +1,6 @@
1
+ export declare function genRSAKeys(): {
2
+ publicKey: string;
3
+ privateKey: string;
4
+ };
5
+ export declare function encryptRSA(publicKey: string, data: string): string;
6
+ export declare function decryptRSA(privateKey: string, data: string): string;
@@ -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
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXNlclV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9hcHAvY29tbW9uL1VzZXJVdGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG9EQUEwQjtBQUMxQiwwQ0FBdUM7QUFDdkMsMkNBQTZCO0FBRTdCLE1BQU0sTUFBTSxHQUFHLElBQUEsZ0JBQUksRUFBQyxnRUFBZ0UsQ0FBQyxDQUFDO0FBRXRGLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFcEMsU0FBZ0IsV0FBVyxDQUFDLE1BQWM7SUFDeEMsTUFBTSxLQUFLLEdBQUcsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDckMsTUFBTSxHQUFHLEdBQUcsSUFBQSxhQUFLLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFDekIsV0FBVyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQixPQUFPLEdBQUcsTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO0FBQzNFLENBQUM7QUFMRCxrQ0FLQztBQUVELFNBQWdCLFVBQVUsQ0FBQyxLQUFhLEVBQUUsTUFBYztJQUN0RCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hDLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDdEMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3ZDLElBQUk7UUFDRixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsT0FBTyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUEsYUFBSyxFQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ2xEO0lBQUMsTUFBTTtRQUNOLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7QUFDSCxDQUFDO0FBWEQsZ0NBV0M7QUFFRCxTQUFnQixTQUFTLENBQUMsS0FBYTtJQUNyQyxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFO1NBQ3hDLFFBQVEsRUFBRSxDQUFDO0FBQ2hCLENBQUM7QUFIRCw4QkFHQztBQUVELFNBQWdCLGNBQWMsQ0FBQyxLQUFhLEVBQUUsaUJBQXlCO0lBQ3JFLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRkQsd0NBRUM7QUFFRCxTQUFnQixNQUFNLENBQUMsS0FBYTtJQUNsQyxPQUFPLGdCQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakUsQ0FBQztBQUZELHdCQUVDIn0=
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=
@@ -3,3 +3,8 @@ export declare enum LoginResultCode {
3
3
  Success = 1,
4
4
  Fail = 2
5
5
  }
6
+ export declare enum WanStatusCode {
7
+ UserNotFound = 0,
8
+ Unbound = 1,
9
+ Bound = 2
10
+ }
@@ -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
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2FwcC9jb21tb24vZW51bS9Vc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLElBQVksZUFJWDtBQUpELFdBQVksZUFBZTtJQUN6QixxRUFBWSxDQUFBO0lBQ1osMkRBQU8sQ0FBQTtJQUNQLHFEQUFJLENBQUE7QUFDTixDQUFDLEVBSlcsZUFBZSxHQUFmLHVCQUFlLEtBQWYsdUJBQWUsUUFJMUIifQ==
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<TokenEntity>;
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXNlclNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9hcHAvY29yZS9zZXJ2aWNlL1VzZXJTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixzQ0FJcUI7QUFDckIsMkNBQTJEO0FBQzNELG9FQUFpRTtBQUNqRSx5Q0FBb0Q7QUFDcEQsMkNBQXVEO0FBQ3ZELGlEQUF5RDtBQUN6RCxvREFBdUY7QUFDdkYsa0VBQStEO0FBMEJ4RCxJQUFNLFdBQVcsR0FBakIsTUFBTSxXQUFZLFNBQVEsaUNBQWU7SUFJOUMsYUFBYSxDQUFDLElBQWdCLEVBQUUsUUFBZ0I7UUFDOUMsTUFBTSxLQUFLLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsRUFBRSxDQUFDO1FBQ2hELE9BQU8sSUFBQSx5QkFBYyxFQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFZLEVBQUUsUUFBZ0I7UUFDeEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsc0JBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN6RCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUU7WUFDdkMsT0FBTyxFQUFFLElBQUksRUFBRSxzQkFBZSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ3ZDO1FBQ0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsRCxPQUFPLEVBQUUsSUFBSSxFQUFFLHNCQUFlLENBQUMsT0FBTyxFQUFFLElB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
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
- private setBasicAuth;
18
- loginRequest(ctx: EggContext, sessionId: string): Promise<string | undefined>;
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
- setBasicAuth(ctx) {
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
- // Basic auth
55
- const authorization = ctx.get('authorization');
56
- if (!authorization) {
57
- this.setBasicAuth(ctx);
58
- return 'Unauthorized';
59
- }
60
- // 'Basic xxxx=='
61
- if (!authorization.startsWith('Basic ')) {
62
- this.setBasicAuth(ctx);
63
- return 'Unauthorized, invalid authorization, only support "Basic" authorization';
64
- }
65
- const base64String = authorization.replace('Basic ', '');
66
- // {user}:{pass}
67
- const userAuth = Buffer.from(base64String, 'base64').toString();
68
- const sepIndex = userAuth.indexOf(':');
69
- const username = userAuth.substring(0, sepIndex);
70
- const password = userAuth.substring(sepIndex + 1);
71
- const user = {
72
- name: username,
73
- password,
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, user);
132
+ ctx.tValidate(UserRule, {
133
+ name: username,
134
+ password: realPassword,
135
+ });
77
136
  }
78
137
  catch (err) {
79
138
  const message = err.message;
80
- this.setBasicAuth(ctx);
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(user.name, user.password);
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
- this.setBasicAuth(ctx);
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: user.name,
105
- password: user.password,
159
+ name: username,
160
+ password: realPassword,
106
161
  // FIXME: email verify
107
- email: `${user.name}@webauth.cnpmjs.org`,
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
- ctx.redirect('/-/v1/login/request/success');
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, "loginRequest", null);
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXNlclJlcG9zaXRvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9hcHAvcmVwb3NpdG9yeS9Vc2VyUmVwb3NpdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxzQ0FBa0U7QUFDbEUsMERBQXVEO0FBR3ZELDhDQUF5RDtBQUN6RCxnREFBNEQ7QUFDNUQsNkRBQTBEO0FBS25ELElBQU0sY0FBYyxHQUFwQixNQUFNLGNBQWUsU0FBUSx1Q0FBa0I7SUFPcEQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFnQjtRQUM3QixJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDWCxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZELElBQUksQ0FBQyxLQUFLO2dCQUFFLE9BQU87WUFDbkIsTUFBTSwrQkFBYyxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNyRDthQUFNO1lBQ0wsTUFBTSxLQUFLLEdBQUcsTUFBTSwrQkFBYyxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0RBQWtELEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDOUY7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFZO1FBQy9CLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDeEIsT0FBTywrQkFBYyxDQUFDLG9CQUFvQixDQUFDLEtB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
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXNlclJlcG9zaXRvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9hcHAvcmVwb3NpdG9yeS9Vc2VyUmVwb3NpdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxzQ0FBa0U7QUFDbEUsMERBQXVEO0FBSXZELDhDQUF5RDtBQUN6RCxnREFBNEQ7QUFDNUQsMEVBQW1HO0FBQ25HLDZEQUEwRDtBQUtuRCxJQUFNLGNBQWMsR0FBcEIsTUFBTSxjQUFlLFNBQVEsdUNBQWtCO0lBVXBELEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBZ0I7UUFDN0IsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFO1lBQ1gsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN2RCxJQUFJLENBQUMsS0FBSztnQkFBRSxPQUFPO1lBQ25CLE1BQU0sK0JBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDckQ7YUFBTTtZQUNMLE1BQU0sS0FBSyxHQUFHLE1BQU0sK0JBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGtEQUFrRCxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzlGO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBWTtRQUMvQixNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3hCLE9BQU8sK0JBQWMsQ0FBQyxv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
@@ -0,0 +1,11 @@
1
+ import { Bone } from 'leoric';
2
+ export declare class WebauthnCredential extends Bone {
3
+ id: bigint;
4
+ createdAt: Date;
5
+ updatedAt: Date;
6
+ wancId: string;
7
+ userId: string;
8
+ credentialId: string;
9
+ publicKey: string;
10
+ browserType: string;
11
+ }
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmRlZmF1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9jb25maWcvY29uZmlnLmRlZmF1bHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsK0JBQTRCO0FBRTVCLHdEQUFpQztBQUNqQyxpREFBK0M7QUFDL0MsdURBQW1FO0FBRW5FLGtCQUFlLENBQUMsT0FBcUIsRUFBRSxFQUFFO0lBQ3ZDLE1BQU0sTUFBTSxHQUFHLEVBQWdDLENBQUM7SUFFaEQsTUFBTSxDQUFDLFFBQVEsR0FBRztRQUNoQixJQUFJLEVBQUUsTUFBTTtRQUNaLFVBQVUsRUFBRSxFQUFFO1FBQ2QsY0FBYyxFQUFFLDRCQUE0QjtRQUM1QyxpREFBaUQ7UUFDakQsZ0VBQWdFO1FBQ2hFLG9CQUFvQixFQUFFLEtBQUs7UUFDM0IsaUJBQWlCLEVBQUUsS0FBSztRQUN4QixTQUFTO1FBQ1QseUJBQXlCLEVBQUUsTUFBTTtRQUNqQyxzQkFBc0IsRUFBRSxHQUFHO1FBQzNCLFlBQVk7UUFDWixzRUFBc0U7UUFDdEUsZ0NBQWdDO1FBQ2hDLHFIQUFxSDtRQUNySCxRQUFRLEVBQUUsb0JBQVEsQ0FBQyxJQUFJO1FBQ3ZCLGNBQWMsRUFBRSwwQkFBYyxDQUFDLE1BQU07UUFDckMsVUFBVSxFQUFFLEtBQUs7UUFDakIsbUNBQW1DLEVBQUUsRUFBRTtRQUN2QyxtQ0FBbUMsRUFBRSxFQUFFO1FBQ3ZDLHlDQUF5QyxFQUFFLEVBQUU7UUFDN0Msd0NBQXdDO1FBQ3hDLG9CQUFvQixFQUFFLEVBQUU7UUFDeEIsMEdBQTBHO1FBQzFHLDhCQUE4QjtRQUM5QiwwQkFBMEIsRUFBRSxJQUFJO1FBQ2hDLGtDQUFrQztRQUNsQyxnQkFBZ0IsRUFBRSxLQUFLO1FBQ3ZCLDhDQUE4QztRQUM5Qyx1QkFBdUIsRUFBRSxFQUFFO1FBQzNCLDhGQUE4RjtRQUM5RiwwRUFBMEU7UUFDMUUsc0JBQXNCLEVBQUUsS0FBSztRQUM3Qiw4QkFBOEIsRUFB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
177
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmRlZmF1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9jb25maWcvY29uZmlnLmRlZmF1bHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsK0JBQTRCO0FBRTVCLHdEQUFpQztBQUNqQyxpREFBK0M7QUFDL0MsdURBQW1FO0FBRW5FLGtCQUFlLENBQUMsT0FBcUIsRUFBRSxFQUFFO0lBQ3ZDLE1BQU0sTUFBTSxHQUFHLEVBQWdDLENBQUM7SUFFaEQsTUFBTSxDQUFDLFFBQVEsR0FBRztRQUNoQixJQUFJLEVBQUUsTUFBTTtRQUNaLFVBQVUsRUFBRSxFQUFFO1FBQ2QsY0FBYyxFQUFFLDRCQUE0QjtRQUM1QyxpREFBaUQ7UUFDakQsZ0VBQWdFO1FBQ2hFLG9CQUFvQixFQUFFLEtBQUs7UUFDM0IsaUJBQWlCLEVBQUUsS0FBSztRQUN4QixTQUFTO1FBQ1QseUJBQXlCLEVBQUUsTUFBTTtRQUNqQyxzQkFBc0IsRUFBRSxHQUFHO1FBQzNCLFlBQVk7UUFDWixzRUFBc0U7UUFDdEUsZ0NBQWdDO1FBQ2hDLHFIQUFxSDtRQUNySCxRQUFRLEVBQUUsb0JBQVEsQ0FBQyxJQUFJO1FBQ3ZCLGNBQWMsRUFBRSwwQkFBYyxDQUFDLE1BQU07UUFDckMsVUFBVSxFQUFFLEtBQUs7UUFDakIsbUNBQW1DLEVBQUUsRUFBRTtRQUN2QyxtQ0FBbUMsRUFBRSxFQUFFO1FBQ3ZDLHlDQUF5QyxFQUFFLEVBQUU7UUFDN0Msd0NBQXdDO1FBQ3hDLG9CQUFvQixFQUFFLEVBQUU7UUFDeEIsMEdBQTBHO1FBQzFHLDhCQUE4QjtRQUM5QiwwQkFBMEIsRUFBRSxJQUFJO1FBQ2hDLGtDQUFrQztRQUNsQyxnQkFBZ0IsRUFBRSxLQUFLO1FBQ3ZCLDhDQUE4QztRQUM5Qyx1QkFBdUIsRUFBRSxFQUFFO1FBQzNCLDhGQUE4RjtRQUM5RiwwRUFBMEU7UUFDMUUsc0JBQXNCLEVBQUUsS0FBSztRQUM3Qiw4QkFBOEIsRUFB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
@@ -30,7 +30,11 @@ const plugin = {
30
30
  package: '@eggjs/tegg-aop-plugin',
31
31
  },
32
32
  view: {
33
- enable: false,
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vY29uZmlnL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLE1BQU0sTUFBTSxHQUFjO0lBQ3hCLElBQUksRUFBRTtRQUNKLE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLG9CQUFvQjtLQUM5QjtJQUNELFVBQVUsRUFBRTtRQUNWLE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLG9CQUFvQjtLQUM5QjtJQUNELGNBQWMsRUFBRTtRQUNkLE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLCtCQUErQjtLQUN6QztJQUNELFlBQVksRUFBRTtRQUNaLE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLDZCQUE2QjtLQUN2QztJQUNELE9BQU8sRUFBRTtRQUNQLE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLHdCQUF3QjtLQUNsQztJQUNELGNBQWMsRUFBRTtRQUNkLE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLDZCQUE2QjtLQUN2QztJQUNELFNBQVMsRUFBRTtRQUNULE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLHdCQUF3QjtLQUNsQztJQUNELElBQUksRUFBRTtRQUNKLE1BQU0sRUFBRSxLQUFLO0tBQ2Q7SUFDRCxNQUFNLEVBQUU7UUFDTixNQUFNLEVBQUUsSUFBSTtRQUNaLE9BQU8sRUFBRSxZQUFZO0tBQ3RCO0lBQ0QsZUFBZSxFQUFFO1FBQ2YsTUFBTSxFQUFFLElBQUk7UUFDWixPQUFPLEVBQUUsc0JBQXNCO0tBQ2hDO0lBQ0QsS0FBSyxFQUFFO1FBQ0wsTUFBTSxFQUFFLElBQUk7UUFDWixPQUFPLEVBQUUsV0FBVztLQUNyQjtJQUNELElBQUksRUFBRTtRQUNKLE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLFVBQVU7S0FDcEI7Q0FDRixDQUFDO0FBRUYsa0JBQWUsTUFBTSxDQUFDIn0=
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vY29uZmlnL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLE1BQU0sTUFBTSxHQUFjO0lBQ3hCLElBQUksRUFBRTtRQUNKLE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLG9CQUFvQjtLQUM5QjtJQUNELFVBQVUsRUFBRTtRQUNWLE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLG9CQUFvQjtLQUM5QjtJQUNELGNBQWMsRUFBRTtRQUNkLE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLCtCQUErQjtLQUN6QztJQUNELFlBQVksRUFBRTtRQUNaLE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLDZCQUE2QjtLQUN2QztJQUNELE9BQU8sRUFBRTtRQUNQLE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLHdCQUF3QjtLQUNsQztJQUNELGNBQWMsRUFBRTtRQUNkLE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLDZCQUE2QjtLQUN2QztJQUNELFNBQVMsRUFBRTtRQUNULE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLHdCQUF3QjtLQUNsQztJQUNELElBQUksRUFBRTtRQUNKLE1BQU0sRUFBRSxJQUFJO0tBQ2I7SUFDRCxRQUFRLEVBQUU7UUFDUixNQUFNLEVBQUUsSUFBSTtRQUNaLE9BQU8sRUFBRSxtQkFBbUI7S0FDN0I7SUFDRCxNQUFNLEVBQUU7UUFDTixNQUFNLEVBQUUsSUFBSTtRQUNaLE9BQU8sRUFBRSxZQUFZO0tBQ3RCO0lBQ0QsZUFBZSxFQUFFO1FBQ2YsTUFBTSxFQUFFLElBQUk7UUFDWixPQUFPLEVBQUUsc0JBQXNCO0tBQ2hDO0lBQ0QsS0FBSyxFQUFFO1FBQ0wsTUFBTSxFQUFFLElBQUk7UUFDWixPQUFPLEVBQUUsV0FBVztLQUNyQjtJQUNELElBQUksRUFBRTtRQUNKLE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLFVBQVU7S0FDcEI7Q0FDRixDQUFDO0FBRUYsa0JBQWUsTUFBTSxDQUFDIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cnpmcore",
3
- "version": "3.10.0",
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",