Viewing File: /usr/local/cpanel/whostmgr/docroot/templates/license_purchase/views/checkoutController.js

/*
# whostmgr/docroot/templates/license_purchase/views/checkoutController.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 */
/* global PAGE: false */

define(
    [
        "lodash",
        "angular",
        "cjt/util/locale",
        "cjt/util/query",
        "cjt/modules",
        "cjt/decorators/growlDecorator",
    ],
    function(_, angular, LOCALE, QUERY) {
        "use strict";

        // Retrieve the current application
        var app = angular.module("App");

        // Setup the controller
        var controller = app.controller(
            "checkoutController", [
                "$scope",
                "$location",
                "$routeParams",
                "$window",
                "$timeout",
                "growl",
                "storeService",
                function($scope, $location, $routeParams, $window, $timeout, growl, storeService) {

                    var steps = [ "login", "generateOrder", "checkout", "installLicense", "licenseActivated" ];

                    var currentStepIndex = steps.indexOf($routeParams.nextStep) === -1 ? 0 : steps.indexOf($routeParams.nextStep);

                    // If during upgrade path from solo license.
                    var isUpgrade = false;

                    isUpgrade = $routeParams["everythingelse"] === "upgrade" || QUERY.parse_query_string(location.search.replace(/^\?/, ""))["upgrade"] === "1";

                    /**
                    * Gets the return URL
                    *
                    * @method getReturnURL
                    * @param {String} stepID for the step
                    */
                    var getReturnURL = function(stepID) {
                        var pageURL = PAGE.pageURL ? PAGE.pageURL : $location.absUrl();

                        // Because of <base> existing now, this needs to utilize the baseURL
                        var returnURL = PAGE.baseURL + pageURL + "/" + stepID;

                        if (isUpgrade) {
                            returnURL += "/upgrade";
                        }

                        return returnURL;
                    };

                    /**
                    * Redirect to WHM home page
                    *
                    * @method redirectToHomePage
                    */
                    var redirectToHomePage = function(timeoutInterval) {
                        var interval = timeoutInterval || 20000;

                        $timeout(function() {
                            $window.location.href = PAGE.baseURL;
                        }, interval);
                    };

                    /**
                    * Redirect to the store login
                    *
                    * @method storeLoginRedirect
                    */
                    var storeLoginRedirect = function() {
                        var returnURL = getReturnURL(steps[currentStepIndex + 1]);
                        return storeService.getLoginURL(returnURL).then(function(results) {
                            if ( results.data && results.data.length ) {
                                $window.location.href = results.data[0];
                            }
                        }, function(error) {
                            growl.error(LOCALE.maketext("The system encountered an error when it accessed the cPanel Store login [output,acronym,URL,Uniform Resource Locator]: [_1]", error) + " " + LOCALE.maketext("Redirecting to the [output,acronym,WHM,WebHost Manager] interface …"), { ttl: 20000, disableCountDown: false });
                            redirectToHomePage();
                        });
                    };

                    /**
                    * Executes the code based on nextStep URL parameter
                    *
                    * @method executeStep
                    */
                    var executeStep = function() {

                        // implies its a fresh start
                        if (!$routeParams.nextStep) {
                            storeLoginRedirect();
                            return;
                        }

                        // Verify Login, Get Access Token and Generate Order
                        if ($location.search().code && $routeParams.nextStep === "generateOrder") {

                            // Retaining the same return URL
                            var stepIndex = steps.indexOf($routeParams.nextStep);
                            var returnURI = getReturnURL(steps[stepIndex]);

                            return storeService.validateLoginToken($location.search().code, returnURI).then(function(results) {
                                if ( results.data && results.data.length ) {

                                    // Access Token to generate order
                                    var accessToken = results.data[0].access_token;
                                    if (accessToken) {

                                        // Return URI for checkout
                                        returnURI = getReturnURL(steps[currentStepIndex + 2]);

                                        storeService.generateLicenseOrder(accessToken, returnURI, isUpgrade).then(function(results) {
                                            if (results.data && results.data.length) {
                                                currentStepIndex = currentStepIndex + 1;

                                                if ( results.data[0] ) {
                                                    $window.location.href = results.data[0];
                                                } else {
                                                    growl.error(LOCALE.maketext("The system encountered an error when it generated your license order.") + " " + LOCALE.maketext("Redirecting to the [output,acronym,WHM,WebHost Manager] interface …"), { ttl: 20000, disableCountDown: false });
                                                    redirectToHomePage();
                                                }

                                            }
                                        }, function(error) {
                                            growl.error(LOCALE.maketext("The system encountered an error when it generated your license order.") + "<br />" + LOCALE.maketext("Error: “[_1]”", error) + "<br />" + LOCALE.maketext("Redirecting to the [output,acronym,WHM,WebHost Manager] interface …"), { ttl: 20000, disableCountDown: false });
                                            redirectToHomePage();
                                        });
                                    } else {
                                        growl.error(LOCALE.maketext("The system encountered a token validation error.") + " " + LOCALE.maketext("Redirecting to the [output,acronym,WHM,WebHost Manager] interface …"), { ttl: 20000, disableCountDown: false });
                                        redirectToHomePage();
                                    }
                                }
                            }, function(error) {
                                growl.error(LOCALE.maketext("The system encountered a token validation error.") + "<br />" + LOCALE.maketext("Error: “[_1]”", error) + "<br />" + LOCALE.maketext("Redirecting to the [output,acronym,WHM,WebHost Manager] interface …"), { ttl: 20000, disableCountDown: false });
                                redirectToHomePage();
                            });
                        }

                        if ($routeParams.nextStep === "installLicense" && $location.search().order_status) {
                            if ($location.search().order_status === "success") {
                                currentStepIndex = currentStepIndex + 1;
                                return storeService.updateLicense().then(function() {
                                    currentStepIndex = currentStepIndex + 1;

                                    growl.success(LOCALE.maketext("The system successfully updated the license.") + " " + LOCALE.maketext("Redirecting to the [output,acronym,WHM,WebHost Manager] interface …"), { ttl: 5000, disableCountDown: false });
                                    redirectToHomePage(5000);

                                }, function(error) {
                                    growl.error(LOCALE.maketext("The system encountered an error when it updated your license.") + "<br />" + LOCALE.maketext("Error: “[_1]”", error) + "<br />" + LOCALE.maketext("Redirecting to the [output,acronym,WHM,WebHost Manager] interface …"), { ttl: 20000, disableCountDown: false });

                                    redirectToHomePage();
                                });
                            } else if ($location.search().order_status === "cancelled") {
                                growl.error(LOCALE.maketext("The system successfully canceled the order.") + " " + LOCALE.maketext("Redirecting to the [output,acronym,WHM,WebHost Manager] interface …"), { ttl: 20000, disableCountDown: false });
                                redirectToHomePage();
                            } else if ($location.search().order_status === "error") {
                                growl.error(LOCALE.maketext("The system encountered an error.") + LOCALE.maketext("Redirecting to the [output,acronym,WHM,WebHost Manager] interface …"), { ttl: 20000, disableCountDown: false });
                                redirectToHomePage();
                            }
                        }
                    };

                    /**
                    * Gets the correct class for the step
                    *
                    * @method getStepClass
                    * @param {String} Class for the step
                    */
                    $scope.getStepClass = function(step) {
                        var stepIndex = steps.indexOf(step);
                        if (stepIndex !== -1) {
                            if (currentStepIndex > stepIndex) {
                                return "checkout-step-completed";
                            } else if (currentStepIndex === stepIndex) {
                                return "checkout-step-current";
                            }
                        }
                    };

                    // on load execute the appropriate step based on currentStep in URL
                    executeStep();
                }
            ]
        );

        return controller;
    }
);
Back to Directory File Manager