elcodedocle/chbspassgen

View on GitHub
webapp/passgenClientController.js

Summary

Maintainability
A
2 hrs
Test Coverage
window.addEventListener("load", function () {
    var form = document.getElementById("theForm");
    form.addEventListener("submit", function (event) {
        event.preventDefault();
        requestAndSetPasswordAndEntropy();
    });
    document.getElementById('generated').style.display = 'none';
});
function isEmptyObject(obj) {
    // This works for arrays too.
    for(var name in obj) {
        return false
    }
    return true
}
function requestAndSetPasswordAndEntropy(){
    'use strict';
    //TODO: client input validation
    var xmlhttp, AJAXresponse, parameters,
        allcaps = document.getElementById('allcaps').checked?'true':'false',
        capitalize  = document.getElementById('capitalize').checked?'true':'false',
        punctuate = document.getElementById('punctuate').checked?'true':'false',
        addslashes = document.getElementById('addslashes').checked?'true':'false',
        minWordSize = document.getElementById('minWordSize').value,
        separators = document.getElementById('separators').value,
        level = document.getElementById('level').value,
        passwordField;
    
    if (window.XMLHttpRequest) {
        xmlhttp = new XMLHttpRequest();
    } else {
        //IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
            //console.log(xmlhttp.responseText);
            AJAXresponse=JSON.parse(xmlhttp.responseText);
            passwordField = document.getElementById('password');
            passwordField.value = AJAXresponse.password;
            document.getElementById('entropy').innerText = AJAXresponse.entropy;
            document.getElementById('generated').style.display = 'block';
            //passwordField.size = passwordField.value.length + 5;
            if (!isEmptyObject(AJAXresponse.error)) console.log(AJAXresponse.error);
        }
    };
    //TODO: filter input before send (client-side input validation)
    xmlhttp.open('POST', 'passgenController.php', true);
    parameters = 'allcaps=' + encodeURIComponent(allcaps);
    parameters += "&capitalize=" + encodeURIComponent(capitalize);
    parameters += "&punctuate=" + encodeURIComponent(punctuate);
    parameters += "&addslashes=" + encodeURIComponent(addslashes);
    parameters += "&separators=" + encodeURIComponent(separators);
    parameters += "&minWordSize=" + encodeURIComponent(minWordSize);
    parameters += "&level=" + encodeURIComponent(level);
    xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
    xmlhttp.send(parameters);
    return false;
}