ngx-captcha-ssr
Version:
Dynamic captcha (Google reCaptcha) implementation for Angular
93 lines • 11.2 kB
JavaScript
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 InvisibleReCaptchaComponent 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;
/**
* 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 }, { token: PLATFORM_ID }], 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 }, { type: Object, decorators: [{
type: Inject,
args: [PLATFORM_ID]
}] }]; }, propDecorators: { theme: [{
type: Input
}], badge: [{
type: Input
}], captchaWrapperElem: [{
type: ViewChild,
args: ['captchaWrapperElem', { static: false }]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW52aXNpYmxlLXJlY2FwdGNoYS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvaW52aXNpYmxlLXJlY2FwdGNoYS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUNMLE1BQU0sRUFFTixXQUFXLEVBQ1gsU0FBUyxFQUVULFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOzs7QUFjeEYsTUFBTSxPQUFPLDJCQUE0QixTQUFRLCtCQUErQjtJQXFCOUUsWUFDWSxRQUFtQixFQUNuQixJQUFZLEVBQ1osUUFBa0IsRUFDbEIsYUFBNEIsRUFDUCxVQUFrQjtRQUVqRCxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBTmpELGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNaLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDUCxlQUFVLEdBQVYsVUFBVSxDQUFRO1FBeEJuRDs7V0FFRztRQUNnQixTQUFJLEdBQUcsV0FBVyxDQUFDO1FBRXRDOztXQUVHO1FBQ00sVUFBSyxHQUFxQixPQUFPLENBQUM7UUFFM0M7O1dBRUc7UUFDTSxVQUFLLEdBQTRDLGFBQWEsQ0FBQztRQUk5RCxrQkFBYSxHQUFrQixhQUFhLENBQUMsa0JBQWtCLENBQUM7SUFVMUUsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRDs7T0FFRztJQUNILE9BQU87UUFDTCxrQkFBa0I7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRVMsb0JBQW9CO0lBQzlCLENBQUM7SUFFRDs7TUFFRTtJQUNRLG9CQUFvQjtRQUM1QixPQUFPO1lBQ0wsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3ZCLFVBQVUsRUFBRSxDQUFDLFFBQWEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNqRixrQkFBa0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUMxRSxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUN2RSxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDbkIsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2pCLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN6QixNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDakIsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLO1NBQ3BCLENBQUM7SUFDSixDQUFDOzsySUE3RFUsMkJBQTJCLHNIQTBCNUIsV0FBVzsrSEExQlYsMkJBQTJCLDhGQVIzQjtRQUNUO1lBQ0UsT0FBTyxFQUFFLGlCQUFpQjtZQUMxQixXQUFXLEVBQUUsVUFBVSxFQUFDLEdBQUcsRUFBRSxDQUFDLDJCQUEyQixFQUFDO1lBQzFELEtBQUssRUFBRSxJQUFJO1NBQ1o7S0FDRixnTUFSUztrQ0FDc0I7MkZBU3JCLDJCQUEyQjtrQkFadkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUseUJBQXlCO29CQUNuQyxRQUFRLEVBQUU7a0NBQ3NCO29CQUNoQyxTQUFTLEVBQUU7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsRUFBQyxHQUFHLEVBQUUsNEJBQTRCLEVBQUM7NEJBQzFELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO2lCQUNGOzswQkEyQkksTUFBTTsyQkFBQyxXQUFXOzRDQWhCWixLQUFLO3NCQUFiLEtBQUs7Z0JBS0csS0FBSztzQkFBYixLQUFLO2dCQUU4QyxrQkFBa0I7c0JBQXJFLFNBQVM7dUJBQUMsb0JBQW9CLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBmb3J3YXJkUmVmLFxyXG4gIEluamVjdCxcclxuICBJbmplY3RvcixcclxuICBJbnB1dCxcclxuICBOZ1pvbmUsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIFBMQVRGT1JNX0lELFxyXG4gIFJlbmRlcmVyMixcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5pbXBvcnQgeyBSZUNhcHRjaGFUeXBlIH0gZnJvbSAnLi4vbW9kZWxzL3JlY2FwdGNoYS10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBTY3JpcHRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc2NyaXB0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlUmVDYXB0Y2hhQ29tcG9uZW50RGlyZWN0aXZlIH0gZnJvbSAnLi9iYXNlLXJlLWNhcHRjaGEtY29tcG9uZW50LmRpcmVjdGl2ZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ25neC1pbnZpc2libGUtcmVjYXB0Y2hhJyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gIDxkaXYgI2NhcHRjaGFXcmFwcGVyRWxlbT48L2Rpdj5gLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gSW52aXNpYmxlUmVDYXB0Y2hhQ29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW52aXNpYmxlUmVDYXB0Y2hhQ29tcG9uZW50IGV4dGVuZHMgQmFzZVJlQ2FwdGNoYUNvbXBvbmVudERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgc2l6ZSByZXByZXNlbnRpbmcgaW52aXNpYmxlIGNhcHRjaGFcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2l6ZSA9ICdpbnZpc2libGUnO1xyXG5cclxuICAvKipcclxuICAgKiBUaGVtZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHRoZW1lOiAnZGFyaycgfCAnbGlnaHQnID0gJ2xpZ2h0JztcclxuXHJcbiAgLyoqXHJcbiAgICogQmFkZ2VcclxuICAgKi9cclxuICBASW5wdXQoKSBiYWRnZTogJ2JvdHRvbXJpZ2h0JyB8ICdib3R0b21sZWZ0JyB8ICdpbmxpbmUnID0gJ2JvdHRvbXJpZ2h0JztcclxuXHJcbiAgQFZpZXdDaGlsZCgnY2FwdGNoYVdyYXBwZXJFbGVtJywgeyBzdGF0aWM6IGZhbHNlIH0pIGNhcHRjaGFXcmFwcGVyRWxlbT86IEVsZW1lbnRSZWY7XHJcblxyXG4gIHByb3RlY3RlZCByZWNhcHRjaGFUeXBlOiBSZUNhcHRjaGFUeXBlID0gUmVDYXB0Y2hhVHlwZS5JbnZpc2libGVSZUNhcHRjaGE7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJvdGVjdGVkIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICBwcm90ZWN0ZWQgem9uZTogTmdab25lLFxyXG4gICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgIHByb3RlY3RlZCBzY3JpcHRTZXJ2aWNlOiBTY3JpcHRTZXJ2aWNlLFxyXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcHJvdGVjdGVkIHBsYXRmb3JtSWQ6IE9iamVjdFxyXG4gICkge1xyXG4gICAgc3VwZXIocmVuZGVyZXIsIHpvbmUsIGluamVjdG9yLCBzY3JpcHRTZXJ2aWNlLCBwbGF0Zm9ybUlkKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJvZ3JhbWF0aWNhbGx5IGludm9rZSB0aGUgcmVDQVBUQ0hBIGNoZWNrLiBVc2VkIGlmIHRoZSBpbnZpc2libGUgcmVDQVBUQ0hBIGlzIG9uIGEgZGl2IGluc3RlYWQgb2YgYSBidXR0b24uXHJcbiAgICovXHJcbiAgZXhlY3V0ZSgpOiB2b2lkIHtcclxuICAgIC8vIGV4ZWN1dGUgY2FwdGNoYVxyXG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHRoaXMucmVDYXB0Y2hhQXBpLmV4ZWN1dGUodGhpcy5jYXB0Y2hhSWQpKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBjYXB0Y2hhU3BlY2lmaWNTZXR1cCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICogR2V0cyByZUNhcHRjaGEgcHJvcGVydGllc1xyXG4gICovXHJcbiAgcHJvdGVjdGVkIGdldENhcHRjaGFQcm9wZXJ0aWVzKCk6IGFueSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAnc2l0ZWtleSc6IHRoaXMuc2l0ZUtleSxcclxuICAgICAgJ2NhbGxiYWNrJzogKHJlc3BvbnNlOiBhbnkpID0+IHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5oYW5kbGVDYWxsYmFjayhyZXNwb25zZSkpLFxyXG4gICAgICAnZXhwaXJlZC1jYWxsYmFjayc6ICgpID0+IHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5oYW5kbGVFeHBpcmVDYWxsYmFjaygpKSxcclxuICAgICAgJ2Vycm9yLWNhbGxiYWNrJzogKCkgPT4gdGhpcy56b25lLnJ1bigoKSA9PiB0aGlzLmhhbmRsZUVycm9yQ2FsbGJhY2soKSksXHJcbiAgICAgICdiYWRnZSc6IHRoaXMuYmFkZ2UsXHJcbiAgICAgICd0eXBlJzogdGhpcy50eXBlLFxyXG4gICAgICAndGFiaW5kZXgnOiB0aGlzLnRhYkluZGV4LFxyXG4gICAgICAnc2l6ZSc6IHRoaXMuc2l6ZSxcclxuICAgICAgJ3RoZW1lJzogdGhpcy50aGVtZVxyXG4gICAgfTtcclxuICB9XHJcblxyXG5cclxufVxyXG5cclxuIl19