Viewing File: /usr/local/cpanel/whostmgr/docroot/templates/external_auth/manage.cmb.js
/*
# templates/external_auth/services/UsersService.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 */
// Then load the application dependencies
define(
'app/services/UsersService',[
"angular",
"lodash",
"cjt/core",
"cjt/util/parse",
"cjt/io/api",
"cjt/io/whm-v1-request",
"cjt/io/whm-v1",
"cjt/modules",
],
function(angular, _, CJT, PARSE, API, APIREQUEST) {
"use strict";
var app = angular.module("App");
function UsersServiceFactory($q) {
var users = [];
var UsersService = {};
UsersService.get_users = function() {
return users;
};
UsersService.fetch_users = function() {
var deferred = $q.defer();
var apiCall = new APIREQUEST.Class();
apiCall.initialize("", "get_users_authn_linked_accounts");
API.promise(apiCall.getRunArguments())
.done(function(response) {
response = response.parsedResponse;
if (response.status) {
deferred.resolve(response);
} else {
deferred.reject(response.error);
}
});
deferred.promise.then(function(result) {
users = [];
angular.forEach(result.data, function(row) {
var user = UsersService.get_user_by_username(row.username);
if (!user) {
user = {
username: row.username,
links: {}
};
users.push(user);
}
if (!user.links[row.provider_protocol]) {
user.links[row.provider_protocol] = {};
}
if (!user.links[row.provider_protocol][row.provider_id]) {
user.links[row.provider_protocol][row.provider_id] = {};
}
user.links[row.provider_protocol][row.provider_id][row.subject_unique_identifier] = {
link_type: row.link_type,
preferred_username: row.preferred_username
};
});
});
return deferred.promise;
};
UsersService.get_user_by_username = function(username) {
for (var i = 0; i < users.length; i++) {
if (users[i].username === username) {
return users[i];
}
}
};
UsersService.unlink_provider = function(username, subject_unique_identifier, provider) {
var deferred = $q.defer();
var apiCall = new APIREQUEST.Class();
apiCall.initialize("", "unlink_user_authn_provider");
apiCall.addArgument("username", username);
apiCall.addArgument("subject_unique_identifier", subject_unique_identifier);
apiCall.addArgument("provider_id", provider);
API.promise(apiCall.getRunArguments())
.done(function(response) {
response = response.parsedResponse;
if (response.status) {
deferred.resolve(response);
} else {
deferred.reject(response.error);
}
});
return deferred.promise;
};
return UsersService;
}
UsersServiceFactory.$inject = ["$q", "growl"];
return app.factory("UsersService", UsersServiceFactory);
});
/*
# templates/external_auth/services/ProvidersService.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 */
// Then load the application dependencies
define(
'app/services/ProvidersService',[
"angular",
"lodash",
"cjt/core",
"cjt/util/parse",
"cjt/io/api",
"cjt/io/whm-v1-request",
"cjt/io/whm-v1",
"cjt/decorators/growlDecorator",
"cjt/modules",
],
function(angular, _, CJT, PARSE, API, APIREQUEST) {
"use strict";
var app = angular.module("App");
function ProvidersServiceFactory($q, growl) {
var providers = [];
var ProvidersService = {};
function _build_batch_command(call, params) {
var command_str = call;
if (params) {
var command_params = [];
angular.forEach(params, function(value, key) {
command_params.push(key + "=" + encodeURIComponent(value));
});
command_str += "?" + command_params.join("&");
}
return command_str;
}
ProvidersService.get_providers = function() {
return providers;
};
ProvidersService.get_enabled_providers = function(service) {
var enabled_providers = [];
angular.forEach(providers, function(provider) {
if (provider[service + "_enabled"]) {
enabled_providers.push(provider);
}
});
return enabled_providers;
};
ProvidersService.fetch_providers = function() {
var deferred = $q.defer();
var apiCall = new APIREQUEST.Class();
apiCall.initialize("", "get_available_authentication_providers");
API.promise(apiCall.getRunArguments())
.done(function(response) {
response = response.parsedResponse;
if (response.status) {
deferred.resolve(response);
} else {
deferred.reject(response.error);
}
});
deferred.promise.then(function(result) {
providers = [];
angular.forEach(result.data, function(provider) {
provider = angular.extend(provider, {
enable: function(service) {
return ProvidersService.enable_provider(service, provider).then(function() {
growl.success(LOCALE.maketext("The system has successfully enabled the “[_1]” provider in “[_2]”.", provider.display_name, service));
}, function(error) {
growl.error(LOCALE.maketext("The system could not enable the “[_1]” provider in “[_2]”. The following error occurred: [_3]", provider.display_name, service, error));
});
},
disable: function(service) {
return ProvidersService.disable_provider(service, provider).then(function() {
growl.success(LOCALE.maketext("The system has successfully disabled the “[_1]” provider in “[_2]”.", provider.display_name, service));
}, function(error) {
growl.error(LOCALE.maketext("The system could not disable the “[_1]” provider in “[_2]”. The following error occurred: [_3]", provider.display_name, service, error));
});
},
toggle_status: function(service) {
return provider[service + "_enabled"] ? provider.disable(service) : provider.enable(service);
}
});
this.push(provider);
}, providers);
});
return deferred.promise;
};
ProvidersService.enable_provider = function(service, item) {
var deferred = $q.defer();
var apiCall = new APIREQUEST.Class();
apiCall.initialize("", "enable_authentication_provider");
apiCall.addArgument("provider_id", item.id);
apiCall.addArgument("service_name", service);
API.promise(apiCall.getRunArguments())
.done(function(response) {
response = response.parsedResponse;
if (response.status) {
deferred.resolve(response);
item[service + "_enabled"] = true;
} else {
deferred.reject(response.error);
}
});
return deferred.promise;
};
ProvidersService.disable_provider = function(service, item) {
var deferred = $q.defer();
var apiCall = new APIREQUEST.Class();
apiCall.initialize("", "disable_authentication_provider");
apiCall.addArgument("provider_id", item.id);
apiCall.addArgument("service_name", service);
API.promise(apiCall.getRunArguments())
.done(function(response) {
response = response.parsedResponse;
if (response.status) {
deferred.resolve(response);
item[service + "_enabled"] = false;
} else {
deferred.reject(response.error);
}
});
return deferred.promise;
};
ProvidersService.set_provider_display_configurations = function(provider_id, configurations) {
var deferred = $q.defer();
var apiCall = new APIREQUEST.Class();
apiCall.initialize("", "set_provider_display_configurations");
apiCall.addArgument("service_name", "cpaneld");
apiCall.addArgument("provider_id", provider_id);
apiCall.addArgument("configurations", JSON.stringify(configurations));
API.promise(apiCall.getRunArguments())
.done(function(response) {
response = response.parsedResponse;
if (response.status) {
deferred.resolve(response);
} else {
deferred.reject(response.error);
}
});
return deferred.promise;
};
ProvidersService.set_provider_client_configurations = function(provider_id, configurations) {
var deferred = $q.defer();
var apiCall = new APIREQUEST.Class();
apiCall.initialize("", "set_provider_client_configurations");
apiCall.addArgument("service_name", "cpaneld");
apiCall.addArgument("provider_id", provider_id);
apiCall.addArgument("configurations", JSON.stringify(configurations));
API.promise(apiCall.getRunArguments())
.done(function(response) {
response = response.parsedResponse;
if (response.status) {
deferred.resolve(response);
} else {
deferred.reject(response.error);
}
});
return deferred.promise;
};
ProvidersService.get_provider_client_configurations = function(provider_id) {
var deferred = $q.defer();
var apiCall = new APIREQUEST.Class();
apiCall.initialize("", "get_provider_client_configurations");
apiCall.addArgument("provider_id", provider_id);
apiCall.addArgument("service_name", "cpaneld");
API.promise(apiCall.getRunArguments())
.done(function(response) {
response = response.parsedResponse;
if (response.status) {
deferred.resolve(response);
} else {
deferred.reject(response.error);
}
});
return deferred.promise;
};
ProvidersService.get_provider_configuration_fields = function(provider_id) {
var deferred = $q.defer();
var apiCall = new APIREQUEST.Class();
apiCall.initialize("", "get_provider_configuration_fields");
apiCall.addArgument("service_name", "cpaneld");
apiCall.addArgument("provider_id", provider_id);
apiCall.addSorting("display_order");
API.promise(apiCall.getRunArguments())
.done(function(response) {
response = response.parsedResponse;
if (response.status) {
deferred.resolve(response);
} else {
deferred.reject(response.error);
}
});
return deferred.promise;
};
ProvidersService.get_provider_by_id = function(provider_id) {
for (var i = 0; i < providers.length; i++) {
var provider = providers[i];
if (provider.id === provider_id) {
return provider;
}
}
};
ProvidersService.get_provider_display_configurations = function(provider_id) {
var deferred = $q.defer();
var apiCall = new APIREQUEST.Class();
apiCall.initialize("", "get_provider_display_configurations");
apiCall.addArgument("provider_id", provider_id);
API.promise(apiCall.getRunArguments())
.done(function(response) {
response = response.parsedResponse;
if (response.status) {
deferred.resolve(response);
} else {
deferred.reject(response.error);
}
});
return deferred.promise;
};
/*
client_configs: object of hashed keys to update
*/
ProvidersService.save_provider_configurations = function(provider_id, client_configs, display_configs) {
// This gets added to in the foreach loop. Format is necessary for batching.
var params = {
command: []
};
if (display_configs) {
angular.forEach(display_configs, function(config) {
params.command.push(_build_batch_command("set_provider_display_configurations", {
provider_id: provider_id,
service_name: config.service_name,
configurations: JSON.stringify(config.configs)
}));
});
}
params.command.push(_build_batch_command("set_provider_client_configurations", {
provider_id: provider_id,
service_name: "cpaneld",
configurations: JSON.stringify(client_configs)
}));
var deferred = $q.defer();
var apiCall = new APIREQUEST.Class();
apiCall.initialize("", "batch");
apiCall.addArgument("command", params.command);
API.promise(apiCall.getRunArguments())
.done(function(response) {
response = response.parsedResponse;
if (response.status) {
deferred.resolve(response);
} else {
deferred.reject(response.error);
}
});
return deferred.promise;
};
return ProvidersService;
}
ProvidersServiceFactory.$inject = ["$q", "growl"];
return app.factory("ProvidersService", ProvidersServiceFactory);
});
/*
# templates/external_auth/views/UsersController.js Copyright(c) 2020 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 -W003 */
// Then load the application dependencies
define(
'app/views/UsersController',[
"angular",
"lodash",
"cjt/modules",
"cjt/directives/toggleSortDirective",
"cjt/directives/searchDirective",
"cjt/directives/pageSizeDirective",
"cjt/decorators/paginationDecorator",
],
function(angular, _) {
var UsersController = function($scope, $filter, $location, UsersService, ProvidersService) {
var _this = this;
$scope.users = [];
$scope.providers = [];
// meta information
$scope.meta = {
// sort settings
sortReverse: false,
sortBy: "label",
sortDirection: "asc",
// pager settings
maxPages: 5,
totalItems: $scope.users.length,
currentPage: 1,
pageSize: 20,
pageSizes: [20, 50, 100, 500],
start: 0,
limit: 10,
filterValue: "",
};
// initialize filter list
$scope.filteredList = $scope.users;
$scope.showPager = true;
/**
* Initialize the variables required for
* row selections in the table.
*/
$scope.checkdropdownOpen = false;
// This updates the selected tracker in the 'Selected' Badge.
$scope.totalSelectedUsers = 0;
var selectedUserList = [];
// update the table on sort
$scope.sortList = function() {
$scope.fetch();
};
// update table on pagination changes
$scope.selectPage = function() {
$scope.fetch();
};
// update table on page size changes
$scope.selectPageSize = function() {
$scope.fetch();
};
$scope.configureUser = function(provider) {
$location.path("/providers/" + provider.id);
};
// update table on search
$scope.searchList = function() {
$scope.fetch();
};
// have your filters all in one place - easy to use
var filters = {
filter: $filter("filter"),
orderBy: $filter("orderBy"),
startFrom: $filter("startFrom"),
limitTo: $filter("limitTo")
};
$scope.manage_user = function(username) {
$location.path("/users/" + username);
};
$scope.get_providers_for = function(user) {
var providers = [];
angular.forEach(user.links, function(provider_type) {
angular.forEach(provider_type, function(value, key) {
var provider = ProvidersService.get_provider_by_id(key);
if (provider) {
providers.push(provider);
}
});
});
return providers;
};
// update table
$scope.fetch = function() {
var filteredList = [];
// filter list based on search text
if ($scope.meta.filterValue !== "") {
filteredList = filters.filter($scope.users, $scope.meta.filterValue, false);
} else {
filteredList = $scope.users;
}
// sort the filtered list
if ($scope.meta.sortDirection !== "" && $scope.meta.sortBy !== "") {
filteredList = filters.orderBy(filteredList, $scope.meta.sortBy, $scope.meta.sortDirection === "asc" ? true : false);
}
// update the total items after search
$scope.meta.totalItems = filteredList.length;
// filter list based on page size and pagination
if ($scope.meta.totalItems > _.min($scope.meta.pageSizes)) {
var start = ($scope.meta.currentPage - 1) * $scope.meta.pageSize;
var limit = $scope.meta.pageSize;
filteredList = filters.limitTo(filters.startFrom(filteredList, start), limit);
$scope.showPager = true;
// table statistics
$scope.meta.start = start + 1;
$scope.meta.limit = start + filteredList.length;
} else {
// hide pager and pagination
$scope.showPager = false;
if (filteredList.length === 0) {
$scope.meta.start = 0;
} else {
// table statistics
$scope.meta.start = 1;
}
$scope.meta.limit = filteredList.length;
}
var countNonSelected = 0;
// Add rowSelected attribute to each item in the list to track selections.
filteredList.forEach(function(item) {
// Select the rows if they were previously selected on this page.
if (selectedUserList.indexOf(item.id) !== -1) {
item.rowSelected = true;
} else {
item.rowSelected = false;
countNonSelected++;
}
});
$scope.filteredList = filteredList;
// Clear the 'Select All' checkbox if at least one row is not selected.
$scope.allRowsSelected = (filteredList.length > 0) && (countNonSelected === 0);
return filteredList;
};
$scope.init = function() {
$scope.users = UsersService.get_users();
$scope.providers = ProvidersService.get_enabled_providers();
$scope.fetch();
};
// first page load
$scope.init();
return _this;
};
var app = angular.module("App");
UsersController.$inject = ["$scope", "$filter", "$location", "UsersService", "ProvidersService"];
var controller = app.controller("UsersController", UsersController);
return controller;
}
);
/*
# templates/external_auth/views/ManageUserController.js Copyright(c) 2020 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 */
// Then load the application dependencies
define(
'app/views/ManageUserController',[
"angular",
"cjt/util/locale",
"cjt/decorators/growlDecorator",
"ngSanitize",
"cjt/modules",
"app/services/ProvidersService",
"app/services/UsersService",
],
function(angular, LOCALE) {
var app = angular.module("App");
function ManageUserController($scope, $routeParams, $location, $rootScope, $uibModal, ProvidersService, UsersService, growl) {
$scope.user = false;
$scope.LOCALE = LOCALE;
$scope.init = function() {
$scope.loadingUser = true;
$scope.userID = $routeParams.userID;
$scope.user = UsersService.get_user_by_username($scope.userID);
$scope.user_links = $scope.get_user_links();
$scope.loadingUser = false;
};
$scope.fetch = function() {
$scope.user_links = [];
$scope.loadingUser = true;
UsersService.fetch_users().then(function() {
$scope.user = UsersService.get_user_by_username($scope.userID);
$scope.user_links = $scope.get_user_links();
if (!$scope.user_links.length) {
$location.path("/users");
}
}, function(error) {
growl.error(LOCALE.maketext("The system encountered an error while it tried to retrieve the users: [_1]", error));
}).finally(function() {
$scope.loadingUser = false;
});
};
$scope.unlink_provider = function(subject_unique_identifier, provider_id) {
var provider = ProvidersService.get_provider_by_id(provider_id);
var modalScope = $rootScope.$new();
modalScope.provider = provider.display_name;
modalScope.username = $scope.user.username;
var preferred_username = $scope.user.links.openid_connect[provider_id][subject_unique_identifier].preferred_username;
$scope.modalInstance = $uibModal.open({
templateUrl: "confirmproviderunlink.html",
scope: modalScope
});
return $scope.modalInstance.result.then(function() {
return UsersService.unlink_provider($scope.user.username, subject_unique_identifier, provider.id).then(function() {
growl.success(LOCALE.maketext("The system has removed the “[_1] ([_2])” authentication linkage for “[_3].”", provider.display_name, preferred_username, $scope.user.username));
$scope.fetch();
}, function(error) {
growl.error(LOCALE.maketext("The system could not remove the “[_1] ([_2])” authentication linkage for “[_3]” due to an error: [_4]", provider.display_name, preferred_username, $scope.user.username, error));
});
}, function() {
$scope.clear_modal_instance();
}).finally(function() {
$scope.clear_modal_instance();
});
};
$scope.clear_modal_instance = function() {
if ($scope.modalInstance) {
$scope.modalInstance.close();
$scope.modalInstance = null;
}
};
$scope.get_user_links = function() {
var providers = [];
if (!$scope.user) {
return providers;
}
angular.forEach($scope.user.links, function(provider_type) {
angular.forEach(provider_type, function(links, key) {
var provider = ProvidersService.get_provider_by_id(key);
if (!providers[key]) {
providers.push(provider);
}
angular.forEach(links, function(subscriber_account, subject_unique_identifier) {
providers.push({
provider_key: provider.id,
display_name: subscriber_account.preferred_username,
subject_unique_identifier: subject_unique_identifier
});
});
});
});
return providers;
};
$scope.return_to_list = function() {
$location.path("/users");
};
$scope.init();
}
ManageUserController.$inject = ["$scope", "$routeParams", "$location", "$rootScope", "$uibModal", "ProvidersService", "UsersService", "growl"];
app.controller("ManageUserController", ManageUserController);
});
/*
# templates/external_auth/views/ProvidersController.js Copyright(c) 2020 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 */
// Then load the application dependencies
define(
'app/views/ProvidersController',[
"angular",
"lodash",
"cjt/util/locale",
"ngSanitize",
"cjt/modules",
"cjt/directives/toggleSortDirective",
"cjt/directives/searchDirective",
"cjt/directives/pageSizeDirective",
"cjt/directives/toggleSwitchDirective",
"cjt/filters/startFromFilter",
"cjt/decorators/paginationDecorator",
"app/services/ProvidersService",
],
function(angular, _, LOCALE) {
var app = angular.module("App");
function ProviderController($scope, $filter, $location, ProvidersService, PAGE) {
$scope.providers = [];
// meta information
$scope.meta = {
// sort settings
sortReverse: false,
sortBy: "label",
sortDirection: "asc",
// pager settings
maxPages: 5,
totalItems: $scope.providers.length,
currentPage: 1,
pageSize: 20,
pageSizes: [20, 50, 100, 500],
start: 0,
limit: 10,
filterValue: "",
};
// initialize filter list
$scope.filteredList = $scope.providers;
$scope.showPager = true;
$scope.get_service_column_label = function(service) {
return LOCALE.maketext("Status ([_1])", service);
};
$scope.allowed_authentication_services = PAGE.allowed_authentication_services;
/**
* Initialize the variables required for
* row selections in the table.
*/
$scope.checkdropdownOpen = false;
// This updates the selected tracker in the 'Selected' Badge.
$scope.totalSelectedProviders = 0;
var selectedProviderList = [];
// update the table on sort
$scope.sortList = function() {
$scope.fetch();
};
// update table on pagination changes
$scope.selectPage = function() {
$scope.fetch();
};
// update table on page size changes
$scope.selectPageSize = function() {
$scope.fetch();
};
// Select all providers on a page.
$scope.selectAllProviders = function() {
if ($scope.allRowsSelected) {
$scope.filteredList.forEach(function(item) {
item.rowSelected = true;
if (selectedProviderList.indexOf(item.id) !== -1) {
return;
}
selectedProviderList.push(item.id);
});
} else {
// Extract the unselected items and remove them from the selected collection.
var unselectedList = $scope.filteredList.map(function(item) {
item.rowSelected = false;
return item.id;
});
selectedProviderList = _.difference(selectedProviderList, unselectedList);
}
// Update the selected count tracker.
$scope.totalSelectedProviders = selectedProviderList.length;
};
$scope.configureProvider = function(provider) {
$location.path("/providers/" + provider.id);
};
// Select an provider on a page.
$scope.selectProvider = function(providerInfo) {
if (typeof providerInfo !== "undefined") {
if (providerInfo.rowSelected) {
selectedProviderList.push(providerInfo.id);
// Sync 'Select All' checkbox status when a new selction/unselection
// is made.
$scope.allRowsSelected = $scope.filteredList.every(function(item) {
return item.rowSelected;
});
} else {
selectedProviderList = selectedProviderList.filter(function(item) {
return item !== providerInfo.id;
});
// Unselect Select All checkbox.
$scope.allRowsSelected = false;
}
}
// Update the selected count tracker.
$scope.totalSelectedProviders = selectedProviderList.length;
};
// Clear all selections by unchecking all checkboxes in all pages.
$scope.clearAllSelections = function(event) {
event.preventDefault();
event.stopPropagation();
selectedProviderList = [];
$scope.filteredList.forEach(function(item) {
item.rowSelected = false;
});
$scope.checkdropdownOpen = false;
$scope.allRowsSelected = false;
$scope.totalSelectedProviders = 0;
};
// update table on search
$scope.searchList = function() {
$scope.fetch();
};
// have your filters all in one place - easy to use
var filters = {
filter: $filter("filter"),
orderBy: $filter("orderBy"),
startFrom: $filter("startFrom"),
limitTo: $filter("limitTo")
};
// update table
$scope.fetch = function() {
var filteredList = [];
// filter list based on search text
if ($scope.meta.filterValue !== "") {
filteredList = filters.filter($scope.providers, $scope.meta.filterValue, false);
} else {
filteredList = $scope.providers;
}
// sort the filtered list
if ($scope.meta.sortDirection !== "" && $scope.meta.sortBy !== "") {
filteredList = filters.orderBy(filteredList, $scope.meta.sortBy, $scope.meta.sortDirection === "asc" ? true : false);
}
// update the total items after search
$scope.meta.totalItems = filteredList.length;
// filter list based on page size and pagination
if ($scope.meta.totalItems > _.min($scope.meta.pageSizes)) {
var start = ($scope.meta.currentPage - 1) * $scope.meta.pageSize;
var limit = $scope.meta.pageSize;
filteredList = filters.limitTo(filters.startFrom(filteredList, start), limit);
$scope.showPager = true;
// table statistics
$scope.meta.start = start + 1;
$scope.meta.limit = start + filteredList.length;
} else {
// hide pager and pagination
$scope.showPager = false;
if (filteredList.length === 0) {
$scope.meta.start = 0;
} else {
// table statistics
$scope.meta.start = 1;
}
$scope.meta.limit = filteredList.length;
}
var countNonSelected = 0;
// Add rowSelected attribute to each item in the list to track selections.
filteredList.forEach(function(item) {
// Select the rows if they were previously selected on this page.
if (selectedProviderList.indexOf(item.id) !== -1) {
item.rowSelected = true;
} else {
item.rowSelected = false;
countNonSelected++;
}
});
$scope.filteredList = filteredList;
// Clear the 'Select All' checkbox if at least one row is not selected.
$scope.allRowsSelected = (filteredList.length > 0) && (countNonSelected === 0);
return filteredList;
};
$scope.init = function() {
$scope.providers = ProvidersService.get_providers();
$scope.fetch();
};
// first page load
$scope.init();
}
ProviderController.$inject = ["$scope", "$filter", "$location", "ProvidersService", "PAGE"];
app.controller("ProvidersController", ProviderController);
});
/*
# templates/external_auth/views/ConfigureProviderController.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 */
// Then load the application dependencies
define(
'app/views/ConfigureProviderController',[
"angular",
"jquery",
"lodash",
"cjt/util/locale",
"cjt/decorators/growlDecorator",
"cjt/directives/actionButtonDirective",
"cjt/validator/datatype-validators",
"ngSanitize",
"cjt/modules",
"app/services/ProvidersService"
],
function(angular, $, _, LOCALE) {
"use strict";
var app = angular.module("App");
function ConfigureProviderController($scope, $routeParams, $location, ProvidersService, growl) {
$scope.fields = {};
$scope.configurations = {};
$scope.provider = false;
$scope.confirmed_redirects = false;
$scope.savingProvider = false;
$scope.services = {};
$scope.service_names = {
"webmaild": "Webmail",
"whostmgrd": "WHM",
"cpaneld": "cPanel"
};
function _growl_error(error) {
growl.error( _.escape(error) );
}
$scope.init = function() {
$scope.loadingProvider = true;
var providerID = $routeParams.providerID;
$scope.provider = ProvidersService.get_provider_by_id(providerID);
if (!$scope.provider) {
$location.path("providers");
}
ProvidersService.get_provider_configuration_fields($scope.provider.id).then(function(result) {
$scope.fields = result.data;
return ProvidersService.get_provider_client_configurations($scope.provider.id);
}).then(function(result) {
var baseObject = {};
angular.forEach($scope.fields, function(value) {
baseObject[value.field_id] = "";
}, baseObject);
$scope.configurations = angular.extend(baseObject, result.data.client_configurations);
return ProvidersService.get_provider_display_configurations($scope.provider.id);
}, _growl_error).then(function(result) {
angular.forEach(result.data, function(service) {
$scope.services[service.service] = service;
});
}, _growl_error).finally(function() {
$scope.loadingProvider = false;
});
};
$scope.saveProviderConfigurations = function() {
var saveable_configs = {};
$scope.savingProvider = true;
var display_configs = [];
// Other possible, but not exposed params
// "display_name" : "Test Google",
// "documentation_url" : "docs_url",
// "label" : "Log in with a Google+ Account",
// "link" : ignore(),
// "provider_name" : "testgoogle",
angular.forEach($scope.services, function(service) {
display_configs.push({
"provider_id": $scope.provider.id,
"service_name": service.service,
"configs": {
"color": service.color,
"icon": service.icon,
"icon_type": service.icon_type,
"textcolor": service.textcolor,
"label": service.label
}
});
});
angular.forEach($scope.fields, function(value) {
saveable_configs[value.field_id] = $scope.configurations[value.field_id];
});
return ProvidersService.save_provider_configurations($scope.provider.id, saveable_configs, display_configs).then(function() {
$location.path("providers");
growl.success(LOCALE.maketext("The system successfully updated the configurations for “[_1].”", $scope.provider.display_name));
}, function(error) {
growl.error(LOCALE.maketext("The system could not update the configurations for “[_1].” The following error occurred: “[_2]”", $scope.provider.display_name, error));
}).finally(function() {
$scope.savingProvider = false;
});
};
$scope.canSave = function(editorForm) {
var field;
for (var i = 0; i < $scope.fields.length; i++) {
field = $scope.fields[i];
if (!field.optional && !$scope.configurations[field.field_id]) {
return false;
}
}
if ($scope.configurations["redirect_uris"] && !editorForm.confirmed_redirects.$modelValue) {
return false;
}
return true;
};
$scope.init();
window.scope = $scope;
}
ConfigureProviderController.$inject = ["$scope", "$routeParams", "$location", "ProvidersService", "growl"];
app.controller("ConfigureProviderController", ConfigureProviderController);
});
/*
# templates/external_auth/manage 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, require, PAGE */
// Then load the application dependencies
define(
'app/manage',[
"angular",
"lodash",
"cjt/core",
"cjt/util/locale",
"cjt/modules",
],
function(angular, _, CJT, LOCALE) {
"use strict";
angular.module("App", [
"cjt2.config.whm.configProvider", // This needs to load first
"ui.bootstrap",
"cjt2.whm",
"angular-growl"
]);
var app = require(
[
"cjt/bootstrap",
// Application Modules
"uiBootstrap",
"app/services/UsersService",
"app/services/ProvidersService",
"app/views/UsersController",
"app/views/ManageUserController",
"app/views/ProvidersController",
"app/views/ConfigureProviderController",
"cjt/decorators/growlDecorator",
],
function(BOOTSTRAP) {
var app = angular.module("App");
app.value("PAGE", PAGE);
app.controller("BaseController", ["$rootScope", "$scope", "$route", "$location",
function($rootScope, $scope, $route, $location) {
$scope.loading = false;
$rootScope.$on("$routeChangeStart", function() {
$scope.loading = true;
});
$rootScope.$on("$routeChangeSuccess", function() {
$scope.loading = false;
});
$rootScope.$on("$routeChangeError", function() {
$scope.loading = false;
});
$scope.current_route_matches = function(key) {
return $location.path().match(key);
};
$scope.go = function(path) {
$location.path(path);
};
}
]);
app.config(["$routeProvider",
function($routeProvider) {
function _fetch_providers(ProvidersService, growl) {
return ProvidersService.fetch_providers().then(function() {
// providers loaded
}, function(error) {
growl.error(LOCALE.maketext("The system encountered an error while it tried to retrieve the providers: [_1]", error));
});
}
function _fetch_users(UsersService, ProvidersService, growl) {
return UsersService.fetch_users().then(function() {
// users loaded
return ProvidersService.fetch_providers().then(function() {
// providers Loaded
}, function(error) {
growl.error(LOCALE.maketext("The system encountered an error while it tried to retrieve the providers: [_1]", error));
});
}, function(error) {
growl.error(LOCALE.maketext("The system encountered an error while it tried to retrieve the users: [_1]", error));
});
}
// Setup the routes
$routeProvider.when("/providers", {
controller: "ProvidersController",
templateUrl: CJT.buildFullPath("external_auth/views/providers.ptt"),
resolve: {
providers: ["ProvidersService", "growl", _fetch_providers]
}
});
$routeProvider.when("/providers/:providerID", {
controller: "ConfigureProviderController",
templateUrl: CJT.buildFullPath("external_auth/views/configure_provider.ptt"),
resolve: {
providers: ["ProvidersService", "growl", _fetch_providers]
}
});
// Setup the routes
$routeProvider.when("/users", {
controller: "UsersController",
templateUrl: CJT.buildFullPath("external_auth/views/users.ptt"),
resolve: {
providers: ["UsersService", "ProvidersService", "growl", _fetch_users]
}
});
$routeProvider.when("/users/:userID", {
controller: "ManageUserController",
templateUrl: CJT.buildFullPath("external_auth/views/manage_user.ptt"),
resolve: {
providers: ["UsersService", "ProvidersService", "growl", _fetch_users]
}
});
$routeProvider.otherwise({
"redirectTo": "/users"
});
}
]);
BOOTSTRAP(document);
});
return app;
}
);
Back to Directory
File Manager