From a3db7b0513f7bebe07b02ea8d85a5267b82fd65f Mon Sep 17 00:00:00 2001 From: Dimitar Date: Tue, 5 Jan 2016 14:56:29 +0100 Subject: [PATCH 1/3] Content-type property added --- src/o2replyserver.cpp | 13 ++++++++++++- src/o2replyserver.h | 6 +++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/o2replyserver.cpp b/src/o2replyserver.cpp index 8b3479e..25f9ae0 100644 --- a/src/o2replyserver.cpp +++ b/src/o2replyserver.cpp @@ -19,6 +19,7 @@ O2ReplyServer::O2ReplyServer(QObject *parent): QTcpServer(parent) { connect(this, SIGNAL(newConnection()), this, SLOT(onIncomingConnection())); replyContent_ = ""; + replyContentType_ = "Content-Type: text/html; charset=\"utf-8\""; } O2ReplyServer::~O2ReplyServer() { @@ -37,7 +38,7 @@ void O2ReplyServer::onBytesReady() { } QByteArray reply; reply.append("HTTP/1.0 200 OK \r\n"); - reply.append("Content-Type: text/html; charset=\"utf-8\"\r\n"); + reply.append(replyContentType_ + "\r\n"); reply.append(QString("Content-Length: %1\r\n\r\n").arg(replyContent_.size())); reply.append(replyContent_); socket->write(reply); @@ -86,3 +87,13 @@ void O2ReplyServer::setReplyContent(const QByteArray& value) { replyContent_ = value; } + +QByteArray O2ReplyServer::replyContentType() +{ + return replyContentType_; +} + +void O2ReplyServer::setReplyContentType(const QByteArray& value) +{ + replyContentType_ = value; +} diff --git a/src/o2replyserver.h b/src/o2replyserver.h index f4bfcbb..ff3297f 100644 --- a/src/o2replyserver.h +++ b/src/o2replyserver.h @@ -19,6 +19,10 @@ class O2ReplyServer: public QTcpServer { QByteArray replyContent(); void setReplyContent(const QByteArray &value); + Q_PROPERTY(QByteArray replyContentType READ replyContentType WRITE setReplyContentType) + QByteArray replyContentType(); + void setReplyContentType(const QByteArray &value); + signals: void verificationReceived(QMap); @@ -28,7 +32,7 @@ public slots: QMap parseQueryParams(QByteArray *data); protected: - QByteArray replyContent_; + QByteArray replyContent_, replyContentType_; }; #endif // O2REPLYSERVER_H From 0ea608094f845e36aaec5f25aa729dc66793a9d5 Mon Sep 17 00:00:00 2001 From: Dimitar Date: Tue, 5 Jan 2016 15:04:04 +0100 Subject: [PATCH 2/3] Content-type property added --- src/o2.cpp | 10 ++++++++++ src/o2.h | 4 ++++ 2 files changed, 14 insertions(+) diff --git a/src/o2.cpp b/src/o2.cpp index a92c291..c768f31 100644 --- a/src/o2.cpp +++ b/src/o2.cpp @@ -499,6 +499,16 @@ void O2::setReplyContent(const QByteArray& value) replyServer_->setReplyContent(value); } +QByteArray O2::replyContentType() +{ + return replyServer_->replyContentType(); +} + +void O2::setReplyContentType(const QByteArray& value) +{ + replyServer_->setReplyContentType(value); +} + bool O2::ignoreSslErrors() { return timedReplies_.ignoreSslErrors(); diff --git a/src/o2.h b/src/o2.h index 0769ef0..2076600 100644 --- a/src/o2.h +++ b/src/o2.h @@ -109,6 +109,10 @@ class O2: public QObject { QByteArray replyContent(); void setReplyContent(const QByteArray &value); + Q_PROPERTY(QByteArray replyContentType READ replyContentType WRITE setReplyContentType) + QByteArray replyContentType(); + void setReplyContentType(const QByteArray &value); + /// E.g. SurveyMonkey fails on Mac due to Ssl Error. Ignoring the error circumvents the problem Q_PROPERTY(bool ignoreSslErrors READ ignoreSslErrors WRITE setIgnoreSslErrors) bool ignoreSslErrors(); From be0ff43d70e34dcc415c45d960a7b99d79ed1574 Mon Sep 17 00:00:00 2001 From: Dimitar Date: Sat, 26 Mar 2016 04:35:03 +0100 Subject: [PATCH 3/3] Skip invalid response from Chrome Chrome sends an invalid response after o2auth, which leads to O2::onTokenReplyError being called and the bad alarm signals wrongfully emitted. This just skips it. --- src/o2.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/o2.cpp b/src/o2.cpp index c768f31..820fec8 100644 --- a/src/o2.cpp +++ b/src/o2.cpp @@ -265,6 +265,8 @@ bool O2::linked() { void O2::onVerificationReceived(const QMap response) { trace() << "O2::onVerificationReceived"; trace() << "" << response; + if (response.isEmpty()) //Chrome (Firefox, IE and Safari do not) sends one of these + return; //after normal one, which ends up as an error "Missing required parameter(s): code" - so just skip it emit closeBrowser(); if (response.contains("error")) {