finalized proxy function

This commit is contained in:
nuclearfog 2020-06-22 23:32:26 +02:00
parent 686c493f56
commit 8c8a07a33a
No known key found for this signature in database
GPG Key ID: ED35E22099354A64
2 changed files with 82 additions and 12 deletions

View File

@ -0,0 +1,79 @@
package org.nuclearfog.twidda.backend.engine;
import org.nuclearfog.twidda.database.GlobalSettings;
import java.io.IOException;
import java.net.Authenticator;
import java.net.InetSocketAddress;
import java.net.PasswordAuthentication;
import java.net.Proxy;
import java.net.ProxySelector;
import java.net.SocketAddress;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
/**
* Creates a https proxy connection for all connections
*/
class ProxySetup extends ProxySelector {
private String proxyHost;
private int proxyPort;
private boolean proxySet;
ProxySetup(GlobalSettings settings) {
proxySet = settings.isProxyServerSet();
if (proxySet) {
proxyHost = settings.getProxyHost();
proxyPort = Integer.parseInt(settings.getProxyPort());
}
if (settings.isProxyLoginSet()) {
Authenticator.setDefault(new ProxyAuthenticator(settings));
} else {
Authenticator.setDefault(null);
}
}
@Override
public List<Proxy> select(URI uri) {
Proxy httpsProxy;
if (proxySet) {
InetSocketAddress socket = new InetSocketAddress(proxyHost, proxyPort);
httpsProxy = new Proxy(Proxy.Type.HTTP, socket);
} else {
httpsProxy = Proxy.NO_PROXY;
}
List<Proxy> result = new ArrayList<>(1);
result.add(httpsProxy);
return result;
}
@Override
public void connectFailed(URI uri, SocketAddress sa, IOException ioe) {
}
/**
* Creates an authenticator for proxy login
*/
class ProxyAuthenticator extends Authenticator {
private String username;
private char[] password;
ProxyAuthenticator(GlobalSettings settings) {
username = settings.getProxyUser();
password = settings.getProxyPass().toCharArray();
}
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
}
}

View File

@ -25,8 +25,7 @@ import java.io.FileInputStream;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.net.InetSocketAddress; import java.net.ProxySelector;
import java.net.Proxy;
import java.net.URL; import java.net.URL;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.LinkedList; import java.util.LinkedList;
@ -93,6 +92,7 @@ public class TwitterEngine {
} else { } else {
twitter = factory.getInstance(); twitter = factory.getInstance();
} }
ProxySelector.setDefault(new ProxySetup(settings));
} }
@ -1051,17 +1051,8 @@ public class TwitterEngine {
@Nullable @Nullable
public Bitmap getImage(String link) throws EngineException { public Bitmap getImage(String link) throws EngineException {
try { try {
Proxy proxy;
URL url = new URL(link); URL url = new URL(link);
if (settings.isProxyServerSet()) { InputStream stream = url.openConnection().getInputStream();
String proxyAddress = settings.getProxyHost();
int proxyPort = Integer.parseInt(settings.getProxyPort());
InetSocketAddress socket = new InetSocketAddress(proxyAddress, proxyPort);
proxy = new Proxy(Proxy.Type.HTTP, socket);
} else {
proxy = Proxy.NO_PROXY;
}
InputStream stream = url.openConnection(proxy).getInputStream();
return BitmapFactory.decodeStream(stream); return BitmapFactory.decodeStream(stream);
} catch (IOException err) { } catch (IOException err) {
throw new EngineException(EngineException.InternalErrorType.BITMAP_FAILURE); throw new EngineException(EngineException.InternalErrorType.BITMAP_FAILURE);