Fix attachment ids
Parse attachment ids out of the attachment pointer url and return them as strings because the copy parsed by JSON suffers a loss of precision. Convert them to and from the format expected by the protobuf using facilities from decodeIO.Long.
This commit is contained in:
		
					parent
					
						
							
								eebb14599f
							
						
					
				
			
			
				commit
				
					
						211129475c
					
				
			
		
					 3 changed files with 26 additions and 21 deletions
				
			
		
							
								
								
									
										19
									
								
								js/api.js
									
										
									
									
									
								
							
							
						
						
									
										19
									
								
								js/api.js
									
										
									
									
									
								
							|  | @ -27,6 +27,7 @@ window.textsecure.api = function() { | |||
|     // Staging server
 | ||||
|     var URL_BASE    = "https://textsecure-service-staging.whispersystems.org"; | ||||
|     self.relay      = "textsecure-service-staging.whispersystems.org"; | ||||
|     var ATTACHMENT_HOST = "whispersystems-textsecure-attachments-staging.s3.amazonaws.com" | ||||
| 
 | ||||
|     // This is the real server
 | ||||
|     //var URL_BASE  = "https://textsecure-service.whispersystems.org";
 | ||||
|  | @ -253,6 +254,7 @@ window.textsecure.api = function() { | |||
|         }); | ||||
|     }; | ||||
| 
 | ||||
|     var id_regex = RegExp( "^https:\/\/" + ATTACHMENT_HOST + "\/(\\d+)\?"); | ||||
|     self.putAttachment = function(encryptedBin) { | ||||
|         return doAjax({ | ||||
|             call                : 'attachment', | ||||
|  | @ -262,15 +264,18 @@ window.textsecure.api = function() { | |||
|             return new Promise(function(resolve, reject) { | ||||
|                 $.ajax(response.location, { | ||||
|                     type    : "PUT", | ||||
|                     headers: { | ||||
|                         "Content-Type": "application/octet-stream" | ||||
|                     }, | ||||
|                     data: encryptedBin, | ||||
| 
 | ||||
|                     headers : {"Content-Type" : "application/octet-stream"}, | ||||
|                     data    : encryptedBin, | ||||
|                     success : function() { | ||||
|                                         resolve(response.id); | ||||
|                         try { | ||||
|                             // Parse the id as a string from the location url
 | ||||
|                             // (workaround for ids too large for Javascript numbers)
 | ||||
|                             var id = response.location.match(id_regex)[1]; | ||||
|                             resolve(id); | ||||
|                         } catch(e) { | ||||
|                             reject(e); | ||||
|                         } | ||||
|                     }, | ||||
| 
 | ||||
|                     error   : function(jqXHR, textStatus, errorThrown) { | ||||
|                         var code = jqXHR.status; | ||||
|                         if (code > 999 || code < 100) | ||||
|  |  | |||
|  | @ -593,7 +593,7 @@ window.textsecure.subscribeToPush = function(message_callback) { | |||
|                     throw new Error("Unknown flags in message"); | ||||
| 
 | ||||
|                 var handleAttachment = function(attachment) { | ||||
|                     return textsecure.api.getAttachment(attachment.id).then(function(encryptedBin) { | ||||
|                     return textsecure.api.getAttachment(attachment.id.toString()).then(function(encryptedBin) { | ||||
|                         return textsecure.crypto.decryptAttachment(encryptedBin, toArrayBuffer(attachment.key)).then(function(decryptedBin) { | ||||
|                             attachment.decrypted = decryptedBin; | ||||
|                         }); | ||||
|  |  | |||
|  | @ -200,7 +200,7 @@ window.textsecure.messaging = function() { | |||
| 		var iv = textsecure.crypto.getRandomBytes(16); | ||||
| 		return textsecure.crypto.encryptAttachment(attachment.data, proto.key, iv).then(function(encryptedBin) { | ||||
| 			return textsecure.api.putAttachment(encryptedBin).then(function(id) { | ||||
| 				proto.id = id; | ||||
| 				proto.id = dcodeIO.Long.fromString(id); | ||||
| 				proto.contentType = attachment.contentType; | ||||
| 				return proto; | ||||
| 			}); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 lilia
				lilia