#include "info.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 // . IPHist::IPHist(QObject *parent) : TableViewer(parent) { setParams(TABLE_IPHIST, QStringList() << COLUMN_TIME << COLUMN_IPADDR << COLUMN_SESSION_ID << COLUMN_CLIENT_VER << COLUMN_LOGENTRY, true); } ListDBG::ListDBG(QObject *parent) : TableViewer(parent) { setParams(TABLE_DMESG, QStringList() << COLUMN_TIME << COLUMN_LOGENTRY, true); } ListCommands::ListCommands(QObject *parent) : InternCommand(parent) {} HostInfo::HostInfo(QObject *parent) : InternCommand(parent) {} MyInfo::MyInfo(QObject *parent) : InternCommand(parent) {} CmdInfo::CmdInfo(QObject *parent) : InternCommand(parent) {} QString ListCommands::cmdName() {return "ls_cmds";} QString HostInfo::cmdName() {return "host_info";} QString IPHist::cmdName() {return "ls_act_log";} QString ListDBG::cmdName() {return "ls_dbg";} QString MyInfo::cmdName() {return "my_info";} QString CmdInfo::cmdName() {return "cmd_info";} bool ListCommands::strInRowTxt(const QString &str, const QStringList &rowTxt) { bool ret = false; for (auto&& strInList : rowTxt) { if (strInList.contains(str, Qt::CaseInsensitive)) { ret = true; break; } } return ret; } void ListCommands::procBin(const SharedObjs *sharedObjs, const QByteArray &data, uchar dType) { Q_UNUSED(sharedObjs); if (dType == TEXT) { QString find = getParam("-find", parseArgs(data, 2)); QStringList cmdNames = sharedObjs->cmdNames->values(); QList tableData; QStringList separators; QList justLens; for (int i = 0; i < 3; ++i) { justLens.append(12); separators.append("-------"); } cmdNames.sort(Qt::CaseInsensitive); tableData.append(QStringList() << "command_id" << "command_name" << "summary"); tableData.append(separators); for (auto&& cmdName: cmdNames) { QStringList rowData; quint16 id = sharedObjs->cmdNames->key(cmdName); rowData.append(QString::number(id)); rowData.append(cmdName); rowData.append(rwSharedObjs->commands->value(id)->shortText()); if (find.isEmpty() || strInRowTxt(find, rowData)) { for (int k = 0; k < justLens.size(); ++k) { if (justLens[k] < rowData[k].size()) justLens[k] = rowData[k].size(); } tableData.append(rowData); } } mainTxt("\n"); for (auto&& row : tableData) { for (int i = 0; i < row.size(); ++i) { mainTxt(row[i].leftJustified(justLens[i] + 2, ' ')); } mainTxt("\n"); } } } void HostInfo::procBin(const SharedObjs *sharedObjs, const QByteArray &binIn, uchar dType) { Q_UNUSED(binIn); Q_UNUSED(sharedObjs); if (dType == TEXT) { Query db(this); db.setType(Query::PULL, TABLE_SERV_SETTINGS); db.addColumn(COLUMN_IPADDR); db.addColumn(COLUMN_PORT); db.addColumn(COLUMN_MAXSESSIONS); db.exec(); QString txt; QTextStream txtOut(&txt); txtOut << "Application: " << QCoreApplication::applicationName() << " v" << QCoreApplication::applicationVersion() << " " << QSysInfo::WordSize << "Bit" << endl; txtOut << "Import Rev: " << IMPORT_REV << endl; txtOut << "Host Name: " << QSysInfo::machineHostName() << endl; txtOut << "Host OS: " << QSysInfo::prettyProductName() << endl; txtOut << "Load: " << rdSessionLoad() << "/" << db.getData(COLUMN_MAXSESSIONS).toUInt() << endl; txtOut << "Listening Addr: " << db.getData(COLUMN_IPADDR).toString() << endl; txtOut << "Listening Port: " << db.getData(COLUMN_PORT).toUInt() << endl; mainTxt(txt); } } void MyInfo::procBin(const SharedObjs *sharedObjs, const QByteArray &binIn, uchar dType) { Q_UNUSED(binIn); if (dType == TEXT) { QString txt; QTextStream txtOut(&txt); txtOut << "Session id: " << sharedObjs->sessionId->toHex() << endl; txtOut << "IP Address: " << *sharedObjs->sessionAddr << endl; txtOut << "Logged-in: " << boolStr(!sharedObjs->userName->isEmpty()) << endl; txtOut << "App Name: " << *sharedObjs->appName << endl; if (!sharedObjs->userName->isEmpty()) { Query db(this); db.setType(Query::PULL, TABLE_USERS); db.addColumn(COLUMN_EMAIL); db.addColumn(COLUMN_TIME); db.addColumn(COLUMN_EMAIL_VERIFIED); db.addCondition(COLUMN_USERNAME, *sharedObjs->userName); db.exec(); txtOut << "User Name: " << *sharedObjs->userName << endl; txtOut << "Group Name: " << *sharedObjs->groupName << endl; txtOut << "Display Name: " << *sharedObjs->displayName << endl; txtOut << "User ID: " << sharedObjs->userId->toHex() << endl; txtOut << "Email: " << db.getData(COLUMN_EMAIL).toString() << endl; txtOut << "Register Date: " << db.getData(COLUMN_TIME).toString() << endl; txtOut << "Email Verified: " << boolStr(db.getData(COLUMN_EMAIL_VERIFIED).toBool()) << endl; txtOut << "Owner Override: " << boolStr(*sharedObjs->chOwnerOverride) << endl; txtOut << "Host Rank: " << *sharedObjs->hostRank << endl; } mainTxt(txt); } } void CmdInfo::procBin(const SharedObjs *sharedObjs, const QByteArray &binIn, uchar dType) { if (dType == TEXT) { QStringList args = parseArgs(binIn, 2); QString name = getParam("-cmd_name", args); QString cmdId = getParam("-cmd_id", args); if (name.isEmpty() && cmdId.isEmpty()) { errTxt("err: Command name (-cmd_name) of command id (-cmd_id) parameter not found or is empty.\n"); } else if (!name.isEmpty() && !validCommandName(name)) { errTxt("err: Command name '" + name + "' is not valid.\n"); } else if (!cmdId.isEmpty() && !isInt(cmdId)) { errTxt("err: Command id '" + cmdId + "' is not a valid integer.\n"); } else if (!name.isEmpty() && !sharedObjs->cmdNames->values().contains(name.toLower())) { errTxt("err: No such command name '" + name + "'\n"); } else if (!cmdId.isEmpty() && !sharedObjs->cmdNames->contains(cmdId.toUShort())) { errTxt("err: No such command id '" + cmdId + "'\n"); } else { if (!name.isEmpty()) { cmdId = QString::number(sharedObjs->cmdNames->key(name)); } if (!cmdId.isEmpty()) { name = sharedObjs->cmdNames->value(cmdId.toUShort()); } QString txt; QTextStream txtOut(&txt); ExternCommand *cmdObj = rwSharedObjs->commands->value(cmdId.toUShort()); txtOut << "Command name: " << name << endl; txtOut << "Command id: " << cmdId << endl; txtOut << "Gen file: " << boolStr(cmdObj->handlesGenfile()) << endl << endl; txtOut << "IO:" << endl << endl; txtOut << cmdObj->ioText() << endl << endl; txtOut << "Summary:" << endl << endl; txtOut << cmdObj->shortText() << endl << endl; txtOut << "Details:" << endl << endl; mainTxt(txt); bigTxt(cmdObj->longText()); } } }