ldap: Some cleanups for GH-170
[quassel.git] / src / core / ldapauthenticator.h
index c6ee7f1..a149806 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-2015 by the Quassel Project                        *
+ *   Copyright (C) 2005-2016 by the Quassel Project                        *
  *   devel@quassel-irc.org                                                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.         *
  ***************************************************************************/
 
-#ifndef LDAPAUTHENTICATOR_H
-#define LDAPAUTHENTICATOR_H
+/* This file contains an implementation of an LDAP Authenticator, as an example
+ * of what a custom external auth provider could do.
+ *
+ * It's based off of this pull request for quassel by abustany:
+ * https://github.com/quassel/quassel/pull/4/
+ *
+ */
+
+#pragma once
 
 #include "authenticator.h"
 
+#include "core.h"
+
+// Link against LDAP.
+/* We should use openldap on windows if at all possible, rather than trying to
+ * write some kind of compatiblity routine.
+#ifdef Q_CC_MSVC
+#include <windows.h>
+#include <winldap.h>
+#else*/
+#include <ldap.h>
+//#endif
+
+// Default LDAP server port.
+#define DEFAULT_LDAP_PORT 389
+
 class LdapAuthenticator : public Authenticator
 {
     Q_OBJECT
@@ -33,28 +55,40 @@ public:
 
 public slots:
     /* General */
-    virtual bool isAvailable() const;
-    virtual QString displayName() const;
-    virtual QString description() const;
+    bool isAvailable() const;
+    QString backendId() const;
+    QString description() const;
     virtual QStringList setupKeys() const;
     virtual QVariantMap setupDefaults() const;
 
-    /* User handling */
-    virtual UserId getUserId(const QString &username);
+    virtual inline bool canChangePassword() const { return false; }
+
+    bool setup(const QVariantMap &settings = QVariantMap());
+    State init(const QVariantMap &settings = QVariantMap());
+    UserId validateUser(const QString &user, const QString &password);
+
 protected:
-       // Protecte methods for retrieving info about the LDAP connection.
-       inline virtual QString hostName() { return _hostName; }
-       inline virtual int port() { return _port; }
-       inline virtual QString bindDN() { return _bindDN; }
-       inline virtual QString baseDN() { return _baseDN; }
-       
+    virtual void setConnectionProperties(const QVariantMap &properties);
+    bool ldapConnect();
+    void ldapDisconnect();
+    bool ldapAuth(const QString &username, const QString &password);
+
+    // Protected methods for retrieving info about the LDAP connection.
+    inline virtual QString hostName() { return _hostName; }
+    inline virtual int port() { return _port; }
+    inline virtual QString bindDN() { return _bindDN; }
+    inline virtual QString baseDN() { return _baseDN; }
+
 private:
     QString _hostName;
     int _port;
-       QString _bindDN;
-       QString _baseDN;
-};
+    QString _bindDN;
+    QString _baseDN;
+    QString _filter;
+    QString _bindPassword;
+    QString _uidAttribute;
 
+    // The actual connection object.
+    LDAP *_connection;
 
-#endif
+};