UNPKG

ngx-captcha-ssr

Version:

Dynamic captcha (Google reCaptcha) implementation for Angular

66 lines 9 kB
import { Injectable, NgZone } from "@angular/core"; import { ScriptService } from "./script.service"; import * as i0 from "@angular/core"; import * as i1 from "./script.service"; export class ReCaptchaV3Service { constructor(scriptService, zone) { this.scriptService = scriptService; this.zone = zone; } /** * Executes reCaptcha v3/Enterprise with given action and passes token via callback. You need to verify * this callback in your backend to get meaningful results. * * For more information see https://developers.google.com/recaptcha/docs/v3 * For enterprise see https://cloud.google.com/recaptcha-enterprise/docs * * @param siteKey Site key found in your google admin panel * @param action Action to log * @param callback Callback function to to handle token * @param config Optional configuration like useGlobalDomain to be provided * @param errorCallback Optional Callback function to handle errors */ execute(siteKey, action, callback, config, errorCallback) { this.executeAsPromise(siteKey, action, config) .then(callback) .catch((error) => errorCallback ? errorCallback(error) : console.error(error)); } /** * Executes reCaptcha v3/Enterprise with given action and returns token via Promise. You need to verify * this token in your backend to get meaningful results. * * For more information see https://developers.google.com/recaptcha/docs/v3 * For enterprise see https://cloud.google.com/recaptcha-enterprise/docs * * @param siteKey Site key found in your google admin panel * @param action Action to log * @param config Optional configuration like useGlobalDomain to be provided */ executeAsPromise(siteKey, action, config) { return new Promise((resolve, reject) => { const configuration = config || {}; const onRegister = (grecaptcha) => { this.zone.runOutsideAngular(() => { try { grecaptcha .execute(siteKey, { action }) .then((token) => this.zone.run(() => resolve(token))); } catch (error) { reject(error); } }); }; this.scriptService.registerCaptchaScript(configuration, siteKey, onRegister); }); } } /** @nocollapse */ ReCaptchaV3Service.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ReCaptchaV3Service, deps: [{ token: i1.ScriptService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable }); /** @nocollapse */ ReCaptchaV3Service.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ReCaptchaV3Service, providedIn: "root" }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ReCaptchaV3Service, decorators: [{ type: Injectable, args: [{ providedIn: "root", }] }], ctorParameters: function () { return [{ type: i1.ScriptService }, { type: i0.NgZone }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjYXB0Y2hhX3YzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL3JlY2FwdGNoYV92My5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7O0FBTWpELE1BQU0sT0FBTyxrQkFBa0I7SUFDN0IsWUFBc0IsYUFBNEIsRUFBWSxJQUFZO1FBQXBELGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQVksU0FBSSxHQUFKLElBQUksQ0FBUTtJQUFHLENBQUM7SUFFOUU7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0gsT0FBTyxDQUNMLE9BQWUsRUFDZixNQUFjLEVBQ2QsUUFBaUMsRUFDakMsTUFBK0IsRUFDL0IsYUFBb0M7UUFFcEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDO2FBQzNDLElBQUksQ0FBQyxRQUFRLENBQUM7YUFDZCxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNmLGFBQWEsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUM1RCxDQUFDO0lBQ04sQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSCxnQkFBZ0IsQ0FDZCxPQUFlLEVBQ2YsTUFBYyxFQUNkLE1BQStCO1FBRS9CLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsTUFBTSxhQUFhLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztZQUVuQyxNQUFNLFVBQVUsR0FBRyxDQUFDLFVBQWUsRUFBRSxFQUFFO2dCQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtvQkFDL0IsSUFBSTt3QkFDRixVQUFVOzZCQUNQLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQzs2QkFDNUIsSUFBSSxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUM5RDtvQkFBQyxPQUFPLEtBQUssRUFBRTt3QkFDZCxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7cUJBQ2Y7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUM7WUFFRixJQUFJLENBQUMsYUFBYSxDQUFDLHFCQUFxQixDQUN0QyxhQUFhLEVBQ2IsT0FBTyxFQUNQLFVBQVUsQ0FDWCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOztrSUFuRVUsa0JBQWtCO3NJQUFsQixrQkFBa0IsY0FGakIsTUFBTTsyRkFFUCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgTmdab25lIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbmltcG9ydCB7IFNjcmlwdFNlcnZpY2UgfSBmcm9tIFwiLi9zY3JpcHQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBSZWNhcHRjaGFDb25maWd1cmF0aW9uIH0gZnJvbSBcIi4uL21vZGVscy9yZWNhcHRjaGEtY29uZmlndXJhdGlvblwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46IFwicm9vdFwiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVDYXB0Y2hhVjNTZXJ2aWNlIHtcclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgc2NyaXB0U2VydmljZTogU2NyaXB0U2VydmljZSwgcHJvdGVjdGVkIHpvbmU6IE5nWm9uZSkge31cclxuXHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZXMgcmVDYXB0Y2hhIHYzL0VudGVycHJpc2Ugd2l0aCBnaXZlbiBhY3Rpb24gYW5kIHBhc3NlcyB0b2tlbiB2aWEgY2FsbGJhY2suIFlvdSBuZWVkIHRvIHZlcmlmeVxyXG4gICAqIHRoaXMgY2FsbGJhY2sgaW4geW91ciBiYWNrZW5kIHRvIGdldCBtZWFuaW5nZnVsIHJlc3VsdHMuXHJcbiAgICpcclxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcmVjYXB0Y2hhL2RvY3MvdjNcclxuICAgKiBGb3IgZW50ZXJwcmlzZSBzZWUgaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL3JlY2FwdGNoYS1lbnRlcnByaXNlL2RvY3NcclxuICAgKlxyXG4gICAqIEBwYXJhbSBzaXRlS2V5IFNpdGUga2V5IGZvdW5kIGluIHlvdXIgZ29vZ2xlIGFkbWluIHBhbmVsXHJcbiAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gdG8gbG9nXHJcbiAgICogQHBhcmFtIGNhbGxiYWNrIENhbGxiYWNrIGZ1bmN0aW9uIHRvIHRvIGhhbmRsZSB0b2tlblxyXG4gICAqIEBwYXJhbSBjb25maWcgT3B0aW9uYWwgY29uZmlndXJhdGlvbiBsaWtlIHVzZUdsb2JhbERvbWFpbiB0byBiZSBwcm92aWRlZFxyXG4gICAqIEBwYXJhbSBlcnJvckNhbGxiYWNrIE9wdGlvbmFsIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGhhbmRsZSBlcnJvcnNcclxuICAgKi9cclxuICBleGVjdXRlKFxyXG4gICAgc2l0ZUtleTogc3RyaW5nLFxyXG4gICAgYWN0aW9uOiBzdHJpbmcsXHJcbiAgICBjYWxsYmFjazogKHRva2VuOiBzdHJpbmcpID0+IHZvaWQsXHJcbiAgICBjb25maWc/OiBSZWNhcHRjaGFDb25maWd1cmF0aW9uLFxyXG4gICAgZXJyb3JDYWxsYmFjaz86IChlcnJvcjogYW55KSA9PiB2b2lkXHJcbiAgKTogdm9pZCB7XHJcbiAgICB0aGlzLmV4ZWN1dGVBc1Byb21pc2Uoc2l0ZUtleSwgYWN0aW9uLCBjb25maWcpXHJcbiAgICAgIC50aGVuKGNhbGxiYWNrKVxyXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PlxyXG4gICAgICAgIGVycm9yQ2FsbGJhY2sgPyBlcnJvckNhbGxiYWNrKGVycm9yKSA6IGNvbnNvbGUuZXJyb3IoZXJyb3IpXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeGVjdXRlcyByZUNhcHRjaGEgdjMvRW50ZXJwcmlzZSB3aXRoIGdpdmVuIGFjdGlvbiBhbmQgcmV0dXJucyB0b2tlbiB2aWEgUHJvbWlzZS4gWW91IG5lZWQgdG8gdmVyaWZ5XHJcbiAgICogdGhpcyB0b2tlbiBpbiB5b3VyIGJhY2tlbmQgdG8gZ2V0IG1lYW5pbmdmdWwgcmVzdWx0cy5cclxuICAgKlxyXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9yZWNhcHRjaGEvZG9jcy92M1xyXG4gICAqIEZvciBlbnRlcnByaXNlIHNlZSBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vcmVjYXB0Y2hhLWVudGVycHJpc2UvZG9jc1xyXG4gICAqXHJcbiAgICogQHBhcmFtIHNpdGVLZXkgU2l0ZSBrZXkgZm91bmQgaW4geW91ciBnb29nbGUgYWRtaW4gcGFuZWxcclxuICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiB0byBsb2dcclxuICAgKiBAcGFyYW0gY29uZmlnIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gbGlrZSB1c2VHbG9iYWxEb21haW4gdG8gYmUgcHJvdmlkZWRcclxuICAgKi9cclxuICBleGVjdXRlQXNQcm9taXNlKFxyXG4gICAgc2l0ZUtleTogc3RyaW5nLFxyXG4gICAgYWN0aW9uOiBzdHJpbmcsXHJcbiAgICBjb25maWc/OiBSZWNhcHRjaGFDb25maWd1cmF0aW9uXHJcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBjb25maWcgfHwge307XHJcblxyXG4gICAgICBjb25zdCBvblJlZ2lzdGVyID0gKGdyZWNhcHRjaGE6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBncmVjYXB0Y2hhXHJcbiAgICAgICAgICAgICAgLmV4ZWN1dGUoc2l0ZUtleSwgeyBhY3Rpb24gfSlcclxuICAgICAgICAgICAgICAudGhlbigodG9rZW46IGFueSkgPT4gdGhpcy56b25lLnJ1bigoKSA9PiByZXNvbHZlKHRva2VuKSkpO1xyXG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMuc2NyaXB0U2VydmljZS5yZWdpc3RlckNhcHRjaGFTY3JpcHQoXHJcbiAgICAgICAgY29uZmlndXJhdGlvbixcclxuICAgICAgICBzaXRlS2V5LFxyXG4gICAgICAgIG9uUmVnaXN0ZXJcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=