HEX
Server: Apache/2
System: Linux vps32496.sdns.vn 3.10.0-1160.99.1.el7.x86_64 #1 SMP Wed Sep 13 14:19:20 UTC 2023 x86_64
User: khuondaotc (1075)
PHP: 7.4.33
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: /home/khuondaotc/public_html/wp-content/plugins/unbounce/js/set-unbounce-domains.js
(function($) {

  function apiGetPromise(url, token) {
    return $.ajax({
      url: url,
      method: 'get',
      headers: { 'Authorization': 'Bearer ' + token,
                 'Accept': 'application/vnd.unbounce.api.v0.4+json' },
      dataType: 'json'
    }).promise();
  }

  function apiGet(url, token) {
    return Rx.Observable.fromPromise(apiGetPromise(url, token));
  }

  function getDomainData(subAccount, domains) {
    if($.isArray(domains)) {
      return Rx.Observable.fromArray(
        $.map(domains, function(domain) {
          if(domain && domain.name) {
            return {
              clientId: subAccount.id,
              domainId: domain.id,
              name: domain.name,
              domainUUID: domain.uuid
            };
          } else {
            throw 'Unable to fetch domain name';
          }
        }));
    } else {
      throw 'Unable to fetch domains';
    }
  }

  function getUserSubAccounts(user, token) {
    if(user.metadata && user.metadata.related && $.isArray(user.metadata.related.sub_accounts)) {
      var promises = $.map(user.metadata.related.sub_accounts, function(subAccountUrl) {
        return apiGetPromise(subAccountUrl, token);
      });
      return Rx.Observable.fromArray(promises).flatMap(Rx.Observable.fromPromise);
    } else {
      throw 'Unable to fetch user';
    }
  }

  function postDomainsToWordpress($form, data, wordpressDomainName) {
    if($.isArray(data.domains)) {
      var wordpressDomains = data.domains.filter(function(domain) {
        return domain.name === wordpressDomainName;
      });

      if(wordpressDomains[0]) {
        var wordpressDomain = wordpressDomains[0];
        $form.find('[name="domain_id"]').val(wordpressDomain.domainId);
        $form.find('[name="client_id"]').val(wordpressDomain.clientId);
        $form.find('[name="domain_uuid"]').val(wordpressDomain.domainUUID);
      }

      var domainNames = $.map(data.domains, function(domain) {
        return domain.name;
      });

      $form.find('[name="user_id"]').val(data.userId);
      $form.find('[name="domains"]').val(domainNames.join(','));
    }

    $form.submit();
  }

  function failureUI($form, $submitButton, originalText) {
    var message = $('<div class="error">').text('Sorry, something went wrong when Authenticating with Unbounce. Please try again.');
    $form.append(message);
      $submitButton.attr('disabled', false).val(originalText);
  }

  function loadingUI($submitButton, text) {
    $submitButton.attr('disabled', true).val(text);
  }

  $(document).ready(function(){
    var $submitButton = $('#set-unbounce-domains');

    if($submitButton[0]) {
      var $form = $($submitButton[0].form),
          originalText = $submitButton.val(),
          loadingText = 'Authorizing...',
          apiUrl = $submitButton.attr('data-api-url'),
          redirectUri = $submitButton.attr('data-redirect-uri'),
          apiClientId = $submitButton.attr('data-api-client-id'),
          wordpressDomainName = $submitButton.attr('data-wordpress-domain-name'),
          getTokenUrl = apiUrl + '/oauth/authorize?response_type=token&client_id=' + apiClientId + '&redirect_uri=' + redirectUri,
          getUserUrl = apiUrl + '/users/self?limit=1000',
          getSubAccountsUrl = apiUrl + '/accounts/{accountId}/sub_accounts',
          getSubAccountUrl = apiUrl + '/sub_accounts/{subAccountId}',
          getDomainsUrl = apiUrl + '/sub_accounts/{subAccountId}/domains?limit=1000',
          setDomainsUrl = $form.attr('action'),
          matches = location.hash.match(/access_token=([a-z0-9]+)/),
          accessToken = matches && matches[1];

      $submitButton.click(function(e) {
        e.preventDefault();

        document.location = getTokenUrl;

        return false;
      });

      if(accessToken) {
        loadingUI($submitButton, loadingText);

        var userObservable = apiGet(getUserUrl, accessToken).publish(),
            domainsObservable = userObservable
              .flatMap(function(user) {
                return getUserSubAccounts(user, accessToken);
              }).flatMap(function (subAccount) {
                return apiGet(getDomainsUrl.replace('{subAccountId}', subAccount.id), accessToken)
                  .flatMap(function(response) {
                    return getDomainData(subAccount, response.domains);
                  });
              }).toArray().publish(),
            userDomainsObservable = Rx.Observable.zip(
              userObservable,
              domainsObservable,
              function(user, domains) {
                return {userId: user.id, domains: domains};
              }).publish(),
            subscription = userDomainsObservable.subscribe(
              function (domains) {
                postDomainsToWordpress($form, domains, wordpressDomainName);
              },
              function (error) {
                failureUI($form, $submitButton, originalText);
                console.log('[ub-wordpress]', error);
              },
              function () {
                // toArray will ensure that onNext is called only once. We'll consider that 'completed'
                // as we'll also have access to the list of domains
              });

        userDomainsObservable.connect();
        domainsObservable.connect();
        userObservable.connect();
      }
    }
  });
})(jQuery);