HOME


Mini Shell 1.0
DIR:/usr/local/cwpsrv/var/services/users/mefccpc/cwp_theme/original/js/modules/
Upload File :
Current File : //usr/local/cwpsrv/var/services/users/mefccpc/cwp_theme/original/js/modules/sslwizard.js.twig
console.log();
let ssl_list = JSON.parse('{{mod.ssl_list|raw}}');
let ssl_table = null;
$(document).ready(function() {
  {% if mod.isie == 1 %}
    uchip = new $.Uchip();
  {% else %}
    uchip = new Uchip();
  {% endif %}
  $('[data-toggle="tooltip"]').tooltip()
  $('#countryName').select2();
  lisSSL(ssl_list);
  $('#countryName').on('select2:select', function (e) {
    var data = e.params.data;
    if(data.id != ''){
      $('#select2-countryName-container').addClass('val-selected');
    }else{
      $('#select2-countryName-container').removeClass('val-selected');
    }
  });
  initDomTags('#commonName');
  initDomTags('#domain_install');
});
function installSSL(){
  if(uchip.validator('.reqinstall')){
    uchip.handleButton('.btninstall-gen', 'fa-cogs');
    uchip.handleButton('.btninsatll-cnl', 'fa-ban');
    uchip.call('module=sslwizard&acc=preinstall', {
      data:'cert=' + Base64.encode($('#certificate_install').val()) + '&priv=' + Base64.encode($('#privkey_install').val()) + '&bundle=' + Base64.encode($('#bundle_install').val()),
      callback: function(response){
        if(response.result == 'success'){
          renderPreInstallInfo(response.ssl_data);
          $('#preinstall_info').modal('show');
        }else{
          let message = '{{langmod.SSLWLABEL15}}';
          if(response.hasOwnProperty('code') && response.code == '1'){
            message = '{{langmod.SSLWLABEL63}}';
          }
          noti_bubble(message,'{{langmod.SSLWLABEL14}}','error',false,false,'3000',true);
        }
        uchip.handleButton('.btninstall-gen', 'fa-cogs', true);
        uchip.handleButton('.btninsatll-cnl', 'fa-ban', true);
      }
    });
  }
}
function renderPreInstallInfo(data){
  let domains = data.instalables.filter(function(dom){
    return dom.hasOwnProperty('is_domain') && dom.is_domain == '1';
  });
  let sub_domains = data.instalables.filter(function(dom){
    return dom.hasOwnProperty('is_sub') && dom.is_sub == '1';
  });
  let sans = data.instalables.filter(function(dom){
    return dom.hasOwnProperty('is_san') && dom.is_san == '1';
  });
  let html = '<h3><i class="fa fa-globe" aria-hidden="true"></i> <b>{{langmod.SSLWLABEL21}}:</b> ' + data.commonName + '</h3>' +
            '<h4><i class="fa fa-calendar" aria-hidden="true"></i> <b>{{langmod.SSLWLABEL73}}:</b> ' + moment.unix(data.validfrom).format("DD MMM, YYYY") + '</h4>' +
            '<h4><i class="fa fa-calendar" aria-hidden="true"></i> <b>{{langmod.SSLWLABEL74}}:</b> ' + moment.unix(data.validto).format("DD MMM, YYYY") + '</h4>' +
            '<h4><i class="fa fa-lock" aria-hidden="true"></i> <b>{{langmod.SSLWLABEL77}}:</b> ' + data.issuer + '</h4>';
  if(domains.length > 0){
    let dom_html = domains.map(function(dom){
      return '<div class="checkbox" style="padding-top:0px;">' +
              '<input type="checkbox" class="dom-to-install" data-type="domain" checked id="dom_' + dom.domain + '" value="' + dom.domain + '">' +
              '<label for="dom_' + dom.domain + '">' + dom.domain + '</label>' +
            '</div>';
    })
    html += '<h4 data-toggle="collapse" data-target="#div_domains" class="ssl-info-title"><i class="fa fa-angle-right" aria-hidden="true"></i> ' +
              '<b>{{langmod.SSLWLABEL82}} (' + dom_html.length + ')</b></h4>' +
              '<div id="div_domains" class="collapse in item-install-container">' + dom_html.join('') + '</div>';
  }
  if(sub_domains.length > 0){
    let dom_html = sub_domains.map(function(dom){
      return '<div class="checkbox" style="padding-top:0px;">' +
              '<input type="checkbox" class="subdom-to-install" data-parent="' + dom.parent + '" data-type="sub_domain" checked id="dom_' + dom.domain + '" value="' + dom.domain + '">' +
              '<label for="dom_' + dom.domain + '">' + dom.domain + '</label>' +
            '</div>';
    })
    html += '<h4 data-toggle="collapse" data-target="#div_subdomains" class="ssl-info-title"><i class="fa fa-angle-right" aria-hidden="true"></i> ' +
              '<b>{{langmod.SSLWLABEL83}} (' + dom_html.length + ')</b></h4>' +
              '<div id="div_subdomains" class="collapse item-install-container">' + dom_html.join('') + '</div>';
  }
  if(sans.length > 0){
    let dom_html = sans.map(function(dom){
      return '<div class="checkbox" style="padding-top:0px;">' +
              '<input type="checkbox" class="san-to-install" data-parent="' + dom.parent + '" data-type="san" checked id="dom_' + dom.domain + '" value="' + dom.domain + '">' +
              '<label for="dom_' + dom.domain + '">' + dom.domain + '</label>' +
            '</div>';
    })
    html += '<h4 data-toggle="collapse" data-target="#div_servsans" class="ssl-info-title"><i class="fa fa-angle-right" aria-hidden="true"></i> ' +
              '<b>{{langmod.SSLWLABEL84}} (' + dom_html.length + ')</b></h4>' +
              '<div id="div_servsans" class="collapse item-install-container">' + dom_html.join('') + '</div>';
  }
  html += '<div class="install-btn-wrapper">' +
            '<button class="btn btn-success btn-xs" onclick="continueInstall()"><i class="fa fa-lock" aria-hidden="true"></i> {{langmod.SSLWLABEL18}}</button>' +
            '<button class="btn btn-warning btn-xs" data-dismiss="modal"><i class="fa fa-ban" aria-hidden="true"></i> {{langmod.SSLWLABEL7}}</button>' +
          '</div>';
  $("#preinstall_info_body").html(html);
}

