| 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;
|
| }
|
|
|
|
|