1// Copyright (c) 2011 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#ifndef JINGLE_NOTIFIER_BASE_GAIA_TOKEN_PRE_XMPP_AUTH_H_
6#define JINGLE_NOTIFIER_BASE_GAIA_TOKEN_PRE_XMPP_AUTH_H_
7
8#include <string>
9#include <vector>
10
11#include "base/compiler_specific.h"
12#include "talk/xmpp/prexmppauth.h"
13
14namespace notifier {
15
16// This class implements buzz::PreXmppAuth interface for token-based
17// authentication in GTalk. It looks for the X-GOOGLE-TOKEN auth mechanism
18// and uses that instead of the default auth mechanism (PLAIN).
19class GaiaTokenPreXmppAuth : public buzz::PreXmppAuth {
20 public:
21  GaiaTokenPreXmppAuth(const std::string& username, const std::string& token,
22                       const std::string& token_service,
23                       const std::string& auth_mechanism);
24
25  virtual ~GaiaTokenPreXmppAuth();
26
27  // buzz::PreXmppAuth (-buzz::SaslHandler) implementation.  We stub
28  // all the methods out as we don't actually do any authentication at
29  // this point.
30  virtual void StartPreXmppAuth(const buzz::Jid& jid,
31                                const rtc::SocketAddress& server,
32                                const rtc::CryptString& pass,
33                                const std::string& auth_mechanism,
34                                const std::string& auth_token) OVERRIDE;
35
36  virtual bool IsAuthDone() const OVERRIDE;
37
38  virtual bool IsAuthorized() const OVERRIDE;
39
40  virtual bool HadError() const OVERRIDE;
41
42  virtual int GetError() const OVERRIDE;
43
44  virtual buzz::CaptchaChallenge GetCaptchaChallenge() const OVERRIDE;
45
46  virtual std::string GetAuthToken() const OVERRIDE;
47
48  virtual std::string GetAuthMechanism() const OVERRIDE;
49
50  // buzz::SaslHandler implementation.
51
52  virtual std::string ChooseBestSaslMechanism(
53      const std::vector<std::string>& mechanisms, bool encrypted) OVERRIDE;
54
55  virtual buzz::SaslMechanism* CreateSaslMechanism(
56      const std::string& mechanism) OVERRIDE;
57
58 private:
59  std::string username_;
60  std::string token_;
61  std::string token_service_;
62  std::string auth_mechanism_;
63};
64
65}  // namespace notifier
66
67#endif  // JINGLE_NOTIFIER_BASE_GAIA_TOKEN_PRE_XMPP_AUTH_H_
68