UNPKG

ngx-captcha-ssr

Version:

Dynamic captcha (Google reCaptcha) implementation for Angular

101 lines 12.3 kB
import { Component, ElementRef, forwardRef, Inject, Injector, Input, NgZone, PLATFORM_ID, Renderer2, ViewChild, } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { ReCaptchaType } from '../models/recaptcha-type.enum'; import { ScriptService } from '../services/script.service'; import { BaseReCaptchaComponentDirective } from './base-re-captcha-component.directive'; import * as i0 from "@angular/core"; import * as i1 from "../services/script.service"; export class ReCaptcha2Component extends BaseReCaptchaComponentDirective { constructor(renderer, zone, injector, scriptService, platformId) { super(renderer, zone, injector, scriptService, platformId); this.renderer = renderer; this.zone = zone; this.injector = injector; this.scriptService = scriptService; this.platformId = platformId; /** * Name of the global expire callback */ this.windowOnErrorCallbackProperty = 'ngx_captcha_error_callback'; /** * Name of the global error callback */ this.windowOnExpireCallbackProperty = 'ngx_captcha_expire_callback'; /** * Theme */ this.theme = 'light'; /** * Size */ this.size = 'normal'; this.recaptchaType = ReCaptchaType.ReCaptcha2; } ngOnChanges(changes) { super.ngOnChanges(changes); } ngOnDestroy() { window[this.windowOnErrorCallbackProperty] = {}; window[this.windowOnExpireCallbackProperty] = {}; } captchaSpecificSetup() { this.registerCallbacks(); } /** * Gets reCaptcha properties */ getCaptchaProperties() { return { 'sitekey': this.siteKey, 'callback': (response) => this.zone.run(() => this.handleCallback(response)), 'expired-callback': () => this.zone.run(() => this.handleExpireCallback()), 'error-callback': () => this.zone.run(() => this.handleErrorCallback()), 'theme': this.theme, 'type': this.type, 'size': this.size, 'tabindex': this.tabIndex }; } /** * Registers global callbacks */ registerCallbacks() { window[this.windowOnErrorCallbackProperty] = super.handleErrorCallback.bind(this); window[this.windowOnExpireCallbackProperty] = super.handleExpireCallback.bind(this); } } /** @nocollapse */ ReCaptcha2Component.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ReCaptcha2Component, deps: [{ token: i0.Renderer2 }, { token: i0.NgZone }, { token: i0.Injector }, { token: i1.ScriptService }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Component }); /** @nocollapse */ ReCaptcha2Component.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: ReCaptcha2Component, selector: "ngx-recaptcha2", inputs: { theme: "theme", size: "size" }, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((() => ReCaptcha2Component)), multi: true, } ], viewQueries: [{ propertyName: "captchaWrapperElem", first: true, predicate: ["captchaWrapperElem"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: ` <div #captchaWrapperElem></div>`, isInline: true }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ReCaptcha2Component, decorators: [{ type: Component, args: [{ selector: 'ngx-recaptcha2', template: ` <div #captchaWrapperElem></div>`, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((() => ReCaptcha2Component)), multi: true, } ] }] }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.NgZone }, { type: i0.Injector }, { type: i1.ScriptService }, { type: Object, decorators: [{ type: Inject, args: [PLATFORM_ID] }] }]; }, propDecorators: { theme: [{ type: Input }], size: [{ type: Input }], captchaWrapperElem: [{ type: ViewChild, args: ['captchaWrapperElem', { static: false }] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjYXB0Y2hhLTIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL3JlY2FwdGNoYS0yLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBQ0wsTUFBTSxFQUdOLFdBQVcsRUFDWCxTQUFTLEVBRVQsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7OztBQWN4RixNQUFNLE9BQU8sbUJBQW9CLFNBQVEsK0JBQStCO0lBMEJ0RSxZQUNZLFFBQW1CLEVBQ25CLElBQVksRUFDWixRQUFrQixFQUNsQixhQUE0QixFQUNQLFVBQWtCO1FBRWpELEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFOakQsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixTQUFJLEdBQUosSUFBSSxDQUFRO1FBQ1osYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUNQLGVBQVUsR0FBVixVQUFVLENBQVE7UUE3Qm5EOztVQUVFO1FBQ2lCLGtDQUE2QixHQUFHLDRCQUE0QixDQUFDO1FBRWhGOztVQUVFO1FBQ2lCLG1DQUE4QixHQUFHLDZCQUE2QixDQUFDO1FBRWxGOztXQUVHO1FBQ00sVUFBSyxHQUFxQixPQUFPLENBQUM7UUFFM0M7O1VBRUU7UUFDTyxTQUFJLEdBQXlCLFFBQVEsQ0FBQztRQUlyQyxrQkFBYSxHQUFrQixhQUFhLENBQUMsVUFBVSxDQUFDO0lBVWxFLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsV0FBVztRQUNSLE1BQWMsQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDeEQsTUFBYyxDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUM1RCxDQUFDO0lBRVMsb0JBQW9CO1FBQzVCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7TUFFRTtJQUNRLG9CQUFvQjtRQUM1QixPQUFPO1lBQ0wsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3ZCLFVBQVUsRUFBRSxDQUFDLFFBQWEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNqRixrQkFBa0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUMxRSxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUN2RSxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDbkIsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2pCLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNqQixVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDMUIsQ0FBQztJQUNKLENBQUM7SUFFRDs7TUFFRTtJQUNNLGlCQUFpQjtRQUN0QixNQUFjLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxRixNQUFjLENBQUMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLEdBQUcsS0FBSyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvRixDQUFDOzttSUF2RVUsbUJBQW1CLHNIQStCcEIsV0FBVzt1SEEvQlYsbUJBQW1CLG1GQVJuQjtRQUNUO1lBQ0UsT0FBTyxFQUFFLGlCQUFpQjtZQUMxQixXQUFXLEVBQUUsVUFBVSxFQUFDLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixFQUFDO1lBQ2xELEtBQUssRUFBRSxJQUFJO1NBQ1o7S0FDRixnTUFSUztrQ0FDc0I7MkZBU3JCLG1CQUFtQjtrQkFaL0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixRQUFRLEVBQUU7a0NBQ3NCO29CQUNoQyxTQUFTLEVBQUU7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsRUFBQyxHQUFHLEVBQUUsb0JBQW9CLEVBQUM7NEJBQ2xELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO2lCQUNGOzswQkFnQ0ksTUFBTTsyQkFBQyxXQUFXOzRDQWhCWixLQUFLO3NCQUFiLEtBQUs7Z0JBS0csSUFBSTtzQkFBWixLQUFLO2dCQUU2QyxrQkFBa0I7c0JBQXBFLFNBQVM7dUJBQUMsb0JBQW9CLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIGZvcndhcmRSZWYsXHJcbiAgSW5qZWN0LFxyXG4gIEluamVjdG9yLFxyXG4gIElucHV0LFxyXG4gIE5nWm9uZSxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIFBMQVRGT1JNX0lELFxyXG4gIFJlbmRlcmVyMixcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5pbXBvcnQgeyBSZUNhcHRjaGFUeXBlIH0gZnJvbSAnLi4vbW9kZWxzL3JlY2FwdGNoYS10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBTY3JpcHRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc2NyaXB0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlUmVDYXB0Y2hhQ29tcG9uZW50RGlyZWN0aXZlIH0gZnJvbSAnLi9iYXNlLXJlLWNhcHRjaGEtY29tcG9uZW50LmRpcmVjdGl2ZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ25neC1yZWNhcHRjaGEyJyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gIDxkaXYgI2NhcHRjaGFXcmFwcGVyRWxlbT48L2Rpdj5gLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUmVDYXB0Y2hhMkNvbXBvbmVudCksXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgfVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFJlQ2FwdGNoYTJDb21wb25lbnQgZXh0ZW5kcyBCYXNlUmVDYXB0Y2hhQ29tcG9uZW50RGlyZWN0aXZlIGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG5cclxuICAvKipcclxuICAqIE5hbWUgb2YgdGhlIGdsb2JhbCBleHBpcmUgY2FsbGJhY2tcclxuICAqL1xyXG4gIHByb3RlY3RlZCByZWFkb25seSB3aW5kb3dPbkVycm9yQ2FsbGJhY2tQcm9wZXJ0eSA9ICduZ3hfY2FwdGNoYV9lcnJvcl9jYWxsYmFjayc7XHJcblxyXG4gIC8qKlxyXG4gICogTmFtZSBvZiB0aGUgZ2xvYmFsIGVycm9yIGNhbGxiYWNrXHJcbiAgKi9cclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgd2luZG93T25FeHBpcmVDYWxsYmFja1Byb3BlcnR5ID0gJ25neF9jYXB0Y2hhX2V4cGlyZV9jYWxsYmFjayc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZW1lXHJcbiAgICovXHJcbiAgQElucHV0KCkgdGhlbWU6ICdkYXJrJyB8ICdsaWdodCcgPSAnbGlnaHQnO1xyXG5cclxuICAvKipcclxuICAqIFNpemVcclxuICAqL1xyXG4gIEBJbnB1dCgpIHNpemU6ICdjb21wYWN0JyB8ICdub3JtYWwnID0gJ25vcm1hbCc7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2NhcHRjaGFXcmFwcGVyRWxlbScsIHsgc3RhdGljOiBmYWxzZX0pIGNhcHRjaGFXcmFwcGVyRWxlbT86IEVsZW1lbnRSZWY7XHJcblxyXG4gIHByb3RlY3RlZCByZWNhcHRjaGFUeXBlOiBSZUNhcHRjaGFUeXBlID0gUmVDYXB0Y2hhVHlwZS5SZUNhcHRjaGEyO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByb3RlY3RlZCByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgcHJvdGVjdGVkIHpvbmU6IE5nWm9uZSxcclxuICAgIHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBwcm90ZWN0ZWQgc2NyaXB0U2VydmljZTogU2NyaXB0U2VydmljZSxcclxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByb3RlY3RlZCBwbGF0Zm9ybUlkOiBPYmplY3RcclxuICApIHtcclxuICAgIHN1cGVyKHJlbmRlcmVyLCB6b25lLCBpbmplY3Rvciwgc2NyaXB0U2VydmljZSwgcGxhdGZvcm1JZCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgKHdpbmRvdyBhcyBhbnkpW3RoaXMud2luZG93T25FcnJvckNhbGxiYWNrUHJvcGVydHldID0ge307XHJcbiAgICAod2luZG93IGFzIGFueSlbdGhpcy53aW5kb3dPbkV4cGlyZUNhbGxiYWNrUHJvcGVydHldID0ge307XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgY2FwdGNoYVNwZWNpZmljU2V0dXAoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlZ2lzdGVyQ2FsbGJhY2tzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHJlQ2FwdGNoYSBwcm9wZXJ0aWVzXHJcbiAgKi9cclxuICBwcm90ZWN0ZWQgZ2V0Q2FwdGNoYVByb3BlcnRpZXMoKTogYW55IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICdzaXRla2V5JzogdGhpcy5zaXRlS2V5LFxyXG4gICAgICAnY2FsbGJhY2snOiAocmVzcG9uc2U6IGFueSkgPT4gdGhpcy56b25lLnJ1bigoKSA9PiB0aGlzLmhhbmRsZUNhbGxiYWNrKHJlc3BvbnNlKSksXHJcbiAgICAgICdleHBpcmVkLWNhbGxiYWNrJzogKCkgPT4gdGhpcy56b25lLnJ1bigoKSA9PiB0aGlzLmhhbmRsZUV4cGlyZUNhbGxiYWNrKCkpLFxyXG4gICAgICAnZXJyb3ItY2FsbGJhY2snOiAoKSA9PiB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMuaGFuZGxlRXJyb3JDYWxsYmFjaygpKSxcclxuICAgICAgJ3RoZW1lJzogdGhpcy50aGVtZSxcclxuICAgICAgJ3R5cGUnOiB0aGlzLnR5cGUsXHJcbiAgICAgICdzaXplJzogdGhpcy5zaXplLFxyXG4gICAgICAndGFiaW5kZXgnOiB0aGlzLnRhYkluZGV4XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVnaXN0ZXJzIGdsb2JhbCBjYWxsYmFja3NcclxuICAqL1xyXG4gIHByaXZhdGUgcmVnaXN0ZXJDYWxsYmFja3MoKTogdm9pZCB7XHJcbiAgICAod2luZG93IGFzIGFueSlbdGhpcy53aW5kb3dPbkVycm9yQ2FsbGJhY2tQcm9wZXJ0eV0gPSBzdXBlci5oYW5kbGVFcnJvckNhbGxiYWNrLmJpbmQodGhpcyk7XHJcbiAgICAod2luZG93IGFzIGFueSlbdGhpcy53aW5kb3dPbkV4cGlyZUNhbGxiYWNrUHJvcGVydHldID0gc3VwZXIuaGFuZGxlRXhwaXJlQ2FsbGJhY2suYmluZCh0aGlzKTtcclxuICB9XHJcbn1cclxuXHJcbiJdfQ==