github.com/lunarobliq/gophish@v0.8.1-0.20230523153303-93511002234d/static/js/src/app/settings.js (about)

     1  $(document).ready(function () {
     2      $('[data-toggle="tooltip"]').tooltip();
     3      $("#apiResetForm").submit(function (e) {
     4          api.reset()
     5              .success(function (response) {
     6                  user.api_key = response.data
     7                  successFlash(response.message)
     8                  $("#api_key").val(user.api_key)
     9              })
    10              .error(function (data) {
    11                  errorFlash(data.message)
    12              })
    13          return false
    14      })
    15      $("#settingsForm").submit(function (e) {
    16          $.post("/settings", $(this).serialize())
    17              .done(function (data) {
    18                  successFlash(data.message)
    19              })
    20              .fail(function (data) {
    21                  errorFlash(data.responseJSON.message)
    22              })
    23          return false
    24      })
    25      //$("#imapForm").submit(function (e) {
    26      $("#savesettings").click(function() {
    27          var imapSettings = {}
    28          imapSettings.host = $("#imaphost").val()
    29          imapSettings.port = $("#imapport").val()
    30          imapSettings.username = $("#imapusername").val()
    31          imapSettings.password = $("#imappassword").val()
    32          imapSettings.enabled = $('#use_imap').prop('checked')
    33          imapSettings.tls = $('#use_tls').prop('checked')
    34  
    35          //Advanced settings
    36          imapSettings.folder = $("#folder").val()
    37          imapSettings.imap_freq = $("#imapfreq").val()
    38          imapSettings.restrict_domain = $("#restrictdomain").val()
    39          imapSettings.ignore_cert_errors = $('#ignorecerterrors').prop('checked')
    40          imapSettings.delete_reported_campaign_email = $('#deletecampaign').prop('checked')
    41          
    42          //To avoid unmarshalling error in controllers/api/imap.go. It would fail gracefully, but with a generic error.
    43          if (imapSettings.host == ""){
    44              errorFlash("No IMAP Host specified")
    45              document.body.scrollTop = 0;
    46              document.documentElement.scrollTop = 0;
    47              return false
    48          }
    49          if (imapSettings.port == ""){
    50              errorFlash("No IMAP Port specified")
    51              document.body.scrollTop = 0;
    52              document.documentElement.scrollTop = 0;
    53              return false
    54          }
    55          if (isNaN(imapSettings.port) || imapSettings.port <1 || imapSettings.port > 65535  ){ 
    56              errorFlash("Invalid IMAP Port")
    57              document.body.scrollTop = 0;
    58              document.documentElement.scrollTop = 0;
    59              return false
    60          }
    61          if (imapSettings.imap_freq == ""){
    62              imapSettings.imap_freq = "60"
    63          }
    64  
    65          api.IMAP.post(imapSettings).done(function (data) {
    66                  if (data.success == true) {
    67                      successFlashFade("Successfully updated IMAP settings.", 2)
    68                  } else {
    69                      errorFlash("Unable to update IMAP settings.")
    70                  }
    71              })
    72              .success(function (data){
    73                  loadIMAPSettings()
    74              })
    75              .fail(function (data) {
    76                  errorFlash(data.responseJSON.message)
    77              })
    78              .always(function (data){
    79                  document.body.scrollTop = 0;
    80                  document.documentElement.scrollTop = 0;
    81              })
    82          
    83          return false
    84      })
    85  
    86      $("#validateimap").click(function() {
    87  
    88          // Query validate imap server endpoint
    89          var server = {}
    90          server.host = $("#imaphost").val()
    91          server.port = $("#imapport").val()
    92          server.username = $("#imapusername").val()
    93          server.password = $("#imappassword").val()
    94          server.tls = $('#use_tls').prop('checked')
    95          server.ignore_cert_errors = $('#ignorecerterrors').prop('checked')
    96  
    97          //To avoid unmarshalling error in controllers/api/imap.go. It would fail gracefully, but with a generic error. 
    98          if (server.host == ""){
    99              errorFlash("No IMAP Host specified")
   100              document.body.scrollTop = 0;
   101              document.documentElement.scrollTop = 0;
   102              return false
   103          }
   104          if (server.port == ""){
   105              errorFlash("No IMAP Port specified")
   106              document.body.scrollTop = 0;
   107              document.documentElement.scrollTop = 0;
   108              return false
   109          }
   110          if (isNaN(server.port) || server.port <1 || server.port > 65535  ){
   111              errorFlash("Invalid IMAP Port")
   112              document.body.scrollTop = 0;
   113              document.documentElement.scrollTop = 0;
   114              return false
   115          }
   116  
   117          var oldHTML = $("#validateimap").html();
   118          // Disable inputs and change button text
   119          $("#imaphost").attr("disabled", true);
   120          $("#imapport").attr("disabled", true);
   121          $("#imapusername").attr("disabled", true);
   122          $("#imappassword").attr("disabled", true);
   123          $("#use_imap").attr("disabled", true);
   124          $("#use_tls").attr("disabled", true);
   125          $('#ignorecerterrors').attr("disabled", true);
   126          $("#folder").attr("disabled", true);
   127          $("#restrictdomain").attr("disabled", true);
   128          $('#deletecampaign').attr("disabled", true);
   129          $('#lastlogin').attr("disabled", true);
   130          $('#imapfreq').attr("disabled", true);
   131          $("#validateimap").attr("disabled", true);  
   132          $("#validateimap").html("<i class='fa fa-circle-o-notch fa-spin'></i> Testing...");
   133          
   134          api.IMAP.validate(server).done(function(data) {
   135              if (data.success == true) {
   136                  Swal.fire({
   137                      title: "Success",
   138                      html: "Logged into <b>" + escapeHtml($("#imaphost").val()) + "</b>",
   139                      type: "success",
   140                  })
   141              } else {
   142                  Swal.fire({
   143                      title: "Failed!",
   144                      html: "Unable to login to <b>" + escapeHtml($("#imaphost").val()) + "</b>.",
   145                      type: "error",
   146                      showCancelButton: true,
   147                      cancelButtonText: "Close",
   148                      confirmButtonText: "More Info",
   149                      confirmButtonColor: "#428bca",
   150                      allowOutsideClick: false,
   151                  }).then(function(result) {
   152                      if (result.value) {
   153                          Swal.fire({
   154                              title: "Error:",
   155                              text: data.message,
   156                          })
   157                      }
   158                    })
   159              }
   160              
   161            })
   162            .fail(function() {
   163              Swal.fire({
   164                  title: "Failed!",
   165                  text: "An unecpected error occured.",
   166                  type: "error",
   167              })
   168            })
   169            .always(function() {
   170              //Re-enable inputs and change button text
   171              $("#imaphost").attr("disabled", false);
   172              $("#imapport").attr("disabled", false);
   173              $("#imapusername").attr("disabled", false);
   174              $("#imappassword").attr("disabled", false);
   175              $("#use_imap").attr("disabled", false);
   176              $("#use_tls").attr("disabled", false);
   177              $('#ignorecerterrors').attr("disabled", false);
   178              $("#folder").attr("disabled", false);
   179              $("#restrictdomain").attr("disabled", false);
   180              $('#deletecampaign').attr("disabled", false);
   181              $('#lastlogin').attr("disabled", false);
   182              $('#imapfreq').attr("disabled", false);
   183              $("#validateimap").attr("disabled", false);
   184              $("#validateimap").html(oldHTML);
   185  
   186            });
   187  
   188        }); //end testclick
   189  
   190      $("#reporttab").click(function() {
   191          loadIMAPSettings()
   192      })
   193  
   194      $("#advanced").click(function() {
   195          $("#advancedarea").toggle();
   196      })
   197  
   198      function loadIMAPSettings(){
   199          api.IMAP.get()
   200          .success(function (imap) {
   201              if (imap.length == 0){
   202                  $('#lastlogindiv').hide()
   203              } else {
   204                  imap = imap[0]
   205                  if (imap.enabled == false){
   206                      $('#lastlogindiv').hide()
   207                  } else {
   208                      $('#lastlogindiv').show()
   209                  }
   210                  $("#imapusername").val(imap.username)
   211                  $("#imaphost").val(imap.host)
   212                  $("#imapport").val(imap.port)
   213                  $("#imappassword").val(imap.password)
   214                  $('#use_tls').prop('checked', imap.tls)
   215                  $('#ignorecerterrors').prop('checked', imap.ignore_cert_errors)
   216                  $('#use_imap').prop('checked', imap.enabled)
   217                  $("#folder").val(imap.folder)
   218                  $("#restrictdomain").val(imap.restrict_domain)
   219                  $('#deletecampaign').prop('checked', imap.delete_reported_campaign_email)
   220                  $('#lastloginraw').val(imap.last_login)
   221                  $('#lastlogin').val(moment.utc(imap.last_login).fromNow())
   222                  $('#imapfreq').val(imap.imap_freq)
   223              }  
   224  
   225          })
   226          .error(function () {
   227              errorFlash("Error fetching IMAP settings")
   228          })
   229      }
   230  
   231      var use_map = localStorage.getItem('gophish.use_map')
   232      $("#use_map").prop('checked', JSON.parse(use_map))
   233      $("#use_map").on('change', function () {
   234          localStorage.setItem('gophish.use_map', JSON.stringify(this.checked))
   235      })
   236  
   237      loadIMAPSettings()
   238  })