fakiehmaulana / MODEM HUAWEI WEBUI HILINK IP HUNTER

// ==UserScript==
// @name         MODEM HUAWEI WEBUI HILINK IP HUNTER
// @namespace    http://facebook.com/fakieh.maulana
// @version      13.0
// @description  This userscript automatically reconnects the huawei web ui dashboard until a valid ip listed is detected.
// @author       Fakieh Maulana
// @match        http://192.168.8.1/html/home.html
// @updateURL    https://openuserjs.org/meta/fakiehmaulana/MODEM_HUAWEI_WEBUI_HILINK_IP_HUNTER.meta.js
// ==/UserScript==

(function() {
    'use strict';
    var username = localStorage.iphUsername || "admin";
    var password = localStorage.iphPassword || "admin";
    var working_ip = localStorage.iphPatterns || "" ;
    var RC = localStorage.iphRC || "60" ;

    $('<input type="hidden" id="username" />').val(username).appendTo('body');
    $('<input type="hidden" id="password" />').val(password).appendTo('body');

    $('<div class="wlan_status" />')
        .html('<h2>IP Hunter</h2>')
        .append(
            $('<table id="ip_hunter" width="95%" />')
                .append('<tr><td colspan="2" id="err"></td></tr>')
                .append('<tr><td>Username:</td><td><input type="text" id="iph_username" style="width:92%;" /></td></tr>')
                .append('<tr><td>Password:</td><td><input type="password" id="iph_password" style="width:92%;" /></td></tr>')
                .append('<tr><td>IP Patterns:</td><td><input type="text" id="iph_patterns" style="width:92%;" /></td></tr>')
                .append('<tr><td>Auto Reconnect(detik):</td><td><input type="text" id="iph_RC" style="width:92%;" /></td></tr>')
                .append($('<tr />').html($('<td colspan="5" style="padding: 3px 0;" />')
                .append($('<button style="margin-right: 3px; padding: 3px 10px;" />').text('Save Changes').click(function(){
                        localStorage.iphUsername = $('#iph_username').val();
                        localStorage.iphPassword = $('#iph_password').val();
                        localStorage.iphPatterns = $('#iph_patterns').val();
                        localStorage.iphRC = $('#iph_RC').val();
                        l('Changes has been saved.');
                        $('#password').val($('#iph_password').val());
                        login(g_destnation, function() {
                            console.clear();
                            l('Successfully logged in to dashboard!');
                            s();
                        });
                        setTimeout(function() {
                            if($('.error_message').text().length > 1) {
                                l($('.error_message').text());
                                $('.error_message').hide();
                            }
                        }, 300);
                    location.reload();
                    }))
                    .append($('<button style="margin-right: 3px; padding: 3px 10px;" />').text('Login').click(function(){
                        $('#password').val($('#iph_password').val());
                        login(g_destnation, function() {
                            console.clear();
                            l('Successfully logged in to dashboard!');
                            s();
                        });
                        setTimeout(function() {
                            if($('.error_message').text().length > 1) {
                                l($('.error_message').text());
                                $('.error_message').hide();
                            }
                        }, 300);
                    }))
                    .append($('<button style="margin-right: 3px; padding: 3px 10px;" />').text('Auto Reconnect ON').click(function(){
                    rc();
                    }))
                    .append($('<button style="margin-right: 3px; padding: 3px 10px;" />').text('Connect/Reconnect').click(function(){
                     l(' ');
                    l('Loading..');
                        r();
                    }))
                    .append('<tr><td colspan="2"><textarea style="height:90px;" id="ip_hunter_log" readonly>-IP eg: 10.;100.11;100.12\n-kalo ip nyangkut(ga mau ganti) cabut trs colok modem\n-matiin auto reconnect close browser</textarea></td></tr>')
                ))
        )
        .appendTo('.login_info')
    ;

    $('#iph_username').val(username);
    $('#iph_password').val(password);
    $('#iph_patterns').val(working_ip);
    $('#iph_RC').val(RC);
    function rc() {setInterval(function() {
    r();
    }, RC*1000);
    }
    function l(msg) {
        console.log(msg);
        setTimeout(function() {
            var iphLog = $('#ip_hunter_log')[0];
            iphLog.value += "\n"+msg;
            iphLog.scrollTop = iphLog.scrollHeight;
        }, 200);
    }

    function s() {
        l('Scanning IP...');
        getAjaxData('api/monitoring/status', function($xml) {
            var ret = xml2object($xml);

            if (ret.type == 'response') {
                var current_ip = ret.response.WanIPAddress;
                var supported = false;

                if(current_ip && current_ip !== "") {
                    console.info('Current IP: ', current_ip);
                    l('Current IP: ' + current_ip);

                    working_ip.split(";").forEach(function(ip, index) {
                        if(current_ip.split(ip).length > 1) {
                            supported = true;
                            l('Match pattern: '+ ip);
                        }
                        else {
                            l('IP ('+current_ip+') not match');
                        }
                        if((index + 1) === working_ip.split(";").length) {
                            if(!supported) {
                                l('Reconnecting..');
                                r();
                            }
                            else {
                                l('IP ('+current_ip+') match');
                                l('Connected');
                            }
                        }
                    });
                } else {
                    setTimeout(function() {
                       s();
                    }, 2000);
                }
            }
        }, {
            sync: true
        });

    }

    function r() {
        g_network_action = { dataswitch: "0" };

        //l('Turning off...');
        saveAjaxData('api/dialup/mobile-dataswitch', object2xml('request', g_network_action), function($xml) {
            var ret = xml2object($xml);
            l('Disconnecting...');
            //l('Turned off.');
            if(ret.response == "OK") {
                setTimeout(function() {
                    g_network_action = { dataswitch: "1" };

                    //l('Turning on...');
                    saveAjaxData('api/dialup/mobile-dataswitch', object2xml('request', g_network_action), function($xml) {
                        var ret = xml2object($xml);
                        l('Connecting..');
                        setTimeout(function() {
                           s();
                        }, 2000);
                    });
                }, 2000);
            }
        });
    }

    login(g_destnation, function() {
        console.clear();
        l('Successfully logged in to dashboard !');
        s();
    });

    setTimeout(function() {
        if($('.error_message').text().length > 1) {
            l($('.error_message').text());
            $('.error_message').hide();
        }
    }, 100);
})();