From 460c52653ab0dcca6f19a4f492ed2c5e4e963ab0 Mon Sep 17 00:00:00 2001 From: toma Date: Wed, 25 Nov 2009 17:56:58 +0000 Subject: Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features. BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdepim@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- libkdepim/ldapclient.h | 296 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 296 insertions(+) create mode 100644 libkdepim/ldapclient.h (limited to 'libkdepim/ldapclient.h') diff --git a/libkdepim/ldapclient.h b/libkdepim/ldapclient.h new file mode 100644 index 000000000..5be00e85c --- /dev/null +++ b/libkdepim/ldapclient.h @@ -0,0 +1,296 @@ +/* kldapclient.h - LDAP access + * Copyright (C) 2002 Klar�vdalens Datakonsult AB + * + * Author: Steffen Hansen + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + + +#ifndef KPIM_LDAPCLIENT_H +#define KPIM_LDAPCLIENT_H + + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +namespace KPIM { + +class LdapClient; +typedef QValueList LdapAttrValue; +typedef QMap LdapAttrMap; + +class LdapServer +{ + public: + LdapServer() + : mPort( 389 ), + mTimeLimit(0), + mSizeLimit(0), + mVersion(2), + mSecurity(Sec_None), + mAuth( LdapServer::Anonymous ) + {} + + enum Security{ Sec_None, TLS, SSL }; + enum Auth{ Anonymous, Simple, SASL }; + QString host() const { return mHost; } + int port() const { return mPort; } + const QString &baseDN() const { return mBaseDN; } + const QString &user() const { return mUser; } + const QString &bindDN() const { return mBindDN; } + const QString &pwdBindDN() const { return mPwdBindDN; } + int timeLimit() const { return mTimeLimit; } + int sizeLimit() const { return mSizeLimit; } + int version() const { return mVersion; } + int security() const { return mSecurity; } + int auth() const { return mAuth; } + const QString &mech() const { return mMech; } + + void setHost( const QString &host ) { mHost = host; } + void setPort( int port ) { mPort = port; } + void setBaseDN( const QString &baseDN ) { mBaseDN = baseDN; } + void setUser( const QString &user ) { mUser = user; } + void setBindDN( const QString &bindDN ) { mBindDN = bindDN; } + void setPwdBindDN( const QString &pwdBindDN ) { mPwdBindDN = pwdBindDN; } + void setTimeLimit( int timelimit ) { mTimeLimit = timelimit; } + void setSizeLimit( int sizelimit ) { mSizeLimit = sizelimit; } + void setVersion( int version ) { mVersion = version; } + void setSecurity( int security ) { mSecurity = security; } //0-No, 1-TLS, 2-SSL - KDE4: add an enum to Lda + void setAuth( int auth ) { mAuth = auth; } //0-Anonymous, 1-simple, 2-SASL - KDE4: add an enum to LdapCon + void setMech( const QString &mech ) { mMech = mech; } + + private: + QString mHost; + int mPort; + QString mBaseDN; + QString mUser; + QString mBindDN; + QString mPwdBindDN; + QString mMech; + int mTimeLimit, mSizeLimit, mVersion, mSecurity, mAuth; +}; + + +/** + * This class is internal. Binary compatibiliy might be broken any time + * without notification. Do not use it. + * + * We mean it! + * + */ +class LdapObject +{ + public: + LdapObject() + : dn( QString::null ), client( 0 ) {} + explicit LdapObject( const QString& _dn, LdapClient* _cl ) : dn( _dn ), client( _cl ) {} + LdapObject( const LdapObject& that ) { assign( that ); } + + LdapObject& operator=( const LdapObject& that ) + { + assign( that ); + return *this; + } + + QString toString() const; + + void clear(); + + QString dn; + QString objectClass; + LdapAttrMap attrs; + LdapClient* client; + + protected: + void assign( const LdapObject& that ); + + private: + //class LdapObjectPrivate* d; +}; + +/** + * This class is internal. Binary compatibility might be broken any time + * without notification. Do not use it. + * + * We mean it! + * + */ +class KDE_EXPORT LdapClient : public QObject +{ + Q_OBJECT + + public: + LdapClient( int clientNumber, QObject* parent = 0, const char* name = 0 ); + virtual ~LdapClient(); + + /*! returns true if there is a query running */ + bool isActive() const { return mActive; } + + int clientNumber() const; + int completionWeight() const; + void setCompletionWeight( int ); + + const LdapServer& server() { return mServer; } + void setServer( const LdapServer &server ) { mServer = server; } + /*! Return the attributes that should be + * returned, or an empty list if + * all attributes are wanted + */ + QStringList attrs() const { return mAttrs; } + + signals: + /*! Emitted when the query is done */ + void done(); + + /*! Emitted in case of error */ + void error( const QString& ); + + /*! Emitted once for each object returned + * from the query + */ + void result( const KPIM::LdapObject& ); + + public slots: // why are those slots? + /*! Set the attributes that should be + * returned, or an empty list if + * all attributes are wanted + */ + void setAttrs( const QStringList& attrs ); + + void setScope( const QString scope ) { mScope = scope; } + + /*! + * Start the query with filter filter + */ + void startQuery( const QString& filter ); + + /*! + * Abort a running query + */ + void cancelQuery(); + + protected slots: + void slotData( KIO::Job*, const QByteArray &data ); + void slotInfoMessage( KIO::Job*, const QString &info ); + void slotDone(); + + protected: + void startParseLDIF(); + void parseLDIF( const QByteArray& data ); + void endParseLDIF(); + void finishCurrentObject(); + + LdapServer mServer; + QString mScope; + QStringList mAttrs; + + QGuardedPtr mJob; + bool mActive; + bool mReportObjectClass; + + LdapObject mCurrentObject; + + private: + KABC::LDIF mLdif; + int mClientNumber; + int mCompletionWeight; + +// class LdapClientPrivate; +// LdapClientPrivate* d; +}; + +/** + * Structure describing one result returned by a LDAP query + */ +struct LdapResult { + QString name; ///< full name + QStringList email; ///< emails + int clientNumber; ///< for sorting in a ldap-only lookup + int completionWeight; ///< for sorting in a completion list +}; +typedef QValueList LdapResultList; + + +/** + * This class is internal. Binary compatibiliy might be broken any time + * without notification. Do not use it. + * + * We mean it! + * + */ +class KDE_EXPORT LdapSearch : public QObject +{ + Q_OBJECT + + public: + LdapSearch(); + + static KConfig *config(); + static void readConfig( LdapServer &server, KConfig *config, int num, bool active ); + static void writeConfig( const LdapServer &server, KConfig *config, int j, bool active ); + + void startSearch( const QString& txt ); + void cancelSearch(); + bool isAvailable() const; + + QValueList< LdapClient* > clients() const { return mClients; } + + signals: + /// Results, assembled as "Full Name " + /// (This signal can be emitted many times) + void searchData( const QStringList& ); + /// Another form for the results, with separate fields + /// (This signal can be emitted many times) + void searchData( const KPIM::LdapResultList& ); + void searchDone(); + + private slots: + void slotLDAPResult( const KPIM::LdapObject& ); + void slotLDAPError( const QString& ); + void slotLDAPDone(); + void slotDataTimer(); + void slotFileChanged( const QString& ); + + private: + void readConfig(); + void finish(); + void makeSearchData( QStringList& ret, LdapResultList& resList ); + QValueList< LdapClient* > mClients; + QString mSearchText; + QTimer mDataTimer; + int mActiveClients; + bool mNoLDAPLookup; + QValueList< LdapObject > mResults; + QString mConfigFile; + + private: + static KConfig *s_config; + class LdapSearchPrivate* d; +}; + +} +#endif // KPIM_LDAPCLIENT_H -- cgit v1.2.1