Migration to mysql and update request auth

This commit is contained in:
ondra 2020-12-10 19:13:36 +01:00
parent cca1851386
commit 8aa786fa51
8 changed files with 65 additions and 6 deletions

2
.gitignore vendored
View File

@ -33,7 +33,7 @@ __pycache__
# Python
*.pyc
# CMake
# cmake
*.txt.user
*.txt.user.*

View File

@ -63,6 +63,30 @@ bool DatabaseManager::openPostgres(const QString &host, const QString &dbName, c
return res;
}
bool DatabaseManager::openMysql(const QString &host, const QString &dbName, const QString &user, const QString &password, const QString &connectionName)
{
Q_ASSERT_X(mConnectionName.isEmpty(), "open postgres", "Expecting only one database per DatabaseManager");
mConnectionName = connectionName;
mDatabase = QSqlDatabase::addDatabase("QMYSQL", mConnectionName);
mDatabase.setDatabaseName(dbName);
mDatabase.setHostName(host);
mDatabase.setUserName(user);
// Froward testing -->>
mDatabase.setPort(3308);
mDatabase.setPassword(password);
// @see https://www.qtcentre.org/threads/39913-QSqlDatabase-connection-timeout
int res = mDatabase.open();
if (!res) {
qInfo(sdkdb) << "Not possible to open database from url:" << host;
qInfo(sdkdb) << "Error:" << mDatabase.lastError().text();
}
return res;
}
bool DatabaseManager::isValid() const
{
@ -93,10 +117,10 @@ QSqlQuery DatabaseManager::executeQuery(QSqlQuery &query, const QString &sqlText
// isSelect is needed for correct bahaviour of 'dryMode' only select should be executed
QString sqlStatement = sqlText;
bool isSelect = false;
if ( sqlText.isEmpty()) {
if ( sqlStatement.isEmpty()) {
sqlStatement = getLastQuery(query);
}
if (sqlText.startsWith("SELECT", Qt::CaseInsensitive)) {
if (sqlStatement.startsWith("SELECT", Qt::CaseInsensitive)) {
isSelect = true;
}

View File

@ -27,6 +27,7 @@ public:
bool openSQLite(const QString &path, const QString &connectionName = QStringLiteral("qt_sql_default_connection"));
bool openPostgres(const QString& host, const QString& dbName, const QString& user, const QString& password, const QString &connectionName = QStringLiteral("qt_sql_default_connection"));
bool openMysql(const QString &host, const QString &dbName, const QString &user, const QString &password, const QString &connectionName = QStringLiteral("qt_sql_default_connection"));
bool isValid() const;
bool isOpen() const;
void close();

View File

@ -35,6 +35,7 @@ QByteArray DatabaseTable::jsonData(const QSet<QString> &filters) const
bool DatabaseTable::fromJson(const QByteArray &data)
{
// in: JSON ( e.g. {"id": 300} )
qDebug(sdkdb) << "Response:" << data;
QJsonDocument doc = QJsonDocument::fromJson(data);
QVariantMap variant = qvariant_cast<QVariantMap>(doc.toVariant());

View File

@ -160,9 +160,17 @@ qint64 Request::getProcessTime()
return -1;
}
void Request::addHeader(const QString &name, const QString &value)
{
header.insert(name, value);
}
} // core
QDebug operator <<(QDebug dbg, serversdk::Request *request)
{
dbg.noquote() << request->type() << request->url() << "data:" << request->requestData() << "header:" << request->networkReply()->rawHeaderList();

View File

@ -5,6 +5,7 @@
#include <QDateTime>
#include <QNetworkReply>
#include <memory>
#include <QMap>
namespace serversdk {
@ -26,6 +27,7 @@ public:
void setRequestData(const QByteArray &requestData);
QByteArray responseData() const;
// Attributes
QString url() const;
void setUrl(const QString &url);
@ -46,6 +48,10 @@ public:
qint64 getProcessTime();
QMap<QString,QString> getHeaders() { return header;}
void addHeader(const QString &name, const QString &value);
private:
// Additional attributes
@ -72,6 +78,8 @@ private:
QByteArray mRequestData;
QByteArray mResponseData;
QMap<QString, QString> header;
// Additional attributes
QDateTime mStartTime;
QDateTime mFinishTime;

View File

@ -32,24 +32,37 @@ bool RequestManager::processRequest(const std::shared_ptr<Request>& request)
QNetworkReply *reply = nullptr;
request->logStartTime();
auto req = request->networkRequest();
if (!request->getHeaders().empty()) {
auto headers = request->getHeaders();
auto keys = headers.keys();
foreach (auto key, keys) {
req.setRawHeader(key.toLocal8Bit(), headers.value(key).toLocal8Bit());
}
}
if (request->type() == "POST") {
if ( request->requestData().isEmpty()) {
qCWarning(sdknetwork) << "Request data is empty -> nothing to send";
}
reply = mNetworkAccessManager.post(request->networkRequest(), request->requestData());
reply = mNetworkAccessManager.post(req, request->requestData());
} else if (request->type() == "GET") {
if ( ! request->requestData().isEmpty()) {
qCWarning(sdknetwork) << "Request data is not empty, and you are trying to use get ( not sending any data)";
}
reply = mNetworkAccessManager.get(request->networkRequest());
reply = mNetworkAccessManager.get(req);
} else if (request->type() == "PUT") {
reply = mNetworkAccessManager.put(request->networkRequest(), request->requestData());
reply = mNetworkAccessManager.put(req, request->requestData());
} else {
qCritical(sdknetwork) << "Using request type:" << request->type() << "is not implemented";
return false;
}
foreach (auto header, reply->request().rawHeaderList()) {
qDebug(sdknetwork) << header << ":" << reply->request().rawHeader(header);
}
Q_ASSERT(reply);
// Adding reply to final request
reply->setParent(nullptr); // ensure QNetworkreply wont be deleted by QNetworkAccessManager ( it is parent of reply )
@ -112,6 +125,8 @@ void RequestManager::downloadProgress(qint64 bytesReceived, qint64 bytesTotal)
}
QByteArray data = reply->readAll();
qDebug(sdknetwork) << data;
// Decompress gzip data
#ifdef CORESDK_ZLIB
if (encoding.toLower() == "gzip" && !data.isEmpty() ) {

View File

@ -40,4 +40,6 @@ private:
bool mIgnoreSsl = false;
};
} // core