Viewing File: /usr/local/cpanel/whostmgr/docroot/templates/external_auth/services/ProvidersService.js

/*
# 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(
    [
        "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);
    });
Back to Directory File Manager