|  |  |  | /* global Whisper, i18n, Signal, passwordUtil */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // eslint-disable-next-line func-names
 | 
					
						
							|  |  |  | (function() { | 
					
						
							|  |  |  |   'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   window.Whisper = window.Whisper || {}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Whisper.SeedDialogView = Whisper.View.extend({ | 
					
						
							|  |  |  |     className: 'loki-dialog seed-dialog modal', | 
					
						
							|  |  |  |     templateName: 'seed-dialog', | 
					
						
							|  |  |  |     initialize(options = {}) { | 
					
						
							|  |  |  |       this.okText = options.okText || i18n('ok'); | 
					
						
							|  |  |  |       this.cancelText = options.cancelText || i18n('cancel'); | 
					
						
							|  |  |  |       this.confirmText = options.confirmText || i18n('confirm'); | 
					
						
							|  |  |  |       this.copyText = options.copyText || i18n('copySeed'); | 
					
						
							|  |  |  |       this.seed = options.seed || '-'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       this.render(); | 
					
						
							|  |  |  |       this.showSeedView(false); | 
					
						
							|  |  |  |       this.initPasswordHash(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       this.$('#password').bind('keyup', event => this.onKeyup(event)); | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     events: { | 
					
						
							|  |  |  |       'click .ok': 'close', | 
					
						
							|  |  |  |       'click .confirm': 'confirmPassword', | 
					
						
							|  |  |  |       'click .copy-seed': 'copySeed', | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     render_attributes() { | 
					
						
							|  |  |  |       return { | 
					
						
							|  |  |  |         passwordViewTitle: i18n('passwordViewTitle'), | 
					
						
							|  |  |  |         seedViewTitle: i18n('seedViewTitle'), | 
					
						
							|  |  |  |         ok: this.okText, | 
					
						
							|  |  |  |         copyText: this.copyText, | 
					
						
							|  |  |  |         confirm: this.confirmText, | 
					
						
							|  |  |  |         cancel: this.cancelText, | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     async initPasswordHash() { | 
					
						
							|  |  |  |       const hash = await Signal.Data.getPasswordHash(); | 
					
						
							|  |  |  |       this.passwordHash = hash; | 
					
						
							|  |  |  |       this.showSeedView(!hash); | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     showSeedView(show) { | 
					
						
							|  |  |  |       const seedView = this.$('.seedView'); | 
					
						
							|  |  |  |       const passwordView = this.$('.passwordView'); | 
					
						
							|  |  |  |       if (show) { | 
					
						
							|  |  |  |         this.$('.seed').html(this.seed); | 
					
						
							|  |  |  |         seedView.show(); | 
					
						
							|  |  |  |         passwordView.hide(); | 
					
						
							|  |  |  |       } else { | 
					
						
							|  |  |  |         this.$('.seed').html(''); | 
					
						
							|  |  |  |         passwordView.show(); | 
					
						
							|  |  |  |         this.$('#password').focus(); | 
					
						
							|  |  |  |         seedView.hide(); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     confirmPassword() { | 
					
						
							|  |  |  |       this.$('.error').html(); | 
					
						
							|  |  |  |       const password = this.$('#password').val(); | 
					
						
							|  |  |  |       if ( | 
					
						
							|  |  |  |         this.passwordHash && | 
					
						
							|  |  |  |         !passwordUtil.matchesHash(password, this.passwordHash) | 
					
						
							|  |  |  |       ) { | 
					
						
							|  |  |  |         this.$('.error').html(`Error: ${i18n('invalidPassword')}`); | 
					
						
							|  |  |  |         return; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       this.showSeedView(true); | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     close() { | 
					
						
							|  |  |  |       this.remove(); | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     copySeed() { | 
					
						
							|  |  |  |       window.clipboard.writeText(this.seed); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       const toast = new Whisper.MessageToastView({ | 
					
						
							|  |  |  |         message: i18n('copiedMnemonic'), | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |       toast.$el.appendTo(this.$el); | 
					
						
							|  |  |  |       toast.render(); | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     onKeyup(event) { | 
					
						
							|  |  |  |       switch (event.key) { | 
					
						
							|  |  |  |         case 'Enter': | 
					
						
							|  |  |  |           this.confirmPassword(); | 
					
						
							|  |  |  |           break; | 
					
						
							|  |  |  |         case 'Escape': | 
					
						
							|  |  |  |         case 'Esc': | 
					
						
							|  |  |  |           this.close(); | 
					
						
							|  |  |  |           break; | 
					
						
							|  |  |  |         default: | 
					
						
							|  |  |  |           break; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | })(); |