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 })