Statistics
| Branch: | Revision:

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
}