helpdesk.js 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758
  1. /*
  2. * Password Management Servlets (PWM)
  3. * http://www.pwm-project.org
  4. *
  5. * Copyright (c) 2006-2009 Novell, Inc.
  6. * Copyright (c) 2009-2017 The PWM Project
  7. *
  8. * This program is free software; you can redistribute it and/or modify
  9. * it under the terms of the GNU General Public License as published by
  10. * the Free Software Foundation; either version 2 of the License, or
  11. * (at your option) any later version.
  12. *
  13. * This program is distributed in the hope that it will be useful,
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. * GNU General Public License for more details.
  17. *
  18. * You should have received a copy of the GNU General Public License
  19. * along with this program; if not, write to the Free Software
  20. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  21. */
  22. "use strict";
  23. var PWM_HELPDESK = PWM_HELPDESK || {};
  24. var PWM_VAR = PWM_VAR || {};
  25. PWM_HELPDESK.executeAction = function(actionName) {
  26. var body = PWM_VAR['actions'][actionName]['description'];
  27. body += "<br/><br/>" + PWM_MAIN.showString('Confirm');
  28. PWM_MAIN.showConfirmDialog({
  29. title:PWM_MAIN.showString('Button_Confirm') + " " + actionName,
  30. text:body,
  31. okAction:function(){
  32. var inputValues = {};
  33. inputValues['userKey'] = PWM_VAR['helpdesk_obfuscatedDN'];
  34. PWM_MAIN.showWaitDialog({loadFunction:function() {
  35. var url = PWM_MAIN.addParamToUrl(window.location.href,"processAction", "executeAction");
  36. url = PWM_MAIN.addParamToUrl(url, "name", actionName);
  37. var loadFunction = function(data) {
  38. PWM_MAIN.closeWaitDialog();
  39. if (data['error'] === true) {
  40. PWM_MAIN.showDialog({title: PWM_MAIN.showString('Title_Error'), text: data['errorDetail']});
  41. } else {
  42. PWM_MAIN.showDialog({title: PWM_MAIN.showString('Title_Success'), text: data['successMessage'], nextAction: function () {
  43. PWM_HELPDESK.refreshDetailPage();
  44. }});
  45. }
  46. };
  47. PWM_MAIN.ajaxRequest(url,loadFunction,{content:inputValues});
  48. }});
  49. }
  50. });
  51. };
  52. PWM_HELPDESK.doResponseClear = function() {
  53. PWM_MAIN.showWaitDialog({loadFunction:function() {
  54. var url = "helpdesk?processAction=clearResponses&userKey=" + PWM_VAR['helpdesk_obfuscatedDN'];
  55. var loadFunction = function(results) {
  56. if (results['error'] !== true) {
  57. PWM_MAIN.showDialog({
  58. title: PWM_MAIN.showString('Button_ClearResponses'),
  59. text: results['successMessage'],
  60. okAction:function(){
  61. PWM_HELPDESK.refreshDetailPage();
  62. }
  63. });
  64. } else {
  65. PWM_MAIN.showErrorDialog(results);
  66. }
  67. };
  68. PWM_MAIN.ajaxRequest(url,loadFunction);
  69. }});
  70. };
  71. PWM_HELPDESK.doPasswordChange = function(password, random) {
  72. var inputValues = {};
  73. inputValues['username'] = PWM_VAR['helpdesk_obfuscatedDN'];
  74. if (random) {
  75. inputValues['random'] = true;
  76. } else {
  77. inputValues['password'] = password;
  78. }
  79. PWM_MAIN.showWaitDialog({loadFunction:function() {
  80. var url = "helpdesk?processAction=setPassword";
  81. var loadFunction = function(results) {
  82. var bodyText = "";
  83. if (results['error'] === true) {
  84. bodyText += results['errorMessage'];
  85. if (results['errorMessage']) {
  86. bodyText += '<br/><br/>';
  87. bodyText += results['errorDetail'];
  88. }
  89. } else {
  90. bodyText += '<br/>';
  91. bodyText += results['successMessage'];
  92. bodyText += '</br></br>';
  93. bodyText += PWM_MAIN.showString('Field_NewPassword');
  94. if (PWM_VAR['helpdesk_setting_maskPasswords']) {
  95. bodyText += '<button id="button-password-display" class="btn"><span class="btn-icon pwm-icon pwm-icon-eye"></span>' + PWM_MAIN.showString('Button_Show') + '</button>';
  96. bodyText += ' <input id="panel-password-display" style="display:none" class="inputfield" value="' + password + '" readonly/>';
  97. } else {
  98. bodyText += ' <input class="inputfield" value="' + password + '" readonly/>';
  99. }
  100. bodyText += '<br/>';
  101. }
  102. bodyText += '<br/><br/><button class="btn" id="button-continue">'
  103. + '<span class="btn-icon pwm-icon pwm-icon-forward"></span>' + PWM_MAIN.showString('Button_OK') + '</button>';
  104. if (PWM_VAR['helpdesk_setting_clearResponses'] === 'ask') {
  105. bodyText += '<span style="padding-left: 10px">&nbsp;</span>';
  106. bodyText += '<button class="btn" id="button-clearResponses">';
  107. bodyText += '<span class="btn-icon pwm-icon pwm-icon-eraser"></span>' + PWM_MAIN.showString('Button_ClearResponses') + '</button>';
  108. }
  109. PWM_MAIN.closeWaitDialog();
  110. PWM_MAIN.showDialog({
  111. showOk: false,
  112. showClose: true,
  113. allowMove: true,
  114. id: 'dialogPopup',
  115. title: PWM_MAIN.showString('Title_ChangePassword') + ' - ' + PWM_VAR['helpdesk_username'],
  116. text: bodyText,
  117. loadFunction:function(){
  118. PWM_MAIN.addEventHandler('button-continue','click',function(){ PWM_HELPDESK.refreshDetailPage(); });
  119. PWM_MAIN.addEventHandler('button-clearResponses','click',function(){ PWM_HELPDESK.doResponseClear(); });
  120. if (PWM_VAR['helpdesk_setting_maskPasswords']) {
  121. PWM_MAIN.addEventHandler('button-password-display','click',function(){
  122. var buttonElement = PWM_MAIN.getObject('button-password-display');
  123. buttonElement.parentNode.removeChild(buttonElement);
  124. PWM_MAIN.getObject('panel-password-display').style.display = 'inline';
  125. });
  126. }
  127. }
  128. });
  129. };
  130. PWM_MAIN.ajaxRequest(url,loadFunction,{content:inputValues});
  131. }});
  132. };
  133. PWM_HELPDESK.generatePasswordPopup = function() {
  134. var dataInput = {};
  135. dataInput['username'] = PWM_VAR['helpdesk_obfuscatedDN'];
  136. dataInput['strength'] = 0;
  137. var randomConfig = {};
  138. randomConfig['dataInput'] = dataInput;
  139. randomConfig['finishAction'] = function(password){
  140. PWM_MAIN.clearDijitWidget('randomPasswordDialog');
  141. PWM_HELPDESK.doPasswordChange(password);
  142. };
  143. PWM_CHANGEPW.doRandomGeneration(randomConfig);
  144. };
  145. PWM_HELPDESK.changePasswordPopup = function() {
  146. var bodyText = '';
  147. bodyText += '<span id="message" class="message message-info" style="width: 400px">' + PWM_MAIN.showString('Display_PasswordPrompt') + '</span>';
  148. bodyText += '<table class="noborder"><tr class="noborder"><td class="noborder">';
  149. if (PWM_VAR['helpdesk_setting_maskPasswords']) {
  150. bodyText += '<input type="password" name="password1" id="password1" class="passwordfield" style="width: 260px" autocomplete="off"/>';
  151. } else {
  152. bodyText += '<input type="text" name="password1" id="password1" class="inputfield" style="width: 260px" autocomplete="off"/>';
  153. }
  154. bodyText += '</td>';
  155. if (PWM_GLOBAL['setting-showStrengthMeter']) {
  156. bodyText += '<td class="noborder"><div id="strengthBox" style="visibility:hidden;">';
  157. bodyText += '<div id="strengthLabel">' + PWM_MAIN.showString('Display_StrengthMeter') + '</div>';
  158. bodyText += '<div class="progress-container" style="margin-bottom:10px">';
  159. bodyText += '<div id="strengthBar" style="width:0">&nbsp;</div></div></div></td>';
  160. }
  161. bodyText += '</tr><tr class="noborder">';
  162. bodyText += '<td class="noborder">';
  163. if (PWM_VAR['helpdesk_setting_maskPasswords']) {
  164. bodyText += '<input type="password" name="password2" id="password2" class="passwordfield" style="width: 260px" autocomplete="off"/>';
  165. } else {
  166. bodyText += '<input type="text" name="password2" id="password2" class="inputfield" style="width: 260px" autocomplete="off"/>';
  167. }
  168. bodyText += '</td>';
  169. bodyText += '<td class="noborder"><div style="margin:0;">';
  170. bodyText += '<img style="visibility:hidden;" id="confirmCheckMark" alt="checkMark" height="15" width="15" src="' + PWM_GLOBAL['url-resources'] + '/greenCheck.png">';
  171. bodyText += '<img style="visibility:hidden;" id="confirmCrossMark" alt="crossMark" height="15" width="15" src="' + PWM_GLOBAL['url-resources'] + '/redX.png">';
  172. bodyText += '</div></td>';
  173. bodyText += '</tr></table><br/>';
  174. bodyText += '<button name="change" class="btn" id="password_button" disabled="true"><span class="btn-icon pwm-icon pwm-icon-key"></span>' + PWM_MAIN.showString('Button_ChangePassword') + '</button>';
  175. if (PWM_VAR['helpdesk_setting_PwUiMode'] === 'both') {
  176. bodyText += '<button name="random" class="btn" id="button-autoGeneratePassword"><span class="btn-icon pwm-icon pwm-icon-retweet"></span>' + PWM_MAIN.showString('Title_RandomPasswords') + '</button>';
  177. }
  178. try { PWM_MAIN.getObject('message').id = "base-message"; } catch (e) {}
  179. PWM_MAIN.showDialog({
  180. title: PWM_MAIN.showString('Title_ChangePassword') + ' - ' + PWM_VAR['helpdesk_username'],
  181. text: bodyText,
  182. showOk: false,
  183. showClose: true,
  184. allowMove: true,
  185. loadFunction: function(){
  186. setTimeout(function(){ PWM_MAIN.getObject('password1').focus();},500);
  187. PWM_MAIN.addEventHandler('password1','input',function(){
  188. PWM_CHANGEPW.validatePasswords(PWM_VAR['helpdesk_obfuscatedDN']);
  189. });
  190. PWM_MAIN.addEventHandler('password2','input',function(){
  191. PWM_CHANGEPW.validatePasswords(PWM_VAR['helpdesk_obfuscatedDN']);
  192. });
  193. if (PWM_VAR['helpdesk_setting_maskPasswords']) {
  194. ShowHidePasswordHandler.init('password1');
  195. ShowHidePasswordHandler.init('password2');
  196. }
  197. PWM_MAIN.addEventHandler('password_button','click',function(){
  198. var pw=PWM_MAIN.getObject('password1').value;
  199. PWM_HELPDESK.doPasswordChange(pw);
  200. });
  201. PWM_MAIN.addEventHandler('button-autoGeneratePassword','click',function(){
  202. PWM_HELPDESK.generatePasswordPopup();
  203. })
  204. }
  205. });
  206. };
  207. PWM_HELPDESK.initiateChangePasswordDialog = function() {
  208. if (PWM_VAR['helpdesk_setting_PwUiMode'] === 'autogen') {
  209. PWM_HELPDESK.generatePasswordPopup();
  210. } else if (PWM_VAR['helpdesk_setting_PwUiMode'] === 'random') {
  211. PWM_HELPDESK.setRandomPasswordPopup();
  212. } else {
  213. PWM_HELPDESK.changePasswordPopup();
  214. }
  215. };
  216. PWM_HELPDESK.setRandomPasswordPopup = function() {
  217. var titleText = PWM_MAIN.showString('Title_ChangePassword') + ': ' + PWM_VAR['helpdesk_username'];
  218. var body = PWM_MAIN.showString('Display_SetRandomPasswordPrompt');
  219. var yesAction = function() {
  220. PWM_HELPDESK.doPasswordChange('[' + PWM_MAIN.showString('Display_Random') + ']',true);
  221. };
  222. PWM_MAIN.showConfirmDialog({title:titleText,text:body,okAction:yesAction});
  223. };
  224. PWM_HELPDESK.loadSearchDetails = function(userKey) {
  225. var gotoDetailFunction = function(userKey) {
  226. PWM_MAIN.showWaitDialog({loadFunction:function() {
  227. var contents = {};
  228. contents['userKey'] = userKey;
  229. if (PWM_MAIN.Preferences.readSessionStorage(PREF_KEY_VERIFICATION_STATE)) {
  230. contents[PARAM_VERIFICATION_STATE] = PWM_MAIN.Preferences.readSessionStorage(PREF_KEY_VERIFICATION_STATE);
  231. }
  232. PWM_MAIN.submitPostAction(window.location.href,'showDetail',contents);
  233. }});
  234. };
  235. var handleVerificationResult = function(data) {
  236. if (data['error']) {
  237. PWM_MAIN.showErrorDialog(data);
  238. } else {
  239. if (data['data']['passed']) {
  240. gotoDetailFunction(userKey);
  241. } else {
  242. var verificationMethods = PWM_VAR['verificationMethods']['required'];
  243. PWM_HELPDESK.sendVerificationToken(userKey,verificationMethods);
  244. }
  245. }
  246. };
  247. var checkVerificationFunction = function() {
  248. var url = PWM_MAIN.addParamToUrl(window.location.href,"processAction", "checkVerification");
  249. var content = {};
  250. content['userKey'] = userKey;
  251. content[PARAM_VERIFICATION_STATE] = PWM_MAIN.Preferences.readSessionStorage(PREF_KEY_VERIFICATION_STATE);
  252. PWM_MAIN.ajaxRequest(url, handleVerificationResult, {content:content});
  253. };
  254. PWM_MAIN.showWaitDialog({loadFunction:checkVerificationFunction});
  255. };
  256. PWM_HELPDESK.showRecentVerifications = function() {
  257. var handleVerificationResult = function(data) {
  258. if (data['error']) {
  259. PWM_MAIN.showErrorDialog(data);
  260. return;
  261. } else {
  262. var records = data['data']['records'];
  263. var html = '';
  264. if (PWM_MAIN.JSLibrary.isEmpty(records)) {
  265. html += PWM_MAIN.showString('Display_SearchResultsNone');
  266. } else {
  267. html += '<table>';
  268. html += '<tr><td class="title">' + PWM_MAIN.showString('Field_LdapProfile') + '</td><td class="title">'
  269. + PWM_MAIN.showString('Field_Username') + '</td><td class="title">'
  270. + PWM_MAIN.showString('Field_DateTime') + '</td><td class="title">'
  271. + PWM_MAIN.showString('Field_Method') + '</td>';
  272. for (var i in records) {
  273. var record = records[i];
  274. html += '<tr>';
  275. html += '<td>' + record['profile'] + '</td>';
  276. html += '<td>' + record['username'] + '</td>';
  277. html += '<td class="timestamp">' + record['timestamp'] + '</td>';
  278. html += '<td>' + record['method'] + '</td>';
  279. html += '</tr>';
  280. }
  281. }
  282. html += '</table>';
  283. PWM_MAIN.showDialog({'title':PWM_MAIN.showString('Title_RecentVerifications'),'text':html,loadFunction:function(){PWM_MAIN.TimestampHandler.initAllElements()}});
  284. }
  285. };
  286. var loadVerificationsFunction = function() {
  287. var url = PWM_MAIN.addParamToUrl(window.location.href,"processAction", "showVerifications");
  288. var content = {};
  289. content[PARAM_VERIFICATION_STATE] = PWM_MAIN.Preferences.readSessionStorage(PREF_KEY_VERIFICATION_STATE);
  290. PWM_MAIN.ajaxRequest(url, handleVerificationResult, {content:content});
  291. };
  292. PWM_MAIN.showWaitDialog({loadFunction:loadVerificationsFunction});
  293. };
  294. PWM_HELPDESK.processHelpdeskSearch = function() {
  295. var validationProps = {};
  296. validationProps['serviceURL'] = PWM_MAIN.addParamToUrl(window.location.href,"processAction", "search");
  297. validationProps['showMessage'] = false;
  298. validationProps['ajaxTimeout'] = 120 * 1000;
  299. validationProps['usernameField'] = PWM_MAIN.getObject('username').value;
  300. validationProps['readDataFunction'] = function(){
  301. PWM_MAIN.getObject('searchIndicator').style.display = 'inherit';
  302. return { username:PWM_MAIN.getObject('username').value }
  303. };
  304. validationProps['completeFunction'] = function() {
  305. PWM_MAIN.getObject('searchIndicator').style.display = 'none';
  306. };
  307. validationProps['processResultsFunction'] = function(data) {
  308. if (data === null) {
  309. PWM_MAIN.showErrorDialog(PWM_MAIN.showString('Display_HelpdeskNoData'));
  310. } else {
  311. var grid = PWM_VAR['heldesk_search_grid'];
  312. if (data['error']) {
  313. PWM_MAIN.showErrorDialog(data);
  314. grid.refresh();
  315. } else {
  316. var gridData = data['data']['searchResults'];
  317. var sizeExceeded = data['data']['sizeExceeded'];
  318. grid.refresh();
  319. grid.renderArray(gridData);
  320. var sortState = grid.get("sort");
  321. grid.set("sort", sortState);
  322. if (sizeExceeded) {
  323. PWM_MAIN.getObject('maxResultsIndicator').style.display = 'inherit';
  324. PWM_MAIN.showTooltip({
  325. id: 'maxResultsIndicator',
  326. position: 'below',
  327. text: PWM_MAIN.showString('Display_SearchResultsExceeded')
  328. })
  329. } else if (PWM_MAIN.JSLibrary.isEmpty(data['data']['searchResults']) && validationProps['usernameField'].length > 0) {
  330. PWM_MAIN.getObject('maxResultsIndicator').style.display = 'inherit';
  331. PWM_MAIN.showTooltip({
  332. id: 'maxResultsIndicator',
  333. position: 'below',
  334. text: PWM_MAIN.showString('Display_SearchResultsNone')
  335. })
  336. } else {
  337. PWM_MAIN.getObject('maxResultsIndicator').style.display = 'none';
  338. }
  339. }
  340. }
  341. };
  342. PWM_MAIN.pwmFormValidator(validationProps);
  343. PWM_MAIN.getObject('maxResultsIndicator').style.display = 'none';
  344. };
  345. PWM_HELPDESK.makeSearchGrid = function(nextAction) {
  346. require(["dojo/domReady!"],function(){
  347. require(["dojo","dojo/_base/declare", "dgrid/Grid", "dgrid/Keyboard", "dgrid/Selection", "dgrid/extensions/ColumnResizer", "dgrid/extensions/ColumnReorder", "dgrid/extensions/ColumnHider", "dojo/domReady!"],
  348. function(dojo,declare, Grid, Keyboard, Selection, ColumnResizer, ColumnReorder, ColumnHider){
  349. var CustomGrid = declare([ Grid, Keyboard, Selection, ColumnResizer, ColumnReorder, ColumnHider ]);
  350. PWM_VAR['heldesk_search_grid'] = new CustomGrid({
  351. columns: PWM_VAR['helpdesk_search_columns']
  352. }, "helpdesk-searchResultsGrid");
  353. if (nextAction) {
  354. nextAction();
  355. }
  356. PWM_VAR['heldesk_search_grid'].on(".dgrid-row:click", function(evt){
  357. PWM_MAIN.stopEvent(evt);
  358. var row = PWM_VAR['heldesk_search_grid'].row(evt);
  359. PWM_HELPDESK.loadSearchDetails(row.data['userKey']);
  360. });
  361. });
  362. });
  363. };
  364. PWM_HELPDESK.deleteUser = function() {
  365. PWM_MAIN.showConfirmDialog({
  366. text:PWM_MAIN.showString('Confirm_DeleteUser'),
  367. okAction:function(){
  368. var url = "helpdesk?processAction=deleteUser&userKey=" + PWM_VAR['helpdesk_obfuscatedDN'];
  369. var loadFunction = function(data) {
  370. PWM_MAIN.closeWaitDialog();
  371. if (data['error'] === true) {
  372. PWM_MAIN.showErrorDialog(error);
  373. } else {
  374. PWM_MAIN.showDialog({title: PWM_MAIN.showString('Title_Success'), text: data['successMessage'], okAction: function () {
  375. PWM_MAIN.goto("/private/helpdesk");
  376. }});
  377. }
  378. };
  379. PWM_MAIN.ajaxRequest(url,loadFunction);
  380. }
  381. })
  382. };
  383. PWM_HELPDESK.validateOtpCode = function(userKey) {
  384. var dialogText = PWM_MAIN.showString('Display_HelpdeskOtpValidation');
  385. PWM_HELPDESK.validateCode({userKey:userKey, processAction:'validateOtpCode', dialogText:dialogText});
  386. };
  387. var PARAM_VERIFICATION_STATE = 'verificationState';
  388. var PREF_KEY_VERIFICATION_STATE = 'verificationState';
  389. PWM_HELPDESK.validateCode = function(options) {
  390. options = options === undefined ? {} : options;
  391. var userKey = options['userKey'];
  392. var processAction = options['processAction'];
  393. var dialogText = options['dialogText'];
  394. var extraPayload = options['extraPayload'];
  395. var showInputField = 'showInputField' in options ? options['showInputField '] : true;
  396. var validateOtpCodeFunction = function(){
  397. PWM_MAIN.getObject('icon-working').style.display = 'inherit';
  398. PWM_MAIN.getObject('icon-cross').style.display = 'none';
  399. PWM_MAIN.getObject('icon-check').style.display = 'none';
  400. var content = extraPayload === undefined ? {} : extraPayload();
  401. content['userKey'] = userKey;
  402. if (PWM_MAIN.getObject('code')) {
  403. content['code'] = PWM_MAIN.getObject('code').value;
  404. }
  405. content[PARAM_VERIFICATION_STATE] = PWM_MAIN.Preferences.readSessionStorage(PREF_KEY_VERIFICATION_STATE);
  406. var url = PWM_MAIN.addParamToUrl(window.location.href,"processAction", processAction);
  407. var loadFunction = function(data) {
  408. PWM_MAIN.getObject('icon-working').style.display = 'none';
  409. if (data['error']) {
  410. PWM_MAIN.showErrorDialog(data);
  411. return;
  412. }
  413. var verificationState = data['data'][PARAM_VERIFICATION_STATE];
  414. PWM_MAIN.Preferences.writeSessionStorage(PREF_KEY_VERIFICATION_STATE,verificationState);
  415. console.log(verificationState);
  416. var passed = data['data']['passed'];
  417. if (passed) {
  418. PWM_MAIN.getObject('icon-check').style.display = 'inherit';
  419. PWM_MAIN.getObject('dialog_ok_button').disabled = false;
  420. PWM_MAIN.getObject('button-checkCode').disabled = true;
  421. } else {
  422. PWM_MAIN.getObject('icon-cross').style.display = 'inherit';
  423. if (PWM_MAIN.getObject('code')) {
  424. PWM_MAIN.getObject('code').value = '';
  425. PWM_MAIN.getObject('code').focus();
  426. }
  427. }
  428. };
  429. PWM_MAIN.ajaxRequest(url,loadFunction,{content:content});
  430. };
  431. var text = '<div>' + dialogText + '</div><br/><div><table class="noborder"><tr>';
  432. if (showInputField) {
  433. text += '<td style="width: 100px"><input style="width: 100px" id="code" name="code"/></td>';
  434. }
  435. text += '<td style="width:40px"><span style="display:none;color:green" id="icon-check" class="btn-icon pwm-icon pwm-icon-lg pwm-icon-check"></span>'
  436. + '<span style="display:none;color:red" id="icon-cross" class="btn-icon pwm-icon pwm-icon-lg pwm-icon-times"></span>'
  437. + '<span style="display:none;" id="icon-working" class="pwm-icon pwm-icon-lg pwm-icon-spin pwm-icon-spinner"></span></td><td>'
  438. + '<button type="button" class="btn" id="button-checkCode"><span class="btn-icon pwm-icon pwm-icon-check"></span>' + PWM_MAIN.showString('Button_Verify') + '</button>'
  439. + '</tr></td></table></div>';
  440. var successFunction = function() {
  441. if (PWM_MAIN.getObject('application-info').getAttribute('data-jsp-name') === 'helpdesk.jsp') {
  442. PWM_HELPDESK.loadSearchDetails(userKey);
  443. }
  444. };
  445. PWM_MAIN.showDialog({
  446. showClose:true,
  447. allowMove:true,
  448. title:PWM_MAIN.showString('Title_ValidateCode'),
  449. text:text,
  450. loadFunction:function(){
  451. PWM_MAIN.addEventHandler('button-checkCode','click',function(){
  452. validateOtpCodeFunction();
  453. });
  454. PWM_MAIN.getObject('dialog_ok_button').disabled = true;
  455. },
  456. okAction:successFunction
  457. });
  458. };
  459. PWM_HELPDESK.sendVerificationToken = function(userKey, methods) {
  460. var sendMethodSetting = PWM_VAR["helpdesk_setting_tokenSendMethod"];
  461. var tokenChoiceFlag = sendMethodSetting === 'CHOICE_SMS_EMAIL';
  462. var sendTokenAction = function(choice) {
  463. var sendContent = {};
  464. sendContent['userKey'] = userKey;
  465. if (tokenChoiceFlag && choice) {
  466. sendContent['method'] = choice;
  467. }
  468. PWM_MAIN.showWaitDialog({loadFunction:function(){
  469. var url = PWM_MAIN.addParamToUrl(window.location.href,"processAction", "sendVerificationToken");
  470. var loadFunction = function(data) {
  471. if (!data['error']) {
  472. var text = '<table><tr><td>' + PWM_MAIN.showString('Display_TokenDestination') + '</td><td>' + data['data']['destination'] + '</td></tr></table>';
  473. var returnExtraData = function() { return data['data']; };
  474. PWM_HELPDESK.validateCode({userKey:userKey, processAction:'verifyVerificationToken',dialogText:text,extraPayload:returnExtraData});
  475. } else {
  476. PWM_MAIN.showErrorDialog(data);
  477. }
  478. };
  479. PWM_MAIN.ajaxRequest(url,loadFunction,{content:sendContent});
  480. }});
  481. };
  482. var dialogText = '<div>' + PWM_MAIN.showString('Long_Title_VerificationSend') + "</div><br/>";
  483. dialogText += '<div style="text-align:center"><br/>';
  484. if (PWM_MAIN.JSLibrary.arrayContains(methods,'ATTRIBUTES')) {
  485. dialogText += '<br/><br/><button class="btn" type="button" name="attributesChoiceButton" id="attributesChoiceButton">'
  486. + '<span class="btn-icon pwm-icon pwm-icon-database "></span>' + PWM_MAIN.showString('Button_Attributes') + '</button><br/>';
  487. }
  488. if (PWM_MAIN.JSLibrary.arrayContains(methods,'TOKEN')) {
  489. if (tokenChoiceFlag || sendMethodSetting === 'EMAILONLY') {
  490. dialogText += '<br/><button class="btn" type="button" name="emailChoiceButton" id="emailChoiceButton">'
  491. + '<span class="btn-icon pwm-icon pwm-icon-envelope-o"></span>' + PWM_MAIN.showString('Button_Email') + '</button>';
  492. }
  493. if (tokenChoiceFlag || sendMethodSetting === 'SMSONLY') {
  494. dialogText += '<br/><br/><button class="btn" type="button" name="smsChoiceButton" id="smsChoiceButton">'
  495. + '<span class="btn-icon pwm-icon pwm-icon-phone"></span>' + PWM_MAIN.showString('Button_SMS') + '</button>';
  496. }
  497. }
  498. if (PWM_MAIN.JSLibrary.arrayContains(methods,'OTP')) {
  499. dialogText += '<br/><br/><button class="btn" type="button" name="otpChoiceButton" id="otpChoiceButton">'
  500. + '<span class="btn-icon pwm-icon pwm-icon-qrcode"></span>' + PWM_MAIN.showString('Button_OTP') + '</button>';
  501. }
  502. dialogText += '</div>';
  503. var dialogLoadFunction = function() {
  504. PWM_MAIN.addEventHandler('attributesChoiceButton','click',function(){PWM_HELPDESK.validateAttributes(userKey)});
  505. PWM_MAIN.addEventHandler('emailChoiceButton','click',function(){sendTokenAction('email')});
  506. PWM_MAIN.addEventHandler('smsChoiceButton','click',function(){sendTokenAction('sms')});
  507. PWM_MAIN.addEventHandler('otpChoiceButton','click',function(){PWM_HELPDESK.validateOtpCode(userKey)});
  508. };
  509. PWM_MAIN.showConfirmDialog({
  510. title:PWM_MAIN.showString('Title_VerificationSend'),
  511. text:dialogText,
  512. showOk:false,
  513. showCancel:false,
  514. showClose: true,
  515. okAction:function(){
  516. sendTokenAction();
  517. },
  518. loadFunction:dialogLoadFunction
  519. });
  520. };
  521. PWM_HELPDESK.validateAttributes = function(userKey) {
  522. var bodyText = '';
  523. bodyText += '<div><table>';
  524. var formItems = PWM_VAR['verificationForm'];
  525. for (var i in formItems) {
  526. var name = formItems[i]['name'];
  527. var label = formItems[i]['label'];
  528. bodyText += '<tr><td>' + label + '</td><td>' + '<input id="input-' + name + '"/>' + '</td></tr>';
  529. }
  530. bodyText += '</table></div>';
  531. var extraData = function() {
  532. var formData = {};
  533. for (var i in formItems) {
  534. (function(item){
  535. var name = item['name'];
  536. formData[name] = PWM_MAIN.getObject('input-' + name).value;
  537. }(formItems[i]));
  538. }
  539. return formData;
  540. };
  541. var options = {
  542. userKey:userKey,
  543. processAction:'validateAttributes',
  544. dialogText:bodyText,
  545. showInputField:false,
  546. extraPayload:extraData
  547. };
  548. PWM_HELPDESK.validateCode(options);
  549. };
  550. PWM_HELPDESK.initHelpdeskSearchPage = function() {
  551. PWM_MAIN.addEventHandler('button-show-current-verifications','click',PWM_HELPDESK.showRecentVerifications);
  552. PWM_HELPDESK.makeSearchGrid(function(){
  553. PWM_MAIN.addEventHandler('username', "keyup, input", function(){
  554. PWM_HELPDESK.processHelpdeskSearch();
  555. try {
  556. var helpdeskFieldUsername = PWM_MAIN.getObject('username').value;
  557. PWM_MAIN.Preferences.writeSessionStorage("helpdesk_field_username", helpdeskFieldUsername);
  558. } catch (e) {
  559. console.log('error writing username field from sessionStorage: ' + e);
  560. }
  561. });
  562. try {
  563. var helpdeskFieldUsername = PWM_MAIN.Preferences.readSessionStorage("helpdesk_field_username","");
  564. PWM_MAIN.getObject('username').value = helpdeskFieldUsername;
  565. } catch (e) {
  566. console.log('error reading username field from sessionStorage: ' + e);
  567. }
  568. if (PWM_MAIN.getObject('username').value && PWM_MAIN.getObject('username').value.length > 0) {
  569. PWM_HELPDESK.processHelpdeskSearch();
  570. }
  571. });
  572. };
  573. PWM_HELPDESK.initHelpdeskDetailPage = function() {
  574. require(["dojo/parser","dijit/layout/TabContainer","dijit/layout/ContentPane"],function(dojoParser){
  575. dojoParser.parse();
  576. });
  577. PWM_MAIN.addEventHandler('button_continue','click',function() {
  578. PWM_MAIN.goto('helpdesk');
  579. });
  580. PWM_MAIN.addEventHandler('button_refresh','click',function(){
  581. PWM_HELPDESK.refreshDetailPage();
  582. });
  583. PWM_MAIN.addEventHandler('helpdesk_ChangePasswordButton','click',function(){
  584. PWM_HELPDESK.initiateChangePasswordDialog();
  585. });
  586. PWM_MAIN.addEventHandler('helpdesk_unlockBtn','click',function(){
  587. PWM_HELPDESK.unlockIntruder();
  588. });
  589. PWM_MAIN.addEventHandler('helpdesk_clearResponsesBtn','click',function(){
  590. PWM_MAIN.showConfirmDialog({okAction:function(){
  591. PWM_HELPDESK.doResponseClear();
  592. }});
  593. });
  594. PWM_MAIN.addEventHandler('helpdesk_clearOtpSecretBtn','click',function(){
  595. PWM_MAIN.showConfirmDialog({okAction:function() {
  596. PWM_HELPDESK.doOtpClear();
  597. }});
  598. });
  599. PWM_MAIN.addEventHandler('helpdesk_verifyOtpButton','click',function(){
  600. PWM_HELPDESK.validateOtpCode(PWM_VAR['helpdesk_obfuscatedDN']);
  601. });
  602. PWM_MAIN.addEventHandler('sendTokenButton','click',function(){
  603. var verificationMethods = PWM_VAR['verificationMethods']['optional'];
  604. PWM_HELPDESK.sendVerificationToken(PWM_VAR['helpdesk_obfuscatedDN'],verificationMethods);
  605. });
  606. PWM_MAIN.addEventHandler('helpdesk_deleteUserButton','click',function(){
  607. PWM_HELPDESK.deleteUser();
  608. });
  609. };
  610. PWM_HELPDESK.initPage = function() {
  611. var applicationData = PWM_MAIN.getObject("application-info");
  612. var jspName = applicationData ? applicationData.getAttribute("data-jsp-name") : "";
  613. if ("helpdesk.jsp" === jspName || "helpdesk-detail.jsp" === jspName) {
  614. PWM_MAIN.ajaxRequest("helpdesk?processAction=clientData",function(data){
  615. if (data['error']) {
  616. PWM_MAIN.showErrorDialog(data);
  617. return;
  618. }
  619. for (var keyName in data['data']) {
  620. PWM_VAR[keyName] = data['data'][keyName];
  621. }
  622. console.log('loaded helpdesk clientData');
  623. if ("helpdesk.jsp" === jspName) {
  624. PWM_HELPDESK.initHelpdeskSearchPage();
  625. }
  626. if ("helpdesk-detail.jsp" === jspName) {
  627. PWM_HELPDESK.initHelpdeskDetailPage();
  628. }
  629. },{method:"GET"});
  630. }
  631. };
  632. PWM_HELPDESK.refreshDetailPage = function() {
  633. var userKey = PWM_VAR['helpdesk_obfuscatedDN'];
  634. PWM_HELPDESK.loadSearchDetails(userKey);
  635. };
  636. PWM_HELPDESK.unlockIntruder = function() {
  637. PWM_MAIN.showConfirmDialog({
  638. title: PWM_MAIN.showString('Button_Unlock'),
  639. okAction:function() {
  640. PWM_MAIN.showWaitDialog({
  641. loadFunction:function(){
  642. var url = PWM_MAIN.addParamToUrl(window.location.href,"processAction", "unlockIntruder");
  643. url = PWM_MAIN.addParamToUrl(url, "userKey", PWM_VAR['helpdesk_obfuscatedDN']);
  644. var load = function(data) {
  645. if (data['error'] === true) {
  646. PWM_MAIN.showErrorDialog(error);
  647. } else {
  648. PWM_MAIN.showDialog({
  649. title: PWM_MAIN.showString('Button_Unlock'),
  650. text: data['successMessage'],
  651. okAction:function(){
  652. PWM_HELPDESK.refreshDetailPage();
  653. }
  654. });
  655. }
  656. };
  657. PWM_MAIN.ajaxRequest(url, load);
  658. }
  659. });
  660. }
  661. });
  662. };
  663. PWM_HELPDESK.doOtpClear = function() {
  664. var inputValues = {};
  665. inputValues['userKey'] = PWM_VAR['helpdesk_obfuscatedDN'];
  666. PWM_MAIN.showWaitDialog({loadFunction:function() {
  667. var url = PWM_MAIN.addParamToUrl(window.location.href,"processAction", "clearOtpSecret");
  668. var loadFunction = function(results) {
  669. if (results['error'] !== true) {
  670. PWM_MAIN.showDialog({
  671. title: PWM_MAIN.showString('Button_HelpdeskClearOtpSecret'),
  672. text: results['successMessage'],
  673. okAction:function(){
  674. PWM_HELPDESK.refreshDetailPage();
  675. }
  676. });
  677. } else {
  678. PWM_MAIN.showErrorDialog(results);
  679. }
  680. };
  681. PWM_MAIN.ajaxRequest(url,loadFunction,{content:inputValues});
  682. }});
  683. };
  684. PWM_HELPDESK.initPage();