1269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org/* 2269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org * Copyright 2004 The WebRTC Project Authors. All rights reserved. 3269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org * 4269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org * Use of this source code is governed by a BSD-style license 5269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org * that can be found in the LICENSE file in the root of the source 6269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org * tree. An additional intellectual property rights grant can be found 7269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org * in the file PATENTS. All contributing project authors may 8269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org */ 10269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 11269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org#ifndef WEBRTC_LIBJINGLE_XMPP_PLAINSASLHANDLER_H_ 12269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org#define WEBRTC_LIBJINGLE_XMPP_PLAINSASLHANDLER_H_ 13269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 14269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org#include <algorithm> 15269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org#include "webrtc/libjingle/xmpp/saslhandler.h" 16269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org#include "webrtc/libjingle/xmpp/saslplainmechanism.h" 17269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org#include "webrtc/base/cryptstring.h" 18269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 19269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.orgnamespace buzz { 20269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 21269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.orgclass PlainSaslHandler : public SaslHandler { 22269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.orgpublic: 23269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org PlainSaslHandler(const Jid & jid, const rtc::CryptString & password, 24269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org bool allow_plain) : jid_(jid), password_(password), 25269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org allow_plain_(allow_plain) {} 26269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 27269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org virtual ~PlainSaslHandler() {} 28269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 29269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org // Should pick the best method according to this handler 30269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org // returns the empty string if none are suitable 31269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org virtual std::string ChooseBestSaslMechanism(const std::vector<std::string> & mechanisms, bool encrypted) { 32269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 33269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org if (!encrypted && !allow_plain_) { 34269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org return ""; 35269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org } 36269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 37269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org std::vector<std::string>::const_iterator it = std::find(mechanisms.begin(), mechanisms.end(), "PLAIN"); 38269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org if (it == mechanisms.end()) { 39269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org return ""; 40269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org } 41269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org else { 42269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org return "PLAIN"; 43269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org } 44269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org } 45269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 46269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org // Creates a SaslMechanism for the given mechanism name (you own it 47269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org // once you get it). If not handled, return NULL. 48269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org virtual SaslMechanism * CreateSaslMechanism(const std::string & mechanism) { 49269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org if (mechanism == "PLAIN") { 50269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org return new SaslPlainMechanism(jid_, password_); 51269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org } 52269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org return NULL; 53269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org } 54269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 55269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.orgprivate: 56269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org Jid jid_; 57269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org rtc::CryptString password_; 58269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org bool allow_plain_; 59269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org}; 60269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 61269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 62269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org} 63269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 64269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org#endif // WEBRTC_LIBJINGLE_XMPP_PLAINSASLHANDLER_H_ 65