transform aesgcm:// links back to https:// before connecting through Tor
fixes #2444
This commit is contained in:
		
							parent
							
								
									1ac0c2f453
								
							
						
					
					
						commit
						6c34763d32
					
				| @ -70,9 +70,9 @@ public class HttpDownloadConnection implements Transferable { | ||||
| 		this.message.setTransferable(this); | ||||
| 		try { | ||||
| 			if (message.hasFileOnRemoteHost()) { | ||||
| 				mUrl = message.getFileParams().url; | ||||
| 				mUrl = CryptoHelper.toHttpsUrl(message.getFileParams().url); | ||||
| 			} else { | ||||
| 				mUrl = new URL(message.getBody()); | ||||
| 				mUrl = CryptoHelper.toHttpsUrl(new URL(message.getBody())); | ||||
| 			} | ||||
| 			String[] parts = mUrl.getPath().toLowerCase().split("\\."); | ||||
| 			String lastPart = parts.length >= 1 ? parts[parts.length - 1] : null; | ||||
| @ -91,8 +91,8 @@ public class HttpDownloadConnection implements Transferable { | ||||
| 			} | ||||
| 			message.setRelativeFilePath(message.getUuid() + "." + extension); | ||||
| 			this.file = mXmppConnectionService.getFileBackend().getFile(message, false); | ||||
| 			String reference = mUrl.getRef(); | ||||
| 			if (reference != null && reference.length() == 96) { | ||||
| 			final String reference = mUrl.getRef(); | ||||
| 			if (reference != null && reference.matches("([A-Fa-f0-9]{2}){48}")) { | ||||
| 				this.file.setKeyAndIv(CryptoHelper.hexToBytes(reference)); | ||||
| 			} | ||||
| 
 | ||||
| @ -332,7 +332,14 @@ public class HttpDownloadConnection implements Transferable { | ||||
| 
 | ||||
| 		private void updateImageBounds() { | ||||
| 			message.setType(Message.TYPE_FILE); | ||||
| 			mXmppConnectionService.getFileBackend().updateFileParams(message, mUrl); | ||||
| 			final URL url; | ||||
| 			final String ref = mUrl.getRef(); | ||||
| 			if (ref != null && ref.matches("([A-Fa-f0-9]{2}){48}")) { | ||||
| 				url = CryptoHelper.toAesGcmUrl(mUrl); | ||||
| 			} else { | ||||
| 				url = mUrl; | ||||
| 			} | ||||
| 			mXmppConnectionService.getFileBackend().updateFileParams(message, url); | ||||
| 			mXmppConnectionService.updateMessage(message); | ||||
| 		} | ||||
| 
 | ||||
|  | ||||
| @ -29,6 +29,7 @@ import eu.siacs.conversations.Config; | ||||
| import eu.siacs.conversations.R; | ||||
| import eu.siacs.conversations.entities.Account; | ||||
| import eu.siacs.conversations.entities.Message; | ||||
| import eu.siacs.conversations.http.AesGcmURLStreamHandler; | ||||
| import eu.siacs.conversations.xmpp.jid.InvalidJidException; | ||||
| import eu.siacs.conversations.xmpp.jid.Jid; | ||||
| 
 | ||||
| @ -238,7 +239,18 @@ public final class CryptoHelper { | ||||
| 			return url; | ||||
| 		} | ||||
| 		try { | ||||
| 			return new URL("aesgcm"+url.toString().substring(url.getProtocol().length())); | ||||
| 			return new URL(AesGcmURLStreamHandler.PROTOCOL_NAME+url.toString().substring(url.getProtocol().length())); | ||||
| 		} catch (MalformedURLException e) { | ||||
| 			return url; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public static URL toHttpsUrl(URL url) { | ||||
| 		if (!url.getProtocol().equalsIgnoreCase(AesGcmURLStreamHandler.PROTOCOL_NAME)) { | ||||
| 			return url; | ||||
| 		} | ||||
| 		try { | ||||
| 			return new URL("https"+url.toString().substring(url.getProtocol().length())); | ||||
| 		} catch (MalformedURLException e) { | ||||
| 			return url; | ||||
| 		} | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Daniel Gultsch
						Daniel Gultsch