// Copyright (c) 2011 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 JINGLE_NOTIFIER_BASE_GAIA_TOKEN_PRE_XMPP_AUTH_H_
#define JINGLE_NOTIFIER_BASE_GAIA_TOKEN_PRE_XMPP_AUTH_H_

#include <string>
#include <vector>

#include "base/compiler_specific.h"
#include "webrtc/libjingle/xmpp/prexmppauth.h"

namespace notifier {

// This class implements buzz::PreXmppAuth interface for token-based
// authentication in GTalk. It looks for the X-GOOGLE-TOKEN auth mechanism
// and uses that instead of the default auth mechanism (PLAIN).
class GaiaTokenPreXmppAuth : public buzz::PreXmppAuth {
 public:
  GaiaTokenPreXmppAuth(const std::string& username, const std::string& token,
                       const std::string& token_service,
                       const std::string& auth_mechanism);

  ~GaiaTokenPreXmppAuth() override;

  // buzz::PreXmppAuth (-buzz::SaslHandler) implementation.  We stub
  // all the methods out as we don't actually do any authentication at
  // this point.
  void StartPreXmppAuth(const buzz::Jid& jid,
                        const rtc::SocketAddress& server,
                        const rtc::CryptString& pass,
                        const std::string& auth_mechanism,
                        const std::string& auth_token) override;

  bool IsAuthDone() const override;

  bool IsAuthorized() const override;

  bool HadError() const override;

  int GetError() const override;

  buzz::CaptchaChallenge GetCaptchaChallenge() const override;

  std::string GetAuthToken() const override;

  std::string GetAuthMechanism() const override;

  // buzz::SaslHandler implementation.

  std::string ChooseBestSaslMechanism(
      const std::vector<std::string>& mechanisms,
      bool encrypted) override;

  buzz::SaslMechanism* CreateSaslMechanism(
      const std::string& mechanism) override;

 private:
  std::string username_;
  std::string token_;
  std::string token_service_;
  std::string auth_mechanism_;
};

}  // namespace notifier

#endif  // JINGLE_NOTIFIER_BASE_GAIA_TOKEN_PRE_XMPP_AUTH_H_
