// 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_HOST_AUTHENTICATOR_H_
#define REMOTING_PROTOCOL_PAIRING_HOST_AUTHENTICATOR_H_

#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "remoting/protocol/pairing_authenticator_base.h"
#include "remoting/protocol/pairing_registry.h"

namespace remoting {
namespace protocol {

class PairingRegistry;

class PairingHostAuthenticator : public PairingAuthenticatorBase {
 public:
  PairingHostAuthenticator(
      scoped_refptr<PairingRegistry> pairing_registry,
      const CreateBaseAuthenticatorCallback& create_base_authenticator_callback,
      const std::string& pin);
  ~PairingHostAuthenticator() override;

  // Initialize the authenticator with the given |client_id| in
  // |preferred_initial_state|.
  void Initialize(const std::string& client_id,
                  Authenticator::State preferred_initial_state,
                  const base::Closure& resume_callback);

  // Authenticator interface.
  State state() const override;
  RejectionReason rejection_reason() const override;

 private:
  // PairingAuthenticatorBase overrides.
  void CreateSpakeAuthenticatorWithPin(
      State initial_state,
      const base::Closure& resume_callback) override;

  // Continue initializing once the pairing information for the client id has
  // been received.
  void InitializeWithPairing(Authenticator::State preferred_initial_state,
                             const base::Closure& resume_callback,
                             PairingRegistry::Pairing pairing);

  // Protocol state.
  scoped_refptr<PairingRegistry> pairing_registry_;
  CreateBaseAuthenticatorCallback create_base_authenticator_callback_;
  std::string pin_;
  bool protocol_error_ = false;
  bool waiting_for_paired_secret_ = false;

  base::WeakPtrFactory<PairingHostAuthenticator> weak_factory_;

  DISALLOW_COPY_AND_ASSIGN(PairingHostAuthenticator);
};

}  // namespace protocol
}  // namespace remoting

#endif  // REMOTING_PROTOCOL_PAIRING_AUTHENTICATOR_H_
