device_oauth2_token_service.cc revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
1// Copyright 2013 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/chromeos/settings/device_oauth2_token_service.h"
6
7#include "base/prefs/pref_registry_simple.h"
8#include "base/prefs/pref_service.h"
9#include "chrome/common/pref_names.h"
10#include "chromeos/cryptohome/cryptohome_library.h"
11#include "content/public/browser/browser_thread.h"
12
13namespace chromeos {
14
15DeviceOAuth2TokenService::DeviceOAuth2TokenService(
16    net::URLRequestContextGetter* getter,
17    PrefService* local_state)
18    : OAuth2TokenService(getter),
19      local_state_(local_state) {
20}
21
22DeviceOAuth2TokenService::~DeviceOAuth2TokenService() {
23}
24
25// static
26void DeviceOAuth2TokenService::RegisterPrefs(PrefRegistrySimple* registry) {
27  registry->RegisterStringPref(prefs::kDeviceRobotAnyApiRefreshToken,
28                               std::string());
29}
30
31void DeviceOAuth2TokenService::SetAndSaveRefreshToken(
32    const std::string& refresh_token) {
33  DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
34  std::string encrypted_refresh_token =
35      CryptohomeLibrary::Get()->EncryptWithSystemSalt(refresh_token);
36
37  local_state_->SetString(prefs::kDeviceRobotAnyApiRefreshToken,
38                          encrypted_refresh_token);
39}
40
41std::string DeviceOAuth2TokenService::GetRefreshToken() {
42  if (refresh_token_.empty()) {
43    std::string encrypted_refresh_token =
44        local_state_->GetString(prefs::kDeviceRobotAnyApiRefreshToken);
45
46    refresh_token_ = CryptohomeLibrary::Get()->DecryptWithSystemSalt(
47        encrypted_refresh_token);
48  }
49  return refresh_token_;
50}
51
52}  // namespace chromeos
53