summaryrefslogtreecommitdiffstats
path: root/kabc/ldapclient.h
diff options
context:
space:
mode:
Diffstat (limited to 'kabc/ldapclient.h')
-rw-r--r--kabc/ldapclient.h248
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