|
50 | 50 | const inputs = {
|
51 | 51 | registrationCode: document.querySelector('#registration-code'),
|
52 | 52 | seedPassphrase: document.querySelector('#seed-passphrase'),
|
| 53 | + confirmPassphrase: document.querySelector('#confirm-passphrase'), |
53 | 54 | email: document.querySelector('#email'),
|
54 | 55 | password: document.querySelector('#password'),
|
55 | 56 | passwordCheck: document.querySelector('#password-check'),
|
|
61 | 62 | emailInputArea: document.querySelector('#email-form-item'),
|
62 | 63 | registrationCodeInputArea: document.querySelector('#registration-code-form-item'),
|
63 | 64 | seedPassphraseInputArea: document.querySelector('#seed-passphrase-form-item'),
|
| 65 | + confirmPassphraseInputArea: document.querySelector('#confirm-passphrase-form-item'), |
64 | 66 | emailReadOnly: document.querySelector('#email-read-only'),
|
65 | 67 | passwordInputArea: document.querySelector('#password-form-item'),
|
66 | 68 | passwordCheckInputArea: document.querySelector('#password-check-form-item'),
|
|
73 | 75 | const errorMessages = {
|
74 | 76 | missingFields: 'Please complete missing fields.',
|
75 | 77 | seedPassphrase: 'Your passphrase needs to be at least 20 characters in length',
|
| 78 | + confirmPassphrase: 'Passphrases do not match', |
76 | 79 | registrationCode: 'Invalid code',
|
77 | 80 | email: 'Invalid email format',
|
78 | 81 | password: 'Your password needs to be at least 8 characters in length',
|
|
88 | 91 |
|
89 | 92 | // global variable used to pass seed passphrase between steps 2 and 3
|
90 | 93 | let seedPassphrase
|
| 94 | + let confirmPassphrase |
91 | 95 |
|
92 | 96 | /** Actions executed at button click
|
93 | 97 | * ======================================
|
|
124 | 128 | return
|
125 | 129 | }
|
126 | 130 | seedPassphrase = inputs.seedPassphrase.value
|
| 131 | + confirmPassphrase = inputs.confirmPassphrase.value |
127 | 132 |
|
128 | 133 | updateUiStep(3)
|
129 | 134 | updateProgressBar(2)
|
|
247 | 252 | buttons.genSeed.disabled = true
|
248 | 253 | buttons.genSeed.innerHTML = 'Saved Seed & Key Files'
|
249 | 254 | verifySeedDownloadComplete(downloadSeedTracker)
|
250 |
| - }, 2000) |
| 255 | + }, 2000) |
251 | 256 | },
|
252 | 257 | download: async () => {
|
253 | 258 | /* Communicate visually that something is happening in the background */
|
|
414 | 419 | /* Bind input actions to inputArea actions */
|
415 | 420 | inlineVariables.registrationCodeInputArea.onclick = e => { inputs.registrationCode.focus(); return click.activateInput(e) }
|
416 | 421 | inlineVariables.seedPassphraseInputArea.onclick = e => { inputs.seedPassphrase.focus(); return click.activateInput(e) }
|
| 422 | + inlineVariables.confirmPassphraseInputArea.onclick = e => { inputs.confirmPassphrase.focus(); return click.activateInput(e) } |
417 | 423 | inlineVariables.emailInputArea.onclick = e => { inputs.email.focus(); return click.activateInput(e) }
|
418 | 424 | inlineVariables.passwordInputArea.onclick = e => { inputs.password.focus(); return click.activateInput(e) }
|
419 | 425 | inlineVariables.passwordCheckInputArea.onclick = e => { inputs.passwordCheck.focus(); return click.activateInput(e) }
|
420 | 426 | /* Bind actions to inputs */
|
421 | 427 | inputs.registrationCode.onfocus = click.activateInput
|
422 | 428 | inputs.seedPassphrase.onfocus = click.activateInput
|
| 429 | + inputs.confirmPassphrase.onfocus = click.activateInput |
423 | 430 | inputs.email.onfocus = click.activateInput
|
424 | 431 | inputs.password.onfocus = click.activateInput
|
425 | 432 | inputs.passwordCheck.onfocus = click.activateInput
|
|
528 | 535 | // with an invalid registration code. The purpose is simply to prevent users from wasting time setting up a
|
529 | 536 | // HoloPort with the wrong code.
|
530 | 537 | const verifyRegistrationCode = async ({ registration_code, email }) => {
|
531 |
| - |
532 | 538 | const response = await fetch(`${MEMBRANE_PROOF_SERVICE_URL}/registration/api/v1/verify-registration-code`,
|
533 | 539 | {
|
534 | 540 | method: 'POST',
|
|
683 | 689 | */
|
684 | 690 | const resetFields = (inputElements) => {
|
685 | 691 | inlineVariables.formErrorMessage.innerHTML = ''
|
| 692 | + |
686 | 693 | for (let inputElement of inputElements) {
|
687 | 694 | inputElement.classList.remove('error-red')
|
688 | 695 | document.querySelector(`#${inputElement.id}-error-message`).innerHTML = ''
|
|
766 | 773 | return valid
|
767 | 774 | }
|
768 | 775 | const confirmValidPassPhrase = () => {
|
769 |
| - const inputElements = Object.values({ seedPassphrase: inputs.seedPassphrase }) |
| 776 | + const inputElements = Object.values({ seedPassphrase: inputs.seedPassphrase, confirmPassphrase: inputs.confirmPassphrase }) |
770 | 777 | resetFields(inputElements)
|
| 778 | + |
771 | 779 | if (!inputs.seedPassphrase.value) {
|
772 | 780 | const missingFields = inputElements.filter(inputs => !inputs.value)
|
773 | 781 | renderInputError(errorMessages.missingFields, missingFields)
|
774 | 782 | } else if (!validatePassphrae(inputs.seedPassphrase.value)) {
|
775 | 783 | renderInputError(errorMessages.seedPassphrase, [inputs.seedPassphrase])
|
776 |
| - } else return true |
| 784 | + } else if (inputs.seedPassphrase.value !== inputs.confirmPassphrase.value) { |
| 785 | + renderInputError(errorMessages.confirmPassphrase, [inputs.confirmPassphrase]) |
| 786 | + } else { |
| 787 | + return true |
| 788 | + } |
777 | 789 | }
|
778 | 790 |
|
779 | 791 | })()
|
0 commit comments