diff --git a/data/www/auth.na.html b/data/www/auth.na.html
index 450a2b114..a453c602e 100644
--- a/data/www/auth.na.html
+++ b/data/www/auth.na.html
@@ -32,8 +32,8 @@
-
-
+
+
diff --git a/src/web/api_v1.cpp b/src/web/api_v1.cpp
index 7f936bd02..2e32de572 100644
--- a/src/web/api_v1.cpp
+++ b/src/web/api_v1.cpp
@@ -1,10 +1,11 @@
#include "api_v1.h"
+#include
void
Api_v1::auth_1( QxtWebRequestEvent* event, QString arg )
{
- qDebug() << "AUTH_1 HTTP" << event->url.toString();
+ qDebug() << "AUTH_1 HTTP" << event->url.toString() << arg;
if ( !event->url.hasQueryItem( "website" ) || !event->url.hasQueryItem( "name" ) )
{
@@ -40,27 +41,35 @@ Api_v1::auth_1( QxtWebRequestEvent* event, QString arg )
void
Api_v1::auth_2( QxtWebRequestEvent* event, QString arg )
{
- qDebug() << "AUTH_2 HTTP" << event->url.toString();
- QUrl url = event->url;
- url.setEncodedQuery( event->content->readAll() );
-
- if( !url.hasQueryItem( "website" ) || !url.hasQueryItem( "name" ) || !url.hasQueryItem( "formtoken" ) )
+ qDebug() << "AUTH_2 HTTP" << event->url.toString() << arg;
+ QString params = QUrl::fromPercentEncoding( event->content->readAll() );
+ params = params.mid( params.indexOf( '?' ) );
+ QStringList pieces = params.split( '&' );
+ QHash< QString, QString > queryItems;
+ foreach( const QString& part, pieces ) {
+ QStringList keyval = part.split( '=' );
+ if( keyval.size() == 2 )
+ queryItems.insert( keyval.first(), keyval.last() );
+ else
+ qDebug() << "Failed parsing url parameters: " << part;
+ }
+
+ qDebug() << "has query items:" << pieces;
+ if( !params.contains( "website" ) || !params.contains( "name" ) || !params.contains( "formtoken" ) )
{
qDebug() << "Malformed HTTP resolve request";
- qDebug() << url.hasQueryItem( "website" ) << url.hasQueryItem( "name" ) << url.hasQueryItem( "formtoken" );
send404( event );
return;
}
- QString website = QUrl::fromPercentEncoding( url.queryItemValue( "website" ).toUtf8() );
- QString name = QUrl::fromPercentEncoding( url.queryItemValue( "name" ).toUtf8() );
+ QString website = queryItems[ "website" ];
+ QString name = queryItems[ "name" ];
QByteArray authtoken = uuid().toLatin1();
qDebug() << "HEADERS:" << event->headers;
- if( !url.hasQueryItem( "receiverurl" ) && url.queryItemValue( "receiverurl" ).isEmpty() )
+ if( !queryItems.contains( "receiverurl" ) || queryItems.value( "receiverurl" ).isEmpty() )
{
//no receiver url, so do it ourselves
- QString receiverUrl = QUrl::fromPercentEncoding( url.queryItemValue( "receiverurl" ).toUtf8() );
- if( url.hasQueryItem( "json" ) )
+ if( queryItems.contains( "json" ) )
{
QVariantMap m;
m[ "authtoken" ] = authtoken;
@@ -71,16 +80,16 @@ Api_v1::auth_2( QxtWebRequestEvent* event, QString arg )
{
QString authPage = RESPATH "www/auth.na.html";
QHash< QString, QString > args;
- args[ "authcode" ] = authPage;
- args[ "website" ] = QUrl::fromPercentEncoding( url.queryItemValue( "website" ).toUtf8() );
- args[ "name" ] = QUrl::fromPercentEncoding( url.queryItemValue( "name" ).toUtf8() );
+ args[ "authcode" ] = authtoken;
+ args[ "website" ] = website;
+ args[ "name" ] = name;
sendWebpageWithArgs( event, authPage, args );
}
}
else
{
// do what the client wants
- QUrl receiverurl = QUrl( url.queryItemValue( "receiverurl" ).toUtf8(), QUrl::TolerantMode );
+ QUrl receiverurl = QUrl( queryItems.value( "receiverurl" ), QUrl::TolerantMode );
receiverurl.addEncodedQueryItem( "authtoken", "#" + authtoken );
qDebug() << "Got receiver url:" << receiverurl.toString();
@@ -308,6 +317,10 @@ Api_v1::sendWebpageWithArgs( QxtWebRequestEvent* event, const QString& filenameS
{
html.replace( QString( "<%%1%>" ).arg( param.toUpper() ), args.value( param ).toUtf8() );
}
+ // workaround for receiverurl
+ if( !args.keys().contains( "URL" ) )
+ html.replace( QString( "<%URL%>" ).toLatin1(), QByteArray() );
+
QxtWebPageEvent* e = new QxtWebPageEvent( event->sessionID, event->requestID, html );
postEvent( e );