118 lines
3.1 KiB
TypeScript
118 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;
|