Viewing File: /usr/local/cpanel/base/frontend/jupiter/passenger/views/details.js
/*
# passenger/views/details.js Copyright 2022 cPanel, L.L.C.
# All rights reserved.
# copyright@cpanel.net http://cpanel.net
# This code is subject to the cPanel license. Unauthorized copying is prohibited
*/
/* global define: false */
/* jshint -W100 */
define(
[
"angular",
"lodash",
"cjt/util/locale",
"cjt/util/parse",
"cjt/util/table",
"app/directives/passenger_validators",
"cjt/directives/toggleSwitchDirective",
"cjt/directives/actionButtonDirective",
"cjt/directives/toggleLabelInfoDirective",
"cjt/directives/alertList",
"cjt/directives/pageSizeDirective",
"cjt/services/alertService",
"cjt/services/cpanel/componentSettingSaverService",
"cjt/services/viewNavigationApi",
"cjt/directives/validationContainerDirective",
"cjt/directives/validationItemDirective",
"cjt/validator/ip-validators",
"cjt/validator/domain-validators",
"cjt/validator/compare-validators",
"cjt/validator/datatype-validators",
"cjt/validator/path-validators",
"cjt/validator/length-validators",
"cjt/services/viewNavigationApi",
"app/directives/table_row_form",
"uiBootstrap"
],
function(angular, _, LOCALE, PARSE, Table) {
var app = angular.module("cpanel.applicationManager");
var controller = app.controller(
"ConfigurationDetailsController",
[
"$routeParams",
"viewNavigationApi",
"Apps",
"Domains",
"defaultInfo",
"alertService",
"componentSettingSaverService",
function(
$routeParams,
viewNavigationApi,
Apps,
Domains,
defaultInfo,
alertService,
componentSettingSaverService) {
var details = this;
details.is_loading = false;
details.domains = [];
details.user_home_dir = defaultInfo.homedir;
details.supports_env_vars = Apps.has_support_for_env_vars;
details.edit_mode = $routeParams.applname !== void 0;
details.editing_envar = false;
details.forceLoad = false;
details.isRTL = false;
details.savedSettings = {};
var SAVED_SETTINGS_DEFAULTS = {
showAllHelp: true,
};
// This is the dynamic portion of the form's description text
details.formDescription = details.edit_mode ?
LOCALE.maketext("You can use this section of the interface to manage your custom applications.") :
LOCALE.maketext("You can use this section of the interface to register a new application.");
var html = document.querySelector("html");
if (html) {
details.isRTL = html.getAttribute("dir") === "rtl";
}
details.get_page_title = function() {
if (details.edit_mode) {
return LOCALE.maketext("Edit");
} else {
return LOCALE.maketext("Register");
}
};
details.get_application_title = function() {
if (details.edit_mode) {
return LOCALE.maketext("Edit Your Application");
} else {
return LOCALE.maketext("Register Your Application");
}
};
var envarTable = new Table();
details.meta = envarTable.getMetadata();
details.filteredEnvars = envarTable.getList();
details.paginationMessage = envarTable.paginationMessage;
details.renderEnvars = function() {
details.filteredEnvars = envarTable.update();
};
details.sortList = function() {
details.renderEnvars();
};
details.selectPage = function() {
details.renderEnvars();
};
details.selectPageSize = function() {
details.renderEnvars();
};
details.searchList = function() {
details.renderEnvars();
};
details.goToView = function(view, forceLoad) {
viewNavigationApi.loadView(view, forceLoad ? { "forceLoad": 1 } : {} );
};
details.save_application = function() {
if (details.add_app.$pristine || details.add_app.$invalid) {
alertService.add({
type: "danger",
message: LOCALE.maketext("Your application is incomplete or invalid."),
closeable: true,
replace: true,
autoClose: false,
group: "passenger"
});
return;
}
if (details.editing_envar) {
alertService.add({
type: "danger",
message: LOCALE.maketext("You must finish adding or editing environment variables first."),
closeable: true,
replace: true,
autoClose: false,
group: "passenger"
});
return;
}
if (details.edit_mode) {
return details.save_edited_application();
} else {
return details.save_new_application();
}
};
details.save_edited_application = function() {
return Apps.update_application(details.application, details.previous_name)
.then(function() {
alertService.add({
type: "success",
message: LOCALE.maketext("You successfully updated your application."),
closeable: true,
replace: false,
autoClose: 10000,
group: "passenger"
});
// Force load required to make sure
// the manage view always reflects the reality.
details.goToView("manage", true);
})
.catch(function(error) {
alertService.add({
type: "danger",
message: error,
closeable: true,
replace: false,
group: "passenger"
});
});
};
details.save_new_application = function() {
return Apps.add_application(details.application)
.then(function() {
alertService.add({
type: "success",
message: LOCALE.maketext("You successfully registered your application."),
closeable: true,
replace: false,
autoClose: 10000,
group: "passenger"
});
// Force load required to make sure
// the manage view always reflects the reality.
details.goToView("manage", true);
})
.catch(function(error) {
alertService.add({
type: "danger",
message: error,
closeable: true,
replace: false,
group: "passenger"
});
});
};
details.add_envar = function() {
envarTable.add({ "name": "", "value": "", "is_editing": true, "is_new": true });
details.editing_envar = true;
details.renderEnvars();
};
details.close_envar_editor = function(envar) {
envar.is_editing = false;
details.editing_envar = false;
// check if the user cancelled a new item
if (envar.is_new) {
envarTable.remove(envar);
details.renderEnvars();
}
};
details.save_envar = function(envar, name, value) {
if (envar.is_new) {
delete envar.is_new;
} else {
// check for a rename
if (name !== envar.name) {
delete details.application.envvars[envar.name];
}
}
envar.name = name;
envar.value = value;
details.application.envvars[name] = value;
details.close_envar_editor(envar);
details.renderEnvars();
};
details.delete_envar = function(envar) {
envarTable.remove(envar);
delete details.application.envvars[envar.name];
details.renderEnvars();
details.add_app.$setDirty();
};
details.edit_envar = function(envar) {
envar.is_editing = true;
details.editing_envar = true;
};
/**
* Toggles whether all help info blocks should be shown or not. Saves this
* preference to the user's personalization store.
*/
details.toggleShowAllHelp = function() {
details.savedSettings.showAllHelp = !details.savedSettings.showAllHelp;
componentSettingSaverService.set("application_details", details.savedSettings);
};
details.init = function() {
alertService.clear(void 0, "passenger");
var savedSettings = componentSettingSaverService.getCached("application_details").cachedValue;
_.merge(details.savedSettings, SAVED_SETTINGS_DEFAULTS, savedSettings || {});
if (details.edit_mode) {
details.is_loading = true;
Apps.get_application_by_name($routeParams.applname)
.then(function(data) {
details.application = angular.copy(data);
details.application = Apps.strip_homedir_from_path(details.application);
var array_for_table = [];
_.forOwn(details.application.envvars, function(envar_value, envar_key) {
array_for_table.push({
"name": envar_key,
"value": envar_value,
"is_editing": false
});
});
envarTable.load(array_for_table);
details.renderEnvars();
details.previous_name = details.application.name;
details.is_loading = false;
});
} else {
if (Apps.applications.length === 0) {
details.forceLoad = true;
}
details.application = Apps.get_default_application();
}
Domains.fetch()
.then(function(data) {
details.domains = data;
});
envarTable.setSort("name", "asc");
};
details.init();
}
]);
return controller;
}
);
Back to Directory
File Manager