ngx-captcha
Version:
Dynamic captcha (Google reCaptcha) implementation for Angular
97 lines • 11.7 kB
JavaScript
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