Skip to content

Instantly share code, notes, and snippets.

@fer-ri
Created December 13, 2018 12:48
Show Gist options
  • Save fer-ri/109f5cdc8a5a045d7271d25aebc60943 to your computer and use it in GitHub Desktop.
Save fer-ri/109f5cdc8a5a045d7271d25aebc60943 to your computer and use it in GitHub Desktop.
Serverpilot.com js
var SPManageConfig = {
loginPage: "/login",
csrfCookie: "csrf_token",
csrfHeader: "X-CSRFToken"
};
var SPManage = (function(a) {
function b() {
return Cookies.get(a.csrfCookie) || ""
}
function c(e, g, f, h) {
h = h || "-";
var i = g + h + f;
return $(e).data(i)
}
function d(e) {
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(e))
}
$.ajaxSetup({
beforeSend: function(f, e) {
if (!d(e.type) && !e.crossDomain) {
f.setRequestHeader(a.csrfHeader, b())
}
}
});
return {
getLoginPage: function() {
return a.loginPage
},
getComponentData: function(f, e) {
return c(f, "sp-component-data", e)
},
generateRandomString: function(g) {
var h = "";
var e = "abcdef0123456789";
var f;
for (f = 0; f < g; f += 1) {
h += e.charAt(Math.floor(Math.random() * e.length))
}
return h
},
Alerts: {
postError: function(e) {
alert("Error: " + e)
},
postWarning: function(e) {
alert("Warning: " + e)
},
postSuccess: function(e) {
alert("Success: " + e)
},
clear: function() {
return undefined
}
},
Validation: {
applyValidationError: function(e) {
alert("Validation error for :" + e.attr("name"))
},
clearValidationErrors: function(e) {
return undefined
}
},
API: {
V1: {
Util: {}
},
Util: {}
}
}
}(SPManageConfig));
SPManage.Validation = (function(b) {
$(function() {
$("[data-sp-validation-error]").addClass("hidden")
});
b.applyValidationError = function(c) {
$(c).parents(".form-group").find("[data-sp-validation-error]").removeClass("hidden");
$(c).parents(".form-group").addClass("has-error")
};
b.clearValidationErrors = function(c) {
c.find("[data-sp-validation-error]").addClass("hidden");
c.find(".form-group").removeClass("has-error")
};
b.isValidIPAddress = function(d) {
var c = /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/;
return c.test(d)
};
b.isValidHostname = function(d) {
var c = /^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$/;
return c.test(d)
};
b.isValidDomain = function(d) {
var c = /^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$/;
if (d.substring(0, 2) == "*.") {
return c.test(d.substring(2))
} else {
return c.test(d)
}
};
b.isValidSysusername = function(d) {
var c = /^[a-z]([a-z0-9\-]){1,32}[a-z0-9]$/;
return c.test(d)
};
b.isValidSysuserPassword = function(c) {
return c.trim() !== "" && c.length >= 8
};
b.isValidAccountPassword = function(c) {
return c.trim() !== "" && c.length >= 8
};
b.isValidDBUserPassword = function(c) {
return c.trim() !== "" && c.length >= 8
};
b.isValidDBName = function(d) {
var c = /^[a-zA-Z0-9\-_]{1,64}$/;
return c.test(d)
};
b.isValidDBUsername = function(d) {
var c = /^[a-zA-Z0-9\-_]{1,16}$/;
return c.test(d)
};
b.isValidAppName = function(d) {
var c = /^[a-z0-9\-]{3,30}$/;
return c.test(d)
};
b.isValidWordpressPassword = function(c) {
return c.trim() !== "" && c.length >= 8
};
b.isValidDBUserPassword = function(c) {
return c.trim() !== "" && c.length >= 8
};
b.isValidEmailAddress = function a(c) {
var d = /^(([^<>()\[\]\\.,;:\s@\"]+(\.[^<>()\[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
return d.test(c)
};
return b
}(SPManage.Validation));
SPManage.API.Util = (function(a) {
a.pollingPromise = function(k, f, i, m) {
var e = {
pollCountMax: 125,
pollInterval: 800
};
if (m === undefined) {
m = e
}
var d = m.pollCountMax;
var c = m.pollInterval;
var h = 0;
var j;
var g = false;
var l = new $.Deferred();
function b() {
if (g) {
return
}
h += 1;
if (h <= d) {
g = true;
k().done(function(n) {
g = false;
try {
if (f(n)) {
clearInterval(j);
l.resolve(n)
} else {
if (i(n)) {
clearInterval(j);
l.reject(n)
} else {
l.notify(n)
}
}
} catch (o) {
clearInterval(j);
l.reject(o.message)
}
}).fail(function(o, p, n) {
g = false;
clearInterval(j);
l.reject(n)
})
} else {
clearInterval(j);
l.reject("Timeout")
}
}
b();
j = setInterval(b, c);
return l.promise()
};
a.elapsedProgressPromise = function(b, e, f) {
var n = new $.Deferred();
var m = Number(e) * 1000;
var g = Number(b) + Number(m);
var d = f[f.length - 1];
var c = m / (f.length);
var j;
function h(p, o) {
return {
message: p,
percent: o
}
}
function k() {
if (g < Date.now()) {
clearInterval(j);
n.notify(h(d, 100));
n.resolve(h(d, 100))
} else {
if (i === f.length) {
clearInterval(j);
n.resolve(h(d, 100))
} else {
var o = (i + 1) / f.length;
n.notify(h(f[i], o * 100));
i += 1
}
}
}
var i = 0;
var l = (Date.now() - b) / m;
i = Math.floor(f.length * l);
k();
j = setInterval(k, c);
return n.promise()
};
return a
}(SPManage.API.Util));
SPManage.API.V1 = (function(a) {
a.errorHandlerGenerator = function(d, b) {
if (b === undefined) {
b = false
} else {
b = true
}
var c;
if (d) {
c = "Could not " + d
} else {
c = "Error performing request"
}
return function(h, i, g) {
if (h.status === 401 && window.location.pathname !== SPManage.getLoginPage() && !b) {
window.location = SPManage.getLoginPage();
return
}
var f = g;
if (h.responseJSON && h.responseJSON.error !== undefined && h.responseJSON.error.message !== undefined) {
f = h.responseJSON.error.message
}
var e = c + ": " + f;
SPManage.Alerts.postError(e)
}
};
return a
}(SPManage.API.V1));
SPManage.API.V1 = (function(a) {
a.sshinstallStatusMessages = {
open: "Preparing to install ServerPilot.",
assigned: "Preparing to install ServerPilot.",
expired: "Oops, we didn't attempt to install on this server quickly enough. Please try again.",
started: "Checking server. (45 seconds remaining)",
installing: "Installing ServerPilot. (25 seconds remaining)",
success: "Success!",
unresolveable_hostname_error: "Installation failed. We couldn't resolve your server's hostname to an IP address.",
connection_error: "Installation failed. We couldn't connect to your server over SSH (port 22).",
auth_error: "Installation failed. The root password you provided was incorrect.",
password_auth_disabled_error: "Installation failed. Your server has SSH password authentication disabled. Please try installing ServerPilot manually.",
expired_password_bypass_error: "Installation failed.",
unsupported_distro_error: "Installation failed. Your server is not running Ubuntu 16.04 or 18.04.",
unsupported_arch_error: "Installation failed. Your server is not 64-bit.",
unsupported_kernel_error: "Installation failed. Your server's kernel is too old and is possibly using outdated OpenVZ.",
not_enough_memory_error: "Installation failed. Your server doesn't have enough memory. It should have at least 256 MB.",
mysql_already_installed_error: "Installation failed. MySQL is already installed. We only support installing on clean servers.",
apache_already_installed_error: "Installation failed. Apache is already installed. We only support installing on clean servers.",
nginx_already_installed_error: "Installation failed. Nginx is already installed. We only support installing on clean servers.",
serverpilot_user_exists_error: "Installation failed. It looks like you've already installed ServerPilot on this server.",
dpkg_configure_error: "Installation failed. Your server's packages aren't in a valid state. Try running the command 'sudo dpkg --configure -a'.",
apt_update_error: "Installation failed. There is either a problem with the package repositories your server is using or your server is busy installing other software. You should use a different data center at your provider or try again later.",
api_access_error: "Installation failed. Your server has a problem preventing it from accessing ServerPilot's servers.",
other_error: "Installation failed. An unexpected error occurred.",
};
return a
}(SPManage.API.V1));
SPManage.Util = (function(b) {
function a(f) {
var e = document.createElement("textarea");
e.value = f;
document.body.appendChild(e);
e.focus();
e.select();
try {
var g = document.execCommand("copy");
var d = g ? "successful" : "unsuccessful";
SPManage.Alerts.clear();
if (g) {
SPManage.Alerts.postSuccess("Copied to clipboard");
console.log("navigator.clipboard not available, copied using document.execCommand()")
} else {
SPManage.Alerts.postWarning("Unable to copy to clipboard")
}
} catch (c) {
SPManage.Alerts.postWarning("Unable to copy to clipboard");
console.error("Fallback: Oops, unable to copy", c)
}
document.body.removeChild(e)
}
b.copyTextToClipboard = function(c) {
if (!navigator.clipboard) {
a(c);
return
}
SPManage.Alerts.clear();
navigator.clipboard.writeText(c).then(function() {
SPManage.Alerts.postSuccess("Copied to clipboard");
console.log("Copied using navigator.clipboard")
}, function(d) {
SPManage.Alerts.postWarning("Unable to copy to clipboard");
console.error("Async: Could not copy text: ", d)
})
};
return b
}(SPManage.API.Util));
$(function() {
Highcharts.setOptions({
colors: ["#1c91e0", "#434348", "#90ed7d", "#f7a35c", "#8085e9", "#f15c80", "#e4d354", "#2b908f", "#f45b5b", "#91e8e1"]
})
});
SPManage.API.V1 = (function(a) {
a.post_accountAgreeTermsOfService = function() {
return $.ajax({
url: "/data/account/agree-tos",
method: "POST",
contentType: "application/json",
dataType: "json",
}).fail(SPManage.API.V1.errorHandlerGenerator("agree to the Terms of Service"))
};
return a
}(SPManage.API.V1));
$(function() {
var a = $("[data-sp-agree-tos-form]");
if (!a.length) {
return
}
var b = a.data("sp-agree-tos-next");
a.on("click", "[data-sp-agree-tos-button]", function(c) {
c.preventDefault();
SPManage.API.V1.post_accountAgreeTermsOfService().done(function() {
window.location = b
})
})
});
SPManage.API.V1 = (function(a) {
a.post_PasswordResetRequest = function(b) {
return $.ajax({
url: "/data/accounts/passwordreset/request",
method: "POST",
contentType: "application/json",
dataType: "json",
data: JSON.stringify(b)
}).fail(SPManage.API.V1.errorHandlerGenerator("set new password"))
};
return a
}(SPManage.API.V1));
$(function() {
var a = $("[data-sp-resetpassword-request-form]");
if (!a.length) {
return
}
var f = a.find("[data-sp-form-input]");
var b = a.find('[name="accountEmail"]');
function e() {
f.prop("disabled", true)
}
function c() {
f.prop("disabled", false)
}
function d() {
var g = true;
if (!SPManage.Validation.isValidEmailAddress(b.val())) {
g = false;
SPManage.Validation.applyValidationError(b)
}
return g
}
a.on("submit", function(h) {
h.preventDefault();
if (!d()) {
return
}
var g = {
email: b.val()
};
e();
SPManage.API.V1.post_PasswordResetRequest(g).done(function() {
SPManage.Alerts.postSuccess("We've sent you an email with password reset instructions.");
b.val("")
}).always(function() {
c()
})
})
});
SPManage.API.V1 = (function(a) {
a.post_createSupportTicket = function(b) {
return $.ajax({
url: "/data/support/ticket/create",
method: "POST",
dataType: "json",
contentType: "application/json",
data: JSON.stringify(b)
}).fail(SPManage.API.V1.errorHandlerGenerator("submit support ticket"))
};
return a
}(SPManage.API.V1));
$(function() {
var a = $("[data-sp-open-support-ticket]");
if (!a.length) {
return
}
var e = a.find("[data-sp-form-input]");
var h = a.find("[data-sp-support-ticket-form]");
var d = a.find("[name='subject']");
var g = a.find("[name='body']");
a.on("click", "[data-sp-open-support-ticket-button]", function(i) {
i.preventDefault();
$("[data-sp-open-support-ticket-button]").addClass("hidden");
h.removeClass("hidden");
h.closest(".support-block").get(0).scrollIntoView()
});
function f() {
e.attr("disabled", false)
}
function c() {
e.attr("disabled", true)
}
function b() {
var i = true;
SPManage.Validation.clearValidationErrors(a);
if (d.val().trim() === "") {
i = false;
SPManage.Validation.applyValidationError(d)
}
if (g.val().trim() === "") {
i = false;
SPManage.Validation.applyValidationError(g)
}
return i
}
a.on("click", "[data-sp-support-ticket-button]", function(j) {
j.preventDefault();
SPManage.Alerts.clear();
if (!b()) {
return
}
var i = {
subject: d.val(),
body: g.val()
};
c();
SPManage.API.V1.post_createSupportTicket(i).done(function() {
SPManage.Alerts.postSuccess("Support ticket created");
d.val("");
g.val("");
a.hide();
$("[data-sp-support-ticket-created]").show()
}).always(function() {
f()
})
})
});
SPManage.API.V1 = (function(a) {
a.post_appUpdate = function(b, c) {
return $.ajax({
url: "/data/apps/" + b,
method: "POST",
contentType: "application/json",
dataType: "json",
data: JSON.stringify(c)
}).fail(SPManage.API.V1.errorHandlerGenerator("update app"))
};
a.get_app = function(b) {
return $.getJSON("/data/apps/" + b).fail(SPManage.API.V1.errorHandlerGenerator("obtain app"))
};
return a
}(SPManage.API.V1));
$(document).on("click", "[data-sp-delete-domain]", function(d) {
d.preventDefault();
var c = $(d.currentTarget);
var b = c.data("sp-appid");
var a = c.data("sp-delete-domain");
SPManage.API.V1.get_app(b).pipe(function(g) {
var f = g.data.domains;
var e = [];
if (f.indexOf(a) === -1) {
return
}
f.forEach(function(i) {
if (i !== a) {
e.push(i)
}
});
var h = {
domains: e
};
return SPManage.API.V1.post_appUpdate(b, h)
}).done(function() {
SPManage.Alerts.postSuccessOnNextPageLoad("Domain deleted");
window.location.reload(true)
})
});
$(function() {
var a = $("[data-sp-add-domain-form]");
if (!a.length) {
return
}
var f = a.find("[data-sp-form-input]");
var b = a.find("[name='newDomain']");
var e = a.data("sp-appid");
function d() {
f.prop("disabled", true)
}
function g() {
f.prop("disabled", false)
}
function c() {
SPManage.Validation.clearValidationErrors(a);
var h = true;
if (!SPManage.Validation.isValidDomain(b.val().trim())) {
h = false;
SPManage.Validation.applyValidationError(b)
}
return h
}
a.on("click", "[data-sp-add-domain-button]", function(h) {
h.preventDefault();
SPManage.Alerts.clear();
if (!c()) {
return
}
d();
SPManage.API.V1.get_app(e).pipe(function(j) {
var i = j.data.domains;
var l = b.val().trim();
if (i.indexOf(l) === -1) {
i.push(l)
}
var k = {
domains: i
};
return SPManage.API.V1.post_appUpdate(e, k)
}).done(function() {
SPManage.Alerts.postSuccessOnNextPageLoad("Domain added");
window.location.reload(true)
}).always(function() {
g()
})
})
});
$(function() {
var g = $("[data-sp-update-app-runtime]");
if (!g.length) {
return
}
var i = g.find("[data-sp-form-input]");
var j = g.data("sp-appid");
var c = g.find("[data-sp-edit-app-runtime-button]");
var f = g.find("[data-sp-update-app-runtime-form]");
var h = f.find("[name='newRuntime']");
var d = f.find("[data-sp-update-app-runtime-button]");
var a = f.find("[data-sp-cancel-update-app-runtime-button]");
function b() {
i.prop("disabled", true)
}
function e() {
i.prop("disabled", false)
}
c.on("click", function(k) {
k.preventDefault();
f.removeClass("hidden");
c.closest("div").addClass("hidden")
});
a.on("click", function(l) {
l.preventDefault();
f.addClass("hidden");
c.closest("div").removeClass("hidden");
var k = $("[data-sp-current-runtime]").data("sp-current-runtime");
$('option[value="' + k + '"]').prop("selected", true)
});
d.on("click", function(l) {
l.preventDefault();
b();
var k = {
runtime: h.val()
};
SPManage.API.V1.post_appUpdate(j, k).done(function() {
SPManage.Alerts.postSuccessOnNextPageLoad("PHP version changed");
window.location.reload(true)
}).fail(function() {
e();
f.addClass("hidden");
c.closest("div").removeClass("hidden")
})
})
});
$(function() {
var g = $(".app-stats-chart-wrapper");
if (!g.length) {
return
}
var e = app_nginxstats;
function b(n) {
for (var p = 0; p < e.length; p++) {
if (e[p][0] == n) {
var o = e[p][1]["err_loglines"] || ["No errors on this date."];
$("#app-nginx-errors ul").empty();
for (var d = 0; d < o.length; d++) {
var n = new Date(e[p][0] * 1000);
$("#error-logs-for-date").text("for " + n.toLocaleDateString());
$("#app-nginx-errors ul").append($("<li>").text(o[d]))
}
return
}
}
}
var l = [];
var m = [];
for (var f = 0; f < e.length; f++) {
var h = e[f][0] * 1000;
l.push([h, e[f][1]["hits"]]);
m.push([h, e[f][1]["errs"]])
}
var k = l[l.length - 1][0];
var c = k - 6 * 24 * 3600 * 1000;
var j = false;
var a = {
mouseOver: function() {
if (j) {
return
}
b(this.x / 1000)
},
click: function() {
j = true;
b(this.x / 1000)
}
};
new Highcharts.Chart({
title: {
text: null
},
credits: {
enabled: false
},
legend: {
enabled: false,
borderWidth: 0
},
global: {
useUTC: false,
},
chart: {
renderTo: $("#app-requests-chart")[0],
type: "line",
height: 200,
animation: false
},
plotOptions: {
series: {
connectNulls: false
},
line: {
marker: {
enabled: true
},
animation: false
}
},
xAxis: {
type: "datetime",
max: k,
min: c,
dateTimeLabelFormats: {
minute: "%l:%M%p"
}
},
yAxis: [{
min: 0,
allowDecimals: false,
title: {
text: "Requests",
style: {
color: "#1c91e0"
}
},
labels: {
format: "{value}",
style: {
color: "#1c91e0"
}
}
}, {
min: 0,
allowDecimals: false,
title: {
text: "Errors",
style: {
color: "#9D322A"
}
},
labels: {
format: "{value}",
style: {
color: "#9D322A"
}
},
opposite: true
}],
tooltip: {
shared: true
},
loading: {
labelStyle: {
top: "50%"
}
},
series: [{
yAxis: 0,
name: "Requests",
data: l,
cursor: "pointer",
point: {
events: a
}
}, {
yAxis: 1,
name: "Errors",
color: "#9D322A",
data: m,
cursor: "pointer",
point: {
events: a
}
}]
})
});
$(function() {
var a = $("[data-sp-apps-search-form]");
if (!a.length) {
return
}
var b = a.find('[name="search"]');
if (b.val()) {
b.focus();
var c = b[0];
c.selectionStart = c.selectionEnd = c.value.length
}
});
SPManage.API.V1 = (function(a) {
a.post_appNew = function(b) {
return $.ajax({
url: "/data/apps",
method: "POST",
contentType: "application/json",
dataType: "json",
data: JSON.stringify(b)
}).fail(SPManage.API.V1.errorHandlerGenerator("create app"))
};
a.get_sysusers_of_server = function(b) {
return $.getJSON("/data/sysusers?server=" + b).fail(SPManage.API.V1.errorHandlerGenerator("fetch system users"))
};
a.get_server = function(b) {
return $.getJSON("/data/servers/" + b).fail(SPManage.API.V1.errorHandlerGenerator("fetch server information"))
};
return a
}(SPManage.API.V1));
$(function() {
var t = $("[data-sp-create-app-form]");
if (!t.length) {
return
}
var h = t.find("[data-sp-form-input]");
var B = t.find('[name="appName"]');
var n = t.find('[name="appDomain"]');
var s = t.find('[name="wordpress"]');
var d = t.find("[data-sp-create-app-wordpress-form]");
var l = d.find("[name='wordpressSiteTitle']");
var f = d.find("[name='wordpressUser']");
var p = d.find("[name='wordpressPassword']");
var j = d.find("[name='wordpressEmail']");
var i = t.find('[name="server"]');
var b = t.find("[name='sysuserAutoCreate']");
var q = t.find("[name='newSysuserName']");
var x = t.find("[name='newSysuserPassword']");
var o = t.find('[name="sysuser"]');
var k = t.find('[name="runtime"]');
var r = $(t).find("[data-sp-sysuserAutoForm]");
var A = $(t).find("[data-sp-sysuserManualForm]");
var m = t.data("sp-default-runtime");
var z = t.data("sp-initial-serverid");
var a = SPManage.getComponentData(t, "is_trial_active");
function v() {
return b.filter(":checked").val() === "true"
}
function y() {
h.prop("disabled", false);
if (s.prop("checked")) {
d.slideDown(200)
} else {
d.slideUp(200)
}
if (v()) {
r.removeClass("hidden");
A.addClass("hidden")
} else {
A.removeClass("hidden");
r.addClass("hidden")
}
}
function u() {
h.prop("disabled", true)
}
function g() {
SPManage.Validation.clearValidationErrors(t);
var D = true;
if (!SPManage.Validation.isValidAppName(B.val().trim())) {
SPManage.Validation.applyValidationError(B);
D = false
}
var C = n.val().trim();
if (C && !SPManage.Validation.isValidDomain(C)) {
SPManage.Validation.applyValidationError(n);
D = false
}
if (i.val() === "") {
SPManage.Validation.applyValidationError(i);
D = false
}
if (!k.val()) {
SPManage.Validation.applyValidationError(k);
D = false
}
if (v()) {
if (!SPManage.Validation.isValidSysusername(q.val().trim())) {
SPManage.Validation.applyValidationError(q);
D = false
}
if (!SPManage.Validation.isValidSysuserPassword(x.val())) {
D = false;
SPManage.Validation.applyValidationError(x)
}
} else {
if (o.val() === "") {
SPManage.Validation.applyValidationError(o);
D = false
}
}
if (s.prop("checked")) {
if (l.val() === "") {
SPManage.Validation.applyValidationError(l);
D = false
}
if (f.val() === "") {
SPManage.Validation.applyValidationError(f);
D = false
}
if (p.val() === "" || !SPManage.Validation.isValidWordpressPassword(p.val())) {
SPManage.Validation.applyValidationError(p);
D = false
}
if (j.val() === "" || !SPManage.Validation.isValidEmailAddress(j.val())) {
SPManage.Validation.applyValidationError(j);
D = false
}
}
return D
}
function w(C) {
var D = [];
if (C === "") {
return D
}
D.push(C);
if (SPManage.Validation.isValidIPAddress(C)) {
return D
}
if (C.startsWith("www.")) {
D.push(C.replace("www.", ""))
} else {
D.push("www." + C)
}
return D
}
B.on("input", function() {
q.val(B.val().trim())
});
b.on("change", function() {
y()
});
s.on("change", function() {
y()
});
function c(D) {
var C = i.val();
if (D.length !== 1) {
o.prop("readonly", false);
o.append($("<option>"))
}
D.forEach(function(E) {
o.append($("<option>", {
value: E.id
}).text(E.name))
})
}
function e(C) {
C.reverse();
C.forEach(function(E) {
if (E.includes("X.Y")) {
var D = k.append($("<option>", {
value: E
}).text(E.replace("php", "PHP ") + " RC"))
} else {
var D = k.append($("<option>", {
value: E
}).text(E.replace("php", "PHP ")))
}
});
k.val(m)
}
i.on("change", function() {
var C = i.val();
o.empty();
k.empty();
if (!i.val()) {
return
}
$.when(SPManage.API.V1.get_sysusers_of_server(C), SPManage.API.V1.get_server(C)).done(function(F, E) {
var J = F[0];
var D = E[0];
var I = J.data;
var H = D.data;
var G = H.available_runtimes;
c(I);
e(G);
if (a) {
n.val(H.lastaddress)
}
})
});
t.on("click", "[data-sp-create-app-button]", function(F) {
F.preventDefault();
SPManage.Alerts.clear();
if (!g()) {
return
}
var D;
if (s.prop("checked")) {
D = {
site_title: l.val(),
admin_user: f.val(),
admin_password: p.val(),
admin_email: j.val()
}
} else {
D = {}
}
u();
if (v()) {
var C = {
name: q.val().trim(),
password: x.val(),
serverid: i.val()
};
SPManage.API.V1.post_serverSysuserNew(C).pipe(function(H) {
var G = H.data.id;
var I = {
name: B.val().trim(),
serverid: i.val(),
sysuserid: G,
domains: w(n.val().trim()),
runtime: k.val(),
wordpress: D
};
return SPManage.API.V1.post_appNew(I)
}).done(function(G) {
window.location = "/apps/" + G.data.id + "/settings"
}).always(function() {
y()
})
} else {
var E = {
name: B.val().trim(),
serverid: i.val(),
sysuserid: o.val(),
domains: w(n.val().trim()),
runtime: k.val(),
wordpress: D
};
SPManage.API.V1.post_appNew(E).done(function(G) {
window.location = "/apps/" + G.data.id + "/settings"
}).always(function() {
y()
})
}
});
y();
if (z) {
i.trigger("change")
}
});
SPManage.API.V1 = (function(a) {
function b(c) {
return function() {
c.prop("disabled", false);
$("html, body").animate({
scrollTop: 0
}, "fast")
}
}
a.post_appSSLUpdate = function(d, e, c) {
SPManage.Alerts.clear();
c.prop("disabled", true);
return $.ajax({
url: "/data/apps/" + d + "/ssl",
method: "POST",
contentType: "application/json",
dataType: "json",
data: JSON.stringify(e)
}).done(function() {
SPManage.Alerts.postSuccessOnNextPageLoad("SSL updated");
window.location.reload(true)
}).fail(b(c)).fail(SPManage.API.V1.errorHandlerGenerator("update app SSL"))
};
a.post_appSSLDelete = function(d, c) {
SPManage.Alerts.clear();
c.prop("disabled", true);
return $.ajax({
url: "/data/apps/" + d + "/ssl",
method: "DELETE",
contentType: "application/json",
}).done(function() {
SPManage.Alerts.postSuccessOnNextPageLoad("SSL disabled");
window.location.reload(true)
}).fail(b(c)).fail(SPManage.API.V1.errorHandlerGenerator("disable SSL"))
};
a.post_appSSLGenerateCSR = function(d, e, c) {
SPManage.Alerts.clear();
c.prop("disabled", true);
return $.ajax({
url: "/data/apps/" + d + "/ssl/generate",
method: "POST",
contentType: "application/json",
dataType: "json",
data: JSON.stringify(e)
}).done(function() {
SPManage.Alerts.postSuccessOnNextPageLoad("CSR generated");
window.location.reload(true)
}).fail(b(c)).fail(SPManage.API.V1.errorHandlerGenerator("generate CSR"))
};
return a
}(SPManage.API.V1));
$(function() {
var b = $("[data-sp--app-ssl-form]");
if (!b.length) {
return
}
var a = b.data("sp-appid");
b.on("click", "[data-sp-update-ssl-button]", function(i) {
i.preventDefault();
var h = $(i.currentTarget);
var d = b.find('[name="key"]');
var c = b.find('[name="cert"]');
var j = b.find('[name="cacerts"]');
function f() {
SPManage.Validation.clearValidationErrors(b);
var e = true;
if (!d.val()) {
SPManage.Validation.applyValidationError(d);
e = false
}
if (!c.val()) {
SPManage.Validation.applyValidationError(c);
e = false
}
return e
}
if (!f()) {
return
}
var g = {
key: d.val(),
cert: c.val(),
cacerts: j.length ? j.val() : null,
};
SPManage.API.V1.post_appSSLUpdate(a, g, h)
});
b.on("click", "[data-sp-delete-ssl-button]", function(c) {
c.preventDefault();
SPManage.Alerts.clear();
$("[data-sp-delete-ssl-button]").addClass("hidden");
$("[data-sp-confirm-delete-ssl-button]").removeClass("hidden");
$("[data-sp-cancel-delete-ssl-button]").removeClass("hidden")
});
b.on("click", "[data-sp-cancel-delete-ssl-button]", function(c) {
c.preventDefault();
$("[data-sp-delete-ssl-button]").removeClass("hidden");
$("[data-sp-confirm-delete-ssl-button]").addClass("hidden");
$("[data-sp-cancel-delete-ssl-button]").addClass("hidden")
});
b.on("click", "[data-sp-confirm-delete-ssl-button]", function(d) {
d.preventDefault();
var c = $(d.currentTarget);
SPManage.API.V1.post_appSSLDelete(a, c)
})
});
$(document).on("click", "[data-sp-show-ssl-cert]", function(a) {
a.preventDefault();
$("[data-sp-show-ssl-cert]").addClass("hidden");
$("[data-sp-csr-and-ssl-cert-contents]").removeClass("hidden")
});
$(document).on("click", "[data-sp-enable-forcessl]", function(d) {
d.preventDefault();
var c = $(d.currentTarget);
var a = c.data("sp-appid");
var b = {
force: true
};
SPManage.API.V1.post_appSSLUpdate(a, b, c)
});
$(document).on("click", "[data-sp-disable-forcessl]", function(d) {
d.preventDefault();
var c = $(d.currentTarget);
var a = c.data("sp-appid");
var b = {
force: false
};
SPManage.API.V1.post_appSSLUpdate(a, b, c)
});
$(document).on("click", "[data-sp-enable-autossl]", function(d) {
d.preventDefault();
var c = $(d.currentTarget);
var a = c.data("sp-appid");
var b = {
auto: true
};
SPManage.API.V1.post_appSSLUpdate(a, b, c)
});
$(document).on("click", "[data-sp-disable-autossl]", function(c) {
c.preventDefault();
var b = $(c.currentTarget);
var a = b.data("sp-appid");
SPManage.API.V1.post_appSSLDelete(a, b)
});
$(document).on("click", "[data-sp-generate-csr]", function(f) {
f.preventDefault();
var c = $("[data-sp-generate-csr-form]");
var k = c.data("sp-appid");
var g = $(f.currentTarget);
var b = c.find('[name="commonname"]');
var l = c.find('[name="country"]');
var d = c.find('[name="state"]');
var h = c.find('[name="city"]');
var a = c.find('[name="org"]');
function j() {
SPManage.Validation.clearValidationErrors(c);
var e = true;
if (!SPManage.Validation.isValidDomain(b.val())) {
SPManage.Validation.applyValidationError(b);
e = false
} [l, d, h, a].forEach(function(m) {
if (!m.val()) {
SPManage.Validation.applyValidationError(m);
e = false
}
});
return e
}
if (!j()) {
return
}
var i = {
commonname: b.val(),
country: l.val(),
state: d.val(),
city: h.val(),
org: a.val(),
};
SPManage.API.V1.post_appSSLGenerateCSR(k, i, g)
});
SPManage.API.V1 = (function(a) {
a.delete_app = function(b) {
return $.ajax({
url: "/data/apps/" + b,
method: "DELETE",
dataType: "json"
}).fail(SPManage.API.V1.errorHandlerGenerator("delete app"))
};
return a
}(SPManage.API.V1));
$(document).on("click", "[data-sp-confirm-delete-app-button]", function(d) {
var a = d.target;
var b = $(a).data("sp-confirm-delete-app-button");
var c = $(a).data("sp-delete-app-next");
SPManage.API.V1.delete_app(b).done(function() {
if (c) {
window.location = c
}
})
});
$(document).on("click", "[data-sp-delete-app-button]", function(c) {
var f = $(c.target);
var b = $(f).data("sp-delete-app-button");
var a = $("[data-sp-confirm-delete-app-button='" + b + "']");
var d = $("[data-sp-cancel-delete-app-button='" + b + "']");
if (!a) {
alert("missing delete confirmation")
}
a.removeClass("hidden");
d.removeClass("hidden");
f.addClass("hidden")
});
$(document).on("click", "[data-sp-cancel-delete-app-button]", function(c) {
var d = $(c.target);
var b = $(d).data("sp-cancel-delete-app-button");
var f = $("[data-sp-delete-app-button='" + b + "']");
var a = $("[data-sp-confirm-delete-app-button='" + b + "']");
f.removeClass("hidden");
d.addClass("hidden");
a.addClass("hidden")
});
SPManage.API.V1 = (function(a) {
a.post_serverUpdate = function(b, c) {
return $.ajax({
url: "/data/servers/" + b,
method: "POST",
contentType: "application/json",
dataType: "json",
data: JSON.stringify(c)
}).fail(SPManage.API.V1.errorHandlerGenerator("update server"))
};
return a
}(SPManage.API.V1));
$(function() {
var g = $("[data-sp-update-server-settings-form]");
if (!g.length) {
return
}
var i = g.find("[data-sp-form-input]");
var d = g.find('[name="serverName"]');
var c = g.find('[name="autoUpdates"]');
var h = g.find('[name="firewall"]');
var a = g.find('[name="denyUnknownDomains"]');
var e = g.data("sp-server");
function j() {
SPManage.Validation.clearValidationErrors(g);
var k = true;
if (!SPManage.Validation.isValidHostname(d.val())) {
k = false;
SPManage.Validation.applyValidationError(d)
}
return k
}
function b() {
i.attr("disabled", true);
SPManage.Alerts.clear()
}
function f() {
i.removeAttr("disabled")
}
g.on("click", "[data-sp-update-server-settings-button]", function(l) {
l.preventDefault();
SPManage.Alerts.clear();
if (!j()) {
return
}
var k = {
name: d.val(),
firewall: h.prop("checked"),
autoupdates: c.prop("checked"),
deny_unknown_domains: a.prop("checked")
};
SPManage.API.V1.post_serverUpdate(e, k).done(function(m) {
SPManage.Alerts.postSuccessOnNextPageLoad("Server updated");
window.location.reload(true)
}).always(function() {
f()
})
})
});
SPManage.API.V1 = (function(a) {
a.delete_server = function(b) {
return $.ajax({
url: "/data/servers/" + b,
method: "DELETE",
dataType: "json"
}).fail(SPManage.API.V1.errorHandlerGenerator("delete server"))
};
return a
}(SPManage.API.V1));
$(document).on("click", "[data-sp-confirm-delete-server-button]", function(d) {
var b = d.target;
var a = $(b).data("sp-confirm-delete-server-button");
var c = $(b).data("sp-delete-server-next");
SPManage.API.V1.delete_server(a).done(function() {
if (c) {
window.location = c
}
})
});
$(document).on("click", "[data-sp-delete-server-button]", function(c) {
var f = $(c.target);
var b = $(f).data("sp-delete-server-button");
var a = $("[data-sp-confirm-delete-server-button='" + b + "']");
var d = $("[data-sp-cancel-delete-server-button='" + b + "']");
if (!a) {
alert("missing delete confirmation")
}
a.removeClass("hidden");
d.removeClass("hidden");
f.addClass("hidden")
});
$(document).on("click", "[data-sp-cancel-delete-server-button]", function(c) {
var d = $(c.target);
var b = $(d).data("sp-cancel-delete-server-button");
var f = $("[data-sp-delete-server-button='" + b + "']");
var a = $("[data-sp-confirm-delete-server-button='" + b + "']");
f.removeClass("hidden");
d.addClass("hidden");
a.addClass("hidden")
});
$(function() {
var a = $("[data-sp-servers-search-form]");
if (!a.length) {
return
}
var b = a.find('[name="search"]');
if (b.val()) {
b.focus();
var c = b[0];
c.selectionStart = c.selectionEnd = c.value.length
}
});
SPManage.API.V1 = (function(a) {
a.get_serverMemoryStats = function(d, f, i) {
var e = "count=" + 10000;
var h = "after=" + Math.floor(i / 1000);
var c = "samplelevel=" + f;
var b = "fields=percentage";
var g = [e, h, c, b];
return $.getJSON("/data/servers/" + d + "/stats/memory?" + g.join("&"))
};
a.get_serverCPUStats = function(d, f, i) {
var e = "count=" + 10000;
var h = "after=" + Math.floor(i / 1000);
var c = "samplelevel=" + f;
var b = "fields=percentage";
var g = [e, h, c, b];
return $.getJSON("/data/servers/" + d + "/stats/cpu?" + g.join("&"))
};
a.get_serverBandwidthStats = function(d, f, i) {
var e = "count=" + 10000;
var h = "after=" + Math.floor(i / 1000);
var c = "samplelevel=" + f;
var b = "spec2=rxrate&spec2=txrate";
var g = [e, h, c, b];
return $.getJSON("/data/servers/" + d + "/stats/traffic?" + g.join("&"))
};
return a
}(SPManage.API.V1));
SPManage.API.V1.Util = (function(a) {
a.getCommonChartOptions = function() {
return {
title: {
text: null
},
credits: {
enabled: false
},
plotOptions: {
series: {
connectNulls: false
},
line: {
animation: false,
marker: {
enabled: false
}
}
},
legend: {
enabled: false,
borderWidth: 0
},
global: {
useUTC: false
}
}
};
a.getChartStart = function(c) {
var b = {
hour: 60 * 60,
day: 60 * 60 * 24,
week: 60 * 60 * 24 * 7
};
return Date.now() - b[c] * 1000
};
a.getChartSampleLevel = function(c) {
var b = {
hour: 0,
day: 1,
week: 2
};
return b[c]
};
return a
}(SPManage.API.V1.Util));
$(function() {
var a = $("[data-sp-server-bandwidth-chart]");
if (!a.length) {
return
}
var d = a.data("sp-chart-timespan");
var b = a.data("sp-server");
var e = a.find("[data-sp-chart-div]")[0];
var c = a.height();
Highcharts.setOptions(SPManage.API.V1.Util.getCommonChartOptions());
var f = new Highcharts.Chart({
chart: {
renderTo: e,
type: "line",
height: c,
marginLeft: 70,
animation: false,
events: {
load: function() {
setTimeout(function() {
a.trigger("sp-reload-chart")
}, 1);
setInterval(function() {
a.trigger("sp-reload-chart")
}, 30000)
}
}
},
xAxis: {
type: "datetime",
labels: {
y: 20
},
dateTimeLabelFormats: {
minute: "%l:%M%p"
},
min: SPManage.API.V1.Util.getChartStart(d),
max: Date.now()
},
yAxis: {
min: 0,
title: {
text: null
},
labels: {
format: "{value} KB/s"
}
},
tooltip: {
shared: true,
valueSuffix: " KB/s"
},
series: [{
name: "Outbound",
data: []
}, {
name: "Inbound",
data: []
}]
});
a.on("sp-reload-chart", function() {
var g = SPManage.API.V1.Util.getChartStart(d);
SPManage.API.V1.get_serverBandwidthStats(b, SPManage.API.V1.Util.getChartSampleLevel(d), g).done(function(h) {
var j = h.data;
var i = "eth0";
j.every(function(m) {
if (m.device && m.device !== "eth0") {
i = m.device;
return false
}
return true
});
var l = [];
var k = [];
j.forEach(function(m) {
if (m.device && m.device !== i) {
return
}
l.push([m.datetime * 1000, Math.ceil(m.txrate / 1000 * 100) / 100]);
k.push([m.datetime * 1000, Math.ceil(m.rxrate / 1000 * 100) / 100])
});
f.xAxis[0].setExtremes(g, Date.now());
f.series[0].setData(l, false, false);
f.series[1].setData(k, false, false);
f.redraw(true)
})
})
});
$(function() {
var b = $("[data-sp-server-cpu-chart]");
if (!b.length) {
return
}
var e = b.data("sp-chart-timespan");
var c = b.data("sp-server");
var f = b.find("[data-sp-chart-div]")[0];
var d = b.height();
Highcharts.setOptions(SPManage.API.V1.Util.getCommonChartOptions());
var a = new Highcharts.Chart({
chart: {
renderTo: f,
type: "line",
height: d,
marginLeft: 45,
animation: false,
events: {
load: function() {
setTimeout(function() {
b.trigger("sp-reload-chart")
}, 1);
setInterval(function() {
b.trigger("sp-reload-chart")
}, 30000)
}
}
},
xAxis: {
type: "datetime",
labels: {
y: 20
},
dateTimeLabelFormats: {
minute: "%l:%M%p"
},
min: SPManage.API.V1.Util.getChartStart(e),
max: Date.now()
},
yAxis: {
min: 0,
max: 100,
title: {
text: null
},
labels: {
format: "{value}%"
}
},
tooltip: {
shared: true,
valueSuffix: "%"
},
series: [{
name: "CPU",
data: []
}]
});
b.on("sp-reload-chart", function() {
var g = SPManage.API.V1.Util.getChartStart(e);
SPManage.API.V1.get_serverCPUStats(c, SPManage.API.V1.Util.getChartSampleLevel(e), SPManage.API.V1.Util.getChartStart(e)).done(function(i) {
var j = i.data;
var h = [];
j.forEach(function(k) {
h.push([k.datetime * 1000, Math.round(k.percentage * 100)])
});
a.xAxis[0].setExtremes(g, Date.now());
a.series[0].setData(h, false, false);
a.redraw(true)
})
})
});
$(function() {
var a = $("[data-sp-server-memory-chart]");
if (!a.length) {
return
}
var e = a.data("sp-chart-timespan");
var b = a.data("sp-server");
var f = a.find("[data-sp-chart-div]")[0];
var d = a.height();
Highcharts.setOptions(SPManage.API.V1.Util.getCommonChartOptions());
var c = new Highcharts.Chart({
chart: {
renderTo: f,
type: "line",
height: d,
marginLeft: 45,
animation: false,
events: {
load: function() {
setTimeout(function() {
a.trigger("sp-reload-chart")
}, 1);
setInterval(function() {
a.trigger("sp-reload-chart")
}, 30000)
}
}
},
xAxis: {
type: "datetime",
labels: {
y: 20
},
dateTimeLabelFormats: {
minute: "%l:%M%p"
},
min: SPManage.API.V1.Util.getChartStart(e),
max: Date.now()
},
yAxis: {
min: 0,
max: 100,
title: {
text: null
},
labels: {
format: "{value}%"
}
},
tooltip: {
shared: true,
valueSuffix: "%"
},
series: [{
name: "Memory",
data: []
}]
});
a.on("sp-reload-chart", function() {
var g = SPManage.API.V1.Util.getChartStart(e);
SPManage.API.V1.get_serverMemoryStats(b, SPManage.API.V1.Util.getChartSampleLevel(e), SPManage.API.V1.Util.getChartStart(e)).done(function(h) {
var i = h.data;
var j = [];
i.forEach(function(k) {
j.push([k.datetime * 1000, Math.round(k.percentage * 100)])
});
c.xAxis[0].setExtremes(g, Date.now());
c.series[0].setData(j, false, false);
c.redraw(true)
})
})
});
$(function() {
var a = $("[data-sp-update-server-plan-button]");
if (!a.length) {
return
}
function b() {
a.attr("disabled", true);
SPManage.Alerts.clear()
}
function c() {
a.removeAttr("disabled")
}
$("[data-sp-plan-selection] a").on("click", function(f) {
f.preventDefault();
var d = $(f.currentTarget);
if (d.hasClass("current-plan")) {
return
}
$("[data-sp-plan-selection] a").removeClass("selected-plan");
d.addClass("selected-plan");
a.data("sp-update-to-plan", d.data("sp-plan"));
c()
});
$("[data-sp-confirm-update-server-plan-button]").on("click", function(h) {
h.preventDefault();
var g = a.data("sp-update-to-plan");
var d = a.data("sp-serverid");
SPManage.Alerts.clear();
var f = {
plan: g
};
b();
SPManage.API.V1.post_serverUpdate(d, f).done(function() {
SPManage.Alerts.postSuccessOnNextPageLoad("Server plan updated");
window.location.reload(true)
}).always(function() {
c()
})
});
$("[data-sp-prompt-confirm-update-server-plan-button]").on("click", function() {
$("[data-sp-update-server-plan-button]").hide();
$("[data-sp-update-to-new-plan-confirm-block]").show()
});
$("[data-sp-cancel-update-to-new-plan-button]").on("click", function() {
$("[data-sp-update-server-plan-button]").show();
$("[data-sp-update-to-new-plan-confirm-block]").hide()
})
});
SPManage.API.V1 = (function(a) {
a.get_serverLogs = function(b, c) {
return $.getJSON("/data/logmessages/" + b + "?logfilename=" + encodeURIComponent(c)).fail(SPManage.API.V1.errorHandlerGenerator("obtain logs from server"))
};
return a
}(SPManage.API.V1));
$(function() {
var a = $("[data-sp-server-logs-form]");
if (!a.length) {
return
}
var b = $(a).data("sp-server");
var d = $(a).find("[name='logFiles']");
var c = $("[data-sp-log-file-contents]");
d.on("change", function() {
SPManage.API.V1.get_serverLogs(b, d.val()).done(function(f) {
c.removeClass("hidden");
var e = f.data;
if (e.length == 0) {
e = ["[Log file " + d.val() + " is empty.]"]
}
c.text(e.join("\n"))
})
});
if (d.val()) {
d.trigger("change")
}
});
SPManage.API.V1 = (function(a) {
a.post_serverUpgradeAll = function(b) {
return $.ajax({
url: "/data/servers/upgradeall",
method: "POST",
contentType: "application/json",
dataType: "json",
data: JSON.stringify(b)
}).fail(SPManage.API.V1.errorHandlerGenerator("upgrade all servers"))
};
return a
}(SPManage.API.V1));
$(function() {
var a = $("[data-sp-upgrade-all-servers-form]");
if (!a.length) {
return
}
var d = a.find("[data-sp-form-input]");
var b = a.data("sp-default-server-plan");
function c() {
d.attr("disabled", true)
}
function e() {
d.removeAttr("disabled")
}
$("[data-sp-upgrade-all-servers-button]").on("click", function(f) {
f.preventDefault();
$("[data-sp-upgrade-all-servers-block]").hide();
$("[data-sp-upgrade-all-servers-confirm-block]").show()
});
$("[data-sp-cancel-upgrade-all-servers-button]").on("click", function(f) {
f.preventDefault();
$("[data-sp-upgrade-all-servers-block]").show();
$("[data-sp-upgrade-all-servers-confirm-block]").hide()
});
$("[data-sp-confirm-upgrade-all-servers-button]").on("click", function(g) {
g.preventDefault();
SPManage.Alerts.clear();
var f = {
plan: b
};
c();
SPManage.API.V1.post_serverUpgradeAll(f).done(function() {
SPManage.Alerts.postSuccessOnNextPageLoad("Server plans upgraded");
window.location.reload(true)
}).always(function() {
e()
})
})
});
SPManage.API.V1.Util = (function(b) {
function a() {
var c = [
[10, "Starting server configuration."],
[8, "Configuring iptables firewall."],
[6, "Updating server packages."],
[12, "Installing Apache web server."],
[12, "Configuring Apache with .htaccess and mod_rewrite support."],
[10, "Installing Nginx web server."],
[8, "Configuring Nginx as a scalable reverse proxy."],
[12, "Installing MySQL database server."],
[8, "Configuring MySQL."],
[8, "Installing Postfix mail transfer agent."],
[5, "Configuring Postfix so apps can send mail."],
[8, "Enabling automatic package updates."],
[4, "Enabling system clock updates."],
[10, "Installing PHP 7.3."],
[5, "Configuring PHP 7.3 using PHP-FPM."],
[10, "Installing PHP 7.2."],
[5, "Configuring PHP 7.2 using PHP-FPM."],
[10, "Installing PHP 7.1."],
[5, "Configuring PHP 7.1 using PHP-FPM."],
[10, "Installing PHP 7.0."],
[5, "Configuring PHP 7.0 using PHP-FPM."],
[10, "Installing PHP 5.6."],
[5, "Configuring PHP 5.6 using PHP-FPM."],
[6, "Configuring server stats and log monitoring."],
[6, "Configuring app stats and log monitoring."],
[30, "Enabling swap space."],
[50, "Testing server configuration."],
[1, "Still working on it. Maybe another minute, cool?"]
];
var d = [];
c.forEach(function(e) {
var h = e[0];
var g = e[1];
for (var f = 0; f < h; f++) {
d.push(g)
}
});
return d
}
b.serverConnectProgressPromise = function(c) {
var d = 180;
return SPManage.API.Util.elapsedProgressPromise(c, d, a())
};
b.serverInstallStatusPoll = function(d) {
var f = function(h) {
return h.data.installstatus === "success"
};
var g = function(h) {
return h.data.installstatus === "error"
};
var c = function() {
return SPManage.API.V1.get_server(d)
};
var e = {
pollCountMax: 2000,
pollInterval: 3000
};
return SPManage.API.Util.pollingPromise(c, f, g, e)
};
return b
}(SPManage.API.V1.Util));
$(function() {
var j = $("[data-sp-install-progress]");
if (j.length === 0) {
return
}
var i = j.find("[data-sp-server-install-progress-label]");
var a = j.find("[data-sp-server-install-progress-bar]");
var b = j.data("sp-serverid");
function c(l) {
$("#install-progress-error-message").text(l);
$("#install-progress-error-message-block").show()
}
var d = false;
function e() {
j.show(0)
}
function h() {
j.hide(0)
}
function f(l) {
i.text(l)
}
function g(l) {
if (l > 100) {
l = 100
} else {
if (l <= 0) {
l = 0
}
}
var m = a.find(".progress-bar");
m.width(l + "%");
m.attr("aria-valuenow", l)
}
function k(l) {
if (d) {
return
}
f(l.message);
g(l.percent)
}
setTimeout(function() {
SPManage.API.V1.get_server(b).done(function(l) {
if (l.data.installstatus == "open") {
window.location.reload()
}
})
}, 10 * 60 * 1000);
e();
SPManage.API.V1.get_server(b).then(function(l) {
var m = l.data.firstconn * 1000;
SPManage.API.V1.Util.serverConnectProgressPromise(m).progress(k);
return SPManage.API.V1.Util.serverInstallStatusPoll(b)
}).fail(function(l) {
console.log(l);
h();
c("Server configuration failed.")
}).done(function() {
d = true;
setTimeout(function() {
f("Done!");
g(100)
}, 500);
setTimeout(function() {
window.location = "/servers/" + b + "/apps"
}, 2000)
})
});
$(function() {
var a = $("[data-sp-sshinstall-status]");
if (a.length === 0) {
return
}
var e = a.find("#sshinstall-error-message");
var d = a.data("sp-serverid");
var f = a.data("sp-sshinstallid");
var c = a.data("sp-sshinstall-status");
$("#auto-install-tip-2").fadeIn();
function b(g) {
$("#sshinstall-error-message").text(g);
$("#sshinstall-error-message-block").show();
$("[data-sp-confirm-delete-server-button]").show();
$(".auto-install-tip").hide();
$("#sshinstall-status-message").hide()
}
SPManage.API.V1.Util.sshInstallPoll(f).done(function(g) {
SPManage.API.V1.get_server(d).done(function(h) {
if (h.data.firstconn) {
window.location.reload()
} else {
b("Installer completed successfully but agent does not appear to be running.")
}
}).fail(function(h) {
b("Error: " + h.toString())
})
}).fail(function(h) {
if (h.data) {
var g = SPManage.API.V1.sshinstallStatusMessages[h.data.status]
} else {
var g = "Error while waiting to connect. " + h.toString()
}
b(g)
})
});
$(function() {
var a = $("[data-sp-manual-install-command-block]");
if (a.length === 0) {
return
}
var b = a.data("sp-serverid");
var c = sessionStorage.getItem("server-" + b + "-apikey");
if (c) {
a.show();
var d = "sudo apt-get update && sudo apt-get -y install ca-certificates wget && \\\nsudo wget -nv -O serverpilot-installer https://download.serverpilot.io/serverpilot-installer && \\\nsudo sh serverpilot-installer \\\n --server-id=" + b + " \\\n --server-apikey=" + c;
$("[data-sp-manual-install-command]").html(d)
} else {
$("[data-sp-never-ran-manual-installer]").show()
}
$("[data-copy-install-command]").on("click", function(f) {
f.preventDefault();
SPManage.API.Util.copyTextToClipboard(d)
});
SPManage.API.V1.Util.serverInstallStatusPoll(b).progress(function(e) {
if (e.data.firstconn) {
window.location.reload()
}
}).fail(function() {
SPManage.Alerts.postError("An error occurred.")
})
});
SPManage.API.V1 = (function(a) {
a.post_serverTransfer = function(b, c) {
return $.ajax({
url: "/data/servers/" + b + "/transfer",
method: "POST",
dataType: "json",
contentType: "application/json",
data: JSON.stringify(c)
}).fail(SPManage.API.V1.errorHandlerGenerator("transfer server ownership"))
};
return a
}(SPManage.API.V1));
$(function() {
var a = $("[data-sp-transfer-server-form]");
if (!a.length) {
return
}
var c = $(a).data("sp-server");
var d = $(a).data("sp-server-transfer-next");
var b = $(a).find("[name='accountEmail']");
a.on("click", "[data-sp-transfer-server-button]", function(g) {
g.preventDefault();
var f = {
recipient: b.val()
};
SPManage.API.V1.post_serverTransfer(c, f).done(function() {
if (d !== undefined) {
window.location = d
}
})
})
});
SPManage.API.V1 = (function(a) {
a.get_getSSHInstall = function(b) {
return $.getJSON("/data/servers/sshinstall/" + b)
};
a.post_serverSSHInstall = function(b) {
return $.ajax({
url: "/data/servers/sshinstall",
method: "POST",
contentType: "application/json",
dataType: "json",
data: JSON.stringify(b)
}).fail(SPManage.API.V1.errorHandlerGenerator("connect your server automatically"))
};
a.post_serverNew = function(b) {
return $.ajax({
url: "/data/servers",
method: "POST",
contentType: "application/json",
dataType: "json",
data: JSON.stringify(b)
}).fail(SPManage.API.V1.errorHandlerGenerator("create new server"))
};
return a
}(SPManage.API.V1));
$(function() {
var n = $("[data-sp-new-server-form]");
if (!n.length) {
return
}
$('[data-toggle="tooltip"]').tooltip();
var m = n.find("[data-sp-new-server-progress]");
var h = n.find('[name="ipAddress"]');
var p = n.find('[name="rootPassword"]');
var j = n.find('[name="useManualInstall"]');
var k = n.find('[name="hostName"]');
var i = n.find('[name="enableSSHPasswordAuth"]');
var q = n.find('[name="serverPlan"]');
function e() {
window.pbar = m;
m.removeClass("hidden")
}
function b() {
m.addClass("hidden")
}
function g(t) {
var s = m.find("[data-sp-new-server-progress-message]");
s.text(t)
}
function l(s) {
return "/servers/" + s + "/connect"
}
function o() {
$("[data-sp-form-input]").prop("disabled", true)
}
function r() {
$("[data-sp-form-input]").removeAttr("disabled");
if (j.is(":checked")) {
k.closest(".form-group").slideDown(200);
i.closest(".form-group").slideDown(200);
h.prop("disabled", true);
p.prop("disabled", true)
} else {
k.closest(".form-group").slideUp(200);
i.closest(".form-group").slideUp(200);
k.prop("disabled", true);
i.prop("checked", true)
}
}
r();
j.on("change", function() {
SPManage.Validation.clearValidationErrors(n);
r()
});
i.on("change", function() {
SPManage.Validation.clearValidationErrors(n);
r()
});
function d() {
SPManage.Validation.clearValidationErrors(n);
var s = true;
if (!SPManage.Validation.isValidHostname(k.val().trim())) {
s = false;
SPManage.Validation.applyValidationError(k)
}
return s
}
function f() {
SPManage.Validation.clearValidationErrors(n);
var s = true;
if (!SPManage.Validation.isValidIPAddress(h.val().trim())) {
s = false;
SPManage.Validation.applyValidationError(h)
}
if (p.val().trim() === "") {
s = false;
SPManage.Validation.applyValidationError(p)
}
return s
}
function a() {
var t = $("[data-sp-manual-install-result]");
t.addClass("hidden");
if (!d()) {
return
}
o();
var s = i.is(":checked");
var u = {
host: "",
rootpw: "",
"use-manual-install": true,
name: k.val().trim(),
enable_ssh_password_auth: s,
plan: q.val(),
};
SPManage.API.V1.post_serverNew(u).fail(function() {
r()
}).done(function(x) {
var v = x.data.id;
var w = x.data.apikey;
sessionStorage.setItem("server-" + v + "-apikey", w);
window.location = l(v)
})
}
function c() {
if (!f()) {
return
}
var s = {
host: h.val().trim(),
rootpw: p.val(),
plan: q.val()
};
o();
SPManage.API.V1.post_serverSSHInstall(s).done(function(u) {
$("[data-sp-sshinstall-preparing-block]").show();
$("[data-sp-new-server-form-block]").hide();
var w = u.data.id;
var t = false;
function v(x) {
return Math.ceil(Math.random() * x)
}
SPManage.API.V1.Util.sshInstallPoll(w).progress(function(z) {
var y = z.data.status;
if (!t && (y == "assigned" || y == "started")) {
$("#auto-install-tip-1").fadeIn();
t = true
}
var x = z.data.serverid;
if (x) {
window.location = l(x)
}
}).fail(function(y) {
if (y.data) {
var x = SPManage.API.V1.sshinstallStatusMessages[y.data.status]
} else {
var x = "Error while waiting to connect. " + y.toString()
}
console.log(x);
$("#sshinstall-status-message").text(x).addClass("alert alert-danger");
$("#sshinstall-try-again").show();
$(".auto-install-tip").hide();
SPManage.Alerts.postError("Install failed.")
})
}).fail(function() {
r()
})
}
n.on("click", "[data-sp-new-server-button]", function(s) {
s.preventDefault();
SPManage.Alerts.clear();
if (!j.is(":checked")) {
c()
} else {
a()
}
})
});
SPManage.API.V1.Util = (function(a) {
a.serverFirstConnectionPoll = function(b) {
var d = function(g) {
return g.data.firstconn !== null
};
var f = function(g) {
return g.data.installstatus === "error"
};
var c = function() {
return SPManage.API.V1.get_server(b)
};
var e = {
pollCountMax: 300,
pollInterval: 3000
};
return SPManage.API.Util.pollingPromise(c, d, f, e)
};
a.sshInstallPoll = function(e) {
var d = function(h) {
var g = h.data.status;
return g == "success"
};
var f = function(h) {
var g = h.data.status;
return g == "expired" || g.endsWith("_error")
};
var c = function() {
return SPManage.API.V1.get_getSSHInstall(e)
};
var b = {
pollCountMax: 600,
pollInterval: 1000
};
return SPManage.API.Util.pollingPromise(c, d, f, b)
};
return a
}(SPManage.API.V1.Util));
SPManage.API.V1 = (function(a) {
a.delete_serverTransfer = function(b, c) {
return $.ajax({
url: "/data/servers/" + b + "/transfer/" + c,
method: "DELETE",
dataType: "json"
}).fail(SPManage.API.V1.errorHandlerGenerator("cancel server transfer"))
};
a.post_serverTransferDecline = function(b, c) {
return $.ajax({
url: "/data/servers/" + b + "/transfer/" + c + "/decline",
method: "POST",
dataType: "json"
}).fail(SPManage.API.V1.errorHandlerGenerator("decline server transfer"))
};
a.post_serverTransferAccept = function(b, c) {
return $.ajax({
url: "/data/servers/" + b + "/transfer/" + c + "/accept",
method: "POST",
dataType: "json"
}).fail(SPManage.API.V1.errorHandlerGenerator("accept server transfer"))
};
return a
}(SPManage.API.V1));
$(document).on("click", "[data-sp-cancel-server-transfer-button]", function(d) {
var b = d.target;
var a = $(b).data("sp-server");
var f = $(b).data("sp-cancel-server-transfer-button");
var c = $(b).data("sp-cancel-server-transfer-next");
SPManage.API.V1.delete_serverTransfer(a, f).done(function() {
if (c !== undefined) {
window.location = c
}
})
});
$(document).on("click", "[data-sp-decline-server-transfer-button]", function(c) {
var b = c.target;
var a = $(b).data("sp-server");
var d = $(b).data("sp-decline-server-transfer-button");
SPManage.API.V1.post_serverTransferDecline(a, d).done(function() {
SPManage.Alerts.postWarningOnNextPageLoad("Server transfer declined");
window.location.reload(true)
})
});
$(document).on("click", "[data-sp-accept-server-transfer-button]", function(c) {
var b = c.target;
var a = $(b).data("sp-server");
var d = $(b).data("sp-accept-server-transfer-button");
SPManage.API.V1.post_serverTransferAccept(a, d).done(function() {
SPManage.Alerts.postSuccessOnNextPageLoad("Server transfer accepted");
window.location = "/servers/" + a + "/apps"
})
});
SPManage.API.V1 = (function(a) {
a.post_MFA_TOTPCheck = function(b) {
return $.ajax({
url: "/data/session/mfa/totp/check",
method: "POST",
contentType: "application/json",
dataType: "json",
data: JSON.stringify(b)
}).fail(SPManage.API.V1.errorHandlerGenerator("complete 2-factor auth"))
};
a.post_MFA_SMSCheck = function(b) {
return $.ajax({
url: "/data/session/mfa/sms/check",
method: "POST",
contentType: "application/json",
dataType: "json",
data: JSON.stringify(b)
}).fail(SPManage.API.V1.errorHandlerGenerator("complete 2-factor auth"))
};
a.post_MFA_SMSSend = function() {
return $.ajax({
url: "/data/session/mfa/sms/send",
method: "POST",
contentType: "application/json",
dataType: "json",
data: JSON.stringify({})
}).fail(SPManage.API.V1.errorHandlerGenerator("send SMS with 2-factor auth code"))
};
return a
}(SPManage.API.V1));
$(function() {
var a = $("[data-sp-mfa-form]");
if (!a.length) {
return
}
var d = a.find('[name="mfacode"]');
var e = a.find("[data-sp-mfa-button]");
d.focus();
var b = a.attr("data-sp-login-next");
var f = a.attr("data-sp-login-redirect-cookie");
var c = Cookies.get(f);
if (c) {
b = c
}
a.on("click", "[data-sp-mfa-button]", function(k) {
k.preventDefault();
d.attr("disabled", true);
e.attr("disabled", true);
var g = d.val();
var j = {
mfacode: g,
};
SPManage.Alerts.clear();
var h = $("[data-sp-mfa-sms]").length > 0;
if (h) {
var i = SPManage.API.V1.post_MFA_SMSCheck
} else {
var i = SPManage.API.V1.post_MFA_TOTPCheck
}
i(j).done(function(l) {
Cookies.remove(f);
window.location = b
}).fail(function() {
d.val("");
if (h) {
$("[data-sp-mfa-need-help-link]").hide();
$("[data-sp-mfa-need-help-info]").show()
} else {
d.removeAttr("disabled");
e.removeAttr("disabled");
d.focus()
}
})
});
$("[data-sp-mfa-need-help-link]").on("click", function(g) {
g.preventDefault();
$("[data-sp-mfa-need-help-link]").hide();
$("[data-sp-mfa-need-help-info]").show()
});
$("[data-sp-mfa-sms-send-button]").on("click", function(g) {
g.preventDefault();
SPManage.API.V1.post_MFA_SMSSend().done(function() {
SPManage.Alerts.postSuccess("New SMS auth code sent.");
d.removeAttr("disabled");
e.removeAttr("disabled")
})
})
});
SPManage.API.V1 = (function(a) {
a.post_databaseNew = function(b) {
return $.ajax({
url: "/data/dbs",
method: "POST",
contentType: "application/json",
dataType: "json",
data: JSON.stringify(b)
}).fail(SPManage.API.V1.errorHandlerGenerator("create database"))
};
return a
}(SPManage.API.V1));
$(function() {
var g = $("[data-sp-create-database-form]");
if (!g.length) {
return
}
var i = g.data("sp-appid");
var h = g.find("[data-sp-form-input]");
var k = g.find('[name="dbName"]');
var b = g.find('[name="dbUsername"]');
var d = g.find('[name="dbPassword"]');
var a = $(g).data("sp-create-database-next");
function j() {
SPManage.Validation.clearValidationErrors(g);
var l = true;
if (!SPManage.Validation.isValidDBName(k.val())) {
l = false;
SPManage.Validation.applyValidationError(k)
}
if (!SPManage.Validation.isValidDBUsername(b.val())) {
l = false;
SPManage.Validation.applyValidationError(b)
}
if (!SPManage.Validation.isValidDBUserPassword(d.val())) {
l = false;
SPManage.Validation.applyValidationError(d)
}
return l
}
function c() {
h.prop("disabled", true)
}
function f() {
h.prop("disabled", false)
}
var e = true;
k.on("input", function() {
if (!e) {
return
}
e = false;
b.val(SPManage.generateRandomString(12));
d.val(SPManage.generateRandomString(16));
b.prop("disabled", false);
d.prop("disabled", false)
});
g.on("click", "[data-sp-create-database-button]", function(m) {
m.preventDefault();
if (!j()) {
return
}
c();
var l = {
appid: i,
name: k.val(),
user: {
name: b.val(),
password: d.val()
}
};
SPManage.Alerts.clear();
SPManage.API.V1.post_databaseNew(l).done(function() {
if (a !== undefined) {
window.location = a
} else {
SPManage.Alerts.postSuccess("Database Created")
}
}).always(function() {
f()
})
})
});
SPManage.API.V1 = (function(a) {
a.post_databaseUpdate = function(b, c) {
return $.ajax({
url: "/data/dbs/" + b,
method: "POST",
contentType: "application/json",
dataType: "json",
data: JSON.stringify(c)
}).fail(SPManage.API.V1.errorHandlerGenerator("update database"))
};
return a
}(SPManage.API.V1));
$(function() {
var c = $("[data-sp-database-change-password-form]");
if (!c.length) {
return
}
var b = c.data("sp-dbid");
var a = c.data("sp-dbuserid");
var g = c.find("[data-sp-form-input]");
var d = c.find('[name="dbUserPassword"]');
function f() {
var i = true;
if (!SPManage.Validation.isValidDBUserPassword(d.val())) {
SPManage.Validation.applyValidationError(d);
i = false
}
return i
}
function e() {
g.prop("disabled", true)
}
function h() {
g.prop("disabled", false)
}
c.on("click", "[data-sp-database-change-password-button]", function(j) {
j.preventDefault();
console.log("clicked");
if (!f()) {
return
}
e();
SPManage.Alerts.clear();
var i = {
user: {
id: a,
password: d.val()
}
};
SPManage.API.V1.post_databaseUpdate(b, i).done(function() {
SPManage.Alerts.postSuccess("Database Password Updated")
}).always(function() {
h()
})
})
});
SPManage.API.V1 = (function(a) {
a.delete_database = function(b) {
return $.ajax({
url: "/data/dbs/" + b,
method: "DELETE",
dataType: "json"
}).fail(SPManage.API.V1.errorHandlerGenerator("delete database"))
};
return a
}(SPManage.API.V1));
$(document).on("click", "[data-sp-confirm-delete-database-button]", function(d) {
var b = d.target;
var a = $(b).data("sp-confirm-delete-database-button");
var c = $(b).data("sp-delete-database-next");
SPManage.API.V1.delete_database(a).done(function() {
if (c) {
window.location = c
}
})
});
$(document).on("click", "[data-sp-delete-database-button]", function(c) {
var f = $(c.target);
var a = $(f).data("sp-delete-database-button");
var b = $("[data-sp-confirm-delete-database-button='" + a + "']");
var d = $("[data-sp-cancel-delete-database-button='" + a + "']");
if (!b) {
alert("missing delete confirmation")
}
b.removeClass("hidden");
d.removeClass("hidden");
f.addClass("hidden")
});
$(document).on("click", "[data-sp-cancel-delete-database-button]", function(c) {
var d = $(c.target);
var a = $(d).data("sp-cancel-delete-database-button");
var f = $("[data-sp-delete-database-button='" + a + "']");
var b = $("[data-sp-confirm-delete-database-button='" + a + "']");
f.removeClass("hidden");
d.addClass("hidden");
b.addClass("hidden")
});
SPManage.API.V1 = (function(a) {
a.post_sysuserUpdate = function(b, c) {
return $.ajax({
url: "/data/sysusers/" + b,
method: "POST",
contentType: "application/json",
dataType: "json",
data: JSON.stringify(c)
}).fail(SPManage.API.V1.errorHandlerGenerator("update system user"))
};
return a
}(SPManage.API.V1));
$(function() {
var b = $("[data-sp-sysuser-change-password-form]");
if (!b.length) {
return
}
var g = SPManage.getComponentData(b, "sysuser");
var e = b.find("[data-sp-form-input]");
var a = b.find('[name="sysuserPassword"]');
var h = b.find('[name="sysuserPasswordMatch"]');
function d() {
var i = true;
SPManage.Validation.clearValidationErrors(b);
if (!SPManage.Validation.isValidSysuserPassword(a.val())) {
SPManage.Validation.applyValidationError(a);
i = false
}
if (a.val() !== h.val()) {
SPManage.Validation.applyValidationError(h);
i = false
}
return i
}
function c() {
e.prop("disabled", true)
}
function f() {
e.prop("disabled", false)
}
b.on("click", "[data-sp-sysuser-change-password-button]", function(j) {
console.log(g);
console.log(a);
console.log(h);
j.preventDefault();
SPManage.Alerts.clear();
if (!d()) {
return
}
c();
SPManage.Alerts.clear();
var i = {
password: a.val()
};
SPManage.API.V1.post_sysuserUpdate(g.id, i).done(function() {
SPManage.Alerts.postSuccess("System User Updated")
}).always(function() {
f()
})
})
});
SPManage.API.V1 = (function(a) {
a.post_serverSysuserNew = function(b) {
return $.ajax({
url: "/data/sysusers",
method: "POST",
dataType: "json",
contentType: "application/json",
data: JSON.stringify(b)
}).fail(SPManage.API.V1.errorHandlerGenerator("create new system user"))
};
return a
}(SPManage.API.V1));
$(function() {
var b = $("[data-sp-sysusers-new-form]");
if (!b.length) {
return
}
var c = $(b).data("sp-server");
var h = $(b).data("sp-delete-sysusers-new-next");
var g = $(b).find("[name='newSysuser']");
var a = $(b).find("[name='newSysuserPassword']");
function e() {
$("[data-sp-form-input]").prop("disabled", true)
}
function f() {
$("[data-sp-form-input]").removeAttr("disabled")
}
function d() {
SPManage.Validation.clearValidationErrors(b);
var i = true;
if (!SPManage.Validation.isValidSysusername(g.val())) {
SPManage.Validation.applyValidationError(g);
i = false
}
if (!SPManage.Validation.isValidSysuserPassword(a.val())) {
SPManage.Validation.applyValidationError(a);
i = false
}
return i
}
b.on("click", "[data-sp-sysusers-new-button]", function(j) {
j.preventDefault();
if (!d()) {
return
}
var i = {
name: g.val(),
password: a.val(),
serverid: c
};
e();
SPManage.API.V1.post_serverSysuserNew(i).done(function() {
if (h !== undefined) {
window.location = h
}
}).always(function() {
f()
})
})
});
SPManage.API.V1 = (function(a) {
a.delete_sysuser = function(b) {
return $.ajax({
url: "/data/sysusers/" + b,
method: "DELETE",
dataType: "json"
}).fail(SPManage.API.V1.errorHandlerGenerator("delete system user"))
};
return a
}(SPManage.API.V1));
$(document).on("click", "[data-sp-confirm-delete-sysuser-button]", function(d) {
var a = d.target;
var b = $(a).data("sp-confirm-delete-sysuser-button");
var c = $(a).data("sp-delete-sysuser-next");
SPManage.API.V1.delete_sysuser(b).done(function() {
if (c) {
window.location = c
}
})
});
$(document).on("click", "[data-sp-delete-sysuser-button]", function(c) {
var f = $(c.target);
var b = $(f).data("sp-delete-sysuser-button");
var a = $("[data-sp-confirm-delete-sysuser-button='" + b + "']");
var d = $("[data-sp-cancel-delete-sysuser-button='" + b + "']");
if (!a) {
alert("missing delete confirmation")
}
a.removeClass("hidden");
d.removeClass("hidden");
f.addClass("hidden")
});
$(document).on("click", "[data-sp-cancel-delete-sysuser-button]", function(c) {
var d = $(c.target);
var b = $(d).data("sp-cancel-delete-sysuser-button");
var f = $("[data-sp-delete-sysuser-button='" + b + "']");
var a = $("[data-sp-confirm-delete-sysuser-button='" + b + "']");
f.removeClass("hidden");
d.addClass("hidden");
a.addClass("hidden")
});
SPManage.Alerts = (function(a) {
a.postError = function(b) {
toastr.error(b, "Error")
};
a.postErrorOnNextPageLoad = function(b) {
sessionStorage.setItem("alertError", b)
};
a.postWarning = function(b) {
toastr.warning(b, "Warning")
};
a.postWarningOnNextPageLoad = function(b) {
sessionStorage.setItem("alertWarning", b)
};
a.postSuccess = function(b) {
toastr.success(b)
};
a.postSuccessOnNextPageLoad = function(b) {
sessionStorage.setItem("alertSuccess", b)
};
a.clear = function() {
toastr.remove()
};
$(function() {
var b;
b = sessionStorage.getItem("alertError");
if (b = sessionStorage.getItem("alertError")) {
SPManage.Alerts.postError(b);
sessionStorage.removeItem("alertError")
}
if (b = sessionStorage.getItem("alertWarning")) {
SPManage.Alerts.postWarning(b);
sessionStorage.removeItem("alertWarning")
}
if (b = sessionStorage.getItem("alertSuccess")) {
SPManage.Alerts.postSuccess(b);
sessionStorage.removeItem("alertSuccess")
}
});
return a
}(SPManage.Alerts));
SPManage.API.V1 = (function(a) {
a.post_PasswordResetSetNew = function(b, c) {
return $.ajax({
url: "/data/accounts/passwordreset/" + b,
method: "POST",
contentType: "application/json",
dataType: "json",
data: JSON.stringify(c)
}).fail(SPManage.API.V1.errorHandlerGenerator("set new password"))
};
return a
}(SPManage.API.V1));
$(function() {
var f = $("[data-sp-resetpassword-new-form]");
if (!f.length) {
return
}
var g = f.find("[data-sp-form-input]");
var d = f.find('[name="newPassword"]');
var c = f.find('[name="repeatPassword"]');
var b = SPManage.getComponentData(f, "code");
var e = f.find("[data-sp-resetpassword-new-success]");
function a() {
g.prop("disabled", true)
}
function i() {
g.prop("disabled", false)
}
function h() {
var j = true;
SPManage.Validation.clearValidationErrors(f);
if (!SPManage.Validation.isValidAccountPassword(d.val())) {
j = false;
SPManage.Validation.applyValidationError(d)
}
if (!SPManage.Validation.isValidAccountPassword(c.val())) {
j = false;
SPManage.Validation.applyValidationError(c)
}
if (d.val() != c.val()) {
j = false;
SPManage.Validation.applyValidationError(c)
}
return j
}
f.on("click", "[data-sp-resetpassword-new-button]", function(k) {
k.preventDefault();
if (!h()) {
return
}
var j = {
password: d.val()
};
a();
SPManage.API.V1.post_PasswordResetSetNew(b, j).done(function() {
SPManage.Alerts.postSuccess("Your password has been reset.");
e.removeClass("hidden")
}).fail(function() {
i()
})
})
});
SPManage.API.V1 = (function(a) {
a.set_accountPaid = function(b) {
return $.ajax({
url: "/data/account/set_paid",
method: "POST",
contentType: "application/json",
dataType: "json",
}).fail(SPManage.API.V1.errorHandlerGenerator("set account paid"))
};
return a
}(SPManage.API.V1));
SPManage.API.V1 = (function(a) {
a.get_accountBillingStatus = function(b) {
return $.ajax({
url: "/data/account/billing_status",
method: "GET",
contentType: "application/json",
dataType: "json",
}).fail(SPManage.API.V1.errorHandlerGenerator("get billing status"))
};
return a
}(SPManage.API.V1));
$(function() {
var a = $("[data-sp-paywall-update-card-button]");
if (!a.length) {
return
}
var b = SPManage.getComponentData(a, "stripe_config");
var c = a.data("sp-has-failed-invoices");
a.on("click", function() {
var f = StripeCheckout.configure(b);
function e(h) {
var g = {
stripeToken: h.id
};
SPManage.API.V1.post_accountBilling(g).done(function() {
if (a.data("sp-has-failed-payments")) {
d()
} else {
SPManage.Alerts.postSuccessOnNextPageLoad("Your card was added successfully");
window.location.reload(true)
}
})
}
f.open({
token: e
})
});
function d() {
$("[data-sp-paywall-attempting-charge]").show();
$("[data-sp-paywall-charge-failed]").hide();
var e = window.setInterval(function() {
SPManage.API.V1.get_accountBillingStatus().done(function(f) {
if (f.data.has_pending_invoices) {
return
}
if (f.data.has_failed_invoices) {
$("[data-sp-paywall-attempting-charge]").hide();
$("[data-sp-paywall-charge-failed]").show();
window.clearInterval(e)
} else {
SPManage.API.V1.set_accountPaid().done(function() {
SPManage.Alerts.postSuccessOnNextPageLoad("All invoices successfully paid");
window.location = "/account/billing"
})
}
})
}, 1000)
}
});
$(function() {
var b = $("[data-sp-announcement]");
if (!b.length) {
return
}
var a = b.data("sp-announcement");
b.on("click", "button.close", function(c) {
c.preventDefault();
b.hide();
Cookies.set("hide-announcement", a, {
expires: 365
})
})
});
SPManage.API.V1 = (function(a) {
a.post_sessionStart = function(b) {
return $.ajax({
url: "/data/session/start",
method: "POST",
contentType: "application/json",
dataType: "json",
data: JSON.stringify(b)
}).fail(SPManage.API.V1.errorHandlerGenerator("log in"))
};
return a
}(SPManage.API.V1));
$(function() {
var a = $("[data-sp-login-form]");
if (!a.length) {
return
}
$.getJSON("/data/session/check").done(function() {
window.location = "/"
});
var d = a.find('[name="email"]');
var c = a.find('[name="password"]');
d.focus();
var b = a.attr("data-sp-login-next");
var f = a.attr("data-sp-login-next-mfa");
var g = a.attr("data-sp-login-redirect-cookie");
var e = Cookies.get(g);
if (e) {
b = e
}
$("[data-sp-login-form] input").keypress(function(h) {
if (h.which == 13) {
$("[data-sp-login-button]").click()
}
});
a.on("click", "[data-sp-login-button]", function(k) {
k.preventDefault();
var i = a.find("[data-sp-form-input]");
i.attr("disabled", true);
var l = d.val();
var h = c.val();
var j = {
email: l,
password: h
};
SPManage.Alerts.clear();
SPManage.API.V1.post_sessionStart(j).done(function(m) {
if (m.data.mfa_enabled) {
window.location = f
} else {
Cookies.remove(g);
window.location = b
}
}).fail(function() {
i.val("");
i.removeAttr("disabled");
d.focus()
})
})
});
SPManage.API.V1 = (function(a) {
a.post_changeEmailConfirm = function(b, c) {
return $.ajax({
url: "/data/emailchange/confirm/" + b,
method: "POST",
dataType: "json",
contentType: "application/json",
data: JSON.stringify(c)
}).fail(SPManage.API.V1.errorHandlerGenerator("confirm email change", true))
};
return a
}(SPManage.API.V1));
$(function() {
var a = $("[data-sp-change-email-confirm-form]");
if (!a.length) {
return
}
var e = a.find("[data-sp-form-input]");
var g = a.find("[name='oldEmail']");
var h = a.find("[name='currentPassword']");
var d = a.data("sp-change-email-confirm-code");
function f() {
e.attr("disabled", false)
}
function c() {
e.attr("disabled", true)
}
function b() {
var i = true;
SPManage.Validation.clearValidationErrors(a);
if (h.val().trim() === "") {
i = false;
SPManage.Validation.applyValidationError(h)
}
return i
}
a.on("click", "[data-sp-change-email-confirm-button]", function(j) {
j.preventDefault();
SPManage.Alerts.clear();
if (!b()) {
return
}
var i = {
email: g.val(),
password: h.val()
};
c();
SPManage.API.V1.post_changeEmailConfirm(d, i).done(function() {
SPManage.Alerts.postSuccessOnNextPageLoad("Email address changed");
window.location = "/"
}).always(function() {
h.val("");
f()
})
})
});
SPManage.API.V1 = (function(a) {
a.post_sessionEnd = function() {
return $.ajax({
url: "/data/session/end",
method: "POST"
}).fail(function() {})
};
return a
}(SPManage.API.V1));
$(function() {
var a = $("[data-sp-logout-button]");
if (!a.length) {
return
}
var b = a.attr("data-sp-logout-next");
a.on("click", function() {
SPManage.API.V1.post_sessionEnd().always(function() {
if (b) {
window.location = b
}
})
})
});
SPManage.API.V1 = (function(a) {
a.post_accountSignup = function(b) {
return $.ajax({
url: "/data/accounts/signup",
method: "POST",
contentType: "application/json",
dataType: "json",
data: JSON.stringify(b)
}).fail(SPManage.API.V1.errorHandlerGenerator("sign up"))
};
return a
}(SPManage.API.V1));
$(function() {
var a = $("[data-sp-signup-form]");
if (!a.length) {
return
}
$.getJSON("/data/session/check").done(function() {
window.location = "/"
});
var c = a.find('[name="email"]');
var b = a.find('[name="password"]');
c.focus();
var d = a.attr("data-sp-signup-next");
$("[data-sp-signup-form] input").keypress(function(f) {
if (f.which == 13) {
$("[data-sp-signup-button]").click()
}
});
a.on("click", "[data-sp-signup-button]", function(i) {
i.preventDefault();
var g = a.find("[data-sp-form-input]");
g.attr("disabled", true);
var j = c.val();
var f = b.val();
var h = {
email: j,
password: f
};
SPManage.Alerts.clear();
SPManage.API.V1.post_accountSignup(h).done(function() {
window.location = d
}).fail(function() {
g.removeAttr("disabled");
g.val("");
c.focus()
})
})
});
SPManage.API.V1 = (function(a) {
a.post_changeEmailRequest = function(b) {
return $.ajax({
url: "/data/account/email/change",
method: "POST",
dataType: "json",
contentType: "application/json",
data: JSON.stringify(b)
}).fail(SPManage.API.V1.errorHandlerGenerator("send email change request"))
};
return a
}(SPManage.API.V1));
$(function() {
var a = $("[data-sp-change-email-request-form]");
if (!a.length) {
return
}
var e = a.find("[data-sp-form-input]");
var b = a.find("[name='newEmail']");
var g = a.find("[name='currentPassword']");
function f() {
e.attr("disabled", false)
}
function d() {
e.attr("disabled", true)
}
function c() {
var h = true;
SPManage.Validation.clearValidationErrors(a);
if (!SPManage.Validation.isValidEmailAddress(b.val())) {
h = false;
SPManage.Validation.applyValidationError(b)
}
if (g.val().trim() === "") {
h = false;
SPManage.Validation.applyValidationError(g)
}
return h
}
a.on("click", "[data-sp-change-email-request-button]", function(i) {
i.preventDefault();
SPManage.Alerts.clear();
if (!c()) {
return
}
var h = {
newemail: b.val(),
curpasswd: g.val()
};
d();
SPManage.API.V1.post_changeEmailRequest(h).done(function() {
SPManage.Alerts.postSuccess("A change address confirmation has been sent to your account's current email address.")
}).always(function() {
g.val("");
b.val("");
f()
})
})
});
$(function() {
var a = $("[data-sp-billing-history]");
if (!a.length) {
return
}
$("[data-sp-show-all-billing-history]").on("click", function(b) {
$("[data-sp-show-all-billing-history]").hide();
$("[data-sp-billing-history] .row").show()
})
});
$(function() {
var a = $("[data-sp-referral-url]");
if (!a.length) {
return
}
a.on("click", function(c) {
c.preventDefault();
var b = a.data("sp-referral-url");
SPManage.API.Util.copyTextToClipboard(b)
})
});
SPManage.API.V1 = (function(a) {
a.post_newAPIKey = function() {
return $.ajax({
url: "/data/account/apikey/new",
method: "POST",
dataType: "json"
}).fail(SPManage.API.V1.errorHandlerGenerator("generate new API Key"))
};
return a
}(SPManage.API.V1));
$(function() {
var a = $("[data-sp-new-apikey-form]");
if (!a.length) {
return
}
var d = a.find("[data-sp-form-input]");
var b = a.find('[name="apiKey"]');
function e() {
d.attr("disabled", false)
}
function c() {
d.attr("disabled", true)
}
a.on("click", "[data-sp-new-apikey-button]", function(f) {
f.preventDefault();
c();
SPManage.Alerts.clear();
SPManage.API.V1.post_newAPIKey().done(function(g) {
var h = g.data;
b.val(h);
SPManage.Alerts.postSuccess("Please copy your API Key now. It won't be shown again after you leave this page")
}).always(function() {
e()
})
})
});
SPManage.API.V1 = (function(a) {
a.post_enableMFA = function(b, c) {
return $.ajax({
url: "/data/account/mfa/enable",
method: "POST",
contentType: "application/json",
dataType: "json",
data: JSON.stringify(b)
}).fail(SPManage.API.V1.errorHandlerGenerator("enable 2-factor auth")).done(c)
};
a.post_disableMFA = function(b, c) {
return $.ajax({
url: "/data/account/mfa/disable",
method: "POST",
contentType: "application/json",
dataType: "json",
data: JSON.stringify(b)
}).fail(SPManage.API.V1.errorHandlerGenerator("disable 2-factor auth")).done(c)
};
a.post_confirmTOTP = function(b, c) {
return $.ajax({
url: "/data/account/mfa/confirm_totp",
method: "POST",
contentType: "application/json",
dataType: "json",
data: JSON.stringify(b)
}).fail(SPManage.API.V1.errorHandlerGenerator("confirm 2-factor auth code")).done(c)
};
a.post_retrieveTOTP = function(b, c) {
return $.ajax({
url: "/data/account/mfa/retrieve_totp",
method: "POST",
contentType: "application/json",
dataType: "json",
data: JSON.stringify(b)
}).fail(SPManage.API.V1.errorHandlerGenerator("retrieve 2-factor auth code")).done(c)
};
return a
}(SPManage.API.V1));
$(function() {
var a = $("[data-sp-mfa-view-confirm-modal]");
if (!a.length) {
return
}
$("[data-sp-mfa-show-enable-form] button").on("click", function(g) {
g.preventDefault();
var d = $("[data-sp-mfa-show-enable-form]");
var b = d.data("sp-mfa-status") == "enabled" ? true : false;
var c = d.find('[name="curpasswd"]').val();
function f(e) {
new QRious({
element: $("[data-sp-totp-qr]")[0],
value: e.data.mfa_totp_uri,
size: 200,
});
$("[data-sp-mfa-totp-secret]").text(e.data.mfa_totp_secret);
$("[data-sp-mfa-view-confirm-modal]").modal();
$("[data-sp-mfa-view-confirm-modal]").on("shown.bs.modal", function() {
$("[data-sp-totp-confirm-form]").find('[name="mfacode"]').focus()
})
}
if (b) {
SPManage.API.V1.post_retrieveTOTP({
curpasswd: c
}, f)
} else {
SPManage.API.V1.post_enableMFA({
curpasswd: c
}, f)
}
});
$("[data-sp-mfa-view-confirm-modal] button").on("click", function(c) {
c.preventDefault();
var b = $("[data-sp-totp-confirm-form]").find('[name="mfacode"]').val();
SPManage.API.V1.post_confirmTOTP({
mfacode: b
}, function() {
$(window).scrollTop(0);
window.location.reload(true)
})
});
$("[data-sp-mfa-disable-form] button").on("click", function(d) {
d.preventDefault();
var c = $("[data-sp-mfa-disable-form]");
var b = c.find('[name="curpasswd-for-disable"]').val();
SPManage.API.V1.post_disableMFA({
curpasswd: b
}, function() {
$(window).scrollTop(0);
window.location.reload(true)
})
});
$("[data-sp-show-disable-mfa]").on("click", function(b) {
b.preventDefault();
$("[data-sp-show-disable-mfa]").hide();
$("[data-disable-mfa-block]").show()
})
});
SPManage.API.V1 = (function(a) {
a.post_accountBilling = function(b) {
return $.ajax({
url: "/data/account/billing",
method: "POST",
contentType: "application/json",
dataType: "json",
data: JSON.stringify(b)
}).fail(SPManage.API.V1.errorHandlerGenerator("update billing information"))
};
return a
}(SPManage.API.V1));
$(function() {
var a = $("[data-sp-update-card-button]");
if (!a.length) {
return
}
var b = SPManage.getComponentData(a, "stripe_config");
a.on("click", function() {
var d = StripeCheckout.configure(b);
function c(f) {
var e = {
stripeToken: f.id
};
SPManage.API.V1.post_accountBilling(e).done(function() {
SPManage.Alerts.postSuccessOnNextPageLoad("Your card was added successfully");
window.location.reload(true)
})
}
d.open({
token: c
})
})
});
SPManage.API.V1 = (function(a) {
a.post_accountProfile = function(b) {
return $.ajax({
url: "/data/account/profile",
method: "POST",
contentType: "application/json",
dataType: "json",
data: JSON.stringify(b)
}).fail(SPManage.API.V1.errorHandlerGenerator("update account profile"))
};
return a
}(SPManage.API.V1));
$(function() {
var g = $("[data-sp-update-profile-form]");
if (!g.length) {
return
}
var j = g.find("[data-sp-form-input]");
var k = g.find('[name="name"]');
var e = g.find('[name="phone"]');
var i = g.find('[name="company"]');
var b = g.find('[name="address"]');
var h = g.find('[name="city"]');
var d = g.find('[name="state"]');
var c = g.find('[name="postalcode"]');
var l = g.find('[name="country"]');
function m(n) {
k.val(n.name);
e.val(n.phone);
i.val(n.company);
b.val(n.address);
h.val(n.city);
d.val(n.state);
c.val(n.postalcode);
l.val(n.country)
}
function a() {
j.attr("disabled", true)
}
function f() {
j.removeAttr("disabled")
}
g.on("click", "[data-sp-update-profile-button]", function(r) {
r.preventDefault();
SPManage.Alerts.clear();
var o = k.val();
var s = e.val();
var t = i.val();
var w = b.val();
var q = h.val();
var n = d.val();
var u = c.val();
var p = l.val();
var v = {
profile: {
name: o,
phone: s,
company: t,
address: w,
city: q,
state: n,
postalcode: u,
country: p
}
};
a();
SPManage.API.V1.post_accountProfile(v).done(function(x) {
SPManage.Alerts.postSuccess("Profile updated");
m(x.data)
}).always(function() {
f()
})
})
});
SPManage.API.V1 = (function(a) {
a.post_changePlan = function(b) {
return $.ajax({
url: "/data/account/plan/change",
method: "POST",
dataType: "json",
contentType: "application/json",
data: JSON.stringify(b)
}).fail(SPManage.API.V1.errorHandlerGenerator("change plan"))
};
return a
}(SPManage.API.V1));
$(function() {
var a = $("[data-sp-change-plan]");
if (!a.length) {
return
}
a.each(function(e, c) {
var b = $(c);
var d = b.data("sp-change-plan");
b.on("click", function() {
if (b.data("sp-change-to-free-plan-not-allowed")) {
$("[data-sp-refuse-downgrade-info]").show();
b.prop("disabled", true);
return
}
var f = {
plan: d
};
SPManage.Alerts.clear();
SPManage.API.V1.post_changePlan(f).done(function() {
SPManage.Alerts.postSuccessOnNextPageLoad("Plan updated");
window.location.reload(true)
})
})
})
});
SPManage.API.V1 = (function(a) {
a.post_changePassword = function(b) {
return $.ajax({
url: "/data/account/password/change",
method: "POST",
dataType: "json",
contentType: "application/json",
data: JSON.stringify(b)
}).fail(SPManage.API.V1.errorHandlerGenerator("change password"))
};
return a
}(SPManage.API.V1));
$(function() {
var a = $("[data-sp-update-password-form]");
if (!a.length) {
return
}
var e = a.find("[data-sp-form-input]");
var h = a.find("[name='currentPassword']");
var g = a.find("[name='newPassword']");
var b = a.find("[name='newPasswordConfirm']");
function f() {
e.attr("disabled", false)
}
function d() {
e.attr("disabled", true)
}
function c() {
var i = true;
SPManage.Validation.clearValidationErrors(a);
if (h.val().trim() === "") {
i = false;
SPManage.Validation.applyValidationError(h)
}
if (!SPManage.Validation.isValidAccountPassword(g.val())) {
i = false;
SPManage.Validation.applyValidationError(g)
}
if (g.val() !== b.val()) {
i = false;
SPManage.Validation.applyValidationError(b)
}
return i
}
a.on("click", "[data-sp-update-password-button]", function(j) {
j.preventDefault();
SPManage.Alerts.clear();
if (!c()) {
return
}
var i = {
curpasswd: h.val(),
newpasswd: g.val()
};
d();
SPManage.API.V1.post_changePassword(i).done(function() {
SPManage.Alerts.postSuccess("Password successfully updated")
}).always(function() {
h.val("");
g.val("");
b.val("");
f()
})
})
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment