resources/js/capture.js raw
 1(function() {
 2    function init() {
 3        if (typeof QWebChannel === 'undefined' || typeof qt === 'undefined' || !qt.webChannelTransport) {
 4            setTimeout(init, 100);
 5            return;
 6        }
 7
 8        new QWebChannel(qt.webChannelTransport, function(channel) {
 9            window.passwordHelper = channel.objects.passwordHelper;
10            
11            function captureLogin() {
12                var passwords = document.querySelectorAll('input[type="password"]');
13                passwords.forEach(function(pass) {
14                    var form = pass.form;
15                    if (form && !form.dataset.passwordHooked) {
16                        form.dataset.passwordHooked = "true";
17                        
18                        var handler = function() {
19                            var user = form.querySelector('input[type="text"], input[type="email"], input:not([type])');
20                            if (user && user.value && pass.value) {
21                                passwordHelper.saveRequest(window.location.hostname, user.value, pass.value);
22                            }
23                        };
24                        
25                        form.addEventListener('submit', handler);
26                        
27                        var buttons = form.querySelectorAll('button, input[type="submit"], input[type="button"]');
28                        buttons.forEach(function(btn) {
29                            btn.addEventListener('click', handler);
30                        });
31                    }
32                });
33            }
34
35            var observer = new MutationObserver(function(mutations) {
36                captureLogin();
37            });
38            observer.observe(document.body, { childList: true, subtree: true });
39            captureLogin();
40        });
41    }
42    init();
43})();