2019-09-06 23:43:07 -04:00
|
|
|
#include "db_setup.h"
|
|
|
|
|
|
|
|
// This file is part of MRCI.
|
|
|
|
|
|
|
|
// MRCI 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 3 of the License, or
|
|
|
|
// (at your option) any later version.
|
|
|
|
|
|
|
|
// MRCI 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 MRCI under the LICENSE.md file. If not, see
|
|
|
|
// <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
|
|
bool setupDb(QString *errMsg)
|
|
|
|
{
|
2020-08-09 12:21:33 -04:00
|
|
|
auto ret = true;
|
2019-09-06 23:43:07 -04:00
|
|
|
|
|
|
|
errMsg->clear();
|
|
|
|
|
|
|
|
Query query(QThread::currentThread());
|
2019-11-08 22:06:09 -05:00
|
|
|
|
2019-09-06 23:43:07 -04:00
|
|
|
if (query.inErrorstate())
|
|
|
|
{
|
|
|
|
ret = false;
|
|
|
|
|
|
|
|
errMsg->append("database open failure: \n");
|
|
|
|
errMsg->append(query.errDetail());
|
|
|
|
}
|
|
|
|
|
|
|
|
if (ret)
|
|
|
|
{
|
|
|
|
query.setType(Query::CREATE_TABLE, TABLE_IPHIST);
|
|
|
|
query.addColumn(COLUMN_IPADDR);
|
|
|
|
query.addColumn(COLUMN_TIME);
|
|
|
|
query.addColumn(COLUMN_SESSION_ID);
|
2019-11-08 22:06:09 -05:00
|
|
|
query.addColumn(COLUMN_APP_NAME);
|
2019-09-06 23:43:07 -04:00
|
|
|
query.addColumn(COLUMN_LOGENTRY);
|
|
|
|
|
|
|
|
ret = query.exec();
|
|
|
|
}
|
|
|
|
|
|
|
|
if (ret)
|
|
|
|
{
|
|
|
|
query.setType(Query::CREATE_TABLE, TABLE_MODULES);
|
|
|
|
query.addColumn(COLUMN_MOD_MAIN);
|
|
|
|
query.addUnique(COLUMN_MOD_MAIN);
|
|
|
|
|
|
|
|
ret = query.exec();
|
|
|
|
}
|
|
|
|
|
|
|
|
if (ret)
|
|
|
|
{
|
|
|
|
query.setType(Query::CREATE_TABLE, TABLE_CMD_RANKS);
|
|
|
|
query.addColumn(COLUMN_COMMAND);
|
|
|
|
query.addColumn(COLUMN_HOST_RANK);
|
2019-11-08 22:06:09 -05:00
|
|
|
query.addColumn(COLUMN_MOD_MAIN);
|
2019-09-06 23:43:07 -04:00
|
|
|
|
|
|
|
ret = query.exec();
|
|
|
|
}
|
|
|
|
|
|
|
|
if (ret)
|
|
|
|
{
|
|
|
|
query.setType(Query::CREATE_TABLE, TABLE_CHANNELS);
|
|
|
|
query.addColumn(COLUMN_CHANNEL_ID);
|
|
|
|
query.addColumn(COLUMN_CHANNEL_NAME);
|
|
|
|
query.setPrimaryAsc(COLUMN_CHANNEL_ID);
|
|
|
|
query.addUnique(COLUMN_CHANNEL_NAME);
|
|
|
|
|
|
|
|
ret = query.exec();
|
|
|
|
}
|
|
|
|
|
|
|
|
if (ret)
|
|
|
|
{
|
|
|
|
query.setType(Query::CREATE_TABLE, TABLE_DMESG);
|
|
|
|
query.addColumn(COLUMN_TIME);
|
|
|
|
query.addColumn(COLUMN_LOGENTRY);
|
|
|
|
|
|
|
|
ret = query.exec();
|
|
|
|
}
|
|
|
|
|
|
|
|
if (ret)
|
|
|
|
{
|
|
|
|
query.setType(Query::CREATE_TABLE, TABLE_USERS);
|
|
|
|
query.addColumn(COLUMN_USERNAME);
|
|
|
|
query.addColumn(COLUMN_USER_ID);
|
|
|
|
query.addColumn(COLUMN_EMAIL);
|
|
|
|
query.addColumn(COLUMN_HASH);
|
|
|
|
query.addColumn(COLUMN_SALT);
|
|
|
|
query.addColumn(COLUMN_TIME);
|
|
|
|
query.addColumn(COLUMN_NEED_PASS);
|
|
|
|
query.addColumn(COLUMN_NEED_NAME);
|
|
|
|
query.addColumn(COLUMN_LOCKED);
|
|
|
|
query.addColumn(COLUMN_EMAIL_VERIFIED);
|
|
|
|
query.addColumn(COLUMN_DISPLAY_NAME);
|
2019-11-08 22:06:09 -05:00
|
|
|
query.addColumn(COLUMN_HOST_RANK);
|
|
|
|
query.setPrimary(COLUMN_USER_ID);
|
2019-09-06 23:43:07 -04:00
|
|
|
query.addUnique(COLUMN_USERNAME);
|
|
|
|
query.addUnique(COLUMN_EMAIL);
|
|
|
|
query.addUnique(COLUMN_USER_ID);
|
|
|
|
|
|
|
|
ret = query.exec();
|
|
|
|
}
|
|
|
|
|
|
|
|
if (ret)
|
|
|
|
{
|
|
|
|
query.setType(Query::CREATE_TABLE, TABLE_AUTH_LOG);
|
|
|
|
query.addColumn(COLUMN_IPADDR);
|
|
|
|
query.addColumn(COLUMN_TIME);
|
2019-11-08 22:06:09 -05:00
|
|
|
query.addColumn(COLUMN_USER_ID);
|
2019-09-06 23:43:07 -04:00
|
|
|
query.addColumn(COLUMN_AUTH_ATTEMPT);
|
|
|
|
query.addColumn(COLUMN_RECOVER_ATTEMPT);
|
|
|
|
query.addColumn(COLUMN_ACCEPTED);
|
|
|
|
query.addColumn(COLUMN_COUNT);
|
|
|
|
|
|
|
|
ret = query.exec();
|
|
|
|
}
|
|
|
|
|
|
|
|
if (ret)
|
|
|
|
{
|
|
|
|
query.setType(Query::CREATE_TABLE, TABLE_PW_RECOVERY);
|
|
|
|
query.addColumn(COLUMN_TIME);
|
|
|
|
query.addColumn(COLUMN_HASH);
|
|
|
|
query.addColumn(COLUMN_SALT);
|
|
|
|
query.addColumn(COLUMN_USER_ID);
|
2019-11-08 22:06:09 -05:00
|
|
|
query.addForeign(COLUMN_USER_ID, TABLE_USERS, COLUMN_USER_ID, Query::CASCADE, Query::CASCADE);
|
2019-09-06 23:43:07 -04:00
|
|
|
|
|
|
|
ret = query.exec();
|
|
|
|
}
|
|
|
|
|
|
|
|
if (ret)
|
|
|
|
{
|
|
|
|
query.setType(Query::CREATE_TABLE, TABLE_CH_MEMBERS);
|
|
|
|
query.addColumn(COLUMN_CHANNEL_ID);
|
2019-11-08 22:06:09 -05:00
|
|
|
query.addColumn(COLUMN_USER_ID);
|
2019-09-06 23:43:07 -04:00
|
|
|
query.addColumn(COLUMN_PENDING_INVITE);
|
|
|
|
query.addColumn(COLUMN_ACCESS_LEVEL);
|
|
|
|
query.addForeign(COLUMN_CHANNEL_ID, TABLE_CHANNELS, COLUMN_CHANNEL_ID, Query::CASCADE, Query::CASCADE);
|
2019-11-08 22:06:09 -05:00
|
|
|
query.addForeign(COLUMN_USER_ID, TABLE_USERS, COLUMN_USER_ID, Query::CASCADE, Query::CASCADE);
|
2019-09-06 23:43:07 -04:00
|
|
|
|
|
|
|
ret = query.exec();
|
|
|
|
}
|
|
|
|
|
|
|
|
if (ret)
|
|
|
|
{
|
|
|
|
query.setType(Query::CREATE_TABLE, TABLE_SUB_CHANNELS);
|
|
|
|
query.addColumn(COLUMN_CHANNEL_ID);
|
|
|
|
query.addColumn(COLUMN_SUB_CH_NAME);
|
|
|
|
query.addColumn(COLUMN_SUB_CH_ID);
|
|
|
|
query.addColumn(COLUMN_LOWEST_LEVEL);
|
|
|
|
query.addColumn(COLUMN_ACTIVE_UPDATE);
|
|
|
|
query.addForeign(COLUMN_CHANNEL_ID, TABLE_CHANNELS, COLUMN_CHANNEL_ID, Query::CASCADE, Query::CASCADE);
|
|
|
|
|
|
|
|
ret = query.exec();
|
|
|
|
}
|
|
|
|
|
|
|
|
if (ret)
|
|
|
|
{
|
|
|
|
query.setType(Query::CREATE_TABLE, TABLE_RDONLY_CAST);
|
|
|
|
query.addColumn(COLUMN_CHANNEL_ID);
|
|
|
|
query.addColumn(COLUMN_SUB_CH_ID);
|
|
|
|
query.addColumn(COLUMN_ACCESS_LEVEL);
|
|
|
|
query.addForeign(COLUMN_CHANNEL_ID, TABLE_CHANNELS, COLUMN_CHANNEL_ID, Query::CASCADE, Query::CASCADE);
|
|
|
|
|
|
|
|
ret = query.exec();
|
|
|
|
}
|
|
|
|
|
|
|
|
if (query.inErrorstate())
|
|
|
|
{
|
|
|
|
errMsg->append("main setup: \n");
|
|
|
|
errMsg->append(query.errDetail());
|
|
|
|
}
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
}
|