// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef REMOTING_PROTOCOL_PAIRING_REGISTRY_DELEGATE_WIN_H_
#define REMOTING_PROTOCOL_PAIRING_REGISTRY_DELEGATE_WIN_H_

#include <memory>
#include <string>

#include "base/compiler_specific.h"
#include "base/macros.h"
#include "base/win/registry.h"
#include "remoting/protocol/pairing_registry.h"

namespace base {
class ListValue;
}  // namespace base

namespace remoting {

#if defined(OFFICIAL_BUILD)
const wchar_t kPairingRegistryKeyName[] =
    L"SOFTWARE\\Google\\Chrome Remote Desktop\\paired-clients";
#else
const wchar_t kPairingRegistryKeyName[] =
    L"SOFTWARE\\Chromoting\\paired-clients";
#endif

const wchar_t kPairingRegistryClientsKeyName[] = L"clients";
const wchar_t kPairingRegistrySecretsKeyName[] = L"secrets";

// Stores client pairing information in Windows registry. Two separate registry
// keys are used:
//  - |privileged| - contains the shared secrets of all pairings. This key must
//                   be protected by a strong ACL denying access to unprivileged
//                   code.
//  - |unprivileged| - contains the rest of pairing state.
//
// Creator of this object is responsible for passing the registry key handles
// with appropriate access. |privileged| may be nullptr if read-only access is
// sufficient. Shared secrets will not be returned in such a case.
class PairingRegistryDelegateWin
    : public protocol::PairingRegistry::Delegate {
 public:
  PairingRegistryDelegateWin();
  ~PairingRegistryDelegateWin() override;

  // Passes the root keys to be used to access the pairing registry store.
  // |privileged| is optional and may be nullptr. The caller retains ownership
  // of the passed handles.
  bool SetRootKeys(HKEY privileged, HKEY unprivileged);

  // PairingRegistry::Delegate interface
  std::unique_ptr<base::ListValue> LoadAll() override;
  bool DeleteAll() override;
  protocol::PairingRegistry::Pairing Load(
      const std::string& client_id) override;
  bool Save(const protocol::PairingRegistry::Pairing& pairing) override;
  bool Delete(const std::string& client_id) override;

 private:
  base::win::RegKey privileged_;
  base::win::RegKey unprivileged_;

  DISALLOW_COPY_AND_ASSIGN(PairingRegistryDelegateWin);
};

}  // namespace remoting

#endif  // REMOTING_PROTOCOL_PAIRING_REGISTRY_DELEGATE_WIN_H_
