翰林优商.apk(点击下载) / FacebookHandle.java


package com.androidquery.auth;

import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.pm.Signature;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.webkit.CookieManager;
import android.webkit.CookieSyncManager;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import com.androidquery.AQuery;
import com.androidquery.WebDialog;
import com.androidquery.callback.AbstractAjaxCallback;
import com.androidquery.callback.AjaxCallback;
import com.androidquery.callback.AjaxStatus;
import com.androidquery.util.AQUtility;
import com.baidu.idl.face.api.manager.LogicConst;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Arrays;
import java.util.HashSet;
import org.json.JSONObject;

public class FacebookHandle extends AccountHandle {
    private static final String CANCEL_URI = "fbconnect:cancel";
    public static final String FB_APP_SIGNATURE = "30820268308201d102044a9c4610300d06092a864886f70d0101040500307a310b3009060355040613025553310b3009060355040813024341311230100603550407130950616c6f20416c746f31183016060355040a130f46616365626f6f6b204d6f62696c653111300f060355040b130846616365626f6f6b311d301b0603550403131446616365626f6f6b20436f72706f726174696f6e3020170d3039303833313231353231365a180f32303530303932353231353231365a307a310b3009060355040613025553310b3009060355040813024341311230100603550407130950616c6f20416c746f31183016060355040a130f46616365626f6f6b204d6f62696c653111300f060355040b130846616365626f6f6b311d301b0603550403131446616365626f6f6b20436f72706f726174696f6e30819f300d06092a864886f70d010101050003818d0030818902818100c207d51df8eb8c97d93ba0c8c1002c928fab00dc1b42fca5e66e99cc3023ed2d214d822bc59e8e35ddcf5f44c7ae8ade50d7e0c434f500e6c131f4a2834f987fc46406115de2018ebbb0d5a3c261bd97581ccfef76afc7135a6d59e8855ecd7eacc8f8737e794c60a761c536b72b11fac8e603f5da1a2d54aa103b8a13c0dbc10203010001300d06092a864886f70d0101040500038181005ee9be8bcbb250648d3b741290a82a1c9dc2e76a0af2f2228f1d9f9c4007529c446a70175c5a900d5141812866db46be6559e2141616483998211f4a673149fb2232a10d247663b26a9031e15f84bc1c74d141ff98a02d76f85b2c8ab2571b6469b232d8e768a7f7ca04f7abe4a775615916c07940656b58717457b42bd928a2";
    private static final String FB_PERMISSION = "aq.fb.permission";
    private static final String FB_TOKEN = "aq.fb.token";
    private static final String OAUTH_ENDPOINT = "https://graph.facebook.com/oauth/authorize";
    private static final String REDIRECT_URI = "https://www.facebook.com/connect/login_success.html";
    private static Boolean hasSSO;
    private Activity act;
    private String appId;
    private WebDialog dialog;
    private boolean first;
    private String message;
    private String permissions;
    private int requestId;
    private boolean sso;
    private String token;

    /* access modifiers changed from: protected */
    public void authenticated(String str) {
    }

    public FacebookHandle(Activity activity, String str, String str2) {
        this(activity, str, str2, null);
    }

    public FacebookHandle(Activity activity, String str, String str2, String str3) {
        this.appId = str;
        this.act = activity;
        this.permissions = str2;
        this.token = str3;
        if (str3 == null && permissionOk(str2, fetchPermission())) {
            this.token = fetchToken();
        }
        this.first = this.token == null;
    }

    public String getToken() {
        return this.token;
    }

    public static String getToken(Context context) {
        return PreferenceManager.getDefaultSharedPreferences(context).getString(FB_TOKEN, null);
    }

    public FacebookHandle sso(int i) {
        this.sso = true;
        this.requestId = i;
        return this;
    }

    private boolean permissionOk(String str, String str2) {
        String[] split;
        if (str == null) {
            return true;
        }
        if (str2 == null) {
            return false;
        }
        HashSet hashSet = new HashSet(Arrays.asList(str2.split("[,\\s]+")));
        for (String str3 : str.split("[,\\s]+")) {
            if (!hashSet.contains(str3)) {
                AQUtility.debug("perm mismatch");
                return false;
            }
        }
        return true;
    }

