- add sources.
[platform/framework/web/crosswalk.git] / src / jingle / notifier / base / gaia_token_pre_xmpp_auth.cc
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 #include "jingle/notifier/base/gaia_token_pre_xmpp_auth.h"
6
7 #include <algorithm>
8
9 #include "base/basictypes.h"
10 #include "base/logging.h"
11 #include "talk/base/socketaddress.h"
12 #include "talk/xmpp/constants.h"
13 #include "talk/xmpp/saslcookiemechanism.h"
14
15 namespace notifier {
16
17 namespace {
18
19 class GaiaCookieMechanism : public buzz::SaslCookieMechanism {
20  public:
21   GaiaCookieMechanism(const std::string & mechanism,
22                       const std::string & username,
23                       const std::string & cookie,
24                       const std::string & token_service)
25       : buzz::SaslCookieMechanism(
26           mechanism, username, cookie, token_service) {}
27
28   virtual ~GaiaCookieMechanism() {}
29
30   virtual buzz::XmlElement* StartSaslAuth() OVERRIDE {
31     buzz::XmlElement* auth = buzz::SaslCookieMechanism::StartSaslAuth();
32     // These attributes are necessary for working with non-gmail gaia
33     // accounts.
34     const std::string NS_GOOGLE_AUTH_PROTOCOL(
35         "http://www.google.com/talk/protocol/auth");
36     const buzz::QName QN_GOOGLE_ALLOW_GENERATED_JID_XMPP_LOGIN(
37         NS_GOOGLE_AUTH_PROTOCOL, "allow-generated-jid");
38     const buzz::QName QN_GOOGLE_AUTH_CLIENT_USES_FULL_BIND_RESULT(
39         NS_GOOGLE_AUTH_PROTOCOL, "client-uses-full-bind-result");
40     auth->SetAttr(QN_GOOGLE_ALLOW_GENERATED_JID_XMPP_LOGIN, "true");
41     auth->SetAttr(QN_GOOGLE_AUTH_CLIENT_USES_FULL_BIND_RESULT, "true");
42     return auth;
43   }
44
45  private:
46   DISALLOW_COPY_AND_ASSIGN(GaiaCookieMechanism);
47 };
48
49 }  // namespace
50
51 GaiaTokenPreXmppAuth::GaiaTokenPreXmppAuth(
52     const std::string& username,
53     const std::string& token,
54     const std::string& token_service,
55     const std::string& auth_mechanism)
56     : username_(username),
57       token_(token),
58       token_service_(token_service),
59       auth_mechanism_(auth_mechanism) {
60   DCHECK(!auth_mechanism_.empty());
61 }
62
63 GaiaTokenPreXmppAuth::~GaiaTokenPreXmppAuth() { }
64
65 void GaiaTokenPreXmppAuth::StartPreXmppAuth(
66     const buzz::Jid& jid,
67     const talk_base::SocketAddress& server,
68     const talk_base::CryptString& pass,
69     const std::string& auth_mechanism,
70     const std::string& auth_token) {
71   SignalAuthDone();
72 }
73
74 bool GaiaTokenPreXmppAuth::IsAuthDone() const {
75   return true;
76 }
77
78 bool GaiaTokenPreXmppAuth::IsAuthorized() const {
79   return true;
80 }
81
82 bool GaiaTokenPreXmppAuth::HadError() const {
83   return false;
84 }
85
86 int GaiaTokenPreXmppAuth::GetError() const {
87   return 0;
88 }
89
90 buzz::CaptchaChallenge GaiaTokenPreXmppAuth::GetCaptchaChallenge() const {
91   return buzz::CaptchaChallenge();
92 }
93
94 std::string GaiaTokenPreXmppAuth::GetAuthToken() const {
95   return token_;
96 }
97
98 std::string GaiaTokenPreXmppAuth::GetAuthMechanism() const {
99   return auth_mechanism_;
100 }
101
102 std::string GaiaTokenPreXmppAuth::ChooseBestSaslMechanism(
103     const std::vector<std::string> & mechanisms, bool encrypted) {
104   return (std::find(mechanisms.begin(), mechanisms.end(), auth_mechanism_) !=
105               mechanisms.end())
106              ? auth_mechanism_
107              : std::string();
108 }
109
110 buzz::SaslMechanism* GaiaTokenPreXmppAuth::CreateSaslMechanism(
111     const std::string& mechanism) {
112   if (mechanism == auth_mechanism_)
113     return new GaiaCookieMechanism(
114         mechanism, username_, token_, token_service_);
115   return NULL;
116 }
117
118 }  // namespace notifier