Created
December 13, 2018 12:48
-
-
Save fer-ri/109f5cdc8a5a045d7271d25aebc60943 to your computer and use it in GitHub Desktop.
Serverpilot.com js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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