Support upload

This commit is contained in:
tom79 2019-06-12 10:04:52 +02:00
parent a407dcc72d
commit e08adc1353
5 changed files with 127 additions and 4 deletions

View File

@ -96,7 +96,6 @@ dependencies {
implementation 'com.elconfidencial.bubbleshowcase:bubbleshowcase:1.3.1'
implementation 'androidx.multidex:multidex:2.0.1'
implementation 'com.google.android.exoplayer:exoplayer:2.9.3'
implementation 'com.github.stom79:android-upload-service:3.4.2-Mastalab'
implementation 'org.apache.poi:poi:3.16'
implementation 'com.github.mabbas007:TagsEditText:1.0.5'
implementation 'com.jaredrummler:material-spinner:1.3.1'
@ -107,6 +106,8 @@ dependencies {
implementation 'ja.burhanrashid52:photoeditor:0.3.3'
implementation 'com.github.yalantis:ucrop:2.2.3'
implementation "net.gotev:uploadservice:$uploadServiceVersion"
implementation "net.gotev:uploadservice-okhttp:$uploadServiceVersion"
implementation "info.guardianproject.netcipher:netcipher:$netCipherVersion"
implementation "info.guardianproject.netcipher:netcipher-okhttp3:$netCipherVersion"
}

View File

@ -37,6 +37,8 @@ import es.dmoral.toasty.Toasty;
import app.fedilab.android.BuildConfig;
import app.fedilab.android.R;
import static app.fedilab.android.helper.Helper.initNetCipher;
/**
* Created by Thomas on 29/04/2017.
* Main application, jobs are launched here.
@ -77,6 +79,7 @@ public class MainApplication extends MultiDexApplication {
}catch (Exception ignored){}
//Initialize upload service
UploadService.NAMESPACE = BuildConfig.APPLICATION_ID;
initNetCipher(this);
Toasty.Config.getInstance()
.setErrorColor(ContextCompat.getColor(getApplicationContext(), R.color.toasty_background))
.setInfoColor(ContextCompat.getColor(getApplicationContext(), R.color.toasty_background))
@ -85,7 +88,7 @@ public class MainApplication extends MultiDexApplication {
.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.toasty_text))
.apply();
Toasty.Config.getInstance().apply();
}
}

View File

@ -51,6 +51,7 @@ import android.text.Html;
import android.text.InputFilter;
import android.text.InputType;
import android.text.TextWatcher;
import android.util.Log;
import android.util.Patterns;
import android.view.LayoutInflater;
import android.view.Menu;
@ -95,6 +96,7 @@ import net.gotev.uploadservice.MultipartUploadRequest;
import net.gotev.uploadservice.ServerResponse;
import net.gotev.uploadservice.UploadInfo;
import net.gotev.uploadservice.UploadNotificationConfig;
import net.gotev.uploadservice.UploadService;
import net.gotev.uploadservice.UploadServiceSingleBroadcastReceiver;
import net.gotev.uploadservice.UploadStatusDelegate;
@ -121,6 +123,7 @@ import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import app.fedilab.android.BuildConfig;
import app.fedilab.android.R;
import app.fedilab.android.asynctasks.PostActionAsyncTask;
import app.fedilab.android.asynctasks.PostStatusAsyncTask;
@ -173,6 +176,8 @@ import es.dmoral.toasty.Toasty;
import static app.fedilab.android.helper.Helper.changeDrawableColor;
import static app.fedilab.android.helper.Helper.countWithEmoji;
import static app.fedilab.android.helper.Helper.initNetCipher;
import static app.fedilab.android.helper.Helper.orbotConnected;
/**
* Created by Thomas on 01/05/2017.
@ -423,7 +428,6 @@ public class TootActivity extends BaseActivity implements UploadStatusDelegate,
else
account = accountReply;
if (MainActivity.social == null) {
//Update the static variable which manages account type

View File

@ -0,0 +1,69 @@
package app.fedilab.android.client;
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
/**
* Enables TLS v1.2 when creating SSLSockets.
* <p/>
* For some reason, android supports TLS v1.2 from API 16, but enables it by
* default only from API 20.
* @link https://developer.android.com/reference/javax/net/ssl/SSLSocket.html
* @see SSLSocketFactory
*/
public class Tls12SocketFactory extends SSLSocketFactory {
private static final String[] TLS_V12_ONLY = {"TLSv1.2"};
final SSLSocketFactory delegate;
public Tls12SocketFactory(SSLSocketFactory base) {
this.delegate = base;
}
@Override
public String[] getDefaultCipherSuites() {
return delegate.getDefaultCipherSuites();
}
@Override
public String[] getSupportedCipherSuites() {
return delegate.getSupportedCipherSuites();
}
@Override
public Socket createSocket(Socket s, String host, int port, boolean autoClose) throws IOException {
return patch(delegate.createSocket(s, host, port, autoClose));
}
@Override
public Socket createSocket(String host, int port) throws IOException, UnknownHostException {
return patch(delegate.createSocket(host, port));
}
@Override
public Socket createSocket(String host, int port, InetAddress localHost, int localPort) throws IOException, UnknownHostException {
return patch(delegate.createSocket(host, port, localHost, localPort));
}
@Override
public Socket createSocket(InetAddress host, int port) throws IOException {
return patch(delegate.createSocket(host, port));
}
@Override
public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort) throws IOException {
return patch(delegate.createSocket(address, port, localAddress, localPort));
}
private Socket patch(Socket s) {
if (s instanceof SSLSocket) {
((SSLSocket) s).setEnabledProtocols(TLS_V12_ONLY);
}
return s;
}
}

