root / src / com / rackspace / cloud / android / PithosLoginActivity.java @ 05a718db
History | View | Annotate | Download (7.4 kB)
1 | 5d668a55 | koutsoub | package com.rackspace.cloud.android; |
---|---|---|---|
2 | 5d668a55 | koutsoub | |
3 | 5d668a55 | koutsoub | |
4 | 5d668a55 | koutsoub | |
5 | 5d668a55 | koutsoub | import java.net.URLDecoder; |
6 | 5d668a55 | koutsoub | import java.util.Date; |
7 | 5d668a55 | koutsoub | import java.util.StringTokenizer; |
8 | 5d668a55 | koutsoub | import java.util.regex.Matcher; |
9 | 5d668a55 | koutsoub | import java.util.regex.Pattern; |
10 | 5d668a55 | koutsoub | |
11 | 5d668a55 | koutsoub | import org.apache.http.impl.cookie.BasicClientCookie; |
12 | 5d668a55 | koutsoub | |
13 | 5d668a55 | koutsoub | import android.app.AlertDialog; |
14 | 5d668a55 | koutsoub | import android.content.DialogInterface; |
15 | 5d668a55 | koutsoub | import android.content.Intent; |
16 | 5d668a55 | koutsoub | import android.net.http.SslError; |
17 | 5d668a55 | koutsoub | import android.os.Build; |
18 | 5d668a55 | koutsoub | import android.os.Bundle; |
19 | 5d668a55 | koutsoub | import android.text.format.DateFormat; |
20 | 5d668a55 | koutsoub | import android.text.method.PasswordTransformationMethod; |
21 | 5d668a55 | koutsoub | import android.util.Log; |
22 | 5d668a55 | koutsoub | import android.webkit.CookieManager; |
23 | 5d668a55 | koutsoub | import android.webkit.CookieSyncManager; |
24 | 5d668a55 | koutsoub | import android.webkit.HttpAuthHandler; |
25 | 5d668a55 | koutsoub | import android.webkit.SslErrorHandler; |
26 | 5d668a55 | koutsoub | import android.webkit.WebSettings.LayoutAlgorithm; |
27 | 5d668a55 | koutsoub | import android.webkit.WebView; |
28 | 5d668a55 | koutsoub | import android.webkit.WebViewClient; |
29 | 5d668a55 | koutsoub | import android.widget.EditText; |
30 | 5d668a55 | koutsoub | import android.widget.LinearLayout; |
31 | 5d668a55 | koutsoub | import android.widget.LinearLayout.LayoutParams; |
32 | 5d668a55 | koutsoub | import android.widget.TextView; |
33 | 5d668a55 | koutsoub | |
34 | 5d668a55 | koutsoub | |
35 | 5d668a55 | koutsoub | public class PithosLoginActivity extends CloudActivity{ |
36 | 5d668a55 | koutsoub | String loginUrl=null; |
37 | 5d668a55 | koutsoub | String auth = null; |
38 | 5d668a55 | koutsoub | public void onCreate(Bundle savedInstanceState) { |
39 | 5d668a55 | koutsoub | super.onCreate(savedInstanceState);
|
40 | 5d668a55 | koutsoub | trackPageView(GoogleAnalytics.PAGE_PROVIDERS); |
41 | 5d668a55 | koutsoub | Log.i("LOGIN","START"); |
42 | 5d668a55 | koutsoub | setContentView(R.layout.login); |
43 | 5d668a55 | koutsoub | loginUrl = getIntent().getExtras().getString("login");
|
44 | 5d668a55 | koutsoub | auth = getIntent().getExtras().getString("auth");
|
45 | 5d668a55 | koutsoub | doLogin(); |
46 | 5d668a55 | koutsoub | |
47 | 5d668a55 | koutsoub | |
48 | 5d668a55 | koutsoub | } |
49 | 5d668a55 | koutsoub | /*
|
50 | 5d668a55 | koutsoub | protected void onSaveInstanceState(Bundle outState) {
|
51 | 5d668a55 | koutsoub | super.onSaveInstanceState(outState);
|
52 | 5d668a55 | koutsoub | //outState.putBoolean("isHidden", isHidden);
|
53 | 5d668a55 | koutsoub | }*/
|
54 | 5d668a55 | koutsoub | |
55 | 5d668a55 | koutsoub | private void doLogin(){ |
56 | 5d668a55 | koutsoub | CookieSyncManager.createInstance(this);
|
57 | 5d668a55 | koutsoub | CookieSyncManager.getInstance().startSync(); |
58 | 5d668a55 | koutsoub | final WebView webview = (WebView) findViewById(R.id.browser);//new WebView(this); |
59 | 5d668a55 | koutsoub | webview.getSettings().setJavaScriptEnabled(true);
|
60 | 5d668a55 | koutsoub | // webview.setHttpAuthUsernamePassword("vho.grnet.gr", "VHO login",
|
61 | 5d668a55 | koutsoub | // "ebs-koutsoub", "mwJBdgbtv");
|
62 | 5d668a55 | koutsoub | |
63 | 5d668a55 | koutsoub | webview.clearCache(true);
|
64 | 5d668a55 | koutsoub | webview.clearFormData(); |
65 | 5d668a55 | koutsoub | webview.clearHistory(); |
66 | 5d668a55 | koutsoub | |
67 | 5d668a55 | koutsoub | |
68 | 5d668a55 | koutsoub | webview.getSettings().setBuiltInZoomControls(true);
|
69 | 5d668a55 | koutsoub | //webview.getSettings().setDefaultZoom(ZoomDensity.);
|
70 | 5d668a55 | koutsoub | if(Build.VERSION.SDK_INT!=7) |
71 | 5d668a55 | koutsoub | webview.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); |
72 | 5d668a55 | koutsoub | |
73 | 5d668a55 | koutsoub | webview.setWebViewClient(new WebViewClient() {
|
74 | 5d668a55 | koutsoub | |
75 | 5d668a55 | koutsoub | public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error){ |
76 | 5d668a55 | koutsoub | handler.proceed(); |
77 | 5d668a55 | koutsoub | } |
78 | 5d668a55 | koutsoub | |
79 | 5d668a55 | koutsoub | @Override public boolean shouldOverrideUrlLoading(WebView view, |
80 | 5d668a55 | koutsoub | String url) {
|
81 | 5d668a55 | koutsoub | view.loadUrl(url); return true; |
82 | 5d668a55 | koutsoub | } |
83 | 5d668a55 | koutsoub | |
84 | 5d668a55 | koutsoub | @Override
|
85 | 5d668a55 | koutsoub | public void onPageFinished(WebView view, String url) { |
86 | 5d668a55 | koutsoub | super.onPageFinished(view, url);
|
87 | 5d668a55 | koutsoub | //webview.loadUrl("javascript:window.HTMLOUT.showHTML('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');");
|
88 | 5d668a55 | koutsoub | CookieSyncManager.getInstance().sync(); |
89 | 5d668a55 | koutsoub | String cookie = CookieManager.getInstance().getCookie(url);
|
90 | 5d668a55 | koutsoub | Log.i("LOGIN COOKIE","c: "+cookie); |
91 | 5d668a55 | koutsoub | |
92 | 5d668a55 | koutsoub | if(null!=cookie && cookie.startsWith("_pithos2_a")){ |
93 | 5d668a55 | koutsoub | try {
|
94 | 5d668a55 | koutsoub | String value = URLDecoder.decode(parseRawCookie(cookie).getValue()); |
95 | 5d668a55 | koutsoub | StringTokenizer str = new StringTokenizer(value,"|"); |
96 | 5d668a55 | koutsoub | if(str.countTokens()==2){ |
97 | 5d668a55 | koutsoub | String u = str.nextToken();
|
98 | 5d668a55 | koutsoub | String t = str.nextToken();
|
99 | 5d668a55 | koutsoub | Log.i("value",value);
|
100 | 5d668a55 | koutsoub | Log.i("s1",u);
|
101 | 5d668a55 | koutsoub | Log.i("s2",t);
|
102 | 5d668a55 | koutsoub | exit(u,t); |
103 | 5d668a55 | koutsoub | } |
104 | 5d668a55 | koutsoub | |
105 | 5d668a55 | koutsoub | //exit(s[0], s[1]);
|
106 | 5d668a55 | koutsoub | } catch (Exception e) { |
107 | 5d668a55 | koutsoub | // TODO Auto-generated catch block
|
108 | 5d668a55 | koutsoub | e.printStackTrace(); |
109 | 5d668a55 | koutsoub | } |
110 | 5d668a55 | koutsoub | } |
111 | 5d668a55 | koutsoub | } |
112 | 5d668a55 | koutsoub | |
113 | 5d668a55 | koutsoub | @Override
|
114 | 5d668a55 | koutsoub | public void onReceivedHttpAuthRequest(WebView view, |
115 | 5d668a55 | koutsoub | final HttpAuthHandler handler, String host, String realm) { |
116 | 5d668a55 | koutsoub | String[] up = view.getHttpAuthUsernamePassword(host, realm); |
117 | 5d668a55 | koutsoub | if (up != null && up.length == 2) { |
118 | 5d668a55 | koutsoub | handler.proceed(up[0], up[1]); |
119 | 5d668a55 | koutsoub | |
120 | 5d668a55 | koutsoub | } else {
|
121 | 5d668a55 | koutsoub | final AlertDialog.Builder alert = new AlertDialog.Builder(PithosLoginActivity.this); |
122 | 5d668a55 | koutsoub | alert.setTitle("Pithos Login");
|
123 | 5d668a55 | koutsoub | //View lv = findViewById(R.layout.dialoglogin);
|
124 | 5d668a55 | koutsoub | //alert.setView(lv);
|
125 | 5d668a55 | koutsoub | final EditText input = new EditText(PithosLoginActivity.this);//(EditText) lv.findViewById(R.id.username); |
126 | 5d668a55 | koutsoub | final EditText pass = new EditText(PithosLoginActivity.this);//(EditText) lv.findViewById(R.id.password); |
127 | 5d668a55 | koutsoub | pass.setTransformationMethod(new PasswordTransformationMethod());
|
128 | 5d668a55 | koutsoub | LinearLayout layout = new LinearLayout(PithosLoginActivity.this);
|
129 | 5d668a55 | koutsoub | layout.setOrientation(LinearLayout.VERTICAL); |
130 | 5d668a55 | koutsoub | LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
|
131 | 5d668a55 | koutsoub | layout.setLayoutParams(params); |
132 | 5d668a55 | koutsoub | input.setLayoutParams(params); |
133 | 5d668a55 | koutsoub | pass.setLayoutParams(params); |
134 | 5d668a55 | koutsoub | TextView username = new TextView(PithosLoginActivity.this);
|
135 | 5d668a55 | koutsoub | username.setText("Username:");
|
136 | 5d668a55 | koutsoub | |
137 | 5d668a55 | koutsoub | TextView password = new TextView(PithosLoginActivity.this);
|
138 | 5d668a55 | koutsoub | password.setText("Password:");
|
139 | 5d668a55 | koutsoub | layout.addView(username); |
140 | 5d668a55 | koutsoub | layout.addView(input); |
141 | 5d668a55 | koutsoub | layout.addView(password); |
142 | 5d668a55 | koutsoub | layout.addView(pass); |
143 | 5d668a55 | koutsoub | alert.setView(layout); |
144 | 5d668a55 | koutsoub | |
145 | 5d668a55 | koutsoub | alert.setPositiveButton("Login", new DialogInterface.OnClickListener() { |
146 | 5d668a55 | koutsoub | public void onClick(DialogInterface dialog, int whichButton) { |
147 | 5d668a55 | koutsoub | String uvalue = input.getText().toString().trim();
|
148 | 5d668a55 | koutsoub | String pvalue = pass.getText().toString().trim();
|
149 | 5d668a55 | koutsoub | handler.proceed(uvalue, pvalue); |
150 | 5d668a55 | koutsoub | } |
151 | 5d668a55 | koutsoub | }); |
152 | 5d668a55 | koutsoub | |
153 | 5d668a55 | koutsoub | alert.setNegativeButton("Cancel",
|
154 | 5d668a55 | koutsoub | new DialogInterface.OnClickListener() {
|
155 | 5d668a55 | koutsoub | public void onClick(DialogInterface dialog, int whichButton) { |
156 | 5d668a55 | koutsoub | dialog.cancel(); |
157 | 5d668a55 | koutsoub | } |
158 | 5d668a55 | koutsoub | }); |
159 | 5d668a55 | koutsoub | alert.show(); |
160 | 5d668a55 | koutsoub | } |
161 | 5d668a55 | koutsoub | } |
162 | 5d668a55 | koutsoub | |
163 | 5d668a55 | koutsoub | |
164 | 5d668a55 | koutsoub | }); |
165 | 5d668a55 | koutsoub | Log.i("LOGIN","LOADING:"+loginUrl); |
166 | 5d668a55 | koutsoub | //setContentView(webview);
|
167 | 5d668a55 | koutsoub | webview.clearSslPreferences(); |
168 | 05a718db | koutsoub | //webview.loadUrl("https://pithos.dev.grnet.gr/im/login/invitation?code=6879429392467020041");
|
169 | 05a718db | koutsoub | webview.loadUrl("https://plus.pithos.grnet.gr/im/login/invitation?code=3219662435709009446");
|
170 | 5d668a55 | koutsoub | //webview.loadUrl("http://www.google.gr");
|
171 | 5d668a55 | koutsoub | } |
172 | 5d668a55 | koutsoub | void exit(String username,String token){ |
173 | 5d668a55 | koutsoub | Log.i("LOGINA",username+" "+token); |
174 | 5d668a55 | koutsoub | Intent result = new Intent();
|
175 | 5d668a55 | koutsoub | Bundle b = new Bundle();
|
176 | 5d668a55 | koutsoub | b.putString("username", username);
|
177 | 5d668a55 | koutsoub | b.putString("apiKey", token);
|
178 | 5d668a55 | koutsoub | b.putString("server", auth);
|
179 | 5d668a55 | koutsoub | result.putExtra("accountInfo", b);
|
180 | 5d668a55 | koutsoub | setResult(RESULT_OK, result); |
181 | 5d668a55 | koutsoub | finish(); |
182 | 5d668a55 | koutsoub | } |
183 | 5d668a55 | koutsoub | |
184 | 5d668a55 | koutsoub | |
185 | 5d668a55 | koutsoub | BasicClientCookie parseRawCookie(String rawCookie) throws Exception { |
186 | 5d668a55 | koutsoub | String[] rawCookieParams = rawCookie.split(";"); |
187 | 5d668a55 | koutsoub | |
188 | 5d668a55 | koutsoub | String[] rawCookieNameAndValue = rawCookieParams[0].split("="); |
189 | 5d668a55 | koutsoub | if (rawCookieNameAndValue.length != 2) { |
190 | 5d668a55 | koutsoub | throw new Exception("Invalid cookie: missing name and value."); |
191 | 5d668a55 | koutsoub | } |
192 | 5d668a55 | koutsoub | |
193 | 5d668a55 | koutsoub | String cookieName = rawCookieNameAndValue[0].trim(); |
194 | 5d668a55 | koutsoub | String cookieValue = rawCookieNameAndValue[1].trim(); |
195 | 5d668a55 | koutsoub | BasicClientCookie cookie = new BasicClientCookie(cookieName, cookieValue);
|
196 | 5d668a55 | koutsoub | for (int i = 1; i < rawCookieParams.length; i++) { |
197 | 5d668a55 | koutsoub | String rawCookieParamNameAndValue[] = rawCookieParams[i].trim().split("="); |
198 | 5d668a55 | koutsoub | |
199 | 5d668a55 | koutsoub | String paramName = rawCookieParamNameAndValue[0].trim(); |
200 | 5d668a55 | koutsoub | |
201 | 5d668a55 | koutsoub | if (paramName.equalsIgnoreCase("secure")) { |
202 | 5d668a55 | koutsoub | cookie.setSecure(true);
|
203 | 5d668a55 | koutsoub | } else {
|
204 | 5d668a55 | koutsoub | if (rawCookieParamNameAndValue.length != 2) { |
205 | 5d668a55 | koutsoub | throw new Exception("Invalid cookie: attribute not a flag or missing value."); |
206 | 5d668a55 | koutsoub | } |
207 | 5d668a55 | koutsoub | |
208 | 5d668a55 | koutsoub | String paramValue = rawCookieParamNameAndValue[1].trim(); |
209 | 5d668a55 | koutsoub | |
210 | 5d668a55 | koutsoub | |
211 | 5d668a55 | koutsoub | } |
212 | 5d668a55 | koutsoub | } |
213 | 5d668a55 | koutsoub | |
214 | 5d668a55 | koutsoub | return cookie;
|
215 | 5d668a55 | koutsoub | } |
216 | 5d668a55 | koutsoub | } |