UNPKG

ngx-captcha

Version:

Dynamic captcha (Google reCaptcha) implementation for Angular

97 lines 11.7 kB
import { Component, ElementRef, forwardRef, Injector, Input, NgZone, 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) { super(renderer, zone, injector, scriptService); this.renderer = renderer; this.zone = zone; this.injector = injector; this.scriptService = scriptService; /** * 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 }], 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 }]; }, propDecorators: { theme: [{ type: Input }], size: [{ type: Input }], captchaWrapperElem: [{ type: ViewChild, args: ['captchaWrapperElem', { static: false }] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjYXB0Y2hhLTIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL3JlY2FwdGNoYS0yLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsUUFBUSxFQUNSLEtBQUssRUFDTCxNQUFNLEVBR04sU0FBUyxFQUVULFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOzs7QUFjeEYsTUFBTSxPQUFPLG1CQUFvQixTQUFRLCtCQUErQjtJQTBCdEUsWUFDWSxRQUFtQixFQUNuQixJQUFZLEVBQ1osUUFBa0IsRUFDbEIsYUFBNEI7UUFFdEMsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBTHJDLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNaLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUE1QnhDOztVQUVFO1FBQ2lCLGtDQUE2QixHQUFHLDRCQUE0QixDQUFDO1FBRWhGOztVQUVFO1FBQ2lCLG1DQUE4QixHQUFHLDZCQUE2QixDQUFDO1FBRWxGOztXQUVHO1FBQ00sVUFBSyxHQUFxQixPQUFPLENBQUM7UUFFM0M7O1VBRUU7UUFDTyxTQUFJLEdBQXlCLFFBQVEsQ0FBQztRQUlyQyxrQkFBYSxHQUFrQixhQUFhLENBQUMsVUFBVSxDQUFDO0lBU2xFLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsV0FBVztRQUNSLE1BQWMsQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDeEQsTUFBYyxDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUM1RCxDQUFDO0lBRVMsb0JBQW9CO1FBQzVCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7TUFFRTtJQUNRLG9CQUFvQjtRQUM1QixPQUFPO1lBQ0wsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3ZCLFVBQVUsRUFBRSxDQUFDLFFBQWEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNqRixrQkFBa0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUMxRSxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUN2RSxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDbkIsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2pCLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNqQixVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDMUIsQ0FBQztJQUNKLENBQUM7SUFFRDs7TUFFRTtJQUNNLGlCQUFpQjtRQUN0QixNQUFjLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxRixNQUFjLENBQUMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLEdBQUcsS0FBSyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvRixDQUFDOzttSUF0RVUsbUJBQW1CO3VIQUFuQixtQkFBbUIsbUZBUm5CO1FBQ1Q7WUFDRSxPQUFPLEVBQUUsaUJBQWlCO1lBQzFCLFdBQVcsRUFBRSxVQUFVLEVBQUMsR0FBRyxFQUFFLENBQUMsbUJBQW1CLEVBQUM7WUFDbEQsS0FBSyxFQUFFLElBQUk7U0FDWjtLQUNGLGdNQVJTO2tDQUNzQjsyRkFTckIsbUJBQW1CO2tCQVovQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLFFBQVEsRUFBRTtrQ0FDc0I7b0JBQ2hDLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxFQUFDLEdBQUcsRUFBRSxvQkFBb0IsRUFBQzs0QkFDbEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7aUJBQ0Y7d0tBZ0JVLEtBQUs7c0JBQWIsS0FBSztnQkFLRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRTZDLGtCQUFrQjtzQkFBcEUsU0FBUzt1QkFBQyxvQkFBb0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIGZvcndhcmRSZWYsXHJcbiAgSW5qZWN0b3IsXHJcbiAgSW5wdXQsXHJcbiAgTmdab25lLFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbmltcG9ydCB7IFJlQ2FwdGNoYVR5cGUgfSBmcm9tICcuLi9tb2RlbHMvcmVjYXB0Y2hhLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IFNjcmlwdFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zY3JpcHQuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VSZUNhcHRjaGFDb21wb25lbnREaXJlY3RpdmUgfSBmcm9tICcuL2Jhc2UtcmUtY2FwdGNoYS1jb21wb25lbnQuZGlyZWN0aXZlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbmd4LXJlY2FwdGNoYTInLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgPGRpdiAjY2FwdGNoYVdyYXBwZXJFbGVtPjwvZGl2PmAsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBSZUNhcHRjaGEyQ29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVDYXB0Y2hhMkNvbXBvbmVudCBleHRlbmRzIEJhc2VSZUNhcHRjaGFDb21wb25lbnREaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcblxyXG4gIC8qKlxyXG4gICogTmFtZSBvZiB0aGUgZ2xvYmFsIGV4cGlyZSBjYWxsYmFja1xyXG4gICovXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHdpbmRvd09uRXJyb3JDYWxsYmFja1Byb3BlcnR5ID0gJ25neF9jYXB0Y2hhX2Vycm9yX2NhbGxiYWNrJztcclxuXHJcbiAgLyoqXHJcbiAgKiBOYW1lIG9mIHRoZSBnbG9iYWwgZXJyb3IgY2FsbGJhY2tcclxuICAqL1xyXG4gIHByb3RlY3RlZCByZWFkb25seSB3aW5kb3dPbkV4cGlyZUNhbGxiYWNrUHJvcGVydHkgPSAnbmd4X2NhcHRjaGFfZXhwaXJlX2NhbGxiYWNrJztcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlbWVcclxuICAgKi9cclxuICBASW5wdXQoKSB0aGVtZTogJ2RhcmsnIHwgJ2xpZ2h0JyA9ICdsaWdodCc7XHJcblxyXG4gIC8qKlxyXG4gICogU2l6ZVxyXG4gICovXHJcbiAgQElucHV0KCkgc2l6ZTogJ2NvbXBhY3QnIHwgJ25vcm1hbCcgPSAnbm9ybWFsJztcclxuXHJcbiAgQFZpZXdDaGlsZCgnY2FwdGNoYVdyYXBwZXJFbGVtJywgeyBzdGF0aWM6IGZhbHNlfSkgY2FwdGNoYVdyYXBwZXJFbGVtPzogRWxlbWVudFJlZjtcclxuXHJcbiAgcHJvdGVjdGVkIHJlY2FwdGNoYVR5cGU6IFJlQ2FwdGNoYVR5cGUgPSBSZUNhcHRjaGFUeXBlLlJlQ2FwdGNoYTI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJvdGVjdGVkIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICBwcm90ZWN0ZWQgem9uZTogTmdab25lLFxyXG4gICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgIHByb3RlY3RlZCBzY3JpcHRTZXJ2aWNlOiBTY3JpcHRTZXJ2aWNlLFxyXG4gICkge1xyXG4gICAgc3VwZXIocmVuZGVyZXIsIHpvbmUsIGluamVjdG9yLCBzY3JpcHRTZXJ2aWNlKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAod2luZG93IGFzIGFueSlbdGhpcy53aW5kb3dPbkVycm9yQ2FsbGJhY2tQcm9wZXJ0eV0gPSB7fTtcclxuICAgICh3aW5kb3cgYXMgYW55KVt0aGlzLndpbmRvd09uRXhwaXJlQ2FsbGJhY2tQcm9wZXJ0eV0gPSB7fTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBjYXB0Y2hhU3BlY2lmaWNTZXR1cCgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVnaXN0ZXJDYWxsYmFja3MoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgcmVDYXB0Y2hhIHByb3BlcnRpZXNcclxuICAqL1xyXG4gIHByb3RlY3RlZCBnZXRDYXB0Y2hhUHJvcGVydGllcygpOiBhbnkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgJ3NpdGVrZXknOiB0aGlzLnNpdGVLZXksXHJcbiAgICAgICdjYWxsYmFjayc6IChyZXNwb25zZTogYW55KSA9PiB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMuaGFuZGxlQ2FsbGJhY2socmVzcG9uc2UpKSxcclxuICAgICAgJ2V4cGlyZWQtY2FsbGJhY2snOiAoKSA9PiB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMuaGFuZGxlRXhwaXJlQ2FsbGJhY2soKSksXHJcbiAgICAgICdlcnJvci1jYWxsYmFjayc6ICgpID0+IHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5oYW5kbGVFcnJvckNhbGxiYWNrKCkpLFxyXG4gICAgICAndGhlbWUnOiB0aGlzLnRoZW1lLFxyXG4gICAgICAndHlwZSc6IHRoaXMudHlwZSxcclxuICAgICAgJ3NpemUnOiB0aGlzLnNpemUsXHJcbiAgICAgICd0YWJpbmRleCc6IHRoaXMudGFiSW5kZXhcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWdpc3RlcnMgZ2xvYmFsIGNhbGxiYWNrc1xyXG4gICovXHJcbiAgcHJpdmF0ZSByZWdpc3RlckNhbGxiYWNrcygpOiB2b2lkIHtcclxuICAgICh3aW5kb3cgYXMgYW55KVt0aGlzLndpbmRvd09uRXJyb3JDYWxsYmFja1Byb3BlcnR5XSA9IHN1cGVyLmhhbmRsZUVycm9yQ2FsbGJhY2suYmluZCh0aGlzKTtcclxuICAgICh3aW5kb3cgYXMgYW55KVt0aGlzLndpbmRvd09uRXhwaXJlQ2FsbGJhY2tQcm9wZXJ0eV0gPSBzdXBlci5oYW5kbGVFeHBpcmVDYWxsYmFjay5iaW5kKHRoaXMpO1xyXG4gIH1cclxufVxyXG5cclxuIl19