1 /*
2  *  Copyright 2004 The WebRTC Project Authors. All rights reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #ifndef WEBRTC_LIBJINGLE_XMPP_PREXMPPAUTH_H_
12 #define WEBRTC_LIBJINGLE_XMPP_PREXMPPAUTH_H_
13 
14 #include "webrtc/libjingle/xmpp/saslhandler.h"
15 #include "webrtc/base/cryptstring.h"
16 #include "webrtc/base/sigslot.h"
17 
18 namespace rtc {
19   class SocketAddress;
20 }
21 
22 namespace buzz {
23 
24 class Jid;
25 class SaslMechanism;
26 
27 class CaptchaChallenge {
28  public:
CaptchaChallenge()29   CaptchaChallenge() : captcha_needed_(false) {}
CaptchaChallenge(const std::string & token,const std::string & url)30   CaptchaChallenge(const std::string& token, const std::string& url)
31     : captcha_needed_(true), captcha_token_(token), captcha_image_url_(url) {
32   }
33 
captcha_needed()34   bool captcha_needed() const { return captcha_needed_; }
captcha_token()35   const std::string& captcha_token() const { return captcha_token_; }
36 
37   // This url is relative to the gaia server.  Once we have better tools
38   // for cracking URLs, we should probably make this a full URL
captcha_image_url()39   const std::string& captcha_image_url() const { return captcha_image_url_; }
40 
41  private:
42   bool captcha_needed_;
43   std::string captcha_token_;
44   std::string captcha_image_url_;
45 };
46 
47 class PreXmppAuth : public SaslHandler {
48 public:
~PreXmppAuth()49   virtual ~PreXmppAuth() {}
50 
51   virtual void StartPreXmppAuth(
52     const Jid& jid,
53     const rtc::SocketAddress& server,
54     const rtc::CryptString& pass,
55     const std::string& auth_mechanism,
56     const std::string& auth_token) = 0;
57 
58   sigslot::signal0<> SignalAuthDone;
59 
60   virtual bool IsAuthDone() const = 0;
61   virtual bool IsAuthorized() const = 0;
62   virtual bool HadError() const = 0;
63   virtual int GetError() const = 0;
64   virtual CaptchaChallenge GetCaptchaChallenge() const = 0;
65   virtual std::string GetAuthMechanism() const = 0;
66   virtual std::string GetAuthToken() const = 0;
67 };
68 
69 }
70 
71 #endif  // WEBRTC_LIBJINGLE_XMPP_PREXMPPAUTH_H_
72