    public FacebookHandle message(String str) {
        this.message = str;
        return this;
    }

    public FacebookHandle setLoadingMessage(int i) {
        this.message = this.act.getString(i);
        return this;
    }

    /* access modifiers changed from: private */
    /* access modifiers changed from: public */
    private void dismiss() {
        if (this.dialog != null) {
            new AQuery(this.act).dismiss(this.dialog);
            this.dialog = null;
        }
    }

    /* access modifiers changed from: private */
    /* access modifiers changed from: public */
    private void show() {
        if (this.dialog != null) {
            new AQuery(this.act).show(this.dialog);
        }
    }

    private void hide() {
        WebDialog webDialog = this.dialog;
        if (webDialog != null) {
            try {
                webDialog.hide();
            } catch (Exception e) {
                AQUtility.debug((Throwable) e);
            }
        }
    }

    /* access modifiers changed from: private */
    /* access modifiers changed from: public */
    private void failure() {
        failure("cancel");
    }

    private void failure(String str) {
        dismiss();
        failure(this.act, -102, str);
    }

    /* access modifiers changed from: protected */
    @Override // com.androidquery.auth.AccountHandle
    public void auth() {
        if (!this.act.isFinishing()) {
            boolean sso2 = sso();
            AQUtility.debug("authing", Boolean.valueOf(sso2));
            if (!sso2) {
                webAuth();
            }
        }
    }

    private boolean sso() {
        if (!this.sso) {
            return false;
        }
        return startSingleSignOn(this.act, this.appId, this.permissions, this.requestId);
    }

    private void webAuth() {
        AQUtility.debug("web auth");
        Bundle bundle = new Bundle();
        bundle.putString("client_id", this.appId);
        bundle.putString("type", "user_agent");
        String str = this.permissions;
        if (str != null) {
            bundle.putString("scope", str);
        }
        bundle.putString("redirect_uri", REDIRECT_URI);
        FbWebViewClient fbWebViewClient = new FbWebViewClient(this, null);
        WebDialog webDialog = new WebDialog(this.act, "https://graph.facebook.com/oauth/authorize?" + encodeUrl(bundle), fbWebViewClient);
        this.dialog = webDialog;
        webDialog.setLoadingMessage(this.message);
        this.dialog.setOnCancelListener(fbWebViewClient);
        show();
        if (!this.first || this.token != null) {
            AQUtility.debug("auth hide");
            hide();
        }
        this.dialog.load();
        AQUtility.debug("auth started");
    }

    private String fetchToken() {
        return PreferenceManager.getDefaultSharedPreferences(this.act).getString(FB_TOKEN, null);
    }

    private String fetchPermission() {
        return PreferenceManager.getDefaultSharedPreferences(this.act).getString(FB_PERMISSION, null);
    }

    /* access modifiers changed from: private */
    /* access modifiers changed from: public */
    private void storeToken(String str, String str2) {
        SharedPreferences.Editor edit = PreferenceManager.getDefaultSharedPreferences(this.act).edit();
        edit.putString(FB_TOKEN, str).putString(FB_PERMISSION, str2);
        AQUtility.apply(edit);
    }

    /* access modifiers changed from: private */
    public class FbWebViewClient extends WebViewClient implements DialogInterface.OnCancelListener {
        private FbWebViewClient() {
        }

        /* synthetic */ FbWebViewClient(FacebookHandle facebookHandle, FbWebViewClient fbWebViewClient) {
            this();
        }

