user_settings_win.cc revision c407dc5cd9bdc5668497f21b26b09d988ab439de
1// Copyright (c) 2009 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/sync/util/user_settings.h"
6
7#include <string>
8
9#include "chrome/browser/sync/util/crypto_helpers.h"
10#include "chrome/browser/sync/util/data_encryption.h"
11#include "chrome/common/sqlite_utils.h"
12
13using std::string;
14
15namespace browser_sync {
16
17void UserSettings::SetAuthTokenForService(const string& email,
18    const string& service_name, const string& long_lived_service_token) {
19  ScopedDBHandle dbhandle(this);
20  SQLStatement statement;
21  statement.prepare(dbhandle.get(),
22                    "INSERT INTO cookies "
23                    "(email, service_name, service_token) "
24                    "values (?, ?, ?)");
25  statement.bind_string(0, email);
26  statement.bind_string(1, service_name);
27  statement.bind_blob(2, &EncryptData(long_lived_service_token));
28  if (SQLITE_DONE != statement.step()) {
29    LOG(FATAL) << sqlite3_errmsg(dbhandle.get());
30  }
31}
32
33// Returns the username whose credentials have been persisted as well as
34// a service token for the named service.
35bool UserSettings::GetLastUserAndServiceToken(const string& service_name,
36                                              string* username,
37                                              string* service_token) {
38  ScopedDBHandle dbhandle(this);
39  SQLStatement query;
40  query.prepare(dbhandle.get(),
41                "SELECT email, service_token FROM cookies"
42                " WHERE service_name = ?");
43  query.bind_string(0, service_name.c_str());
44
45  if (SQLITE_ROW == query.step()) {
46    *username = query.column_string(0);
47
48    std::vector<uint8> encrypted_service_token;
49    query.column_blob_as_vector(1, &encrypted_service_token);
50    DecryptData(encrypted_service_token, service_token);
51    return true;
52  }
53
54  return false;
55}
56
57}  // namespace browser_sync
58