Skip to content

Commit

Permalink
append params on SSO request
Browse files Browse the repository at this point in the history
  • Loading branch information
Logan676 committed Apr 30, 2015
1 parent fa5349d commit 102e1a1
Show file tree
Hide file tree
Showing 4 changed files with 80 additions and 27 deletions.
17 changes: 2 additions & 15 deletions src/com/seafile/seadroid2/ui/activity/AccountDetailActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import com.seafile.seadroid2.account.AccountManager;
import com.seafile.seadroid2.ui.CustomClearableEditText;
import com.seafile.seadroid2.ui.dialog.SslConfirmDialog;
import com.seafile.seadroid2.util.Utils;

public class AccountDetailActivity extends SherlockFragmentActivity {
private static final String DEBUG_TAG = "AccountDetailActivity";
Expand Down Expand Up @@ -212,25 +213,11 @@ public void afterTextChanged(Editable s) {
});
}

private String cleanServerURL(String serverURL, boolean isHttps) throws MalformedURLException {
if (!serverURL.endsWith("/")) {
serverURL = serverURL + "/";
}

// XXX: android 4.0.3 ~ 4.0.4 can't handle urls with underscore (_) in the host field.
// See https://github.com/nostra13/Android-Universal-Image-Loader/issues/256 , and
// https://code.google.com/p/android/issues/detail?id=24924
//
new URL(serverURL); // will throw MalformedURLException if serverURL not valid
return serverURL;
}

