vona-module-test-captcha 5.1.15 → 5.1.17
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/.metadata/index.d.ts +0 -36
- package/dist/.metadata/index.d.ts.map +1 -1
- package/dist/index.js +2 -66
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/.metadata/index.ts +0 -52
- package/dist/bean/captchaProvider.bound.d.ts +0 -14
- package/dist/bean/captchaProvider.bound.d.ts.map +0 -1
- package/dist/bean/captchaScene.bound.d.ts +0 -4
- package/dist/bean/captchaScene.bound.d.ts.map +0 -1
- package/src/bean/captchaProvider.bound.ts +0 -56
- package/src/bean/captchaScene.bound.ts +0 -9
|
@@ -52,42 +52,6 @@ declare module 'vona-module-a-web' {
|
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
/** controller: end */
|
|
55
|
-
/** captchaProvider: begin */
|
|
56
|
-
export * from '../bean/captchaProvider.bound.ts';
|
|
57
|
-
import { type IDecoratorCaptchaProviderOptions } from 'vona-module-a-captcha';
|
|
58
|
-
declare module 'vona-module-a-captcha' {
|
|
59
|
-
interface ICaptchaProviderRecord {
|
|
60
|
-
'test-captcha:bound': IDecoratorCaptchaProviderOptions;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
declare module 'vona-module-test-captcha' {
|
|
64
|
-
interface CaptchaProviderBound {
|
|
65
|
-
}
|
|
66
|
-
interface CaptchaProviderBound {
|
|
67
|
-
get $beanFullName(): 'test-captcha.captchaProvider.bound';
|
|
68
|
-
get $onionName(): 'test-captcha:bound';
|
|
69
|
-
get $onionOptions(): IDecoratorCaptchaProviderOptions;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
/** captchaProvider: end */
|
|
73
|
-
/** captchaScene: begin */
|
|
74
|
-
export * from '../bean/captchaScene.bound.ts';
|
|
75
|
-
import { type IDecoratorCaptchaSceneOptions } from 'vona-module-a-captcha';
|
|
76
|
-
declare module 'vona-module-a-captcha' {
|
|
77
|
-
interface ICaptchaSceneRecord {
|
|
78
|
-
'test-captcha:bound': IDecoratorCaptchaSceneOptions;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
declare module 'vona-module-test-captcha' {
|
|
82
|
-
interface CaptchaSceneBound {
|
|
83
|
-
}
|
|
84
|
-
interface CaptchaSceneBound {
|
|
85
|
-
get $beanFullName(): 'test-captcha.captchaScene.bound';
|
|
86
|
-
get $onionName(): 'test-captcha:bound';
|
|
87
|
-
get $onionOptions(): IDecoratorCaptchaSceneOptions;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
/** captchaScene: end */
|
|
91
55
|
/** scope: begin */
|
|
92
56
|
import { BeanScopeBase, type BeanScopeUtil } from 'vona';
|
|
93
57
|
export declare class ScopeModuleTestCaptcha extends BeanScopeBase {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/.metadata/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,KAAK,EAAE,uBAAuB,EAAC,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AAClG,iBAAiB;AACjB,cAAc,kBAAkB,CAAC;AACjC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,mBAAmB,CAAC;AAC3B,OAAO,QAAQ,mBAAmB,CAAC;IAE/B,UAAiB,UAAU;QACzB,qBAAqB,EAAE,iBAAiB,CAAC;KAC1C;CAGJ;AACD,OAAO,QAAQ,0BAA0B,CAAC;CAEzC;AACD,eAAe;AACf,iBAAiB;AACjB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,QAAQ,0BAA0B,CAAC;IAEtC,UAAiB,iBAAiB;QAChC,MAAM,CAAC,EAAE,uBAAuB,CAAC,SAAS,EAAE,iBAAiB,CAAC,uBAAuB,CAAC,CAAC,CAAC;KACzF;CACJ;AACD,eAAe;AACf,wBAAwB;AACxB,cAAc,0BAA0B,CAAC;AACzC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,mBAAmB,CAAC;AAC3B,OAAO,QAAQ,mBAAmB,CAAC;IAE/B,UAAiB,iBAAiB;QAChC,sBAAsB,EAAE,yBAAyB,CAAC;KACnD;CAGJ;AACD,OAAO,QAAQ,0BAA0B,CAAC;IAElC,UAAiB,iBAAiB;KAGjC;IAEC,UAAiB,iBAAiB;QAChC,IAAI,aAAa,IAAI,iCAAiC,CAAC;QACvD,IAAI,UAAU,IAAI,sBAAsB,CAAC;QACzC,IAAI,aAAa,IAAI,yBAAyB,CAAC;KAChD;CACV;AACD,sBAAsB;AACtB,wBAAwB;AAExB,OAAuC,0BAA0B,CAAC;AAClE,OAAO,QAAQ,0BAA0B,CAAC;IAEtC,UAAiB,yBAAyB;QACxC,OAAO,CAAC,EAAE,4BAA4B,CAAC,iBAAiB,CAAC,CAAC;KAC3D;CACJ;AACD,OAAO,QAAQ,mBAAmB,CAAC;IACjC,UAAiB,kBAAkB;QAC7B,sBAAsB,EAAE,SAAS,CAAC;KACrC;CAEJ;AAED,sBAAsB;AACtB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/.metadata/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,KAAK,EAAE,uBAAuB,EAAC,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AAClG,iBAAiB;AACjB,cAAc,kBAAkB,CAAC;AACjC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,mBAAmB,CAAC;AAC3B,OAAO,QAAQ,mBAAmB,CAAC;IAE/B,UAAiB,UAAU;QACzB,qBAAqB,EAAE,iBAAiB,CAAC;KAC1C;CAGJ;AACD,OAAO,QAAQ,0BAA0B,CAAC;CAEzC;AACD,eAAe;AACf,iBAAiB;AACjB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,QAAQ,0BAA0B,CAAC;IAEtC,UAAiB,iBAAiB;QAChC,MAAM,CAAC,EAAE,uBAAuB,CAAC,SAAS,EAAE,iBAAiB,CAAC,uBAAuB,CAAC,CAAC,CAAC;KACzF;CACJ;AACD,eAAe;AACf,wBAAwB;AACxB,cAAc,0BAA0B,CAAC;AACzC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,mBAAmB,CAAC;AAC3B,OAAO,QAAQ,mBAAmB,CAAC;IAE/B,UAAiB,iBAAiB;QAChC,sBAAsB,EAAE,yBAAyB,CAAC;KACnD;CAGJ;AACD,OAAO,QAAQ,0BAA0B,CAAC;IAElC,UAAiB,iBAAiB;KAGjC;IAEC,UAAiB,iBAAiB;QAChC,IAAI,aAAa,IAAI,iCAAiC,CAAC;QACvD,IAAI,UAAU,IAAI,sBAAsB,CAAC;QACzC,IAAI,aAAa,IAAI,yBAAyB,CAAC;KAChD;CACV;AACD,sBAAsB;AACtB,wBAAwB;AAExB,OAAuC,0BAA0B,CAAC;AAClE,OAAO,QAAQ,0BAA0B,CAAC;IAEtC,UAAiB,yBAAyB;QACxC,OAAO,CAAC,EAAE,4BAA4B,CAAC,iBAAiB,CAAC,CAAC;KAC3D;CACJ;AACD,OAAO,QAAQ,mBAAmB,CAAC;IACjC,UAAiB,kBAAkB;QAC7B,sBAAsB,EAAE,SAAS,CAAC;KACrC;CAEJ;AAED,sBAAsB;AACtB,mBAAmB;AACnB,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,MAAM,CAAC;AAGzD,qBACa,sBAAuB,SAAQ,aAAa;CAAG;AAE5D,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,OAAO,MAAM,CAAC;AACd,OAAO,QAAQ,MAAM,CAAC;IACpB,UAAiB,gBAAgB;QAC/B,cAAc,EAAE,sBAAsB,CAAC;KACxC;IAED,UAAiB,mBAAmB;QAClC,WAAW,EAAE,sBAAsB,CAAC;KACrC;CAOF;AACD,iBAAiB"}
|
package/dist/index.js
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
import { BeanInfo, BeanBase,
|
|
1
|
+
import { BeanInfo, BeanBase, BeanScopeBase } from 'vona';
|
|
2
2
|
import { __decorate, __metadata, __param } from 'tslib';
|
|
3
3
|
import { Api, v } from 'vona-module-a-openapiutils';
|
|
4
4
|
import { Dto, Web, Arg, Controller } from 'vona-module-a-web';
|
|
5
5
|
import { ZovaRender } from 'zova-rest-cabloy-basic-admin';
|
|
6
6
|
import { Core } from 'vona-module-a-core';
|
|
7
7
|
import { Passport } from 'vona-module-a-user';
|
|
8
|
-
import { createHash } from 'node:crypto';
|
|
9
|
-
import { CaptchaProvider, CaptchaScene } from 'vona-module-a-captcha';
|
|
10
8
|
import { Scope } from 'vona-module-a-bean';
|
|
11
9
|
|
|
12
10
|
let DtoSignin = class DtoSignin {
|
|
@@ -38,73 +36,11 @@ ControllerCaptcha = __decorate([Controller({
|
|
|
38
36
|
module: "test-captcha"
|
|
39
37
|
})], ControllerCaptcha);
|
|
40
38
|
|
|
41
|
-
class CaptchaBoundContext {
|
|
42
|
-
constructor(binding = {
|
|
43
|
-
recipient: `${uuidv4()}@example.test`,
|
|
44
|
-
purpose: 'captcha-regression',
|
|
45
|
-
subject: uuidv4()
|
|
46
|
-
}) {
|
|
47
|
-
this.token = uuidv4();
|
|
48
|
-
this.authorization = void 0;
|
|
49
|
-
this.authorization = {
|
|
50
|
-
binding,
|
|
51
|
-
scope: createHash('sha256').update(JSON.stringify(binding)).digest('hex'),
|
|
52
|
-
ip: createHash('sha256').update(uuidv4()).digest('hex'),
|
|
53
|
-
ttl: 60_000,
|
|
54
|
-
cooldown: 0,
|
|
55
|
-
maxAttempts: 5,
|
|
56
|
-
recipientLimits: [{
|
|
57
|
-
limit: 10,
|
|
58
|
-
windowMs: 60_000
|
|
59
|
-
}],
|
|
60
|
-
ipLimits: [{
|
|
61
|
-
limit: 10,
|
|
62
|
-
windowMs: 60_000
|
|
63
|
-
}]
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
let CaptchaProviderBound = class CaptchaProviderBound extends BeanBase {
|
|
68
|
-
constructor(...args) {
|
|
69
|
-
super(...args);
|
|
70
|
-
this.bound = true;
|
|
71
|
-
}
|
|
72
|
-
authorize(context) {
|
|
73
|
-
if (this.app.meta.isTest && context instanceof CaptchaBoundContext) {
|
|
74
|
-
return context.authorization;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
async create(_options, context) {
|
|
78
|
-
if (!this.app.meta.isTest || !(context instanceof CaptchaBoundContext)) {
|
|
79
|
-
return this.app.throw(403);
|
|
80
|
-
}
|
|
81
|
-
return {
|
|
82
|
-
token: context.token,
|
|
83
|
-
payload: undefined
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
async verify(token, tokenInput) {
|
|
87
|
-
return token === tokenInput;
|
|
88
|
-
}
|
|
89
|
-
};
|
|
90
|
-
CaptchaProviderBound = __decorate([CaptchaProvider(), BeanInfo({
|
|
91
|
-
module: "test-captcha"
|
|
92
|
-
})], CaptchaProviderBound);
|
|
93
|
-
|
|
94
|
-
let CaptchaSceneBound = class CaptchaSceneBound extends BeanBase {};
|
|
95
|
-
CaptchaSceneBound = __decorate([CaptchaScene({
|
|
96
|
-
providers: {
|
|
97
|
-
'test-captcha:bound': true
|
|
98
|
-
}
|
|
99
|
-
}), BeanInfo({
|
|
100
|
-
module: "test-captcha"
|
|
101
|
-
})], CaptchaSceneBound);
|
|
102
|
-
|
|
103
39
|
let ScopeModuleTestCaptcha = class ScopeModuleTestCaptcha extends BeanScopeBase {};
|
|
104
40
|
ScopeModuleTestCaptcha = __decorate([Scope(), BeanInfo({
|
|
105
41
|
module: "test-captcha"
|
|
106
42
|
})], ScopeModuleTestCaptcha);
|
|
107
43
|
/** scope: end */
|
|
108
44
|
|
|
109
|
-
export {
|
|
45
|
+
export { ControllerCaptcha, DtoSignin, ScopeModuleTestCaptcha };
|
|
110
46
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/dto/signin.ts","../src/controller/captcha.ts","../src
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/dto/signin.ts","../src/controller/captcha.ts","../src/.metadata/index.ts"],"sourcesContent":[null,null,null],"names":["DtoSignin","constructor","username","password","captcha","__decorate","Api","field","prototype","v","min","ZovaRender","Dto","__z_BeanInfo","module","ControllerCaptcha","BeanBase","signin","_user","Web","post","Passport","public","Core","captchaVerify","scene","__param","Arg","body","Controller","path","meta","mode","ScopeModuleTestCaptcha","BeanScopeBase","Scope"],"mappings":";;;;;;;;;AAUO,IAAMA,SAAS,GAAf,MAAMA,SAAS,CAAA;EAAAC,WAAAA,GAAA;AAAA,IAAA,IAAA,CAEpBC,QAAQ,GAAA,MAAA;AAAA,IAAA,IAAA,CAGRC,QAAQ,GAAA,MAAA;AAAA,IAAA,IAAA,CAGRC,OAAO,GAAA,MAAA;AAAA,EAAA;;AANPC,UAAA,CAAA,CADCC,GAAG,CAACC,KAAK,EAAE,oCACK,EAAAP,SAAA,CAAAQ,SAAA,EAAA,UAAA,EAAA,MAAA,CAAA;AAGjBH,UAAA,CAAA,CADCC,GAAG,CAACC,KAAK,CAACE,CAAC,CAACC,GAAG,CAAC,CAAC,CAAC,CAAC,oCACH,EAAAV,SAAA,CAAAQ,SAAA,EAAA,UAAA,EAAA,MAAA,CAAA;AAGjBH,UAAA,CAAA,CADCC,GAAG,CAACC,KAAK,CAACI,UAAU,CAACJ,KAAK,CAAC,gCAAgC,CAAC,CAAC,sCACpC,EAAAP,SAAA,CAAAQ,SAAA,EAAA,SAAA,EAAA,MAAA,CAAA;AARfR,SAAS,GAAAK,UAAA,CAAA,CADrBO,GAAG,EAAqB,EAAAC,QAAA,CAAA;EAAAC,MAAA,EAAA;AAAA,CAAA,CAAA,CACZ,EAAAd,SAAS,CASrB;;ACPM,IAAMe,iBAAiB,GAAvB,MAAMA,iBAAkB,SAAQC,QAAQ,CAAA;AAI7C,EAAA,MAAMC,MAAMA,CAAaC,KAAgB,GAAG;;AAAtCb,UAAA,CAAA,CAHLc,GAAG,CAACC,IAAI,CAAC,QAAQ,CAAC,EAClBC,QAAQ,CAACC,MAAM,EAAE,EACjBC,IAAI,CAACC,aAAa,CAAC;AAAEC,EAAAA,KAAK,EAAE;CAAyB,CAAC,EACzCC,OAAA,CAAA,CAAA,EAAAC,GAAG,CAACC,IAAI,EAAE,CAAA,wEAAQ5B,SAAS,CAAA,CAAA,2CAAI,EAAAe,iBAAA,CAAAP,SAAA,EAAA,QAAA,EAAA,IAAA,CAAA;AAJlCO,iBAAiB,GAAAV,UAAA,CAAA,CAD7BwB,UAAU,CAA4B;AAAEC,EAAAA,IAAI,EAAE,SAAS;AAAEC,EAAAA,IAAI,EAAE;AAAEC,IAAAA,IAAI,EAAE,CAAC,MAAM,EAAE,KAAK;AAAC;CAAI,CAAC,EAAAnB,QAAA,CAAA;EAAAC,MAAA,EAAA;AAAA,CAAA,CAAA,CAC/E,EAAAC,iBAAiB,CAK7B;;AC2DM,IAAMkB,sBAAsB,GAA5B,MAAMA,sBAAuB,SAAQC,aAAa,CAAA;AAA5CD,sBAAsB,GAAA5B,UAAA,CAAA,CADlC8B,KAAK,EAAE,EAAAtB,QAAA,CAAA;EAAAC,MAAA,EAAA;AAAA,CAAA,CAAA,CACK,EAAAmB,sBAAsB,CAAyB;AAsB5D;;"}
|
package/package.json
CHANGED
package/src/.metadata/index.ts
CHANGED
|
@@ -69,58 +69,6 @@ declare module 'vona-module-a-web' {
|
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
/** controller: end */
|
|
72
|
-
/** captchaProvider: begin */
|
|
73
|
-
export * from '../bean/captchaProvider.bound.ts';
|
|
74
|
-
|
|
75
|
-
import { type IDecoratorCaptchaProviderOptions } from 'vona-module-a-captcha';
|
|
76
|
-
declare module 'vona-module-a-captcha' {
|
|
77
|
-
|
|
78
|
-
export interface ICaptchaProviderRecord {
|
|
79
|
-
'test-captcha:bound': IDecoratorCaptchaProviderOptions;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
}
|
|
84
|
-
declare module 'vona-module-test-captcha' {
|
|
85
|
-
|
|
86
|
-
export interface CaptchaProviderBound {
|
|
87
|
-
/** @internal */
|
|
88
|
-
get scope(): ScopeModuleTestCaptcha;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
export interface CaptchaProviderBound {
|
|
92
|
-
get $beanFullName(): 'test-captcha.captchaProvider.bound';
|
|
93
|
-
get $onionName(): 'test-captcha:bound';
|
|
94
|
-
get $onionOptions(): IDecoratorCaptchaProviderOptions;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
/** captchaProvider: end */
|
|
98
|
-
/** captchaScene: begin */
|
|
99
|
-
export * from '../bean/captchaScene.bound.ts';
|
|
100
|
-
|
|
101
|
-
import { type IDecoratorCaptchaSceneOptions } from 'vona-module-a-captcha';
|
|
102
|
-
declare module 'vona-module-a-captcha' {
|
|
103
|
-
|
|
104
|
-
export interface ICaptchaSceneRecord {
|
|
105
|
-
'test-captcha:bound': IDecoratorCaptchaSceneOptions;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
}
|
|
110
|
-
declare module 'vona-module-test-captcha' {
|
|
111
|
-
|
|
112
|
-
export interface CaptchaSceneBound {
|
|
113
|
-
/** @internal */
|
|
114
|
-
get scope(): ScopeModuleTestCaptcha;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
export interface CaptchaSceneBound {
|
|
118
|
-
get $beanFullName(): 'test-captcha.captchaScene.bound';
|
|
119
|
-
get $onionName(): 'test-captcha:bound';
|
|
120
|
-
get $onionOptions(): IDecoratorCaptchaSceneOptions;
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
/** captchaScene: end */
|
|
124
72
|
/** scope: begin */
|
|
125
73
|
import { BeanScopeBase, type BeanScopeUtil } from 'vona';
|
|
126
74
|
import { Scope } from 'vona-module-a-bean';
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { ICaptchaAuthorization, ICaptchaBinding, ICaptchaProviderData, ICaptchaProviderExecute } from 'vona-module-a-captcha';
|
|
2
|
-
import { BeanBase } from 'vona';
|
|
3
|
-
export declare class CaptchaBoundContext {
|
|
4
|
-
readonly token: string;
|
|
5
|
-
readonly authorization: ICaptchaAuthorization;
|
|
6
|
-
constructor(binding?: ICaptchaBinding);
|
|
7
|
-
}
|
|
8
|
-
export declare class CaptchaProviderBound extends BeanBase implements ICaptchaProviderExecute<string> {
|
|
9
|
-
readonly bound = true;
|
|
10
|
-
authorize(context: unknown): ICaptchaAuthorization | undefined;
|
|
11
|
-
create(_options: unknown, context?: unknown): Promise<ICaptchaProviderData<string>>;
|
|
12
|
-
verify(token: string, tokenInput: string): Promise<boolean>;
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=captchaProvider.bound.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"captchaProvider.bound.d.ts","sourceRoot":"","sources":["../../src/bean/captchaProvider.bound.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,eAAe,EACf,oBAAoB,EACpB,uBAAuB,EACxB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,QAAQ,EAAU,MAAM,MAAM,CAAC;AAGxC,qBAAa,mBAAmB;IAC9B,QAAQ,CAAC,KAAK,SAAY;IAC1B,QAAQ,CAAC,aAAa,EAAE,qBAAqB,CAAC;gBAG5C,OAAO,GAAE,eAIR;CAaJ;AAED,qBACa,oBAAqB,SAAQ,QAAS,YAAW,uBAAuB,CAAC,MAAM,CAAC;IAC3F,QAAQ,CAAC,KAAK,QAAQ;IAEtB,SAAS,CAAC,OAAO,EAAE,OAAO;IAMpB,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAOnF,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAGlE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"captchaScene.bound.d.ts","sourceRoot":"","sources":["../../src/bean/captchaScene.bound.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAGhC,qBAKa,iBAAkB,SAAQ,QAAQ;CAAG"}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
ICaptchaAuthorization,
|
|
3
|
-
ICaptchaBinding,
|
|
4
|
-
ICaptchaProviderData,
|
|
5
|
-
ICaptchaProviderExecute,
|
|
6
|
-
} from 'vona-module-a-captcha';
|
|
7
|
-
|
|
8
|
-
import { createHash } from 'node:crypto';
|
|
9
|
-
import { BeanBase, uuidv4 } from 'vona';
|
|
10
|
-
import { CaptchaProvider } from 'vona-module-a-captcha';
|
|
11
|
-
|
|
12
|
-
export class CaptchaBoundContext {
|
|
13
|
-
readonly token = uuidv4();
|
|
14
|
-
readonly authorization: ICaptchaAuthorization;
|
|
15
|
-
|
|
16
|
-
constructor(
|
|
17
|
-
binding: ICaptchaBinding = {
|
|
18
|
-
recipient: `${uuidv4()}@example.test`,
|
|
19
|
-
purpose: 'captcha-regression',
|
|
20
|
-
subject: uuidv4(),
|
|
21
|
-
},
|
|
22
|
-
) {
|
|
23
|
-
this.authorization = {
|
|
24
|
-
binding,
|
|
25
|
-
scope: createHash('sha256').update(JSON.stringify(binding)).digest('hex'),
|
|
26
|
-
ip: createHash('sha256').update(uuidv4()).digest('hex'),
|
|
27
|
-
ttl: 60_000,
|
|
28
|
-
cooldown: 0,
|
|
29
|
-
maxAttempts: 5,
|
|
30
|
-
recipientLimits: [{ limit: 10, windowMs: 60_000 }],
|
|
31
|
-
ipLimits: [{ limit: 10, windowMs: 60_000 }],
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
@CaptchaProvider()
|
|
37
|
-
export class CaptchaProviderBound extends BeanBase implements ICaptchaProviderExecute<string> {
|
|
38
|
-
readonly bound = true;
|
|
39
|
-
|
|
40
|
-
authorize(context: unknown) {
|
|
41
|
-
if (this.app.meta.isTest && context instanceof CaptchaBoundContext) {
|
|
42
|
-
return context.authorization;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
async create(_options: unknown, context?: unknown): Promise<ICaptchaProviderData<string>> {
|
|
47
|
-
if (!this.app.meta.isTest || !(context instanceof CaptchaBoundContext)) {
|
|
48
|
-
return this.app.throw(403);
|
|
49
|
-
}
|
|
50
|
-
return { token: context.token, payload: undefined };
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
async verify(token: string, tokenInput: string): Promise<boolean> {
|
|
54
|
-
return token === tokenInput;
|
|
55
|
-
}
|
|
56
|
-
}
|