Viewing File: /usr/local/cpanel/whostmgr/docroot/js2/minpwstrength.js
(function() {
var topConstraint = 0;
var bottomConstraint = 200;
var scaleFactor = 0.5;
var keyIncrement = 10;
var tickSize = 2;
var _lock = YAHOO.widget.Slider.prototype.lock;
var _unlock = YAHOO.widget.Slider.prototype.unlock;
YAHOO.lang.augmentObject(YAHOO.widget.Slider.prototype, {
get_real_value: function() {
return Math.round(this.getValue() * scaleFactor);
},
lock: function() {
_lock.apply(this);
DOM.addClass(this.id, "disabled");
},
unlock: function() {
_unlock.apply(this);
DOM.removeClass(this.id, "disabled");
},
});
var sliders = {};
STRENGTHS.forEach(function(key) {
var slider,
enabler = DOM.get(key + "-enabled"),
bg = key + "-slider-bg",
thumb = key + "-slider-thumb",
valuearea = key + "-slider-value",
textfield = key;
EVENT.onDOMReady(function() {
slider = YAHOO.widget.Slider.getHorizSlider(bg,
thumb, topConstraint, bottomConstraint, tickSize);
sliders[key] = slider;
slider.subscribe("change", function(offsetFromStart) {
var fld = DOM.get(textfield);
var actualValue = slider.get_real_value();
fld.value = actualValue;
if (enabler) {
enabler.checked = true;
}
DOM.get(bg).title = LOCALE.maketext("The password strength must be at least [numf,_1].", actualValue);
});
if (enabler) {
EVENT.on(enabler, "click", function(e) {
if (!this.checked) {
var textFieldEl = DOM.get(textfield);
if (textFieldEl.id == "minpwstrength") {
textFieldEl.value = "0";
} else {
textFieldEl.value = "";
}
}
});
}
var copy_text_to_slider = function() {
var v = parseFloat(DOM.get(textfield).value, 10);
if (typeof v === "number") {
if (enabler) {
enabler.checked = true;
}
if (v > MAX_STRENGTH) {
v = MAX_STRENGTH;
}
slider.setValue(Math.round(v / scaleFactor), true);
}
};
if (CPANEL.dom.has_oninput) {
EVENT.on(textfield, "input", copy_text_to_slider);
} else { // IE 8
EVENT.on(textfield, "keyup", copy_text_to_slider);
EVENT.on(textfield, "paste", copy_text_to_slider);
}
if (!enabler || enabler.checked) {
copy_text_to_slider();
}
});
});
var form;
var formData; // eslint-disable-line no-unused-vars
var newFormData;
var notification;
document.addEventListener("DOMContentLoaded", () => {
form = document.forms["the_form"];
formData = CPANEL.dom.get_data_from_form(form);
});
function tryFetchingAgain(url, remainingTries) {
if (remainingTries < 0) {
return Promise.reject();
}
return new Promise((resolve) => {
setTimeout(() => {
resolve(tryFetching(url, remainingTries));
}, 5000);
});
}
function tryFetching(url, remainingTries) {
return fetch(url)
.then(response => response.json())
.then(result => {
if (result && result.data && result.data.service && result.data.service[0]) {
let status = result.data.service[0].running;
return status === 1 || tryFetchingAgain(url, --remainingTries);
}
})
.catch(() => {
return tryFetchingAgain(url, --remainingTries);
});
}
function checkServiceStatus(service) {
const url = `${this.CPANEL.security_token}/json-api/servicestatus?api.version=1&service=${service}`;
const remainingTries = 3;
return tryFetching(url, remainingTries);
}
function captureNewFormData() {
newFormData = CPANEL.dom.get_data_from_form(form);
return buildDataForApi();
}
function showGrowlSuccessNotice() {
notification = new CPANEL.ajax.Dynamic_Notice({
level: "success",
content: LOCALE.maketext("Success!"),
replaces: notification,
});
}
function clearErrorNoticeContainer() {
const element = DOM.get("cjt_pagenotice_container");
if (element.firstChild) {
element.innerHTML = "";
}
}
function buildErrorMessage() {
const errorMessageTitle = LOCALE.maketext("[output,strong,An error occurred while saving configuration]");
const errorMessageBody = LOCALE.maketext("You should verify that your connection to the server is stable, that a firewall does not block your request, and the [asis, cpsrvd] service is running.");
return errorMessageTitle + "<br />" + errorMessageBody;
}
function showErrorNotice() {
const errorMessage = buildErrorMessage();
CPANEL.ajax.show_api_error(errorMessage);
}
function buildDataForApi() {
const dataForApi = {};
STRENGTHS.forEach(function(key) { // eslint-disable-line no-undef
dataForApi[key] = newFormData[key + "-control"] ? newFormData[key] : "";
});
dataForApi["default"] = newFormData["default"];
return dataForApi;
}
function onSuccess() {
formData = newFormData;
clearErrorNoticeContainer();
showGrowlSuccessNotice();
}
function sendApiRequest(dataForApi, overlay) {
CPANEL.api({
func: "setminimumpasswordstrengths",
catch_api_errors: true,
data: dataForApi,
callback: CPANEL.ajax.build_page_callback(onSuccess, {
hide_on_return: overlay,
}),
});
}
function buildOverlay() {
if (notification && notification.element) {
notification.hide();
}
return new CPANEL.ajax.Page_Progress_Overlay(null, {
covers: form,
status_html: LOCALE.maketext("Saving …"),
});
}
window.save = function save() {
// Capturing form data first because overlay.show() will disable the
// form elements. The elements being disabled is problematic as
// CPANEL.dom.get_data_from_form, used by the capture function, doesn't
// capture disabled form elements.
const dataForApi = captureNewFormData();
const overlay = buildOverlay();
overlay.show();
checkServiceStatus("cpsrvd").then(() => {
sendApiRequest(dataForApi, overlay);
}).catch(() => {
overlay.hide();
showErrorNotice();
});
};
}());
Back to Directory
File Manager