// 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_CLIENT_AUTHENTICATOR_H_
#define REMOTING_PROTOCOL_PAIRING_CLIENT_AUTHENTICATOR_H_

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

namespace remoting {
namespace protocol {

class PairingClientAuthenticator : public PairingAuthenticatorBase {
 public:
  PairingClientAuthenticator(
      const ClientAuthenticationConfig& client_auth_config,
      const CreateBaseAuthenticatorCallback&
          create_base_authenticator_callback);
  ~PairingClientAuthenticator() override;

  // Start() or StartPaired() must be called after the authenticator is created.
  // Start() handles both cases when pairing exists and when it doesn't.
  // StartPaired() can only be used when pairing exists (i.e. client_id and
  // pairing_secret are set in the |client_auth_config|). It is used to
  // initialize the authenticator synchronously in
  // NegotiatingClientAuthentitcator, while Start() may be executed
  // asynchronously to fetch the PIN.
  void Start(State initial_state, const base::Closure& resume_callback);
  void StartPaired(State initial_state);

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

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

  void OnPinFetched(State initial_state,
                    const base::Closure& resume_callback,
                    const std::string& pin);

  ClientAuthenticationConfig client_auth_config_;
  CreateBaseAuthenticatorCallback create_base_authenticator_callback_;

  // Set to true if a PIN-based authenticator has been requested but has not
  // yet been set.
  bool waiting_for_pin_ = false;

  base::WeakPtrFactory<PairingClientAuthenticator> weak_factory_{this};

  DISALLOW_COPY_AND_ASSIGN(PairingClientAuthenticator);
};

}  // namespace protocol
}  // namespace remoting

#endif  // REMOTING_PROTOCOL_PAIRING_AUTHENTICATOR_H_
