diff options
author | davemoore@chromium.org <davemoore@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-30 18:52:16 +0000 |
---|---|---|
committer | davemoore@chromium.org <davemoore@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-30 18:52:16 +0000 |
commit | 5d4cd6254ffb1a1f6720803adb8ef611d89df2c3 (patch) | |
tree | 707003ab6d82cade8eabd7937706c7ad1bc5665e /chrome/browser/sync/util | |
parent | b6150ec56296e8a8b99b19d1a4e0acadba9c9aa7 (diff) | |
download | chromium_src-5d4cd6254ffb1a1f6720803adb8ef611d89df2c3.zip chromium_src-5d4cd6254ffb1a1f6720803adb8ef611d89df2c3.tar.gz chromium_src-5d4cd6254ffb1a1f6720803adb8ef611d89df2c3.tar.bz2 |
Use the password_manager encryptor to encrypt the sync credentials under Linux and OSX.
BUG=none
TEST=Enable bookmark sync, close and re-launch chrome, make sure there are no sync error message at the bottom of the NTP.
Original patch by albertb@chromium.org
Committed by davemoore@chromium.org
Review URL: http://codereview.chromium.org/341012
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@30611 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/sync/util')
-rw-r--r-- | chrome/browser/sync/util/user_settings_posix.cc | 52 |
1 files changed, 43 insertions, 9 deletions
diff --git a/chrome/browser/sync/util/user_settings_posix.cc b/chrome/browser/sync/util/user_settings_posix.cc index f8fd3f0..2bc602a 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; } |