Viewing File: /usr/local/cpanel/whostmgr/docroot/templates/external_auth/views/ConfigureProviderController.js

/*
# 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(
    [
        "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);


    });
Back to Directory File Manager