function getToInstall(selector){
  let toinstall = [];
  $(selector).each(function(){
    if($(this).is(':checked')){
      let type = $(this).data('type');
      let item = {
        domain: $(this).val(),
        type: type
      };
      if(type != 'domain'){
        item.parent = $(this).data('parent');
      }
      toinstall.push(item);
    }
  });
  return toinstall;
}
function continueInstall(){
  let toinstall = [];
  let domains = getToInstall('.dom-to-install');
  let subdomains = getToInstall('.subdom-to-install');
  toinstall = toinstall.concat(getToInstall('.dom-to-install'), getToInstall('.subdom-to-install'), getToInstall('.san-to-install'));
  if(toinstall.length > 0){
    $('#preinstall_info').modal('hide');
    uchip.handleButton('.btninstall-gen', 'fa-cogs');
    uchip.handleButton('.btninsatll-cnl', 'fa-ban');
    $('#install_form_wrapper').fadeOut('fast', function(){
      $('#installing_loader_wrapper').fadeIn('fast');
    });
    let data = 'cert=' + Base64.encode($('#certificate_install').val()) + '&priv=' + Base64.encode($('#privkey_install').val()) +
              '&bundle=' + Base64.encode($('#bundle_install').val()) + '&services=' + JSON.stringify(toinstall);
    uchip.call('module=sslwizard&acc=mkinstall', {
      data: data,
      callback: function(response){
        if(response && response.hasOwnProperty('result') && response.result == 'success'){
          cancelInstall();
          noti_bubble('{{langmod.SSLWLABEL68}}','{{langmod.SSLWLABEL12}}','success',false,false,'3000',true);
        }else{
          let message = '{{langmod.SSLWLABEL15}}';
          if(response.hasOwnProperty('code') && response.code == '1'){
            message = '{{langmod.SSLWLABEL63}}';
          }
          noti_bubble(message,'{{langmod.SSLWLABEL14}}','error',false,false,'3000',true);
          $('#installing_loader_wrapper').fadeOut('fast', function(){
            $('#install_form_wrapper').fadeIn('fast');
          });
        }
        uchip.handleButton('.btninstall-gen', 'fa-cogs', true);
        uchip.handleButton('.btninsatll-cnl', 'fa-ban', true);
      }
    });
  }else{
    noti_bubble('{{langmod.SSLWLABEL65}}','{{langmod.SSLWLABEL10}}','error',false,false,'3000',true);
  }

}
function initDomTags(selector){
  $(selector).tagsinput({
    tagClass: 'cwp-tags-input'
  });
  $(selector).on('beforeItemAdd', function(event) {
    if(!validSSLDomain(event.item)){
      event.cancel = true;
      noti_bubble('{{langmod.SSLWLABEL11}}','{{langmod.SSLWLABEL10}}','error',false,false,'4500',true);
    }
  });
}
function lisSSL(list){
  ssl_list = list;
  let table_content = '';
  let index = 0;
  if(ssl_list.length > 0){
    let html_content = '';
    let index = 0;
    ssl_list.forEach(function(ssl){
      let extra_san = '<span style="font-weight:600">{{langmod.SSLWLABEL70}}</span>';
      let expiration = '-';
      if(ssl.hasOwnProperty('san') && ssl.san.length > 0){
        extra_san = ssl.san.map(function(san){
          return '<span class="label label-primary">' + san + '</span>';
        }).join(' ')
      }

      html_content += '<tr id="trssl_' + index + '">' +
                        '<td>' +
                          // '<a class="btn btn-xs btn-primary mr5" style="margin-right: 5px;" onclick="return infomodal(' +  ssl.domain + ',0)"><i class="fa fa-info"></i> </a>' +
                          ssl.domain +
                          ' [<a href="https://' + ssl.domain + '" class="ssl-go-link" target="_blank">{{langmod.SSLWLABEL52}}</a>]' +
                        '</td>' +
                        '<td class="ssl-extra-san">' + ssl.issuer + '</td>' +
                        '<td>' + extra_san + '</td>' +
                        '<td>' + ssl.until + '</td>' +
                        '<td >' +
                          '<div class="domain-actions-wrapper">' +
                            '<div class="dropdown" data-toggle="tooltip" data-placement="top" title="{{langmod.SSLWLABEL44}}">' +
                              '<button class="btn btn-primary btn-xs dropdown-toggle" type="button" data-toggle="dropdown"><i class="fa fa-flask" aria-hidden="true"></i> {{langmod.SSLWLABEL85}}' +
                              '<span class="caret"></span></button>' +
                              '<ul class="dropdown-menu" style="left:-10rem;">' +
                                '<li><a target="_blank" href="https://www.sslshopper.com/ssl-checker.html?hostname=' +  ssl.domain + '">SSL Shopper</a></li>' +
                                '<li><a target="_blank" href="https://www.geocerts.com/ssl_checker?domain=' +  ssl.domain + '&port=443">GeoCerts</a></li>' +
                                '<li><a target="_blank" href="https://www.ssllabs.com/ssltest/analyze.html?d=' +  ssl.domain + '">Qualys SSL Labs</a></li>' +
                                '<li><a target="_blank" href="https://www.sslcerty.com/certificate?h=' +  ssl.domain + '">SSLCerty</a></li>' +
                              '</ul>' +
                            '</div>' +
                            '<div class="dropdown" data-toggle="tooltip" data-placement="top" title="{{langmod.SSLWLABEL45}}">' +
                              '<button class="btn btn-success btn-xs dropdown-toggle" id="info_btn_' + index + '" type="button" data-toggle="dropdown"><i class="fa fa-info" aria-hidden="true"></i> {{langmod.SSLWLABEL86}}' +
                              '<span class="caret"></span></button>' +
                              '<ul class="dropdown-menu" style="left:-10rem;">' +
                                '<li><a href="javascript:void(0)" onclick="return infomodal(' + index + ',\'' +  ssl.domain + '\',\'info\')">{{langmod.SSLWLABEL45}}</a></li>' +
                                '<li><a href="javascript:void(0)" onclick="return infomodal(' + index + ',\'' +  ssl.domain + '\',\'cert\',\'SSLCertificateFile\')">SSLCertificateFile</a></li>' +
                                '<li><a href="javascript:void(0)" onclick="return infomodal(' + index + ',\'' +  ssl.domain + '\',\'key\',\'SSLCertificateKeyFile\')">SSLCertificateKeyFile</a></li>' +
                                '<li><a href="javascript:void(0)" onclick="return infomodal(' + index + ',\'' +  ssl.domain + '\',\'bundle\',\'SSLCertificateChainFile\')">SSLCertificateChainFile</a></li>' +
                              '</ul>' +
                            '</div>' +
                            '<button title="{{langmod.SSLWLABEL46}}" class="btn btn-danger btn-xs" data-san=\'' + (ssl.hasOwnProperty('san') ? JSON.stringify(ssl.san) : '[]') + '\' id="btn_del_' + index + '" data-toggle="tooltip" data-placement="top" title="{{langmod.SSLWLABEL46}}" onclick="return deletessl(0,\'' + ssl.domain + '\',' + index + ')"><i class="fa fa-trash" aria-hidden="true"></i> {{langmod.SSLWLABEL46}}</button>' +
                          '</div>' +
                        '</td>' +
                      '</tr>';
      index++;
    });
    let table_html = '<table class="table table-striped" id="ssl_table">' +
                        '<thead>' +
                        '<tr>' +
                          '<th>{{langmod.SSLWLABEL47}}</th>' +
                          '<th>{{langmod.SSLWLABEL48}}</th>' +
                          '<th>{{langmod.SSLWLABEL87}}</th>' +
                          '<th width="90">{{langmod.SSLWLABEL49}}</th>' +
                          '<th width="260">{{langmod.SSLWLABEL50}}</th>' +
                        '</tr>' +
                        '</thead>' +
                        '<tbody id="sslbody">' +
                          html_content +
                        '</tbody>' +
                      '</table>';
    $('#table_ssl_wrapper').html(table_html);
    $('#ssl_table').DataTable().destroy();
    ssl_table = $('#ssl_table').dataTable();
    $('[data-toggle="tooltip"]').tooltip();
  }else{
    $('#table_ssl_wrapper').html('<div class="empty_list"><h4 class="text-success">{{langmod.SSLWLABEL88}}</h4></div>');
  }
}
function deletessl(st, domain, index){
  if(st == 0){
    let san = $('#btn_del_' + index).data('san');
    let strbody = '<p>{{langmod.SSLWLABEL54}}:<br>' +
                  '<strong id="descron">' + domain + '</strong>';
    if(san.length > 0){
      strbody += '<br><br>{{langmod.SSLWLABEL56}}:<br><b>' + san.join('<br />') + '</b><br>';
    }
    strbody += '<br>{{langmod.SSLWLABEL57}}</p>';
    let strfooter = '<button type="button" class="btn btn-white" data-dismiss="modal">{{ langmod.SSLCLOSE }}</button>' +
                    '<button type="button" class="btn btn-primary" id="btnyesdel" onclick="return deletessl(1,\''+domain+'\',' + index + ')">{{langmod.SSLWLABEL58}}</button>';
    $('#deleteletsencrypt .modal-body').html(strbody);
    $('#deleteletsencrypt .modal-footer').html(strfooter);
    $('#deleteletsencrypt').modal('toggle');
    return false;
  }else{
    $('#deleteletsencrypt').modal('hide');
    uchip.handleButton('#btn_del_' + index,'fa-trash');
    let tr = $('#trssl_' + index);
    tr.find('.btn').prop('disabled', true).addClass('disabled');
    tr.addClass('deleting_tr');
    uchip.call('module=letsencrypt&acc=deletessl', {
      data:'domain=' + domain,
      callback: function(response){
        if(response.result == 'success'){
          tr.slideUp('fast', function(){
            ssl_table.row(this).remove().draw();
          });
          noti_bubble('{{langmod.SSLWLABEL69}}','{{langmod.SSLWLABEL15}}','success',false,false,'3000',true);
          //cancelInstallation(response.nossl);
        }else{
          tr.find('.btn').prop('disabled', false).removeClass('disabled');
          tr.removeClass('deleting_tr');
          uchip.handleButton('#btn_del_' + index,'fa-trash', true);
          noti_bubble('{{langmod.SSLWLABEL15}}','{{langmod.SSLWLABEL14}}','error',false,false,'3000',true);
        }
      }
    });
  }
}
function showInstallForm(){
  uchip.slideToggle('#ssl_install_wrapper','#ssl_list_wrapper');
}
function cancelInstall(){
  uchip.slideToggle('#ssl_list_wrapper', '#ssl_install_wrapper', function(){
    $('#installing_loader_wrapper').hide();
    $('#install_form_wrapper').show();
    $('#certificate_install').val('');
    $('#privkey_install').val('');
    $('#bundle_install').val('');
    uchip.validator('.reqinstall', true);
  });
}
function renderInfo(response){
  let html_info = '<strong>{{langmod.SSLWLABEL71}}:</strong> <span class="domain">' + response.subject + '</span><br />';
  if(response.aliases.length > 0){
    html_info += '<strong>{{langmod.SSLWLABEL72}}: </strong >' + response.aliases.map(function(san){
      return san.replace('DNS:','');
    }).join(', ') + '<br />';
  }
  let issuers = response.issuer.map(function(issuer){
    return issuer.param + '=' + issuer.value;
  }).join(', ');
  html_info += '<strong>{{langmod.SSLWLABEL73}}:</strong> ' + response.valid_from + '<br />' +
                '<strong>{{langmod.SSLWLABEL74}}:</strong> ' + response.valid_until + '<br />' +
                '<strong>{{langmod.SSLWLABEL75}}:</strong> ' + response.signature + '<br />' +
                '<strong>{{langmod.SSLWLABEL76}}:</strong> ' + response.public_key + '<br />' +
                '<strong>{{langmod.SSLWLABEL77}}:</strong> ' + issuers + '<br />';
  if(response.self_signed == true){
    html_info += '<div style="color:#FF0000"><strong>{{langmod.SSLWLABEL78}}</strong></div>';
  }
  if(response.is_expired == true){
    html_info += '<div style="color:#FF0000"><strong>{{langmod.SSLWLABEL79}}</strong></div>';
  }
  return '<div class="info_certificate_body">' + html_info + '</div>';
}
function renderFileHTML(response, title, domain, type){
  return '<div class="file-content-ssl">' +
            '<div class="file-content-ssl-header"><h4>' + title + ' (' + domain + '.' + type + ')</h4>' +
              '<div><span class="text-success copied-message">{{langmod.SSLWLABEL80}}</span><span class="copy-file" onclick="copyFileContent()" data-toggle="tooltip" data-placement="top" title="{{langmod.SSLWLABEL81}}"><i class="fa fa-copy"></i></span></div>' +
            '</div>' +
            '<textarea class="form-control" readonly id="file_content">' + response.result + '</textarea>' +
          '</div>';
}
function copyFileContent(){
  $('#file_content').show();
  var copyText = document.getElementById('file_content');
  copyText.select();
  document.execCommand("copy");
  noti_bubble('{{langmod.SSLWLABEL32}}','','success',false,false,'3000',true);
}
function infomodal(index, domain, type, title){
  uchip.handleButton('#info_btn_' + index, 'fa-info');
  uchip.call('module=letsencrypt&acc=infomodal', {
    data:'domain=' + domain + '&type=' + type,
    callback: function(response){
      if(type == 'info'){
        $('#modalinfo_twice .modal-body').html(renderInfo(response));
      }else{
        $('#modalinfo_twice .modal-body').html(renderFileHTML(response, title, domain, type));
      }
      $('#modalinfo_twice').modal('toggle');
      setTimeout(function(){
        $('[data-toggle="tooltip"]').tooltip();
      }, 100);
      uchip.handleButton('#info_btn_' + index, 'fa-info', true);
    }
  });
}
function emailCSR(elem){
  if($(elem).is(':checked')){
    $('#email_send_csr').slideDown();
  }else{
    $('#email_send_csr').slideUp();
    uchip.validator('#emailAddressSend', true);
  }
}
function showNewCSR(){
  uchip.slideToggle('#ssl_csr_wrapper','#ssl_list_wrapper');
}
function cancelNewCSR(){
  uchip.slideToggle('#ssl_list_wrapper','#ssl_csr_wrapper', function(){
    cleanFormCSR();
  });
}
function cleanFormCSR(){
  $('.reqcsr').val('');
  $('#countryName').val(null).trigger('change');
  $("#commonName").tagsinput('removeAll');
}
function handleReload(bind){
  window.onbeforeunload = bind === true ? function(e) {
    return 'Are you sure you want to leave? You are in the middle of something.';
  } : null;
}
function validSSLDomain(domain) {
  // console.log('domain', domain);
  // let re = /^(\*\.)?([\w\d]+\.)+[\w\d]+$/;
  //let re = /^(\*\.)?(?!:\/\/)(?!.{256,})(([a-z0-9][a-z0-9_-]*?\.)+?[a-z]{2,6}?)$/i;
  let re = /^(\*\.)?(?!:\/\/)(?!.{256,})(([a-z0-9][a-z0-9_-]*?\.)+?[a-z]{2,10}?)$/i;
  return re.test(domain);
}
function copyCSR(elem){
  let field = document.getElementById(elem);
  field.select();
  document.execCommand('copy');
  noti_bubble('{{langmod.SSLWLABEL32}}','','success',false,false,'3000',true);
}
function copiedCSR(elem){
  if($(elem).is(':checked')){
    $('#copied_csr_btn').prop('disabled', false);
    $('#copied_csr_btn').removeClass('disabled');
    handleReload(false);
  }else{
    $('#copied_csr_btn').prop('disabled', true);
    $('#copied_csr_btn').addClass('disabled');
    handleReload(true);
  }
}
function genCSRContinue(){
  uchip.slideToggle('#ssl_list_wrapper','#ssl_csr_generated', function(){
    cleanFormCSR();
    $('#copied_csr_check').prop('checked', false);
  });
}
function processNewCSR(){
  let valid_email_send = !($('#emailsend').is(':checked') && !uchip.validator('#emailAddressSend'));
  if(uchip.validator('.reqcsr') && valid_email_send){
    let data = '';
    $('.reqcsr').each(function(){
      data += $(this).attr('id') + '=' + $(this).val() + '&';
    });
    uchip.handleButton('.btncsr-gen', 'fa-cogs');
    uchip.handleButton('.btncsr-cnl', 'fa-ban');
    data += 'key_size=' + $('#key_size').val() + '&emailsend=' + ($('#emailsend').is(':checked') ? '1' : '0') + '&email_receiver=' + $('#emailAddressSend').val();
    uchip.call('module=sslwizard&acc=generatecsr', {
      data: data,
      callback: function(response){
        if(response.result == 'success'){
          noti_bubble('{{langmod.SSLWLABEL13}}','{{langmod.SSLWLABEL12}}','success',false,false,'3000',true);
          uchip.slideToggle('#ssl_csr_generated', '#ssl_csr_wrapper', function(){
            $('#csr_csr').val(response.csr);
            $('#csr_priv').val(response.priv);
            handleReload(true);
          });
        }else{
          let message = '{{langmod.SSLWLABEL15}}';
          noti_bubble(message,'{{langmod.SSLWLABEL14}}','error',false,false,'3000',true);
        }
        uchip.handleButton('.btncsr-gen', 'fa-cogs', true);
        uchip.handleButton('.btncsr-cnl', 'fa-ban', true);
      }
    });
  }
}