        private boolean checkDone(String str) {
            if (str.startsWith(FacebookHandle.REDIRECT_URI)) {
                String string = FacebookHandle.parseUrl(str).getString("error_reason");
                AQUtility.debug("error", string);
                if (string == null) {
                    FacebookHandle facebookHandle = FacebookHandle.this;
                    facebookHandle.token = facebookHandle.extractToken(str);
                }
                if (FacebookHandle.this.token != null) {
                    FacebookHandle.this.dismiss();
                    FacebookHandle facebookHandle2 = FacebookHandle.this;
                    facebookHandle2.storeToken(facebookHandle2.token, FacebookHandle.this.permissions);
                    FacebookHandle.this.first = false;
                    FacebookHandle facebookHandle3 = FacebookHandle.this;
                    facebookHandle3.authenticated(facebookHandle3.token);
                    FacebookHandle facebookHandle4 = FacebookHandle.this;
                    facebookHandle4.success(facebookHandle4.act);
                } else {
                    FacebookHandle.this.failure();
                }
                return true;
            } else if (!str.startsWith(FacebookHandle.CANCEL_URI)) {
                return false;
            } else {
                AQUtility.debug("cancelled");
                FacebookHandle.this.failure();
                return true;
            }
        }

        @Override // android.webkit.WebViewClient
        public boolean shouldOverrideUrlLoading(WebView webView, String str) {
            AQUtility.debug("return url: " + str);
            return checkDone(str);
        }

        public void onPageStarted(WebView webView, String str, Bitmap bitmap) {
            AQUtility.debug("started", str);
            if (!checkDone(str)) {
                super.onPageStarted(webView, str, bitmap);
            }
        }

        public void onPageFinished(WebView webView, String str) {
            super.onPageFinished(webView, str);
            FacebookHandle.this.show();
            AQUtility.debug("finished", str);
        }

        public void onReceivedError(WebView webView, int i, String str, String str2) {
            FacebookHandle.this.failure();
        }

        public void onCancel(DialogInterface dialogInterface) {
            FacebookHandle.this.failure();
        }
    }

    /* access modifiers changed from: private */
    /* access modifiers changed from: public */
    private String extractToken(String str) {
        String queryParameter = Uri.parse(str.replace('#', '?')).getQueryParameter(LogicConst.ACCESSTOKEN);
        AQUtility.debug("token", queryParameter);
        return queryParameter;
    }

    private static String encodeUrl(Bundle bundle) {
        if (bundle == null) {
            return "";
        }
        StringBuilder sb = new StringBuilder();
        boolean z = true;
        for (String str : bundle.keySet()) {
            if (z) {
                z = false;
            } else {
                sb.append("&");
            }
            sb.append(String.valueOf(str) + "=" + bundle.getString(str));
        }
        return sb.toString();
    }

    private static Bundle decodeUrl(String str) {
        Bundle bundle = new Bundle();
        if (str != null) {
            for (String str2 : str.split("&")) {
                String[] split = str2.split("=");
                bundle.putString(split[0], split[1]);
            }
        }
        return bundle;
    }

    /* access modifiers changed from: private */
    public static Bundle parseUrl(String str) {
        try {
            URL url = new URL(str);
            Bundle decodeUrl = decodeUrl(url.getQuery());
            decodeUrl.putAll(decodeUrl(url.getRef()));
            return decodeUrl;
        } catch (MalformedURLException unused) {
            return new Bundle();
        }
    }

    @Override // com.androidquery.auth.AccountHandle
    public boolean expired(AbstractAjaxCallback<?, ?> abstractAjaxCallback, AjaxStatus ajaxStatus) {
        int code = ajaxStatus.getCode();
        if (code == 200) {
            return false;
        }
        String error = ajaxStatus.getError();
        if (error == null || !error.contains("OAuthException")) {
            String url = abstractAjaxCallback.getUrl();
            if (code == 400 && (url.endsWith("/likes") || url.endsWith("/comments") || url.endsWith("/checkins"))) {
                return false;
            }
            if (code == 403 && (url.endsWith("/feed") || url.contains("method=delete"))) {
                return false;
            }
            if (code == 400 || code == 401 || code == 403) {
                return true;
            }
            return false;
        }
        AQUtility.debug("fb token expired");
        return true;
    }

    @Override // com.androidquery.auth.AccountHandle
    public boolean reauth(final AbstractAjaxCallback<?, ?> abstractAjaxCallback) {
        AQUtility.debug("reauth requested");
        this.token = null;
        AQUtility.post(new Runnable() {
            /* class com.androidquery.auth.FacebookHandle.AnonymousClass1 */

            public void run() {
                FacebookHandle.this.auth(abstractAjaxCallback);
            }
        });
        return false;
    }