View File

@ -129,6 +129,7 @@ import com.tonyodev.fetch2.Request;
import com.tonyodev.fetch2core.DownloadBlock;
import net.gotev.uploadservice.UploadService;
import net.gotev.uploadservice.okhttp.OkHttpStack;
import org.conscrypt.Conscrypt;
import org.jetbrains.annotations.NotNull;
@ -163,9 +164,12 @@ import java.util.Map;
import java.util.Objects;
import java.util.Random;
import java.util.TimeZone;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.net.ssl.SSLContext;
import app.fedilab.android.client.API;
import app.fedilab.android.client.Entities.Account;
import app.fedilab.android.client.Entities.Application;
@ -179,6 +183,7 @@ import app.fedilab.android.client.Entities.Status;
import app.fedilab.android.client.Entities.Tag;
import app.fedilab.android.client.Entities.TagTimeline;
import app.fedilab.android.client.Entities.Version;
import app.fedilab.android.client.Tls12SocketFactory;
import es.dmoral.toasty.Toasty;
import app.fedilab.android.BuildConfig;
import app.fedilab.android.R;
@ -197,7 +202,9 @@ import app.fedilab.android.sqlite.Sqlite;
import info.guardianproject.netcipher.client.StrongBuilder;
import info.guardianproject.netcipher.client.StrongOkHttpClientBuilder;
import info.guardianproject.netcipher.proxy.OrbotHelper;
import okhttp3.ConnectionSpec;
import okhttp3.OkHttpClient;
import okhttp3.TlsVersion;
import static android.content.Context.DOWNLOAD_SERVICE;
import static com.koushikdutta.async.util.StreamUtility.copyStream;
@ -4030,7 +4037,7 @@ public class Helper {
StrongOkHttpClientBuilder.forMaxSecurity(appContext).build(new StrongBuilder.Callback<OkHttpClient>() {
@Override
public void onConnected(OkHttpClient okHttpClient) {
UploadService.HTTP_STACK = new OkHttpStack(okHttpClient);
UploadService.HTTP_STACK = new OkHttpStack(getHttpClient(context));
orbotConnected = true;
Log.i("NetCipherClient", "Connection to orbot established!");
// from now on, you can create upload requests
@ -4060,4 +4067,43 @@ public class Helper {
Log.e("Error", "Error while initializing TOR Proxy OkHttpClient", exc);
}
}
public static OkHttpClient getHttpClient(Context context) {
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder()
.followRedirects(true)
.followSslRedirects(true)
.retryOnConnectionFailure(true)
.connectTimeout(15, TimeUnit.SECONDS)
.writeTimeout(30, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.cache(null);
return enableTls12OnPreLollipop(clientBuilder).build();
}
private static OkHttpClient.Builder enableTls12OnPreLollipop(OkHttpClient.Builder client) {
if (Build.VERSION.SDK_INT < 22) {
try {
SSLContext sc = SSLContext.getInstance("TLSv1.2");
sc.init(null, null, null);
client.sslSocketFactory(new Tls12SocketFactory(sc.getSocketFactory()));
ConnectionSpec cs = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
.tlsVersions(TlsVersion.TLS_1_2)
.build();
List<ConnectionSpec> specs = new ArrayList<>();
specs.add(cs);
specs.add(ConnectionSpec.COMPATIBLE_TLS);
specs.add(ConnectionSpec.CLEARTEXT);
client.connectionSpecs(specs);
} catch (Exception exc) {
Log.e("OkHttpTLSCompat", "Error while setting TLS 1.2", exc);
}
}
return client;
}
}