You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			209 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			JavaScript
		
	
			
		
		
	
	
			209 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			JavaScript
		
	
| /* vim: ts=4:sw=4
 | |
|  *
 | |
|  * This program is free software: you can redistribute it and/or modify
 | |
|  * it under the terms of the GNU Lesser General Public License as published by
 | |
|  * the Free Software Foundation, either version 3 of the License, or
 | |
|  * (at your option) any later version.
 | |
|  *
 | |
|  * This program is distributed in the hope that it will be useful,
 | |
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
|  * GNU Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public License
 | |
|  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| ;(function() {
 | |
|     function validateNumber() {
 | |
|         try {
 | |
|             var regionCode = $('#regionCode').val();
 | |
|             var number     = $('#number').val();
 | |
| 
 | |
|             var parsedNumber = libphonenumber.util.verifyNumber(number, regionCode);
 | |
| 
 | |
|             $('#regionCode').val(libphonenumber.util.getRegionCodeForNumber(parsedNumber));
 | |
|             $('#number-container').removeClass('invalid');
 | |
|             $('#number-container').addClass('valid');
 | |
|             $('#request-sms, #request-voice').removeAttr('disabled');
 | |
|             return parsedNumber;
 | |
|         } catch(e) {
 | |
|             $('#number-container').removeClass('valid');
 | |
|             $('#request-sms, #request-voice').prop('disabled', 'disabled');
 | |
|         }
 | |
|     };
 | |
| 
 | |
|     function validateCode() {
 | |
|         var verificationCode = $('#code').val().replace(/\D/g, '');
 | |
|         if (verificationCode.length == 6) {
 | |
|             return verificationCode;
 | |
|         }
 | |
|     };
 | |
| 
 | |
|     function displayError(error) {
 | |
|         $('#error').hide().text(error).fadeIn();
 | |
|     };
 | |
| 
 | |
|     textsecure.registerOnLoadFunction(function() {
 | |
|         $(function() {
 | |
|             if (isRegistrationDone()) {
 | |
|                 $('#complete-number').text(textsecure.utils.unencodeNumber(textsecure.storage.getUnencrypted("number_id"))[0]);//TODO: no
 | |
|                 $('#setup-complete').show();
 | |
|             } else {
 | |
|                 $('#choose-setup').show();
 | |
|                 $('#number').keyup(validateNumber);
 | |
|                 $('#regionCode').change(validateNumber);
 | |
| 
 | |
|                 $.each(libphonenumber.util.getAllRegionCodes(), function (regionCode, countryName) {
 | |
|                     $('#regionCode').append(
 | |
|                         $('<option>', { value: regionCode, text: countryName })
 | |
|                     );
 | |
|                 });
 | |
| 
 | |
|                 $('#code').on('change', function() {
 | |
|                     if (!validateCode())
 | |
|                         $('#code').addClass('invalid');
 | |
|                     else
 | |
|                         $('#code').removeClass('invalid');
 | |
|                 });
 | |
| 
 | |
|                 $('#request-voice').click(function() {
 | |
|                     var number = validateNumber();
 | |
|                     if (number) {
 | |
|                         textsecure.api.requestVerificationVoice(number).catch(displayError);
 | |
|                         $('#step2').fadeIn();
 | |
|                     } else {
 | |
|                         $('#number-container').addClass('invalid');
 | |
|                     }
 | |
|                 });
 | |
| 
 | |
|                 $('#request-sms').click(function() {
 | |
|                     var number = validateNumber();
 | |
|                     if (number) {
 | |
|                         textsecure.api.requestVerificationSMS(number).catch(displayError);
 | |
|                         $('#step2').fadeIn();
 | |
|                     } else {
 | |
|                         $('#number-container').addClass('invalid');
 | |
|                     }
 | |
|                 });
 | |
| 
 | |
|                 $('#new-account').click(function(){
 | |
|                     $('#choose-setup').fadeOut(function() {
 | |
|                         $('#single-device').fadeIn();
 | |
|                     });
 | |
| 
 | |
|                     $('#single-device .back').click(function() {
 | |
|                         $('#single-device').fadeOut(function() {
 | |
|                             $('#choose-setup').fadeIn();
 | |
|                             $('#number').removeClass('invalid');
 | |
|                         });
 | |
|                     });
 | |
| 
 | |
|                     $('#single-device form').submit(function(e) {
 | |
|                         e.preventDefault();
 | |
|                         $('#error').hide();
 | |
|                         var number = validateNumber();
 | |
|                         var verificationCode = validateCode();
 | |
|                         if (number && verificationCode) {
 | |
|                             $('#verify1').hide();
 | |
|                             $('#verify2done').text('');
 | |
|                             $('#verify3done').text('');
 | |
|                             $('#verify4done').text('');
 | |
|                             $('#verify5').hide();
 | |
|                             $('#verify').show();
 | |
| 
 | |
|                             textsecure.registerSingleDevice(number, verificationCode, function(step) {
 | |
|                                 switch(step) {
 | |
|                                 case 1:
 | |
|                                     $('#verify2done').text('done');
 | |
|                                     break;
 | |
|                                 case 2:
 | |
|                                     $('#verify3done').text('done');
 | |
|                                     break;
 | |
|                                 case 3:
 | |
|                                     $('#complete-number').text(number);
 | |
|                                     $('#verify').hide();
 | |
|                                     $('#setup-complete').show();
 | |
|                                     registrationDone();
 | |
|                                 }
 | |
|                             }).catch(function(error) {
 | |
|                                 //TODO: No alerts...
 | |
|                                 if (error.humanError)
 | |
|                                     displayError(error.humanError);
 | |
|                                 else
 | |
|                                     displayError(error); //XXX
 | |
|                             });
 | |
|                         }
 | |
|                     });
 | |
|                 });
 | |
| 
 | |
|                 $('#new-device').click(function(){
 | |
|                     $('#choose-setup').fadeOut(function() {
 | |
|                         $('#multi-device').fadeIn();
 | |
|                     });
 | |
| 
 | |
|                     $('#multi-device .back').click(function() {
 | |
|                         $('#multi-device').fadeOut(function() {
 | |
|                             $('#choose-setup').fadeIn();
 | |
|                             $('#number').removeClass('invalid');
 | |
|                         });
 | |
|                     });
 | |
| 
 | |
|                     $('#multi-device .status').text("Connecting...");
 | |
|                     $('#setup-qr').html('');
 | |
|                     textsecure.crypto.prepareTempWebsocket().then(function(cryptoInfo) {
 | |
|                         var qrCode = new QRCode(document.getElementById('setup-qr'));
 | |
|                         var socket = textsecure.api.getTempWebsocket();
 | |
| 
 | |
|                         socket.onmessage = function(message) {
 | |
|                             if (message.uuid) {
 | |
|                                 qrCode.makeCode('textsecure-device-init:/' +
 | |
|                                                 '?channel_uuid=' + message.uuid +
 | |
|                                                 '&channel_server=' + textsecure.api.relay +
 | |
|                                                 '&publicKey=' + btoa(getString(cryptoInfo.publicKey)));
 | |
|                                 $('img').removeAttr('style');
 | |
|                                 $('#multi-device .status').text("Use your phone to scan the QR code.")
 | |
|                             } else {
 | |
|                                 $('#init-setup').hide();
 | |
|                                 $('#verify1done').text('');
 | |
|                                 $('#verify2done').text('');
 | |
|                                 $('#verify3done').text('');
 | |
|                                 $('#verify4done').text('');
 | |
|                                 $('#verify5done').text('');
 | |
|                                 $('#verify').show();
 | |
| 
 | |
| 
 | |
|                                 textsecure.registerSecondDevice(cryptoInfo, message.message, function(step) {
 | |
|                                     switch(step) {
 | |
|                                     case 1:
 | |
|                                         $('#verify1done').text('done');
 | |
|                                         break;
 | |
|                                     case 2:
 | |
|                                         $('#verify2done').text('done');
 | |
|                                         break;
 | |
|                                     case 3:
 | |
|                                         $('#verify3done').text('done');
 | |
|                                         break;
 | |
|                                     case 4:
 | |
|                                         //TODO: User needs to verify number before we continue
 | |
|                                         $('#complete-number').text(parsedNumber);
 | |
|                                         $('#verify4done').text('done');
 | |
|                                     case 5:
 | |
|                                         $('#verify').hide();
 | |
|                                         $('#setup-complete').show();
 | |
|                                         registrationDone();
 | |
|                                     }
 | |
|                                 });
 | |
|                             }
 | |
|                         };
 | |
| 
 | |
|                         socket.ondisconnect = function() {
 | |
|                             $('#multi-device .status').text("The push server disconnected, please wait while we reconnect...");
 | |
|                         };
 | |
|                     });
 | |
|                 });
 | |
|             }
 | |
|         });
 | |
|     });
 | |
| })();
 |