config.jelly 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <!-- src/main/resources/io/jenkins/plugins/MfaUserProperty/config.jelly -->
  2. <?jelly escape-by-default='true'?>
  3. <j:jelly xmlns:j="jelly:core" xmlns:f="/lib/form" xmlns:l="/lib/layout">
  4. <f:entry title="Ativar MFA" field="mfaEnabled">
  5. <f:checkbox id="mfaEnabledCheckbox" />
  6. </f:entry>
  7. <j:if test="${!instance.mfaEnabled}">
  8. <div id="mfaSetupContainer" style="display:none; margin-top:10px;">
  9. <f:entry title="QR Code">
  10. <img id="qrCodeImage" alt="QR Code para Google Authenticator" />
  11. </f:entry>
  12. <f:entry title="Código do App">
  13. <f:textbox field="totpCode" />
  14. </f:entry>
  15. <!-- input escondido para secretKey -->
  16. <input type="hidden" name="_.secretKey" />
  17. </div>
  18. </j:if>
  19. <script>
  20. (function() {
  21. const checkbox = document.getElementById('mfaEnabledCheckbox');
  22. const container = document.getElementById('mfaSetupContainer');
  23. const qrImage = document.getElementById('qrCodeImage');
  24. const secretInput = document.querySelector('input[name="_.secretKey"]');
  25. function showOrHideMfaSetup() {
  26. if (checkbox.checked) {
  27. container.style.display = 'block';
  28. // Se ainda não tiver QR gerado, buscar do backend
  29. console.log('Image SRC: ' + qrImage.src)
  30. if (!qrImage.src) {
  31. console.log('${rootURL}/mfa-google-auth/generateSecret')
  32. fetch('${rootURL}/mfa-google-auth/generateSecret')
  33. .then(resp => resp.json())
  34. .then(data => {
  35. console.log('${rootURL}/mfa-google-auth/qrcode?secret=' + encodeURIComponent(data.secret))
  36. qrImage.src = '${rootURL}/mfa-google-auth/qrcode?secret=' + encodeURIComponent(data.secret);
  37. secretInput.value = data.secret;
  38. })
  39. .catch(err => {
  40. console.error('Erro ao gerar QR Code:', err);
  41. });
  42. }
  43. } else {
  44. console.log('ERRO __')
  45. container.style.display = 'none';
  46. qrImage.src = '';
  47. secretInput.value = '';
  48. }
  49. }
  50. checkbox.addEventListener('change', () => {
  51. console.log('Checkbox mudou! Estado:', checkbox.checked);
  52. showOrHideMfaSetup();
  53. });
  54. // Ao carregar a página, checar se já estava ativo para mostrar QR e campo
  55. if (checkbox.checked) {
  56. showOrHideMfaSetup();
  57. }
  58. })();
  59. </script>
  60. </j:jelly>