Implement sender prefix storage in the database
[quassel.git] / src / core / storage.h
index 989f331..fec8d86 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  *
@@ -43,13 +43,10 @@ public:
     };
 
     enum HashVersion {
-        sha1,
-#if QT_VERSION >= 0x050000
-        sha2_512,
-        latest=sha2_512
-#else
-        latest=sha1
-#endif
+        Sha1,
+        Sha2_512,
+        Latest=Sha2_512
+
     };
 
 public slots:
@@ -62,6 +59,10 @@ public slots:
      */
     virtual bool isAvailable() const = 0;
 
+    //! Returns the identifier of the authenticator backend
+    /** \return A string that can be used by the client to identify the authenticator backend */
+    virtual QString backendId() const = 0;
+
     //! Returns the display name of the storage backend
     /** \return A string that can be used by the client to name the storage backend */
     virtual QString displayName() const = 0;
@@ -70,12 +71,14 @@ public slots:
     /** \return A string that can be displayed by the client to describe the storage backend */
     virtual QString description() const = 0;
 
-    //! Returns a list of properties required to use the storage backend
-    virtual QStringList setupKeys() const = 0;
-
-    //! Returns a map where the keys are are properties to use the storage backend
-    /*  the values are QVariants with default values */
-    virtual QVariantMap setupDefaults() const = 0;
+    //! Returns data required to configure the authenticator backend
+    /**
+     * A list of flattened triples for each field: {key, translated field name, default value}
+     * The default value's type determines the kind of input widget to be shown
+     * (int -> QSpinBox; QString -> QLineEdit)
+     * \return A list of triples defining the data to be shown in the configuration dialog
+     */
+    virtual QVariantList setupData() const = 0;
 
     //! Setup the storage provider.
     /** This prepares the storage provider (e.g. create tables, etc.) for use within Quassel.
@@ -106,7 +109,7 @@ public slots:
      *  \param password The cleartext password for the new user
      *  \return The new user's UserId
      */
-    virtual UserId addUser(const QString &user, const QString &password) = 0;
+    virtual UserId addUser(const QString &user, const QString &password, const QString &authenticator = "Database") = 0;
 
     //! Update a core user's password.
     /** \param user     The user's id
@@ -134,6 +137,13 @@ public slots:
      */
     virtual UserId getUserId(const QString &username) = 0;
 
+    //! Get the authentication provider for a given user.
+    /** \param username  The username to validate
+     *  \return The name of the auth provider if the UserId exists, "" otherwise.
+     */
+    virtual QString getUserAuthenticator(const UserId userid) = 0;
+
+
     //! Determine the UserId of the internal user
     /** \return A valid UserId if the password matches the username; 0 else
      */
@@ -425,10 +435,9 @@ private:
     QString hashPasswordSha1(const QString &password);
     bool checkHashedPasswordSha1(const QString &password, const QString &hashedPassword);
 
-#if QT_VERSION >= 0x050000
     QString hashPasswordSha2_512(const QString &password);
     bool checkHashedPasswordSha2_512(const QString &password, const QString &hashedPassword);
-#endif
+    QString sha2_512(const QString &input);
 };