UNPKG

ngx-captcha

Version:

Dynamic captcha (Google reCaptcha) implementation for Angular

89 lines 10.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 InvisibleReCaptchaComponent extends BaseReCaptchaComponentDirective { constructor(renderer, zone, injector, scriptService) { super(renderer, zone, injector, scriptService); this.renderer = renderer; this.zone = zone; this.injector = injector; this.scriptService = scriptService; /** * This size representing invisible captcha */ this.size = 'invisible'; /** * Theme */ this.theme = 'light'; /** * Badge */ this.badge = 'bottomright'; this.recaptchaType = ReCaptchaType.InvisibleReCaptcha; } ngOnChanges(changes) { super.ngOnChanges(changes); } /** * Programatically invoke the reCAPTCHA check. Used if the invisible reCAPTCHA is on a div instead of a button. */ execute() { // execute captcha this.zone.runOutsideAngular(() => this.reCaptchaApi.execute(this.captchaId)); } captchaSpecificSetup() { } /** * 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()), 'badge': this.badge, 'type': this.type, 'tabindex': this.tabIndex, 'size': this.size, 'theme': this.theme }; } } /** @nocollapse */ InvisibleReCaptchaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: InvisibleReCaptchaComponent, deps: [{ token: i0.Renderer2 }, { token: i0.NgZone }, { token: i0.Injector }, { token: i1.ScriptService }], target: i0.ɵɵFactoryTarget.Component }); /** @nocollapse */ InvisibleReCaptchaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: InvisibleReCaptchaComponent, selector: "ngx-invisible-recaptcha", inputs: { theme: "theme", badge: "badge" }, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((() => InvisibleReCaptchaComponent)), 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: InvisibleReCaptchaComponent, decorators: [{ type: Component, args: [{ selector: 'ngx-invisible-recaptcha', template: ` <div #captchaWrapperElem></div>`, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((() => InvisibleReCaptchaComponent)), multi: true, } ] }] }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.NgZone }, { type: i0.Injector }, { type: i1.ScriptService }]; }, propDecorators: { theme: [{ type: Input }], badge: [{ type: Input }], captchaWrapperElem: [{ type: ViewChild, args: ['captchaWrapperElem', { static: false }] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW52aXNpYmxlLXJlY2FwdGNoYS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvaW52aXNpYmxlLXJlY2FwdGNoYS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFFBQVEsRUFDUixLQUFLLEVBQ0wsTUFBTSxFQUVOLFNBQVMsRUFFVCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7O0FBY3hGLE1BQU0sT0FBTywyQkFBNEIsU0FBUSwrQkFBK0I7SUFxQjlFLFlBQ1ksUUFBbUIsRUFDbkIsSUFBWSxFQUNaLFFBQWtCLEVBQ2xCLGFBQTRCO1FBRXRDLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUxyQyxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLFNBQUksR0FBSixJQUFJLENBQVE7UUFDWixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBdkJ4Qzs7V0FFRztRQUNnQixTQUFJLEdBQUcsV0FBVyxDQUFDO1FBRXRDOztXQUVHO1FBQ00sVUFBSyxHQUFxQixPQUFPLENBQUM7UUFFM0M7O1dBRUc7UUFDTSxVQUFLLEdBQTRDLGFBQWEsQ0FBQztRQUk5RCxrQkFBYSxHQUFrQixhQUFhLENBQUMsa0JBQWtCLENBQUM7SUFTMUUsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRDs7T0FFRztJQUNILE9BQU87UUFDTCxrQkFBa0I7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRVMsb0JBQW9CO0lBQzlCLENBQUM7SUFFRDs7TUFFRTtJQUNRLG9CQUFvQjtRQUM1QixPQUFPO1lBQ0wsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3ZCLFVBQVUsRUFBRSxDQUFDLFFBQWEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNqRixrQkFBa0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUMxRSxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUN2RSxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDbkIsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2pCLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN6QixNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDakIsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLO1NBQ3BCLENBQUM7SUFDSixDQUFDOzsySUE1RFUsMkJBQTJCOytIQUEzQiwyQkFBMkIsOEZBUjNCO1FBQ1Q7WUFDRSxPQUFPLEVBQUUsaUJBQWlCO1lBQzFCLFdBQVcsRUFBRSxVQUFVLEVBQUMsR0FBRyxFQUFFLENBQUMsMkJBQTJCLEVBQUM7WUFDMUQsS0FBSyxFQUFFLElBQUk7U0FDWjtLQUNGLGdNQVJTO2tDQUNzQjsyRkFTckIsMkJBQTJCO2tCQVp2QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx5QkFBeUI7b0JBQ25DLFFBQVEsRUFBRTtrQ0FDc0I7b0JBQ2hDLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxFQUFDLEdBQUcsRUFBRSw0QkFBNEIsRUFBQzs0QkFDMUQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7aUJBQ0Y7d0tBV1UsS0FBSztzQkFBYixLQUFLO2dCQUtHLEtBQUs7c0JBQWIsS0FBSztnQkFFOEMsa0JBQWtCO3NCQUFyRSxTQUFTO3VCQUFDLG9CQUFvQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgZm9yd2FyZFJlZixcclxuICBJbmplY3RvcixcclxuICBJbnB1dCxcclxuICBOZ1pvbmUsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIFJlbmRlcmVyMixcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5pbXBvcnQgeyBSZUNhcHRjaGFUeXBlIH0gZnJvbSAnLi4vbW9kZWxzL3JlY2FwdGNoYS10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBTY3JpcHRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc2NyaXB0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlUmVDYXB0Y2hhQ29tcG9uZW50RGlyZWN0aXZlIH0gZnJvbSAnLi9iYXNlLXJlLWNhcHRjaGEtY29tcG9uZW50LmRpcmVjdGl2ZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ25neC1pbnZpc2libGUtcmVjYXB0Y2hhJyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gIDxkaXYgI2NhcHRjaGFXcmFwcGVyRWxlbT48L2Rpdj5gLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gSW52aXNpYmxlUmVDYXB0Y2hhQ29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW52aXNpYmxlUmVDYXB0Y2hhQ29tcG9uZW50IGV4dGVuZHMgQmFzZVJlQ2FwdGNoYUNvbXBvbmVudERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgc2l6ZSByZXByZXNlbnRpbmcgaW52aXNpYmxlIGNhcHRjaGFcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2l6ZSA9ICdpbnZpc2libGUnO1xyXG5cclxuICAvKipcclxuICAgKiBUaGVtZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHRoZW1lOiAnZGFyaycgfCAnbGlnaHQnID0gJ2xpZ2h0JztcclxuXHJcbiAgLyoqXHJcbiAgICogQmFkZ2VcclxuICAgKi9cclxuICBASW5wdXQoKSBiYWRnZTogJ2JvdHRvbXJpZ2h0JyB8ICdib3R0b21sZWZ0JyB8ICdpbmxpbmUnID0gJ2JvdHRvbXJpZ2h0JztcclxuXHJcbiAgQFZpZXdDaGlsZCgnY2FwdGNoYVdyYXBwZXJFbGVtJywgeyBzdGF0aWM6IGZhbHNlIH0pIGNhcHRjaGFXcmFwcGVyRWxlbT86IEVsZW1lbnRSZWY7XHJcblxyXG4gIHByb3RlY3RlZCByZWNhcHRjaGFUeXBlOiBSZUNhcHRjaGFUeXBlID0gUmVDYXB0Y2hhVHlwZS5JbnZpc2libGVSZUNhcHRjaGE7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJvdGVjdGVkIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICBwcm90ZWN0ZWQgem9uZTogTmdab25lLFxyXG4gICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgIHByb3RlY3RlZCBzY3JpcHRTZXJ2aWNlOiBTY3JpcHRTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihyZW5kZXJlciwgem9uZSwgaW5qZWN0b3IsIHNjcmlwdFNlcnZpY2UpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkNoYW5nZXMoY2hhbmdlcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcm9ncmFtYXRpY2FsbHkgaW52b2tlIHRoZSByZUNBUFRDSEEgY2hlY2suIFVzZWQgaWYgdGhlIGludmlzaWJsZSByZUNBUFRDSEEgaXMgb24gYSBkaXYgaW5zdGVhZCBvZiBhIGJ1dHRvbi5cclxuICAgKi9cclxuICBleGVjdXRlKCk6IHZvaWQge1xyXG4gICAgLy8gZXhlY3V0ZSBjYXB0Y2hhXHJcbiAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gdGhpcy5yZUNhcHRjaGFBcGkuZXhlY3V0ZSh0aGlzLmNhcHRjaGFJZCkpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGNhcHRjaGFTcGVjaWZpY1NldHVwKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgKiBHZXRzIHJlQ2FwdGNoYSBwcm9wZXJ0aWVzXHJcbiAgKi9cclxuICBwcm90ZWN0ZWQgZ2V0Q2FwdGNoYVByb3BlcnRpZXMoKTogYW55IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICdzaXRla2V5JzogdGhpcy5zaXRlS2V5LFxyXG4gICAgICAnY2FsbGJhY2snOiAocmVzcG9uc2U6IGFueSkgPT4gdGhpcy56b25lLnJ1bigoKSA9PiB0aGlzLmhhbmRsZUNhbGxiYWNrKHJlc3BvbnNlKSksXHJcbiAgICAgICdleHBpcmVkLWNhbGxiYWNrJzogKCkgPT4gdGhpcy56b25lLnJ1bigoKSA9PiB0aGlzLmhhbmRsZUV4cGlyZUNhbGxiYWNrKCkpLFxyXG4gICAgICAnZXJyb3ItY2FsbGJhY2snOiAoKSA9PiB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMuaGFuZGxlRXJyb3JDYWxsYmFjaygpKSxcclxuICAgICAgJ2JhZGdlJzogdGhpcy5iYWRnZSxcclxuICAgICAgJ3R5cGUnOiB0aGlzLnR5cGUsXHJcbiAgICAgICd0YWJpbmRleCc6IHRoaXMudGFiSW5kZXgsXHJcbiAgICAgICdzaXplJzogdGhpcy5zaXplLFxyXG4gICAgICAndGhlbWUnOiB0aGlzLnRoZW1lXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcblxyXG59XHJcblxyXG4iXX0=