Index: remoting/client/client_util.cc |
=================================================================== |
--- remoting/client/client_util.cc (revision 52921) |
+++ remoting/client/client_util.cc (working copy) |
@@ -4,20 +4,26 @@ |
#include "remoting/client/client_util.h" |
-#include <iostream> |
+#include <string> |
+#include <vector> |
#include "base/logging.h" |
+#include "base/string_util.h" |
+#include "remoting/client/client_config.h" |
+using std::string; |
+using std::vector; |
+ |
namespace remoting { |
// Get host JID from command line arguments, or stdin if not specified. |
-bool GetLoginInfo(int argc, char** argv, |
- std::string* host_jid, |
- std::string* username, |
- std::string* auth_token) { |
+bool GetLoginInfoFromArgs(int argc, char** argv, ClientConfig* config) { |
bool found_host_jid = false; |
bool found_jid = false; |
bool found_auth_token = false; |
+ string host_jid; |
+ string username; |
+ string auth_token; |
for (int i = 1; i < argc; i++) { |
std::string arg = argv[i]; |
@@ -27,14 +33,14 @@ |
<< std::endl; |
} else { |
found_host_jid = true; |
- *host_jid = argv[i]; |
+ host_jid = argv[i]; |
} |
} else if (arg == "--jid") { |
if (++i >= argc) { |
LOG(WARNING) << "Expected JID to follow --jid option" << std::endl; |
} else { |
found_jid = true; |
- *username = argv[i]; |
+ username = argv[i]; |
} |
} else if (arg == "--token") { |
if (++i >= argc) { |
@@ -42,7 +48,7 @@ |
<< std::endl; |
} else { |
found_auth_token = true; |
- *auth_token = argv[i]; |
+ auth_token = argv[i]; |
} |
} else { |
LOG(WARNING) << "Unrecognized option: " << arg << std::endl; |
@@ -50,45 +56,64 @@ |
} |
if (!found_host_jid) { |
- std::cout << "Host JID: "; |
- std::cin >> *host_jid; |
- std::cin.ignore(); // Consume the leftover '\n' |
+ return false; |
} |
// Validate the chromoting host JID. |
- if (host_jid->find("/chromoting") == std::string::npos) { |
- std::cerr << "Error: Expected Host JID in format: <jid>/chromoting<id>" |
- << std::endl; |
+ if (host_jid.find("/chromoting") == std::string::npos) { |
return false; |
} |
if (!found_jid) { |
- // Get username (JID). |
- // Extract default JID from host_jid. |
- std::string default_username; |
- size_t jid_end = host_jid->find('/'); |
- if (jid_end != std::string::npos) { |
- default_username = host_jid->substr(0, jid_end); |
- } |
- std::cout << "JID [" << default_username << "]: "; |
- getline(std::cin, *username); |
- if (username->length() == 0) { |
- username->swap(default_username); |
- } |
- if (username->length() == 0) { |
- std::cerr << "Error: Expected valid JID username" << std::endl; |
- return false; |
- } |
+ return false; |
} |
if (!found_auth_token) { |
- // Get authentication token. |
- std::cout << "Auth token: "; |
- getline(std::cin, *auth_token); |
- std::cout << std::endl; |
+ return false; |
} |
+ config->set_host_jid(host_jid); |
+ config->set_username(username); |
+ config->set_auth_token(auth_token); |
return true; |
} |
+// Get host JID from command line arguments, or stdin if not specified. |
+bool GetLoginInfoFromUrlParams(const std::string& url, ClientConfig* config) { |
+ // TODO(ajwong): We should use GURL or something. Don't parse this by hand! |
+ |
+ // The Url should be of the form: |
+ // |
+ // chrome://remoting?user=<userid>&auth=<authtoken>&jid=<hostjid> |
+ // |
+ vector<string> parts; |
+ SplitString(url, '&', &parts); |
+ if (parts.size() != 3) { |
+ return false; |
+ } |
+ |
+ size_t pos = parts[0].rfind('='); |
+ if (pos == string::npos && (pos + 1) != string::npos) { |
+ return false; |
+ } |
+ std::string username = parts[0].substr(pos + 1); |
+ |
+ pos = parts[1].rfind('='); |
+ if (pos == string::npos && (pos + 1) != string::npos) { |
+ return false; |
+ } |
+ std::string auth_token = parts[1].substr(pos + 1); |
+ |
+ pos = parts[2].rfind('='); |
+ if (pos == string::npos && (pos + 1) != string::npos) { |
+ return false; |
+ } |
+ std::string host_jid = parts[2].substr(pos + 1); |
+ |
+ config->set_host_jid(host_jid); |
+ config->set_username(username); |
+ config->set_auth_token(auth_token); |
+ return true; |
+} |
+ |
} // namespace remoting |