Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(275)

Side by Side Diff: remoting/client/extension/client.js

Issue 6518013: Update Chromoting login UI (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Update local login UI Created 9 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Flag to indicate whether or not to show offline hosts in the host list. 5 // Flag to indicate whether or not to show offline hosts in the host list.
6 chromoting.showOfflineHosts = true; 6 chromoting.showOfflineHosts = true;
7 7
8 // String to identify bad auth tokens. 8 // String to identify bad auth tokens.
9 var BAD_AUTH_TOKEN = 'bad_token'; 9 var BAD_AUTH_TOKEN = 'bad_token';
10 10
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 // Update the login status region (at the bottom of the popup) with the 42 // Update the login status region (at the bottom of the popup) with the
43 // current account and links to sign in/out. 43 // current account and links to sign in/out.
44 function updateLoginStatus() { 44 function updateLoginStatus() {
45 var username = getCookie('username'); 45 var username = getCookie('username');
46 46
47 var loginDiv = document.getElementById('login_div'); 47 var loginDiv = document.getElementById('login_div');
48 clear(loginDiv); 48 clear(loginDiv);
49 49
50 if (!username) { 50 if (!username) {
51 var signinLink = document.createElement('a'); 51 var signinLink = document.createElement('a');
52 signinLink.setAttribute('href', 52 signinLink.setAttribute('href', 'javascript:chromodir_login();');
53 "javascript:window.open('login.html', 'Sign In', " +
54 "'width=400,height=200,scrollbars=no'); return false;");
55 signinLink.appendChild(document.createTextNode('Sign In')); 53 signinLink.appendChild(document.createTextNode('Sign In'));
56 loginDiv.appendChild(signinLink); 54 loginDiv.appendChild(signinLink);
57 } else { 55 } else {
58 var email = document.createElement('span'); 56 var email = document.createElement('span');
59 email.setAttribute('class', 'login_email'); 57 email.setAttribute('class', 'login_email');
60 email.appendChild(document.createTextNode(username)); 58 email.appendChild(document.createTextNode(username));
61 loginDiv.appendChild(email); 59 loginDiv.appendChild(email);
62 60
63 loginDiv.appendChild(document.createTextNode(' | ')); 61 loginDiv.appendChild(document.createTextNode(' | '));
64 62
65 var signoutLink = document.createElement('a'); 63 var signoutLink = document.createElement('a');
66 signoutLink.setAttribute('href', 'javascript:logout(this.form);'); 64 signoutLink.setAttribute('href', 'javascript:logout_reload(this.form);');
67 signoutLink.appendChild(document.createTextNode('Sign Out')); 65 signoutLink.appendChild(document.createTextNode('Sign Out'));
68 loginDiv.appendChild(signoutLink); 66 loginDiv.appendChild(signoutLink);
69 } 67 }
70 } 68 }
71 69
70 // Sign out the current user and reload the host list.
71 function logout_reload(form) {
Sergey Ulanov 2011/02/15 22:06:43 use mixedCase identifiers in JS. logoutAndReload()
garykac 2011/02/16 18:43:06 Done.
72 logout();
73 populateHostList();
74 }
75
72 // Sign out the current user by erasing the auth cookies. 76 // Sign out the current user by erasing the auth cookies.
73 function logout(form) { 77 function logout() {
74 setCookie('username', '', AUTH_EXPIRES); 78 setCookie('username', '', AUTH_EXPIRES);
75 setCookie('chromoting_auth', '', AUTH_EXPIRES); 79 setCookie('chromoting_auth', '', AUTH_EXPIRES);
76 setCookie('xmpp_auth', '', AUTH_EXPIRES); 80 setCookie('xmpp_auth', '', AUTH_EXPIRES);
77 81
78 updateLoginStatus(); 82 updateLoginStatus();
79 populateHostList();
80 } 83 }
81 84
82 function login(form) { 85 // Sign in to Chromoting Directory services.
83 var status = document.getElementById('login_status'); 86 function chromodir_login() {
Sergey Ulanov 2011/02/15 22:06:43 maybe showDirectoryLogin()?
garykac 2011/02/16 18:43:06 Done.
84 clear(status); 87 document.getElementById("login_panel").style.display = "block";
85 doLogin(form.username.value, form.password.value, checkLogin); 88 }
89
90 function login() {
91 var username = document.getElementById("username").value;
92 var password = document.getElementById("password").value;
93
94 doLogin(username, password, checkLogin);
86 } 95 }
87 96
88 // Check to see if the login was successful. 97 // Check to see if the login was successful.
89 function checkLogin() { 98 function checkLogin() {
90 var username = getCookie('username'); 99 var username = getCookie('username');
91 var cauth = getCookie('chromoting_auth'); 100 var cauth = getCookie('chromoting_auth');
92 var xauth = getCookie('xmpp_auth'); 101 var xauth = getCookie('xmpp_auth');
93 102
94 // Verify login and show login status. 103 // Verify login and show login status.
95 var status = document.getElementById('login_status');
96 if (cauth == BAD_AUTH_TOKEN || xauth == BAD_AUTH_TOKEN) { 104 if (cauth == BAD_AUTH_TOKEN || xauth == BAD_AUTH_TOKEN) {
97 appendMessage(status, '', 'Sign in failed!'); 105 // Erase the username cookie.
98 if (username) { 106 setCookie('username', '', AUTH_EXPIRES);
99 setCookie('username', '', AUTH_EXPIRES); 107 showLoginError("Sign in failed!");
100 }
101 } else { 108 } else {
102 appendMessage(status, '', 'Successfully signed in as ' + username); 109 // Successful login - update status and update host list.
110 updateLoginStatus();
111 populateHostList();
112
113 // Hide login dialog and clear out values.
114 document.getElementById('login_panel').style.display = "none";
115 document.getElementById('username').value = "";
116 document.getElementById('password').value = "";
103 } 117 }
104 } 118 }
105 119
106 function doLogin(username, password, done) { 120 function doLogin(username, password, done) {
107 // Don't call |done| callback until both login requests have completed. 121 // Don't call |done| callback until both login requests have completed.
108 var count = 2; 122 var count = 2;
109 var barrier = function() { 123 var barrier = function() {
110 count--; 124 count--;
111 if (done && count == 0) { 125 if (done && count == 0) {
112 done(); 126 done();
(...skipping 26 matching lines...) Expand all
139 } 153 }
140 }; 154 };
141 155
142 xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); 156 xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
143 xhr.send('accountType=HOSTED_OR_GOOGLE&Email=' + 157 xhr.send('accountType=HOSTED_OR_GOOGLE&Email=' +
144 encodeURIComponent(username) + '&Passwd=' + 158 encodeURIComponent(username) + '&Passwd=' +
145 encodeURIComponent(password) + '&service=' + 159 encodeURIComponent(password) + '&service=' +
146 encodeURIComponent(service) + '&source=chromoclient'); 160 encodeURIComponent(service) + '&source=chromoclient');
147 } 161 }
148 162
163 function showLoginError() {
164 var errormsgDiv = document.getElementById('errormsg_div');
Sergey Ulanov 2011/02/15 22:06:43 errorMsgDiv or errorDiv
garykac 2011/02/16 18:43:06 Done.
165 clear(errormsgDiv);
166
167 errormsgDiv.appendChild(document.createTextNode(
Sergey Ulanov 2011/02/15 22:06:43 I would write errormsgDiv.innerHTML = "...". It is
garykac 2011/02/16 18:43:06 But it would be inconsistent with the style used t
168 "The username or password you entered is incorrect ["));
169
170 var helpLink = document.createElement('a');
171 helpLink.setAttribute('href',
172 'http://www.google.com/support/accounts/bin/answer.py?answer=27444');
173 helpLink.setAttribute('target', '_blank');
174 helpLink.appendChild(document.createTextNode('?'));
175 errormsgDiv.appendChild(helpLink);
176
177 errormsgDiv.appendChild(document.createTextNode("]"));
178 }
179
149 function extractAuthToken(message) { 180 function extractAuthToken(message) {
150 var lines = message.split('\n'); 181 var lines = message.split('\n');
151 for (var i = 0; i < lines.length; i++) { 182 for (var i = 0; i < lines.length; i++) {
152 if (lines[i].match('^Auth=.*')) { 183 if (lines[i].match('^Auth=.*')) {
153 return lines[i].split('=')[1]; 184 return lines[i].split('=')[1];
154 } 185 }
155 } 186 }
156 187
157 console.log('Could not parse auth token in : "' + message + '"'); 188 console.log('Could not parse auth token in : "' + message + '"');
158 return BAD_AUTH_TOKEN; 189 return BAD_AUTH_TOKEN;
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 appendHostLinks(parsed_response.data.items); 247 appendHostLinks(parsed_response.data.items);
217 } else { 248 } else {
218 var errorResponse = JSON.parse(xhr.responseText); 249 var errorResponse = JSON.parse(xhr.responseText);
219 250
220 console.log('Error: Bad status on host list query: "' + 251 console.log('Error: Bad status on host list query: "' +
221 xhr.status + ' ' + xhr.statusText); 252 xhr.status + ' ' + xhr.statusText);
222 console.log('Error code ' + errorResponse.error.code); 253 console.log('Error code ' + errorResponse.error.code);
223 console.log('Error message ' + errorResponse.error.message); 254 console.log('Error message ' + errorResponse.error.message);
224 255
225 clear(hostlistDiv); 256 clear(hostlistDiv);
226 appendMessage(hostlistDiv, 'message', 257 if (errorResponse.error.message == "Token expired") {
227 'Unable to load host list for ' + username + '. ' + 258 appendMessage(hostlistDiv, 'message',
228 'Please try again later.'); 259 'The authentication token for ' + username +
229 appendMessage(hostlistDiv, 'message', 260 ' has expired. Please sign in again.');
230 'Error code: ' + errorResponse.error.code); 261 logout();
231 appendMessage(hostlistDiv, 'message', 262 } else if (errorResponse.error.message == "Token invalid") {
232 'Message: ' + errorResponse.error.message); 263 appendMessage(hostlistDiv, 'message',
264 'Invalid authentication token for ' + username + '. ' +
265 'Please sign in again.');
266 logout();
267 } else {
268 appendMessage(hostlistDiv, 'message',
269 'Unable to load host list for ' + username + '. ' +
270 'Please try again later.');
271 appendMessage(hostlistDiv, 'message',
272 'Error code: ' + errorResponse.error.code);
273 appendMessage(hostlistDiv, 'message',
274 'Message: ' + errorResponse.error.message);
275 }
233 } 276 }
234 }; 277 };
235 278
236 xhr.open('GET', 'https://www.googleapis.com/chromoting/v1/@me/hosts'); 279 xhr.open('GET', 'https://www.googleapis.com/chromoting/v1/@me/hosts');
237 xhr.setRequestHeader('Content-Type', 'text/plain;charset=UTF-8'); 280 xhr.setRequestHeader('Content-Type', 'text/plain;charset=UTF-8');
238 xhr.setRequestHeader('Authorization', 'GoogleLogin auth=' + token); 281 xhr.setRequestHeader('Authorization', 'GoogleLogin auth=' + token);
239 xhr.send(null); 282 xhr.send(null);
240 } 283 }
241 284
242 // Populate the 'hostlist_div' element with the list of hosts for this user. 285 // Populate the 'hostlist_div' element with the list of hosts for this user.
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
316 hostStatus.appendChild(document.createTextNode(host.status)); 359 hostStatus.appendChild(document.createTextNode(host.status));
317 hostEntry.appendChild(hostStatus); 360 hostEntry.appendChild(hostStatus);
318 361
319 var hostInfo = document.createElement('p'); 362 var hostInfo = document.createElement('p');
320 hostInfo.setAttribute('class', 'hostindent hostinfo'); 363 hostInfo.setAttribute('class', 'hostindent hostinfo');
321 hostInfo.appendChild(document.createTextNode(host.jabberId)); 364 hostInfo.appendChild(document.createTextNode(host.jabberId));
322 hostEntry.appendChild(hostInfo); 365 hostEntry.appendChild(hostInfo);
323 366
324 return hostEntry; 367 return hostEntry;
325 } 368 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698