Index: chrome/browser/sync/util/user_settings_posix.cc |
diff --git a/chrome/browser/sync/util/user_settings_posix.cc b/chrome/browser/sync/util/user_settings_posix.cc |
index f8fd3f01890cab4b52dc2695a21e1ab7a7bfe0f1..2bc602aaabf508cdf9fc17a14f79e081e6e60bed 100644 |
--- a/chrome/browser/sync/util/user_settings_posix.cc |
+++ b/chrome/browser/sync/util/user_settings_posix.cc |
@@ -6,27 +6,61 @@ |
#include "chrome/browser/sync/util/user_settings.h" |
-namespace browser_sync { |
+#include "chrome/browser/password_manager/encryptor.h" |
+#include "chrome/browser/sync/util/query_helpers.h" |
-void UserSettings::ClearAllServiceTokens() { |
- service_tokens_.clear(); |
-} |
+namespace browser_sync { |
void UserSettings::SetAuthTokenForService( |
const std::string& email, |
const std::string& service_name, |
const std::string& long_lived_service_token) { |
- service_tokens_[service_name] = long_lived_service_token; |
+ std::string encrypted_service_token; |
+ if (!Encryptor::EncryptString(long_lived_service_token, |
+ &encrypted_service_token)) { |
+ LOG(ERROR) << "Encrytion failed: " << long_lived_service_token; |
+ return; |
+ } |
+ ScopedDBHandle dbhandle(this); |
+ ExecOrDie(dbhandle.get(), "INSERT INTO cookies " |
+ "(email, service_name, service_token) " |
+ "values (?, ?, ?)", email, service_name, encrypted_service_token); |
+} |
+ |
+void UserSettings::ClearAllServiceTokens() { |
+ ScopedDBHandle dbhandle(this); |
+ ExecOrDie(dbhandle.get(), "DELETE FROM cookies"); |
+} |
+ |
+bool UserSettings::GetLastUser(std::string* username) { |
+ ScopedDBHandle dbhandle(this); |
+ ScopedStatement query(PrepareQuery(dbhandle.get(), |
+ "SELECT email FROM cookies")); |
+ if (SQLITE_ROW == sqlite3_step(query.get())) { |
+ GetColumn(query.get(), 0, username); |
+ return true; |
+ } else { |
+ return false; |
+ } |
} |
bool UserSettings::GetLastUserAndServiceToken(const std::string& service_name, |
std::string* username, |
std::string* service_token) { |
- ServiceTokenMap::const_iterator iter = service_tokens_.find(service_name); |
+ ScopedDBHandle dbhandle(this); |
+ ScopedStatement query(PrepareQuery( |
+ dbhandle.get(), |
+ "SELECT email, service_token FROM cookies WHERE service_name = ?", |
+ service_name)); |
- if (iter != service_tokens_.end()) { |
- *username = email_; |
- *service_token = iter->second; |
+ if (SQLITE_ROW == sqlite3_step(query.get())) { |
+ std::string encrypted_service_token; |
+ GetColumn(query.get(), 1, &encrypted_service_token); |
+ if (!Encryptor::DecryptString(encrypted_service_token, service_token)) { |
+ LOG(ERROR) << "Decryption failed: " << encrypted_service_token; |
+ return false; |
+ } |
+ GetColumn(query.get(), 0, username); |
return true; |
} |