signal-desktop/ts/views/standalone_registration_view.ts
2021-09-17 14:27:53 -04:00

117 lines
3.1 KiB
TypeScript

// Copyright 2017-2021 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import * as log from '../logging/log';
import { PhoneInputView } from './phone_input_view';
window.Whisper = window.Whisper || {};
const { Whisper } = window;
export const StandaloneRegistrationView = Whisper.View.extend({
template: () => $('#standalone').html(),
className: 'full-screen-flow',
initialize() {
window.readyForUpdates();
this.accountManager = window.getAccountManager();
this.render();
const number = window.textsecure.storage.user.getNumber();
if (number) {
this.$('input.number').val(number);
}
this.phoneView = new PhoneInputView({
el: this.$('#phone-number-input'),
});
this.$('#error').hide();
},
events: {
'validation input.number': 'onValidation',
'click #request-voice': 'requestVoice',
'click #request-sms': 'requestSMSVerification',
'change #code': 'onChangeCode',
'click #verifyCode': 'verifyCode',
},
getVerificationCode() {
const codeHTML = $('#code').val();
if (!codeHTML) {
return;
}
return String(codeHTML).replace(/\D+/g, '');
},
async verifyCode() {
const number = this.phoneView.validateNumber();
const verificationCode = this.getVerificationCode();
try {
await this.accountManager.registerSingleDevice(number, verificationCode);
this.$el.trigger('openInbox');
} catch (err) {
this.log(err);
}
},
log(s: Error) {
log.info(s);
this.$('#status').text(s);
},
validateCode() {
const verificationCode = this.getVerificationCode();
if (verificationCode.length === 6) {
return verificationCode;
}
return null;
},
displayError(error: Error) {
this.$('#error').hide().text(error).addClass('in').fadeIn();
},
onValidation() {
if (this.$('#number-container').hasClass('valid')) {
this.$('#request-sms, #request-voice').removeAttr('disabled');
} else {
this.$('#request-sms, #request-voice').prop('disabled', 'disabled');
}
},
onChangeCode() {
if (!this.validateCode()) {
this.$('#code').addClass('invalid');
} else {
this.$('#code').removeClass('invalid');
}
},
async requestVoice() {
window.removeSetupMenuItems();
this.$('#error').hide();
const number = this.phoneView.validateNumber();
if (number) {
this.$('#step2').addClass('in').fadeIn();
try {
await this.accountManager.requestVoiceVerification(number);
} catch (err) {
this.displayError(err);
}
} else {
this.$('#number-container').addClass('invalid');
}
},
async requestSMSVerification() {
window.removeSetupMenuItems();
$('#error').hide();
const number = this.phoneView.validateNumber();
if (number) {
this.$('#step2').addClass('in').fadeIn();
try {
await this.accountManager.requestSMSVerification(number);
} catch (err) {
this.displayError(err);
}
} else {
this.$('#number-container').addClass('invalid');
}
},
});
Whisper.StandaloneRegistrationView = StandaloneRegistrationView;