PageSourceSearch

https://telekom-partner-crailsheim.de/bundles/contaoantispamform/js/altcha-handler.js?v=c6b70db6

js telekom-partner-crailsheim.de collected 2026-10-07 06:16:50 UTC 3,849 bytes, 105 lines download raw bytes

1// File: src/Resources/public/js/altcha-handler.js
2
3/**
4 * ALTCHA Event Handler
5 *
6 * Verarbeitet Events vom ALTCHA Widget und schreibt Ergebnis in Hidden Input
7 *
8 * WICHTIG: Dieses Script wird NUR geladen wenn ALTCHA aktiv ist (PageListener prüft das)
9 *
10 * @author con2net webServices
11 */
12(function() {
13    'use strict';
14
15    // Warte bis DOM geladen ist
16    if (document.readyState === 'loading') {
17        document.addEventListener('DOMContentLoaded', init);
18    } else {
19        init();
20    }
21
22    function init() {
23        // Alle ALTCHA Widgets finden
24        const widgets = document.querySelectorAll('altcha-widget[data-widget-id]');
25
26        if (widgets.length === 0) {
27            // Keine Widgets gefunden - nur im Debug-Modus warnen
28            if (isDebugMode()) {
29                console.warn('ALTCHA handler loaded but no widgets found');
30            }
31            return;
32        }
33
34          if (isDebugMode()) {
35            console.log('ALTCHA handler initialized for ' + widgets.length + ' widget(s)');
36        }
37
38        // Event-Handler für jedes Widget einrichten
39        widgets.forEach(function(widget) {
40            const widgetId = widget.getAttribute('data-widget-id');
41            const hiddenInput = document.getElementById('ctrl_' + widgetId);
42            const debugMode = widget.hasAttribute('data-debug');
43
44            if (!hiddenInput) {
45                // Fehler IMMER loggen (auch ohne Debug)
46                console.error('ALTCHA: Hidden input not found for widget ' + widgetId);
47                return;
48            }
49
50            // State-Change Event (Challenge-Status ändert sich)
51            widget.addEventListener('statechange', function(ev) {
52                // Nur im Debug-Modus State-Changes loggen
53                if (debugMode) {
54                    console.log('ALTCHA State [' + widgetId + ']:', ev.detail.state);
55                }
56
57                if (ev.detail.state === 'verified') {
58                    // Challenge erfolgreich gelöst
59                    hiddenInput.value = ev.detail.payload;
60
61                    if (debugMode) {
62                        console.log('ALTCHA verified [' + widgetId + ']', {
63                            time: ev.detail.time || 'unknown'
64                        });
65                    }
66                } else if (ev.detail.state === 'error') {
67                    // Fehler IMMER loggen (auch ohne Debug)
68                    console.error('ALTCHA error [' + widgetId + ']:', ev.detail.error);
69                    hiddenInput.value = '';
70                } else if (ev.detail.state === 'verifying') {
71                    if (debugMode) {
72                        console.log('ALTCHA verifying [' + widgetId + ']...');
73                    }
74                } else if (ev.detail.state === 'unverified') {
75                    // Challenge zurückgesetzt
76                    hiddenInput.value = '';
77                }
78            });
79
80            // Server-Verified Event (optional, wenn Server-Validierung aktiviert)
81            widget.addEventListener('serververified', function(ev) {
82                if (debugMode) {
83                    console.log('ALTCHA server-verified [' + widgetId + ']');
84                }
85            });
86
87            // Expired Event (Challenge abgelaufen)
88            widget.addEventListener('expired', function(ev) {
89                // Expired IMMER warnen (auch ohne Debug)
90                console.warn('ALTCHA challenge expired [' + widgetId + ']');
91                hiddenInput.value = '';
92            });
93        });
94    }
95
96    /**
97     * Prüft ob Debug-Modus aktiv ist
98     * @returns {boolean}
99     */
100    function isDebugMode() {
101        // Prüfe ob irgendein Widget das data-debug Attribut hat
102        const debugWidget = document.querySelector('altcha-widget[data-debug]');
103        return debugWidget !== null;
104    }
105})();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.