From 56c24ce8b750d871a5c4455ce354279b5e29f38f Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 1 May 2014 11:09:35 -0700 Subject: [PATCH] present QWebView for OAuth authorization in interface --- domain-server/src/DomainServer.cpp | 1 - interface/src/Application.cpp | 6 +++- interface/src/DatagramProcessor.cpp | 4 ++- interface/src/ui/OAuthWebViewHandler.cpp | 36 ++++++++++++++++++++++++ interface/src/ui/OAuthWebViewHandler.h | 32 +++++++++++++++++++++ 5 files changed, 76 insertions(+), 3 deletions(-) create mode 100644 interface/src/ui/OAuthWebViewHandler.cpp create mode 100644 interface/src/ui/OAuthWebViewHandler.h diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index 684db8e959..045436affa 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -454,7 +454,6 @@ QUrl DomainServer::oauthAuthorizationURL() { authorizationQuery.addQueryItem(OAUTH_RESPONSE_TYPE_QUERY_KEY, OAUTH_REPSONSE_TYPE_QUERY_VALUE); QString redirectURL = QString("https://%1:%2/oauth").arg(_hostname).arg(_httpsManager->serverPort()); - qDebug() << "redirect URL is" << redirectURL; const QString OAUTH_REDIRECT_URI_QUERY_KEY = "redirect_uri"; authorizationQuery.addQueryItem(OAUTH_REDIRECT_URI_QUERY_KEY, redirectURL); diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 97b5c05f25..e052ff8cf7 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -79,9 +79,10 @@ #include "scripting/SettingsScriptingInterface.h" #include "ui/InfoView.h" +#include "ui/OAuthWebviewHandler.h" #include "ui/Snapshot.h" -#include "ui/TextRenderer.h" #include "ui/Stats.h" +#include "ui/TextRenderer.h" using namespace std; @@ -354,6 +355,9 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) : } //When -url in command line, teleport to location urlGoTo(argc, constArgv); + + // call the OAuthWebviewHandler static getter so that its instance lives in our thread + OAuthWebViewHandler::getInstance(); } Application::~Application() { diff --git a/interface/src/DatagramProcessor.cpp b/interface/src/DatagramProcessor.cpp index 9b34b3b651..70e791f59d 100644 --- a/interface/src/DatagramProcessor.cpp +++ b/interface/src/DatagramProcessor.cpp @@ -15,6 +15,7 @@ #include "Application.h" #include "Menu.h" +#include "ui/OAuthWebviewHandler.h" #include "DatagramProcessor.h" @@ -118,7 +119,8 @@ void DatagramProcessor::processDatagrams() { QUrl authorizationURL; readStream >> authorizationURL; - qDebug() << "the authorization URL sent from the server is" << authorizationURL; + QMetaObject::invokeMethod(&OAuthWebViewHandler::getInstance(), "displayWebviewForAuthorizationURL", + Q_ARG(const QUrl&, authorizationURL)); break; } diff --git a/interface/src/ui/OAuthWebViewHandler.cpp b/interface/src/ui/OAuthWebViewHandler.cpp new file mode 100644 index 0000000000..bd33482d41 --- /dev/null +++ b/interface/src/ui/OAuthWebViewHandler.cpp @@ -0,0 +1,36 @@ +// +// OAuthWebViewHandler.cpp +// interface/src/ui +// +// Created by Stephen Birarda on 2014-05-01. +// Copyright 2014 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#include + +#include "Application.h" + +#include "OAuthWebviewHandler.h" + +OAuthWebViewHandler& OAuthWebViewHandler::getInstance() { + static OAuthWebViewHandler sharedInstance; + return sharedInstance; +} + +OAuthWebViewHandler::OAuthWebViewHandler() : + _activeWebView(NULL) +{ + +} + +void OAuthWebViewHandler::displayWebviewForAuthorizationURL(const QUrl& authorizationURL) { + if (!_activeWebView) { + _activeWebView = new QWebView(); + _activeWebView->setWindowFlags(Qt::WindowStaysOnTopHint); + _activeWebView->load(authorizationURL); + _activeWebView->show(); + } +} diff --git a/interface/src/ui/OAuthWebViewHandler.h b/interface/src/ui/OAuthWebViewHandler.h new file mode 100644 index 0000000000..6f8d140d87 --- /dev/null +++ b/interface/src/ui/OAuthWebViewHandler.h @@ -0,0 +1,32 @@ +// +// OAuthWebviewHandler.h +// interface/src/ui +// +// Created by Stephen Birarda on 2014-05-01. +// Copyright 2014 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#ifndef hifi_OAuthWebviewHandler_h +#define hifi_OAuthWebviewHandler_h + +#include + +class QWebView; + +class OAuthWebViewHandler : public QObject { + Q_OBJECT +public: + OAuthWebViewHandler(); + static OAuthWebViewHandler& getInstance(); + +public slots: + void displayWebviewForAuthorizationURL(const QUrl& authorizationURL); + +private: + QWebView* _activeWebView; +}; + +#endif // hifi_OAuthWebviewHandler_h \ No newline at end of file