    @Override // com.androidquery.auth.AccountHandle
    public String getNetworkUrl(String str) {
        String str2;
        if (str.indexOf(63) == -1) {
            str2 = String.valueOf(str) + "?";
        } else {
            str2 = String.valueOf(str) + "&";
        }
        return String.valueOf(str2) + "access_token=" + this.token;
    }

    @Override // com.androidquery.auth.AccountHandle
    public String getCacheUrl(String str) {
        return getNetworkUrl(str);
    }

    @Override // com.androidquery.auth.AccountHandle
    public boolean authenticated() {
        return this.token != null;
    }

    @Override // com.androidquery.auth.AccountHandle
    public void unauth() {
        this.token = null;
        CookieSyncManager.createInstance(this.act);
        CookieManager.getInstance().removeAllCookie();
        storeToken(null, null);
    }

    private boolean startSingleSignOn(Activity activity, String str, String str2, int i) {
        Intent intent = new Intent();
        intent.setClassName("com.facebook.katana", "com.facebook.katana.ProxyAuth");
        intent.putExtra("client_id", str);
        if (str2 != null) {
            intent.putExtra("scope", str2);
        }
        if (!validateAppSignatureForIntent(activity, intent)) {
            return false;
        }
        try {
            activity.startActivityForResult(intent, i);
            return true;
        } catch (ActivityNotFoundException unused) {
            return false;
        }
    }

    public boolean isSSOAvailable() {
        if (hasSSO == null) {
            Intent intent = new Intent();
            intent.setClassName("com.facebook.katana", "com.facebook.katana.ProxyAuth");
            hasSSO = Boolean.valueOf(validateAppSignatureForIntent(this.act, intent));
        }
        return hasSSO.booleanValue();
    }

    public void ajaxProfile(AjaxCallback<JSONObject> ajaxCallback) {
        ajaxProfile(ajaxCallback, 0);
    }

    public void ajaxProfile(AjaxCallback<JSONObject> ajaxCallback, long j) {
        ((AQuery) new AQuery(this.act).auth(this)).ajax("https://graph.facebook.com/me", JSONObject.class, j, ajaxCallback);
    }

    private boolean validateAppSignatureForIntent(Context context, Intent intent) {
        PackageManager packageManager = context.getPackageManager();
        ResolveInfo resolveActivity = packageManager.resolveActivity(intent, 0);
        if (resolveActivity == null) {
            return false;
        }
        try {
            for (Signature signature : packageManager.getPackageInfo(resolveActivity.activityInfo.packageName, 64).signatures) {
                if (signature.toCharsString().equals(FB_APP_SIGNATURE)) {
                    return true;
                }
            }
            return false;
        } catch (PackageManager.NameNotFoundException unused) {
            return false;
        }
    }

    public void onActivityResult(int i, int i2, Intent intent) {
        AQUtility.debug("on result", Integer.valueOf(i2));
        if (i2 == -1) {
            String stringExtra = intent.getStringExtra("error");
            if (stringExtra == null) {
                stringExtra = intent.getStringExtra("error_type");
            }
            if (stringExtra != null) {
                AQUtility.debug("error", stringExtra);
                if (stringExtra.equals("service_disabled") || stringExtra.equals("AndroidAuthKillSwitchException")) {
                    webAuth();
                    return;
                }
                String stringExtra2 = intent.getStringExtra("error_description");
                AQUtility.debug("fb error", stringExtra2);
                Log.e("fb error", stringExtra2);
                failure(stringExtra2);
                return;
            }
            String stringExtra3 = intent.getStringExtra(LogicConst.ACCESSTOKEN);
            this.token = stringExtra3;
            AQUtility.debug("onComplete", stringExtra3);
            String str = this.token;
            if (str != null) {
                storeToken(str, this.permissions);
                this.first = false;
                authenticated(this.token);
                success(this.act);
                return;
            }
            failure();
        } else if (i2 == 0) {
            failure();
        }
    }
}