diff options
Diffstat (limited to 'kabc/ldapclient.h')
-rw-r--r-- | kabc/ldapclient.h | 248 |
1 files changed, 248 insertions, 0 deletions
diff --git a/kabc/ldapclient.h b/kabc/ldapclient.h new file mode 100644 index 000000000..a7bb89ddd --- /dev/null +++ b/kabc/ldapclient.h @@ -0,0 +1,248 @@ +/* kldapclient.h - LDAP access + * Copyright (C) 2002 Klarälvdalens Datakonsult AB + * + * Author: Steffen Hansen <hansen@kde.org> + * + * 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 KABC_LDAPCLIENT_H +#define KABC_LDAPCLIENT_H + + +#include <qobject.h> +#include <qstring.h> +#include <qcstring.h> +#include <qstringlist.h> +#include <qmemarray.h> +#include <qguardedptr.h> +#include <qtimer.h> + +#include <kio/job.h> + +namespace KABC { + +class LdapClient; +typedef QValueList<QByteArray> LdapAttrValue; +typedef QMap<QString,LdapAttrValue > LdapAttrMap; + +/** + * This class is internal. Binary compatibiliy might be broken any time + * without notification. Do not use it. + * + * We mean it! + * + */ +class KABC_EXPORT 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; + LdapAttrMap attrs; + LdapClient* client; + + protected: + void assign( const LdapObject& that ); + + private: + //class LdapObjectPrivate* d; +}; + +/** + * This class is internal. Binary compatibiliy might be broken any time + * without notification. Do not use it. + * + * We mean it! + * + */ +class KABC_EXPORT LdapClient : public QObject +{ + Q_OBJECT + + public: + LdapClient( QObject* parent = 0, const char* name = 0 ); + virtual ~LdapClient(); + + /*! returns true if there is a query running */ + bool isActive() const { return mActive; } + + 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 KABC::LdapObject& ); + + public slots: + /*! + * Set the name or IP of the LDAP server + */ + void setHost( const QString& host ); + QString host() const { return mHost; } + + /*! + * Set the port of the LDAP server + * if using a nonstandard port + */ + void setPort( const QString& port ); + QString port() const { return mPort; } + + /*! + * Set the base DN + */ + void setBase( const QString& base ); + QString base() const { return mBase; } + + /*! + * Set the bind DN + */ + void setBindDN( const QString& bindDN ); + QString bindDN() const; + + /*! + * Set the bind password DN + */ + void setPwdBindDN( const QString& pwdBindDN ); + QString pwdBindDN() const; + + /*! Set the attributes that should be + * returned, or an empty list if + * all attributes are wanted + */ + void setAttrs( const QStringList& attrs ); + QStringList attrs() const { return mAttrs; } + + 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(); + + QString mHost; + QString mPort; + QString mBase; + QString mScope; + QStringList mAttrs; + + QGuardedPtr<KIO::SimpleJob> mJob; + bool mActive; + + LdapObject mCurrentObject; + QCString mBuf; + QCString mLastAttrName; + QCString mLastAttrValue; + bool mIsBase64; + + private: + class LdapClientPrivate; + LdapClientPrivate* d; +}; + +/** + * Structure describing one result returned by a LDAP query + */ +struct LdapResult { + QString name; ///< full name + QString email; ///< email + int clientNumber; ///< for sorting +}; +typedef QValueList<LdapResult> LdapResultList; + + +/** + * This class is internal. Binary compatibiliy might be broken any time + * without notification. Do not use it. + * + * We mean it! + * + */ +class KABC_EXPORT LdapSearch : public QObject +{ + Q_OBJECT + + public: + LdapSearch(); + + void startSearch( const QString& txt ); + void cancelSearch(); + bool isAvailable() const; + + signals: + /// Results, assembled as "Full Name <email>" + /// (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 KABC::LdapResultList& ); + void searchDone(); + + private slots: + void slotLDAPResult( const KABC::LdapObject& ); + void slotLDAPError( const QString& ); + void slotLDAPDone(); + void slotDataTimer(); + + private: + void finish(); + void makeSearchData( QStringList& ret, LdapResultList& resList ); + QValueList< LdapClient* > mClients; + QString mSearchText; + QTimer mDataTimer; + int mActiveClients; + bool mNoLDAPLookup; + QValueList< LdapObject > mResults; + + private: + class LdapSearchPrivate* d; +}; + +} +#endif // KABC_LDAPCLIENT_H |