导航菜单

页面标题

页面副标题

Plus 12 v10.13.1.1 - GoogleWebTranslator.java 源代码

正在查看: Plus 12 v10.13.1.1 应用的 GoogleWebTranslator.java JAVA 源代码文件

本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。


package org.telegram.messenger.translator;

import android.os.Build;
import java.io.IOException;
import java.nio.charset.Charset;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.TimeUnit;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import okhttp3.CipherSuite;
import okhttp3.ConnectionSpec;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.TlsVersion;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONTokener;

public class GoogleWebTranslator {
    public static OkHttpClient HTTP_CLIENT;
    public static OkHttpClient HTTP_CLIENT_OLD;
    public static final String UA;
    public static GoogleWebTranslator instance;
    public static final String[] userAgents;
    public String fromLang;
    public final TrustManager[] trustAllCerts = {new X509TrustManager(this) {
        @Override
        public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
        }

        @Override
        public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
        }

        @Override
        public X509Certificate[] getAcceptedIssuers() {
            return new X509Certificate[0];
        }
    }};

    public static boolean lambda$getOkHttpClient$0(String str, SSLSession sSLSession) {
        return true;
    }

    static {
        String[] strArr = {"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36"};
        userAgents = strArr;
        double random = Math.random();
        double length = strArr.length - 1;
        Double.isNaN(length);
        UA = strArr[(int) Math.round(random * length)];
    }

    public static GoogleWebTranslator getInstance() {
        if (instance == null) {
            synchronized (GoogleWebTranslator.class) {
                if (instance == null) {
                    instance = new GoogleWebTranslator();
                }
            }
        }
        return instance;
    }

    public static String encodeURIComponent(String str) {
        if (str == null) {
            return null;
        }
        byte[] bytes = str.getBytes(Charset.defaultCharset());
        StringBuilder sb = new StringBuilder(bytes.length);
        for (byte b : bytes) {
            if (b < 97 ? b < 65 ? b < 48 ? b == 45 || b == 46 : b <= 57 : b <= 90 || b == 95 : b <= 122 || b == 126) {
                sb.append((char) b);
            } else {
                sb.append('%');
                sb.append("0123456789ABCDEF".charAt((b >> 4) & 15));
                sb.append("0123456789ABCDEF".charAt(b & 15));
            }
        }
        return sb.toString();
    }

    public String translate(String query, String tl) throws IOException {
        return translate(query, "auto", tl);
    }

    public String translate(String query, String sl, String tl) throws IOException {
        String translateImpl = translateImpl(query, sl, tl);
        if (translateImpl == null) {
            translateImpl = translateImpl(query, sl, tl);
        }
        if (translateImpl != null) {
            return translateImpl;
        }
        throw new IOException("Translation failed");
    }

    public OkHttpClient getOkHttpClient() throws IOException {
        if (Build.VERSION.SDK_INT < 21) {
            if (HTTP_CLIENT_OLD == null) {
                ConnectionSpec.Builder tlsVersions = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS).tlsVersions(TlsVersion.TLS_1_0, TlsVersion.TLS_1_1, TlsVersion.TLS_1_2, TlsVersion.SSL_3_0);
                CipherSuite cipherSuite = CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256;
                ConnectionSpec build = tlsVersions.cipherSuites(CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, cipherSuite, CipherSuite.TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, cipherSuite).build();
                try {
                    SSLContext sSLContext = SSLContext.getInstance("SSL");
                    sSLContext.init(null, this.trustAllCerts, new SecureRandom());
                    SSLSocketFactory socketFactory = sSLContext.getSocketFactory();
                    OkHttpClient.Builder builder = new OkHttpClient.Builder();
                    TimeUnit timeUnit = TimeUnit.SECONDS;
                    HTTP_CLIENT_OLD = builder.connectTimeout(6L, timeUnit).readTimeout(10L, timeUnit).writeTimeout(10L, timeUnit).connectionSpecs(Collections.singletonList(build)).sslSocketFactory(socketFactory, (X509TrustManager) this.trustAllCerts[0]).hostnameVerifier(new HostnameVerifier() {
                        @Override
                        public final boolean verify(String str, SSLSession sSLSession) {
                            boolean lambda$getOkHttpClient$0;
                            lambda$getOkHttpClient$0 = GoogleWebTranslator.lambda$getOkHttpClient$0(str, sSLSession);
                            return lambda$getOkHttpClient$0;
                        }
                    }).build();
                } catch (IllegalStateException e) {
                    e.printStackTrace();
                    throw new IOException(e);
                } catch (NoClassDefFoundError e2) {
                    e2.printStackTrace();
                    throw new IOException(e2);
                } catch (KeyManagementException e3) {
                    e3.printStackTrace();
                    throw new IOException(e3);
                } catch (NoSuchAlgorithmException e4) {
                    e4.printStackTrace();
                    throw new IOException(e4);
                }
            }
            return HTTP_CLIENT_OLD;
        }
        if (HTTP_CLIENT == null) {
            OkHttpClient.Builder builder2 = new OkHttpClient.Builder();
            TimeUnit timeUnit2 = TimeUnit.SECONDS;
            HTTP_CLIENT = builder2.connectTimeout(6L, timeUnit2).readTimeout(10L, timeUnit2).writeTimeout(10L, timeUnit2).build();
        }
        return HTTP_CLIENT;
    }

    public final String translateImpl(String query, String sl, String tl) throws IOException {
        Response execute = getOkHttpClient().newCall(new Request.Builder().url("https://translate.google.com/translate_a/single?client=gtx&dt=t&sl=" + sl + "&tl=" + tl + "&q=" + encodeURIComponent(query)).addHeader("User-Agent", UA).addHeader("X-Requested-With", "XMLHttpRequest").build()).execute();
        if (execute.isSuccessful()) {
            try {
                return getResult(execute.body().string());
            } catch (JSONException e) {
                throw new IOException(e);
            }
        }
        if (execute.code() == 403) {
            return null;
        }
        if (execute.code() == 413) {
            throw new IOException("Text too Large");
        }
        throw new IOException("HTTP response code: " + execute.code());
    }

    public final String getResult(String string) throws JSONException {
        try {
            List asList = Arrays.asList(string.split(","));
            if (!asList.isEmpty()) {
                String str = (String) asList.get(asList.size() - 1);
                String substring = str.substring(str.indexOf(34) + 1);
                this.fromLang = substring.substring(0, substring.indexOf(34));
            }
        } catch (Exception e) {
            this.fromLang = null;
            e.printStackTrace();
        }
        StringBuilder sb = new StringBuilder();
        JSONArray jSONArray = new JSONArray(new JSONTokener(string)).getJSONArray(0);
        for (int i = 0; i < jSONArray.length(); i++) {
            sb.append(jSONArray.getJSONArray(i).getString(0));
        }
        return sb.toString();
    }
}