/** Called when the user clicks the Login button */
public void login(View view) {
String serverURL = serverText.getText().toString();
String email = emailText.getText().toString();
String passwd = passwdText.getText().toString();
boolean isHttps = httpsCheckBox.isChecked();

ConnectivityManager connMgr = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
Expand All @@ -253,7 +240,7 @@ public void login(View view) {
}

try {
serverURL = cleanServerURL(serverURL, isHttps);
serverURL = Utils.cleanServerURL(serverURL);
} catch (MalformedURLException e) {
statusView.setText(R.string.invalid_server_address);
Log.d(DEBUG_TAG, "Invalid URL " + serverURL);
Expand Down
5 changes: 3 additions & 2 deletions src/com/seafile/seadroid2/ui/activity/ShibbolethActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.view.MenuItem;
import com.seafile.seadroid2.R;
import com.seafile.seadroid2.ui.ToastUtils;

/**
* Shibboleth welcome page
Expand Down Expand Up @@ -129,12 +130,12 @@ public boolean onMenuItemSelected(int featureId, MenuItem item) {

private boolean isServerUrlValid(String serverUrl) {
if (serverUrl == null || serverUrl.isEmpty()) {
Toast.makeText(this, getString(R.string.shib_server_url_empty), Toast.LENGTH_SHORT).show();
ToastUtils.show(this, getString(R.string.shib_server_url_empty));
return false;
}

if (!serverUrl.startsWith(SHIBBOLETH_HTTP_PREFIX) && !serverUrl.startsWith(SHIBBOLETH_HTTPS_PREFIX)) {
Toast.makeText(this, getString(R.string.shib_server_incorrect_prefix), Toast.LENGTH_SHORT).show();
ToastUtils.show(this, getString(R.string.shib_server_incorrect_prefix));
return false;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
package com.seafile.seadroid2.ui.activity;

import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.http.SslError;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
import android.util.Log;
import android.view.View;
import android.view.animation.AnimationUtils;
Expand All @@ -14,11 +19,17 @@
import android.widget.Toast;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.seafile.seadroid2.R;
import com.seafile.seadroid2.SeadroidApplication;
import com.seafile.seadroid2.account.Account;
import com.seafile.seadroid2.account.AccountManager;
import com.seafile.seadroid2.ui.ToastUtils;
import com.seafile.seadroid2.util.Utils;

import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;

/**
* Shibboleth Authorize page
* use cookie to get authorized data
Expand All @@ -30,6 +41,7 @@ public class ShibbolethAuthorizeActivity extends SherlockFragmentActivity {
public static final String SEAHUB_SHIB_COOKIE_NAME = "seahub_auth";
private WebView mWebview;
private LinearLayout mloadingAnimation;
public String serverUrl;

@Override
protected void onCreate(Bundle savedInstanceState) {
Expand All @@ -49,17 +61,52 @@ protected void onCreate(Bundle savedInstanceState) {
getActionBar().setTitle(R.string.shib_actionbar_title);

String url = getIntent().getStringExtra(ShibbolethActivity.SHIBBOLETH_SERVER_URL);
CookieManager.getInstance().removeAllCookie();
openAuthorizePage(url);
}

private void openAuthorizePage(String url) {
Log.d(DEBUG_TAG, "server url is " + url);

serverUrl = url;

if (!Utils.isNetworkOn()) {
ToastUtils.show(this, getString(R.string.network_down));
return;
}

String deviceId = Settings.Secure.getString(this.getContentResolver(),
Settings.Secure.ANDROID_ID);

String appVersion = "";
Context context = SeadroidApplication.getAppContext();
try {
PackageInfo pInfo = context.getPackageManager().
getPackageInfo(context.getPackageName(), 0);
appVersion = pInfo.versionName;
} catch (PackageManager.NameNotFoundException e) {
// ignore
}

if (!url.endsWith("/")) {
url += "/shib-login";
} else
url += "shib-login";

try {
url += String.format("?shib_platform_version=%s&shib_device_name=%s&shib_platform=%s&shib_device_id=%s&shib_client_version=%s",
URLEncoder.encode(Build.VERSION.RELEASE, "UTF-8"),
URLEncoder.encode(Build.MODEL, "UTF-8"),
"android",
URLEncoder.encode(deviceId, "UTF-8"),
appVersion);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}


Log.d(DEBUG_TAG, "url " + url);

mWebview.loadUrl(url);

showPageLoading(true);
Expand Down Expand Up @@ -90,38 +137,41 @@ class CustomWebviewClient extends WebViewClient {
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
// Display error messages
Toast.makeText(
ShibbolethAuthorizeActivity.this,
String.format((R.string.shib_load_page_error) + description),
Toast.LENGTH_SHORT
).show();
ToastUtils.show(ShibbolethAuthorizeActivity.this,
String.format((R.string.shib_load_page_error) + description));

showPageLoading(false);
}

@Override
/*@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
Log.d(DEBUG_TAG, "onReceivedSslError " + error.getCertificate().toString());
// Ignore SSL certificate validate
handler.proceed();
}
}*/

@Override
public void onPageFinished(WebView webView, String url) {
Log.d(DEBUG_TAG, "onPageFinished " + url);
Log.d(DEBUG_TAG, "onPageFinished " + serverUrl);
showPageLoading(false);

String cookie = getCookie(url, SEAHUB_SHIB_COOKIE_NAME);
String cookie = getCookie(serverUrl, SEAHUB_SHIB_COOKIE_NAME);
if (cookie == null)
return;

Account account = parseAccount(url, cookie);
Account account = null;
try {
account = parseAccount(Utils.cleanServerURL(serverUrl), cookie);
} catch (MalformedURLException e) {
Log.e(DEBUG_TAG, e.getMessage());
}
saveAccount(account);
openResource(account);
}
}


private void openResource(Account account) {
if (account == null)
return;
Expand Down
15 changes: 15 additions & 0 deletions src/com/seafile/seadroid2/util/Utils.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@
import java.io.Reader;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URISyntaxException;
import java.net.URL;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
Expand Down Expand Up @@ -672,4 +674,17 @@ public static void hideSoftKeyboard(View view) {
Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(
view.getWindowToken(), 0);
}

public static String cleanServerURL(String serverURL) throws MalformedURLException {
if (!serverURL.endsWith("/")) {
serverURL = serverURL + "/";
}

// XXX: android 4.0.3 ~ 4.0.4 can't handle urls with underscore (_) in the host field.
// See https://github.com/nostra13/Android-Universal-Image-Loader/issues/256 , and
// https://code.google.com/p/android/issues/detail?id=24924
//
new URL(serverURL); // will throw MalformedURLException if serverURL not valid
return serverURL;
}
}

0 comments on commit 102e1a1

Please sign in to comment.