Add moderator column to the DB and a DB versioning scheme
- Implements a DB versioning system utilizing user_version. - Implements a moderator column to the bans table, for storing the moderator who issued a ban.
This commit is contained in:
parent
4117d6f3b0
commit
ae808bd51b
@ -18,6 +18,8 @@
|
|||||||
#ifndef BAN_MANAGER_H
|
#ifndef BAN_MANAGER_H
|
||||||
#define BAN_MANAGER_H
|
#define BAN_MANAGER_H
|
||||||
|
|
||||||
|
#define DB_VERSION 1
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QDateTime>
|
#include <QDateTime>
|
||||||
#include <QHostAddress>
|
#include <QHostAddress>
|
||||||
@ -268,6 +270,25 @@ private:
|
|||||||
* @brief The backing database that stores user details.
|
* @brief The backing database that stores user details.
|
||||||
*/
|
*/
|
||||||
QSqlDatabase db;
|
QSqlDatabase db;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief The current server DB version.
|
||||||
|
*/
|
||||||
|
int db_version;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief checkVersion Checks the current server DB version.
|
||||||
|
*
|
||||||
|
* @return Returns the server DB version.
|
||||||
|
*/
|
||||||
|
int checkVersion();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief updateDB Updates the server DB to the latest version.
|
||||||
|
*
|
||||||
|
* @param current_version The current DB version.
|
||||||
|
*/
|
||||||
|
void updateDB(int current_version);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // BAN_MANAGER_H
|
#endif // BAN_MANAGER_H
|
||||||
|
@ -24,8 +24,13 @@ DBManager::DBManager() :
|
|||||||
db.setDatabaseName("config/akashi.db");
|
db.setDatabaseName("config/akashi.db");
|
||||||
if (!db.open())
|
if (!db.open())
|
||||||
qCritical() << "Database Error:" << db.lastError();
|
qCritical() << "Database Error:" << db.lastError();
|
||||||
QSqlQuery create_ban_table("CREATE TABLE IF NOT EXISTS bans ('ID' INTEGER, 'IPID' TEXT, 'HDID' TEXT, 'IP' TEXT, 'TIME' INTEGER, 'REASON' TEXT, 'DURATION' INTEGER, PRIMARY KEY('ID' AUTOINCREMENT))");
|
qDebug() << QString::number(DB_VERSION);
|
||||||
|
db_version = checkVersion();
|
||||||
|
qDebug() << QString::number(db_version);
|
||||||
|
QSqlQuery create_ban_table("CREATE TABLE IF NOT EXISTS bans ('ID' INTEGER, 'IPID' TEXT, 'HDID' TEXT, 'IP' TEXT, 'TIME' INTEGER, 'REASON' TEXT, 'DURATION' INTEGER, 'MODERATOR' TEXT, PRIMARY KEY('ID' AUTOINCREMENT))");
|
||||||
QSqlQuery create_user_table("CREATE TABLE IF NOT EXISTS users ('ID' INTEGER, 'USERNAME' TEXT, 'SALT' TEXT, 'PASSWORD' TEXT, 'ACL' TEXT, PRIMARY KEY('ID' AUTOINCREMENT))");
|
QSqlQuery create_user_table("CREATE TABLE IF NOT EXISTS users ('ID' INTEGER, 'USERNAME' TEXT, 'SALT' TEXT, 'PASSWORD' TEXT, 'ACL' TEXT, PRIMARY KEY('ID' AUTOINCREMENT))");
|
||||||
|
if (db_version != DB_VERSION)
|
||||||
|
updateDB(db_version);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DBManager::isIPBanned(QHostAddress ip)
|
bool DBManager::isIPBanned(QHostAddress ip)
|
||||||
@ -361,6 +366,30 @@ QList<DBManager::BanInfo> DBManager::getBanInfo(QString lookup_type, QString id)
|
|||||||
return return_list;
|
return return_list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int DBManager::checkVersion()
|
||||||
|
{
|
||||||
|
QSqlQuery query;
|
||||||
|
query.prepare("PRAGMA user_version");
|
||||||
|
query.exec();
|
||||||
|
if (query.first()) {
|
||||||
|
return query.value(0).toInt();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DBManager::updateDB(int current_version)
|
||||||
|
{
|
||||||
|
switch (current_version) {
|
||||||
|
case 0:
|
||||||
|
QSqlQuery("ALTER TABLE bans ADD COLUMN MODERATOR TEXT");
|
||||||
|
case 1:
|
||||||
|
QSqlQuery ("PRAGMA user_version = " + QString::number(DB_VERSION));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
DBManager::~DBManager()
|
DBManager::~DBManager()
|
||||||
{
|
{
|
||||||
db.close();
|
db.close();
|
||||||
|
Loading…
Reference in New Issue
Block a user