Hello community,

here is the log from the commit of package libqt5-qtnetworkauth for 
openSUSE:Factory checked in at 2019-06-28 16:28:55
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libqt5-qtnetworkauth (Old)
 and      /work/SRC/openSUSE:Factory/.libqt5-qtnetworkauth.new.4615 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libqt5-qtnetworkauth"

Fri Jun 28 16:28:55 2019 rev:13 rq:711187 version:5.13.0

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/libqt5-qtnetworkauth/libqt5-qtnetworkauth.changes    
    2019-04-26 22:53:16.405360631 +0200
+++ 
/work/SRC/openSUSE:Factory/.libqt5-qtnetworkauth.new.4615/libqt5-qtnetworkauth.changes
      2019-06-28 16:29:08.818170764 +0200
@@ -1,0 +2,23 @@
+Wed Jun 19 11:24:08 UTC 2019 - fab...@ritter-vogt.de
+
+- Update to 5.13.0:
+  * New bugfix release
+  * No changelog available
+  * For more details about Qt 5.13 please see:
+  * 
http://code.qt.io/cgit/qt/qtnetworkauth.git/plain/dist/changes-5.13.0/?h=5.13
+
+-------------------------------------------------------------------
+Tue Jun  4 07:24:54 UTC 2019 - fab...@ritter-vogt.de
+
+- Update to 5.13.0-rc:
+  * New bugfix release
+  * No changelog available
+
+-------------------------------------------------------------------
+Mon Apr 29 09:16:45 UTC 2019 - fab...@ritter-vogt.de
+
+- Update to 5.13.0-beta2:
+  * New bugfix release
+  * No changelog available
+
+-------------------------------------------------------------------
@@ -9,0 +33,8 @@
+Thu Mar 21 10:25:56 UTC 2019 - fab...@ritter-vogt.de
+
+- Update to 5.13.0-beta1:
+  * New feature release
+  * For more details about Qt 5.13 please see:
+  * 
http://code.qt.io/cgit/qt/qtnetworkauth.git/plain/dist/changes-5.13.0/?h=5.13
+
+-------------------------------------------------------------------
@@ -277,0 +309 @@
+

Old:
----
  qtnetworkauth-everywhere-src-5.12.3.tar.xz

New:
----
  qtnetworkauth-everywhere-src-5.13.0.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libqt5-qtnetworkauth.spec ++++++
--- /var/tmp/diff_new_pack.bJB6YK/_old  2019-06-28 16:29:10.102172705 +0200
+++ /var/tmp/diff_new_pack.bJB6YK/_new  2019-06-28 16:29:10.126172741 +0200
@@ -21,17 +21,17 @@
 %define libname libQt5NetworkAuth5
 
 Name:           libqt5-qtnetworkauth
-Version:        5.12.3
+Version:        5.13.0
 Release:        0
 Summary:        Qt 5 NetworkAuth Library
 License:        LGPL-2.1-with-Qt-Company-Qt-exception-1.1 or LGPL-3.0-only
 Group:          Development/Libraries/X11
 Url:            http://qt.io
 %define base_name libqt5
-%define real_version 5.12.3
-%define so_version 5.12.3
-%define tar_version qtnetworkauth-everywhere-src-5.12.3
-Source:         
https://download.qt.io/official_releases/qt/5.12/%{real_version}/submodules/%{tar_version}.tar.xz
+%define real_version 5.13.0
+%define so_version 5.13.0
+%define tar_version qtnetworkauth-everywhere-src-5.13.0
+Source:         
https://download.qt.io/official_releases/qt/5.13/%{real_version}/submodules/%{tar_version}.tar.xz
 Source1:        baselibs.conf
 BuildRequires:  libQt5Core-private-headers-devel >= %{version}
 BuildRequires:  libqt5-qtbase-devel >= %{version}

++++++ qtnetworkauth-everywhere-src-5.12.3.tar.xz -> 
qtnetworkauth-everywhere-src-5.13.0.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qtnetworkauth-everywhere-src-5.12.3/.qmake.conf 
new/qtnetworkauth-everywhere-src-5.13.0/.qmake.conf
--- old/qtnetworkauth-everywhere-src-5.12.3/.qmake.conf 2019-04-02 
10:44:54.000000000 +0200
+++ new/qtnetworkauth-everywhere-src-5.13.0/.qmake.conf 2019-05-08 
10:49:57.000000000 +0200
@@ -2,4 +2,4 @@
 
 CONFIG += warning_clean
 
-MODULE_VERSION = 5.12.3
+MODULE_VERSION = 5.13.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qtnetworkauth-everywhere-src-5.12.3/.tag 
new/qtnetworkauth-everywhere-src-5.13.0/.tag
--- old/qtnetworkauth-everywhere-src-5.12.3/.tag        2019-04-02 
10:44:54.000000000 +0200
+++ new/qtnetworkauth-everywhere-src-5.13.0/.tag        2019-05-08 
10:49:57.000000000 +0200
@@ -1 +1 @@
-0da27832617a17788da4fdd6838f8aa6d8c70f65
+8bc01cbfe15843ab0ea6e9b9731c4eab83dec1ab
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-5.12.3/dist/changes-5.13.0 
new/qtnetworkauth-everywhere-src-5.13.0/dist/changes-5.13.0
--- old/qtnetworkauth-everywhere-src-5.12.3/dist/changes-5.13.0 1970-01-01 
01:00:00.000000000 +0100
+++ new/qtnetworkauth-everywhere-src-5.13.0/dist/changes-5.13.0 2019-05-08 
10:49:57.000000000 +0200
@@ -0,0 +1,30 @@
+Qt 5.13 introduces many new features and improvements as well as bugfixes
+over the 5.12.x series. For more details, refer to the online documentation
+included in this distribution. The documentation is also available online:
+
+https://doc.qt.io/qt-5/index.html
+
+The Qt version 5.13 series is binary compatible with the 5.12.x series.
+Applications compiled for 5.12 will continue to run with 5.13.
+
+Some of the changes listed in this file include issue tracking numbers
+corresponding to tasks in the Qt Bug Tracker:
+
+https://bugreports.qt.io/
+
+Each of these identifiers can be entered in the bug tracker to obtain more
+information about a particular change.
+
+****************************************************************************
+*                              QAbstractOAuth                              *
+****************************************************************************
+
+ - Added prepareRequest and sendCustomRequest methods to authenticate any
+   custom request, including custom verbs and bodies.
+
+****************************************************************************
+*                             QOAuth1Signature                             *
+****************************************************************************
+
+ - Added customMethodString and setCustomMethodString methods to support
+   signing requests with custom methods.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-5.12.3/include/QtNetworkAuth/5.12.3/QtNetworkAuth/private/qabstractoauth2_p.h
 
new/qtnetworkauth-everywhere-src-5.13.0/include/QtNetworkAuth/5.12.3/QtNetworkAuth/private/qabstractoauth2_p.h
--- 
old/qtnetworkauth-everywhere-src-5.12.3/include/QtNetworkAuth/5.12.3/QtNetworkAuth/private/qabstractoauth2_p.h
      2019-04-02 10:44:54.000000000 +0200
+++ 
new/qtnetworkauth-everywhere-src-5.13.0/include/QtNetworkAuth/5.12.3/QtNetworkAuth/private/qabstractoauth2_p.h
      1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-#include "../../../../../src/oauth/qabstractoauth2_p.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-5.12.3/include/QtNetworkAuth/5.12.3/QtNetworkAuth/private/qabstractoauth_p.h
 
new/qtnetworkauth-everywhere-src-5.13.0/include/QtNetworkAuth/5.12.3/QtNetworkAuth/private/qabstractoauth_p.h
--- 
old/qtnetworkauth-everywhere-src-5.12.3/include/QtNetworkAuth/5.12.3/QtNetworkAuth/private/qabstractoauth_p.h
       2019-04-02 10:44:54.000000000 +0200
+++ 
new/qtnetworkauth-everywhere-src-5.13.0/include/QtNetworkAuth/5.12.3/QtNetworkAuth/private/qabstractoauth_p.h
       1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-#include "../../../../../src/oauth/qabstractoauth_p.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-5.12.3/include/QtNetworkAuth/5.12.3/QtNetworkAuth/private/qabstractoauthreplyhandler_p.h
 
new/qtnetworkauth-everywhere-src-5.13.0/include/QtNetworkAuth/5.12.3/QtNetworkAuth/private/qabstractoauthreplyhandler_p.h
--- 
old/qtnetworkauth-everywhere-src-5.12.3/include/QtNetworkAuth/5.12.3/QtNetworkAuth/private/qabstractoauthreplyhandler_p.h
   2019-04-02 10:44:54.000000000 +0200
+++ 
new/qtnetworkauth-everywhere-src-5.13.0/include/QtNetworkAuth/5.12.3/QtNetworkAuth/private/qabstractoauthreplyhandler_p.h
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-#include "../../../../../src/oauth/qabstractoauthreplyhandler_p.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-5.12.3/include/QtNetworkAuth/5.12.3/QtNetworkAuth/private/qoauth1_p.h
 
new/qtnetworkauth-everywhere-src-5.13.0/include/QtNetworkAuth/5.12.3/QtNetworkAuth/private/qoauth1_p.h
--- 
old/qtnetworkauth-everywhere-src-5.12.3/include/QtNetworkAuth/5.12.3/QtNetworkAuth/private/qoauth1_p.h
      2019-04-02 10:44:54.000000000 +0200
+++ 
new/qtnetworkauth-everywhere-src-5.13.0/include/QtNetworkAuth/5.12.3/QtNetworkAuth/private/qoauth1_p.h
      1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-#include "../../../../../src/oauth/qoauth1_p.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-5.12.3/include/QtNetworkAuth/5.12.3/QtNetworkAuth/private/qoauth1signature_p.h
 
new/qtnetworkauth-everywhere-src-5.13.0/include/QtNetworkAuth/5.12.3/QtNetworkAuth/private/qoauth1signature_p.h
--- 
old/qtnetworkauth-everywhere-src-5.12.3/include/QtNetworkAuth/5.12.3/QtNetworkAuth/private/qoauth1signature_p.h
     2019-04-02 10:44:54.000000000 +0200
+++ 
new/qtnetworkauth-everywhere-src-5.13.0/include/QtNetworkAuth/5.12.3/QtNetworkAuth/private/qoauth1signature_p.h
     1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-#include "../../../../../src/oauth/qoauth1signature_p.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-5.12.3/include/QtNetworkAuth/5.12.3/QtNetworkAuth/private/qoauth2authorizationcodeflow_p.h
 
new/qtnetworkauth-everywhere-src-5.13.0/include/QtNetworkAuth/5.12.3/QtNetworkAuth/private/qoauth2authorizationcodeflow_p.h
--- 
old/qtnetworkauth-everywhere-src-5.12.3/include/QtNetworkAuth/5.12.3/QtNetworkAuth/private/qoauth2authorizationcodeflow_p.h
 2019-04-02 10:44:54.000000000 +0200
+++ 
new/qtnetworkauth-everywhere-src-5.13.0/include/QtNetworkAuth/5.12.3/QtNetworkAuth/private/qoauth2authorizationcodeflow_p.h
 1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-#include "../../../../../src/oauth/qoauth2authorizationcodeflow_p.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-5.12.3/include/QtNetworkAuth/5.12.3/QtNetworkAuth/private/qoauthhttpserverreplyhandler_p.h
 
new/qtnetworkauth-everywhere-src-5.13.0/include/QtNetworkAuth/5.12.3/QtNetworkAuth/private/qoauthhttpserverreplyhandler_p.h
--- 
old/qtnetworkauth-everywhere-src-5.12.3/include/QtNetworkAuth/5.12.3/QtNetworkAuth/private/qoauthhttpserverreplyhandler_p.h
 2019-04-02 10:44:54.000000000 +0200
+++ 
new/qtnetworkauth-everywhere-src-5.13.0/include/QtNetworkAuth/5.12.3/QtNetworkAuth/private/qoauthhttpserverreplyhandler_p.h
 1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-#include "../../../../../src/oauth/qoauthhttpserverreplyhandler_p.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-5.12.3/include/QtNetworkAuth/5.13.0/QtNetworkAuth/private/qabstractoauth2_p.h
 
new/qtnetworkauth-everywhere-src-5.13.0/include/QtNetworkAuth/5.13.0/QtNetworkAuth/private/qabstractoauth2_p.h
--- 
old/qtnetworkauth-everywhere-src-5.12.3/include/QtNetworkAuth/5.13.0/QtNetworkAuth/private/qabstractoauth2_p.h
      1970-01-01 01:00:00.000000000 +0100
+++ 
new/qtnetworkauth-everywhere-src-5.13.0/include/QtNetworkAuth/5.13.0/QtNetworkAuth/private/qabstractoauth2_p.h
      2019-05-08 10:49:57.000000000 +0200
@@ -0,0 +1 @@
+#include "../../../../../src/oauth/qabstractoauth2_p.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-5.12.3/include/QtNetworkAuth/5.13.0/QtNetworkAuth/private/qabstractoauth_p.h
 
new/qtnetworkauth-everywhere-src-5.13.0/include/QtNetworkAuth/5.13.0/QtNetworkAuth/private/qabstractoauth_p.h
--- 
old/qtnetworkauth-everywhere-src-5.12.3/include/QtNetworkAuth/5.13.0/QtNetworkAuth/private/qabstractoauth_p.h
       1970-01-01 01:00:00.000000000 +0100
+++ 
new/qtnetworkauth-everywhere-src-5.13.0/include/QtNetworkAuth/5.13.0/QtNetworkAuth/private/qabstractoauth_p.h
       2019-05-08 10:49:57.000000000 +0200
@@ -0,0 +1 @@
+#include "../../../../../src/oauth/qabstractoauth_p.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-5.12.3/include/QtNetworkAuth/5.13.0/QtNetworkAuth/private/qabstractoauthreplyhandler_p.h
 
new/qtnetworkauth-everywhere-src-5.13.0/include/QtNetworkAuth/5.13.0/QtNetworkAuth/private/qabstractoauthreplyhandler_p.h
--- 
old/qtnetworkauth-everywhere-src-5.12.3/include/QtNetworkAuth/5.13.0/QtNetworkAuth/private/qabstractoauthreplyhandler_p.h
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/qtnetworkauth-everywhere-src-5.13.0/include/QtNetworkAuth/5.13.0/QtNetworkAuth/private/qabstractoauthreplyhandler_p.h
   2019-05-08 10:49:57.000000000 +0200
@@ -0,0 +1 @@
+#include "../../../../../src/oauth/qabstractoauthreplyhandler_p.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-5.12.3/include/QtNetworkAuth/5.13.0/QtNetworkAuth/private/qoauth1_p.h
 
new/qtnetworkauth-everywhere-src-5.13.0/include/QtNetworkAuth/5.13.0/QtNetworkAuth/private/qoauth1_p.h
--- 
old/qtnetworkauth-everywhere-src-5.12.3/include/QtNetworkAuth/5.13.0/QtNetworkAuth/private/qoauth1_p.h
      1970-01-01 01:00:00.000000000 +0100
+++ 
new/qtnetworkauth-everywhere-src-5.13.0/include/QtNetworkAuth/5.13.0/QtNetworkAuth/private/qoauth1_p.h
      2019-05-08 10:49:57.000000000 +0200
@@ -0,0 +1 @@
+#include "../../../../../src/oauth/qoauth1_p.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-5.12.3/include/QtNetworkAuth/5.13.0/QtNetworkAuth/private/qoauth1signature_p.h
 
new/qtnetworkauth-everywhere-src-5.13.0/include/QtNetworkAuth/5.13.0/QtNetworkAuth/private/qoauth1signature_p.h
--- 
old/qtnetworkauth-everywhere-src-5.12.3/include/QtNetworkAuth/5.13.0/QtNetworkAuth/private/qoauth1signature_p.h
     1970-01-01 01:00:00.000000000 +0100
+++ 
new/qtnetworkauth-everywhere-src-5.13.0/include/QtNetworkAuth/5.13.0/QtNetworkAuth/private/qoauth1signature_p.h
     2019-05-08 10:49:57.000000000 +0200
@@ -0,0 +1 @@
+#include "../../../../../src/oauth/qoauth1signature_p.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-5.12.3/include/QtNetworkAuth/5.13.0/QtNetworkAuth/private/qoauth2authorizationcodeflow_p.h
 
new/qtnetworkauth-everywhere-src-5.13.0/include/QtNetworkAuth/5.13.0/QtNetworkAuth/private/qoauth2authorizationcodeflow_p.h
--- 
old/qtnetworkauth-everywhere-src-5.12.3/include/QtNetworkAuth/5.13.0/QtNetworkAuth/private/qoauth2authorizationcodeflow_p.h
 1970-01-01 01:00:00.000000000 +0100
+++ 
new/qtnetworkauth-everywhere-src-5.13.0/include/QtNetworkAuth/5.13.0/QtNetworkAuth/private/qoauth2authorizationcodeflow_p.h
 2019-05-08 10:49:57.000000000 +0200
@@ -0,0 +1 @@
+#include "../../../../../src/oauth/qoauth2authorizationcodeflow_p.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-5.12.3/include/QtNetworkAuth/5.13.0/QtNetworkAuth/private/qoauthhttpserverreplyhandler_p.h
 
new/qtnetworkauth-everywhere-src-5.13.0/include/QtNetworkAuth/5.13.0/QtNetworkAuth/private/qoauthhttpserverreplyhandler_p.h
--- 
old/qtnetworkauth-everywhere-src-5.12.3/include/QtNetworkAuth/5.13.0/QtNetworkAuth/private/qoauthhttpserverreplyhandler_p.h
 1970-01-01 01:00:00.000000000 +0100
+++ 
new/qtnetworkauth-everywhere-src-5.13.0/include/QtNetworkAuth/5.13.0/QtNetworkAuth/private/qoauthhttpserverreplyhandler_p.h
 2019-05-08 10:49:57.000000000 +0200
@@ -0,0 +1 @@
+#include "../../../../../src/oauth/qoauthhttpserverreplyhandler_p.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-5.12.3/include/QtNetworkAuth/qtnetworkauthversion.h
 
new/qtnetworkauth-everywhere-src-5.13.0/include/QtNetworkAuth/qtnetworkauthversion.h
--- 
old/qtnetworkauth-everywhere-src-5.12.3/include/QtNetworkAuth/qtnetworkauthversion.h
        2019-04-11 20:41:30.000000000 +0200
+++ 
new/qtnetworkauth-everywhere-src-5.13.0/include/QtNetworkAuth/qtnetworkauthversion.h
        2019-06-17 14:56:01.000000000 +0200
@@ -2,8 +2,8 @@
 #ifndef QT_QTNETWORKAUTH_VERSION_H
 #define QT_QTNETWORKAUTH_VERSION_H
 
-#define QTNETWORKAUTH_VERSION_STR "5.12.3"
+#define QTNETWORKAUTH_VERSION_STR "5.13.0"
 
-#define QTNETWORKAUTH_VERSION 0x050C03
+#define QTNETWORKAUTH_VERSION 0x050D00
 
 #endif // QT_QTNETWORKAUTH_VERSION_H
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-5.12.3/src/oauth/qabstractoauth.cpp 
new/qtnetworkauth-everywhere-src-5.13.0/src/oauth/qabstractoauth.cpp
--- old/qtnetworkauth-everywhere-src-5.12.3/src/oauth/qabstractoauth.cpp        
2019-04-02 10:44:54.000000000 +0200
+++ new/qtnetworkauth-everywhere-src-5.13.0/src/oauth/qabstractoauth.cpp        
2019-05-08 10:49:57.000000000 +0200
@@ -44,6 +44,7 @@
 
 #include <QtNetwork/qnetworkrequest.h>
 #include <QtNetwork/qnetworkaccessmanager.h>
+#include <QtNetwork/qnetworkreply.h>
 
 #include <random>
 
@@ -91,7 +92,7 @@
     \enum QAbstractOAuth::Stage
 
     Identifies an authentication stage.  It's passed to a
-    ModifyParametersFunction so that it can make different changes to
+    modifyParametersFunction so that it can make different changes to
     parameters at each call to it during the process of
     authentication.
 
@@ -510,8 +511,25 @@
 }
 
 /*!
+    \since 5.13
+
+    Authorizes the given \a request by adding a header and \a body to
+    it required for authenticated requests.
+
+    The \a verb must be a valid HTTP verb and the same as the one that will be
+    used to send the \a request.
+*/
+void QAbstractOAuth::prepareRequest(QNetworkRequest *request,
+                                    const QByteArray &verb,
+                                    const QByteArray &body)
+{
+    Q_D(QAbstractOAuth);
+    d->prepareRequestImpl(request, verb, body);
+}
+
+/*!
     Returns the current parameter-modification function.
-    \sa ModifyParametersFunction, setModifyParametersFunction(), Stage
+    \sa QAbstractOAuth::ModifyParametersFunction, 
setModifyParametersFunction(), Stage
 */
 QAbstractOAuth::ModifyParametersFunction 
QAbstractOAuth::modifyParametersFunction() const
 {
@@ -524,7 +542,7 @@
     This function is used to customize the parameters sent to the server
     during a specified authorization stage. The number of calls to this
     function depends on the flow used during the authentication.
-    \sa modifyParametersFunction(), ModifyParametersFunction, Stage
+    \sa modifyParametersFunction(), Stage
 */
 void QAbstractOAuth::setModifyParametersFunction(
         const QAbstractOAuth::ModifyParametersFunction 
&modifyParametersFunction)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-5.12.3/src/oauth/qabstractoauth.h 
new/qtnetworkauth-everywhere-src-5.13.0/src/oauth/qabstractoauth.h
--- old/qtnetworkauth-everywhere-src-5.12.3/src/oauth/qabstractoauth.h  
2019-04-02 10:44:54.000000000 +0200
+++ new/qtnetworkauth-everywhere-src-5.13.0/src/oauth/qabstractoauth.h  
2019-05-08 10:49:57.000000000 +0200
@@ -138,6 +138,11 @@
     Q_INVOKABLE virtual QNetworkReply *deleteResource(
             const QUrl &url, const QVariantMap &parameters = QVariantMap()) = 
0;
 
+    // ### Qt 6: Make this method pure virtual and remove the private 
implementation
+    void prepareRequest(QNetworkRequest *request,
+                        const QByteArray &verb,
+                        const QByteArray &body = QByteArray());
+
     ModifyParametersFunction modifyParametersFunction() const;
     void setModifyParametersFunction(const ModifyParametersFunction 
&modifyParametersFunction);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-5.12.3/src/oauth/qabstractoauth2.cpp 
new/qtnetworkauth-everywhere-src-5.13.0/src/oauth/qabstractoauth2.cpp
--- old/qtnetworkauth-everywhere-src-5.12.3/src/oauth/qabstractoauth2.cpp       
2019-04-02 10:44:54.000000000 +0200
+++ new/qtnetworkauth-everywhere-src-5.13.0/src/oauth/qabstractoauth2.cpp       
2019-05-08 10:49:57.000000000 +0200
@@ -169,6 +169,17 @@
     return request;
 }
 
+void QAbstractOAuth2Private::prepareRequestImpl(QNetworkRequest *request,
+                                                const QByteArray &verb,
+                                                const QByteArray &body)
+{
+    Q_UNUSED(verb)
+    Q_UNUSED(body)
+    request->setHeader(QNetworkRequest::UserAgentHeader, userAgent);
+    const QString bearer = bearerFormat.arg(token);
+    request->setRawHeader("Authorization", bearer.toUtf8());
+}
+
 /*!
     Constructs a QAbstractOAuth2 object using \a parent as parent.
 */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-5.12.3/src/oauth/qabstractoauth2_p.h 
new/qtnetworkauth-everywhere-src-5.13.0/src/oauth/qabstractoauth2_p.h
--- old/qtnetworkauth-everywhere-src-5.12.3/src/oauth/qabstractoauth2_p.h       
2019-04-02 10:44:54.000000000 +0200
+++ new/qtnetworkauth-everywhere-src-5.13.0/src/oauth/qabstractoauth2_p.h       
2019-05-08 10:49:57.000000000 +0200
@@ -70,6 +70,10 @@
     static QString generateRandomState();
     QNetworkRequest createRequest(QUrl url, const QVariantMap *parameters = 
nullptr);
 
+    void prepareRequestImpl(QNetworkRequest *request,
+                            const QByteArray &verb,
+                            const QByteArray &body) override;
+
     QString clientIdentifierSharedKey;
     QString scope;
     QString state = generateRandomState();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-5.12.3/src/oauth/qabstractoauth_p.h 
new/qtnetworkauth-everywhere-src-5.13.0/src/oauth/qabstractoauth_p.h
--- old/qtnetworkauth-everywhere-src-5.12.3/src/oauth/qabstractoauth_p.h        
2019-04-02 10:44:54.000000000 +0200
+++ new/qtnetworkauth-everywhere-src-5.13.0/src/oauth/qabstractoauth_p.h        
2019-05-08 10:49:57.000000000 +0200
@@ -77,6 +77,10 @@
     void setStatus(QAbstractOAuth::Status status);
     static QByteArray generateRandomString(quint8 length);
 
+    virtual void prepareRequestImpl(QNetworkRequest *request,
+                                    const QByteArray &verb,
+                                    const QByteArray &body) = 0;
+
     const QLoggingCategory loggingCategory;
     QString clientIdentifier;
     QString token;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-5.12.3/src/oauth/qoauth1.cpp 
new/qtnetworkauth-everywhere-src-5.13.0/src/oauth/qoauth1.cpp
--- old/qtnetworkauth-everywhere-src-5.12.3/src/oauth/qoauth1.cpp       
2019-04-02 10:44:54.000000000 +0200
+++ new/qtnetworkauth-everywhere-src-5.13.0/src/oauth/qoauth1.cpp       
2019-05-08 10:49:57.000000000 +0200
@@ -243,12 +243,29 @@
                                              const QUrl &url,
                                              QNetworkAccessManager::Operation 
operation) const
 {
-    const QOAuth1Signature signature(url,
-                                     clientIdentifierSharedKey,
-                                     tokenSecret,
-                                     
static_cast<QOAuth1Signature::HttpRequestMethod>(operation),
-                                     parameters);
+    QOAuth1Signature signature(url,
+                               clientIdentifierSharedKey,
+                               tokenSecret,
+                               
static_cast<QOAuth1Signature::HttpRequestMethod>(operation),
+                               parameters);
+    return formatSignature(signature);
+}
+
+QByteArray QOAuth1Private::generateSignature(const QVariantMap &parameters,
+                                             const QUrl &url,
+                                             const QByteArray &verb) const
+{
+    QOAuth1Signature signature(url,
+                               clientIdentifierSharedKey,
+                               tokenSecret,
+                               QOAuth1Signature::HttpRequestMethod::Custom,
+                               parameters);
+    signature.setCustomMethodString(verb);
+    return formatSignature(signature);
+}
 
+QByteArray QOAuth1Private::formatSignature(const QOAuth1Signature &signature) 
const
+{
     switch (signatureMethod) {
     case QOAuth1::SignatureMethod::Hmac_Sha1:
         return signature.hmacSha1().toBase64();
@@ -260,6 +277,38 @@
     }
 }
 
+QVariantMap QOAuth1Private::createOAuthBaseParams() const
+{
+    QVariantMap oauthParams;
+
+    const auto currentDateTime = QDateTime::currentDateTimeUtc();
+
+    oauthParams.insert(Key::oauthConsumerKey, clientIdentifier);
+    oauthParams.insert(Key::oauthVersion, QStringLiteral("1.0"));
+    oauthParams.insert(Key::oauthToken, token);
+    oauthParams.insert(Key::oauthSignatureMethod, signatureMethodString());
+    oauthParams.insert(Key::oauthNonce, QOAuth1::nonce());
+    oauthParams.insert(Key::oauthTimestamp, 
QString::number(currentDateTime.toTime_t()));
+
+    return oauthParams;
+}
+
+void QOAuth1Private::prepareRequestImpl(QNetworkRequest *request,
+                                        const QByteArray &verb,
+                                        const QByteArray &body)
+{
+    Q_Q(QOAuth1);
+    QVariantMap signingParams;
+    if (verb == "POST" &&
+        request->header(QNetworkRequest::ContentTypeHeader).toByteArray()
+            == "application/x-www-form-urlencoded") {
+        QUrlQuery query(QString::fromUtf8(body));
+        for (const auto &item : query.queryItems(QUrl::FullyDecoded))
+            signingParams.insert(item.first, item.second);
+    }
+    q->setup(request, signingParams, verb);
+}
+
 void QOAuth1Private::_q_onTokenRequestError(QNetworkReply::NetworkError error)
 {
     Q_Q(QOAuth1);
@@ -701,6 +750,8 @@
 
 /*!
     Signs the \a request using \a signingParameters and \a operation.
+
+    \overload
 */
 void QOAuth1::setup(QNetworkRequest *request,
                     const QVariantMap &signingParameters,
@@ -708,16 +759,7 @@
 {
     Q_D(const QOAuth1);
 
-    QVariantMap oauthParams;
-
-    const auto currentDateTime = QDateTime::currentDateTimeUtc();
-
-    oauthParams.insert(Key::oauthConsumerKey, d->clientIdentifier);
-    oauthParams.insert(Key::oauthVersion, QStringLiteral("1.0"));
-    oauthParams.insert(Key::oauthToken, d->token);
-    oauthParams.insert(Key::oauthSignatureMethod, d->signatureMethodString());
-    oauthParams.insert(Key::oauthNonce, QOAuth1::nonce());
-    oauthParams.insert(Key::oauthTimestamp, 
QString::number(currentDateTime.toTime_t()));
+    auto oauthParams = d->createOAuthBaseParams();
 
     // Add signature parameter
     {
@@ -747,6 +789,29 @@
 }
 
 /*!
+    \since 5.13
+
+    Signs the \a request using \a signingParameters and \a operationVerb.
+
+    \overload
+*/
+void QOAuth1::setup(QNetworkRequest *request, const QVariantMap 
&signingParameters, const QByteArray &operationVerb)
+{
+    Q_D(const QOAuth1);
+
+    auto oauthParams = d->createOAuthBaseParams();
+
+    // Add signature parameter
+    {
+        const auto parameters = 
QVariantMap(oauthParams).unite(signingParameters);
+        const auto signature = d->generateSignature(parameters, 
request->url(), operationVerb);
+        oauthParams.insert(Key::oauthSignature, signature);
+    }
+
+    request->setRawHeader("Authorization", 
generateAuthorizationHeader(oauthParams));
+}
+
+/*!
     Generates a nonce.
 
     \b {See also}: \l {https://tools.ietf.org/html/rfc5849#section-3.3}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-5.12.3/src/oauth/qoauth1.h 
new/qtnetworkauth-everywhere-src-5.13.0/src/oauth/qoauth1.h
--- old/qtnetworkauth-everywhere-src-5.12.3/src/oauth/qoauth1.h 2019-04-02 
10:44:54.000000000 +0200
+++ new/qtnetworkauth-everywhere-src-5.13.0/src/oauth/qoauth1.h 2019-05-08 
10:49:57.000000000 +0200
@@ -120,6 +120,9 @@
     void setup(QNetworkRequest *request,
                const QVariantMap &signingParameters,
                QNetworkAccessManager::Operation operation);
+    void setup(QNetworkRequest *request,
+               const QVariantMap &signingParameters,
+               const QByteArray &operationVerb);
 
     static QByteArray nonce();
     static QByteArray generateAuthorizationHeader(const QVariantMap 
&oauthParams);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-5.12.3/src/oauth/qoauth1_p.h 
new/qtnetworkauth-everywhere-src-5.13.0/src/oauth/qoauth1_p.h
--- old/qtnetworkauth-everywhere-src-5.12.3/src/oauth/qoauth1_p.h       
2019-04-02 10:44:54.000000000 +0200
+++ new/qtnetworkauth-everywhere-src-5.13.0/src/oauth/qoauth1_p.h       
2019-05-08 10:49:57.000000000 +0200
@@ -58,6 +58,8 @@
 
 QT_BEGIN_NAMESPACE
 
+class QOAuth1Signature;
+
 class QOAuth1Private : public QAbstractOAuthPrivate
 {
     Q_DECLARE_PUBLIC(QOAuth1)
@@ -82,6 +84,16 @@
     QByteArray generateSignature(const QVariantMap &parameters,
                                  const QUrl &url,
                                  QNetworkAccessManager::Operation operation) 
const;
+    QByteArray generateSignature(const QVariantMap &parameters,
+                                 const QUrl &url,
+                                 const QByteArray &verb) const;
+    QByteArray formatSignature(const QOAuth1Signature &signature) const;
+
+    QVariantMap createOAuthBaseParams() const;
+
+    void prepareRequestImpl(QNetworkRequest *request,
+                            const QByteArray &verb,
+                            const QByteArray &body) override;
 
     void _q_onTokenRequestError(QNetworkReply::NetworkError error);
     void _q_tokensReceived(const QVariantMap &tokens);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-5.12.3/src/oauth/qoauth1signature.cpp 
new/qtnetworkauth-everywhere-src-5.13.0/src/oauth/qoauth1signature.cpp
--- old/qtnetworkauth-everywhere-src-5.12.3/src/oauth/qoauth1signature.cpp      
2019-04-02 10:44:54.000000000 +0200
+++ new/qtnetworkauth-everywhere-src-5.13.0/src/oauth/qoauth1signature.cpp      
2019-05-08 10:49:57.000000000 +0200
@@ -126,6 +126,14 @@
     case QOAuth1Signature::HttpRequestMethod::Delete:
         base.append("DELETE");
         break;
+    case QOAuth1Signature::HttpRequestMethod::Custom:
+        if (!customVerb.isEmpty()) {
+            base.append(customVerb);
+        } else {
+            qCCritical(loggingCategory, "QOAuth1Signature: 
HttpRequestMethod::Custom requires "
+                                        "the verb to be set via 
setCustomMethodString");
+        }
+        break;
     default:
         qCCritical(loggingCategory, "QOAuth1Signature: HttpRequestMethod not 
supported");
     }
@@ -244,6 +252,37 @@
 }
 
 /*!
+    \since 5.13
+
+    Returns the custom method string.
+
+    \sa httpRequestMethod()
+*/
+QByteArray QOAuth1Signature::customMethodString() const
+{
+    return d->customVerb;
+}
+
+/*!
+    \since 5.13
+
+    Sets a custom request method. Will set the httpRequestMethod
+    to QOAuth1Signature::HttpRequestMethod::Custom and store the
+    \a verb to use it for the generation of the signature.
+
+    \note Using this method is required when working with custom verbs.
+    Setting only the request method will fail, as the signure needs to
+    know the actual verb.
+
+    \sa setHttpRequestMethod(), HttpRequestMethod
+*/
+void QOAuth1Signature::setCustomMethodString(const QByteArray &verb)
+{
+    d->method = QOAuth1Signature::HttpRequestMethod::Custom;
+    d->customVerb = verb;
+}
+
+/*!
     Returns the URL.
 */
 QUrl QOAuth1Signature::url() const
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-5.12.3/src/oauth/qoauth1signature.h 
new/qtnetworkauth-everywhere-src-5.13.0/src/oauth/qoauth1signature.h
--- old/qtnetworkauth-everywhere-src-5.12.3/src/oauth/qoauth1signature.h        
2019-04-02 10:44:54.000000000 +0200
+++ new/qtnetworkauth-everywhere-src-5.13.0/src/oauth/qoauth1signature.h        
2019-05-08 10:49:57.000000000 +0200
@@ -70,6 +70,9 @@
     HttpRequestMethod httpRequestMethod() const;
     void setHttpRequestMethod(HttpRequestMethod method);
 
+    QByteArray customMethodString() const;
+    void setCustomMethodString(const QByteArray &verb);
+
     QUrl url() const;
     void setUrl(const QUrl &url);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-5.12.3/src/oauth/qoauth1signature_p.h 
new/qtnetworkauth-everywhere-src-5.13.0/src/oauth/qoauth1signature_p.h
--- old/qtnetworkauth-everywhere-src-5.12.3/src/oauth/qoauth1signature_p.h      
2019-04-02 10:44:54.000000000 +0200
+++ new/qtnetworkauth-everywhere-src-5.13.0/src/oauth/qoauth1signature_p.h      
2019-05-08 10:49:57.000000000 +0200
@@ -66,6 +66,7 @@
 
 
     QOAuth1Signature::HttpRequestMethod method = 
QOAuth1Signature::HttpRequestMethod::Post;
+    QByteArray customVerb;
     QUrl url;
     QString clientSharedKey;
     QString tokenSecret;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-5.12.3/tests/auto/abstractoauth/tst_abstractoauth.cpp
 
new/qtnetworkauth-everywhere-src-5.13.0/tests/auto/abstractoauth/tst_abstractoauth.cpp
--- 
old/qtnetworkauth-everywhere-src-5.12.3/tests/auto/abstractoauth/tst_abstractoauth.cpp
      2019-04-02 10:44:54.000000000 +0200
+++ 
new/qtnetworkauth-everywhere-src-5.13.0/tests/auto/abstractoauth/tst_abstractoauth.cpp
      2019-05-08 10:49:57.000000000 +0200
@@ -39,8 +39,17 @@
     Q_OBJECT
 
 private:
+    struct AbstractOAuthPrivate : public QAbstractOAuthPrivate {
+        AbstractOAuthPrivate() : QAbstractOAuthPrivate("", QUrl(), QString(), 
nullptr)
+        {}
+
+        void prepareRequestImpl(QNetworkRequest *,
+                                const QByteArray &,
+                                const QByteArray &) override {}
+    };
+
     struct AbstractOAuth : QAbstractOAuth {
-        AbstractOAuth() : QAbstractOAuth(*new QAbstractOAuthPrivate("", 
QUrl(), QString(), nullptr),
+        AbstractOAuth() : QAbstractOAuth(*new AbstractOAuthPrivate(),
                                          nullptr)
         {}
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-5.12.3/tests/auto/oauth1/BLACKLIST 
new/qtnetworkauth-everywhere-src-5.13.0/tests/auto/oauth1/BLACKLIST
--- old/qtnetworkauth-everywhere-src-5.12.3/tests/auto/oauth1/BLACKLIST 
2019-04-02 10:44:54.000000000 +0200
+++ new/qtnetworkauth-everywhere-src-5.13.0/tests/auto/oauth1/BLACKLIST 
2019-05-08 10:49:57.000000000 +0200
@@ -15,3 +15,5 @@
 *
 [authenticatedCalls]
 *
+[prepareRequestCalls]
+*
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-5.12.3/tests/auto/oauth1/tst_oauth1.cpp 
new/qtnetworkauth-everywhere-src-5.13.0/tests/auto/oauth1/tst_oauth1.cpp
--- old/qtnetworkauth-everywhere-src-5.12.3/tests/auto/oauth1/tst_oauth1.cpp    
2019-04-02 10:44:54.000000000 +0200
+++ new/qtnetworkauth-everywhere-src-5.13.0/tests/auto/oauth1/tst_oauth1.cpp    
2019-05-08 10:49:57.000000000 +0200
@@ -155,15 +155,29 @@
     void getToken_data();
     void getToken();
 
+    void prepareRequestSignature_data();
+    void prepareRequestSignature();
+
     void grant_data();
     void grant();
 
     void authenticatedCalls_data();
     void authenticatedCalls();
 
+    void prepareRequestCalls_data();
+    void prepareRequestCalls();
+
     void secondTemporaryToken();
 };
 
+const auto oauthVersion = QStringLiteral("oauth_version");
+const auto oauthConsumerKey = QStringLiteral("oauth_consumer_key");
+const auto oauthNonce = QStringLiteral("oauth_nonce");
+const auto oauthSignatureMethod = QStringLiteral("oauth_signature_method");
+const auto oauthTimestamp = QStringLiteral("oauth_timestamp");
+const auto oauthToken = QStringLiteral("oauth_token");
+const auto oauthSignature = QStringLiteral("oauth_signature");
+
 bool hostReachable(const QLatin1String &host)
 {
     // check host exists
@@ -476,6 +490,118 @@
     QCOMPARE(oauthHeaders["oauth_signature"], expectedSignature);
 }
 
+void tst_OAuth1::prepareRequestSignature_data()
+{
+    QTest::addColumn<QString>("consumerKey");
+    QTest::addColumn<QString>("consumerSecret");
+    QTest::addColumn<QString>("accessKey");
+    QTest::addColumn<QString>("accessKeySecret");
+    QTest::addColumn<QNetworkRequest>("request");
+    QTest::addColumn<QByteArray>("operation");
+    QTest::addColumn<QByteArray>("body");
+    QTest::addColumn<QVariantMap>("extraParams");
+
+    QTest::newRow("get_simple")
+            << "key"
+            << "secret"
+            << "accesskey"
+            << "accesssecret"
+            << 
QNetworkRequest(QUrl("http://term.ie/oauth/example/echo_api.php";))
+            << QByteArray("GET")
+            << QByteArray()
+            << QVariantMap();
+
+    QTest::newRow("get_params")
+            << "key"
+            << "secret"
+            << "accesskey"
+            << "accesssecret"
+            << 
QNetworkRequest(QUrl("http://term.ie/oauth/example/echo_api.php?";
+                                    "first=first&second=second"))
+            << QByteArray("GET")
+            << QByteArray()
+            << QVariantMap();
+
+    QNetworkRequest 
postRequest(QUrl("http://term.ie/oauth/example/echo_api.php";));
+    postRequest.setHeader(QNetworkRequest::ContentTypeHeader,
+                          QByteArray("application/x-www-form-urlencoded"));
+    QTest::newRow("post_params")
+            << "key"
+            << "secret"
+            << "accesskey"
+            << "accesssecret"
+            << postRequest
+            << QByteArray("POST")
+            << QByteArray("first=first&second=second")
+            << QVariantMap({
+                               {"first", "first"},
+                               {"second", "second"}
+                           });
+
+    QTest::newRow("patch_param")
+            << "key"
+            << "secret"
+            << "accesskey"
+            << "accesssecret"
+            << 
QNetworkRequest(QUrl("http://term.ie/oauth/example/echo_api.php?";
+                                    "first=first&second=second"))
+            << QByteArray("PATCH")
+            << QByteArray()
+            << QVariantMap();
+}
+
+void tst_OAuth1::prepareRequestSignature()
+{
+    QFETCH(QString, consumerKey);
+    QFETCH(QString, consumerSecret);
+    QFETCH(QString, accessKey);
+    QFETCH(QString, accessKeySecret);
+    QFETCH(QNetworkRequest, request);
+    QFETCH(QByteArray, operation);
+    QFETCH(QByteArray, body);
+    QFETCH(QVariantMap, extraParams);
+
+    QOAuth1 o1;
+    o1.setClientCredentials(consumerKey, consumerSecret);
+    o1.setTokenCredentials(accessKey, accessKeySecret);
+
+    o1.prepareRequest(&request, operation, body);
+
+    // extract oauth parameters from the headers
+    QVariantMap authArgs;
+    const auto authHeader = request.rawHeader("Authorization");
+    QCOMPARE(authHeader.mid(0, 6), "OAuth ");
+    const auto values = authHeader.mid(6).split(',');
+    for (const auto &pair : values) {
+        const auto argPair = pair.split('=');
+        QCOMPARE(argPair.size(), 2);
+        QCOMPARE(argPair[1].front(), '\"');
+        QCOMPARE(argPair[1].back(), '\"');
+        authArgs.insert(argPair[0], argPair[1].mid(1, argPair[1].size() - 2));
+    }
+
+    //compare known parameters
+    QCOMPARE(authArgs.value(oauthConsumerKey).toByteArray(), consumerKey);
+    QCOMPARE(authArgs.value(oauthToken).toByteArray(), accessKey);
+    QCOMPARE(authArgs.value(oauthSignatureMethod).toByteArray(), 
QByteArray("HMAC-SHA1"));
+    QCOMPARE(authArgs.value(oauthVersion).toByteArray(), QByteArray("1.0"));
+    QVERIFY(authArgs.contains(oauthNonce));
+    QVERIFY(authArgs.contains(oauthTimestamp));
+    QVERIFY(authArgs.contains(oauthSignature));
+
+    // verify the signature
+    const auto sigString = 
QUrl::fromPercentEncoding(authArgs.take(oauthSignature)
+                                                     .toByteArray()).toUtf8();
+    QOAuth1Signature signature(request.url(),
+                               consumerSecret,
+                               accessKeySecret,
+                               QOAuth1Signature::HttpRequestMethod::Custom,
+                               authArgs.unite(extraParams));
+    signature.setCustomMethodString(operation);
+    const auto signatureData = signature.hmacSha1();
+    QCOMPARE(signatureData.toBase64(), sigString);
+}
+
 void tst_OAuth1::grant_data()
 {
     QTest::addColumn<QString>("consumerKey");
@@ -702,6 +828,149 @@
     QVERIFY(!reply.isNull());
     QVERIFY(!reply->isFinished());
 
+    connect(&networkAccessManager, &QNetworkAccessManager::finished,
+            [&](QNetworkReply *reply) {
+        QByteArray data = reply->readAll();
+        QUrlQuery query(QString::fromUtf8(data));
+        receivedData = query.toString(QUrl::FullyDecoded);
+    });
+    QVERIFY(waitForFinish(reply) == Success);
+    QCOMPARE(receivedData, parametersString);
+    reply.clear();
+}
+
+void tst_OAuth1::prepareRequestCalls_data()
+{
+    QTest::addColumn<QString>("consumerKey");
+    QTest::addColumn<QString>("consumerSecret");
+    QTest::addColumn<QString>("accessKey");
+    QTest::addColumn<QString>("accessKeySecret");
+    QTest::addColumn<QUrl>("url");
+    QTest::addColumn<QVariantMap>("parameters");
+    QTest::addColumn<QByteArray>("operation");
+
+    const QVariantMap parameters { { QStringLiteral("first"), 
QStringLiteral("first") },
+                                   { QStringLiteral("second"), 
QStringLiteral("second") },
+                                   { QStringLiteral("third"), 
QStringLiteral("third") },
+                                   { QStringLiteral("c2&a3"), 
QStringLiteral("2=%$&@q") }
+                                 };
+
+    if (hostReachable(QLatin1String("term.ie"))) {
+        QTest::newRow("term.ie_get") << "key"
+                                     << "secret"
+                                     << "accesskey"
+                                     << "accesssecret"
+                                     << 
QUrl("http://term.ie/oauth/example/echo_api.php";)
+                                     << parameters
+                                     << QByteArray("GET");
+        QTest::newRow("term.ie_post") << "key"
+                                      << "secret"
+                                      << "accesskey"
+                                      << "accesssecret"
+                                      << 
QUrl("http://term.ie/oauth/example/echo_api.php";)
+                                      << parameters
+                                      << QByteArray("POST");
+        QTest::newRow("term.ie_percent_encoded_query")
+            << "key"
+            << "secret"
+            << "accesskey"
+            << "accesssecret"
+            << 
QUrl("http://term.ie/oauth/example/echo_api.php?key=%40value+1%2B2=3";)
+            << parameters
+            << QByteArray("GET");
+    }
+    if (hostReachable(QLatin1String("oauthbin.com"))) {
+        QTest::newRow("oauthbin.com_get") << "key"
+                                          << "secret"
+                                          << "accesskey"
+                                          << "accesssecret"
+                                          << 
QUrl("http://oauthbin.com/v1/echo";)
+                                          << parameters
+                                          << QByteArray("GET");
+        QTest::newRow("oauthbin.com_post") << "key"
+                                           << "secret"
+                                           << "accesskey"
+                                           << "accesssecret"
+                                           << 
QUrl("http://oauthbin.com/v1/echo";)
+                                           << parameters
+                                           << QByteArray("POST");
+        QTest::newRow("oauthbin.com_percent_encoded_query")
+            << "key"
+            << "secret"
+            << "accesskey"
+            << "accesssecret"
+            << QUrl("http://oauthbin.com/v1/echo?key=%40value+1%2B2=3";)
+            << parameters
+            << QByteArray("GET");
+        QTest::newRow("oauthbin.com_patch") << "key"
+                                            << "secret"
+                                            << "accesskey"
+                                            << "accesssecret"
+                                            << 
QUrl("http://oauthbin.com/v1/echo";)
+                                            << parameters
+                                            << QByteArray("PATCH");
+    }
+}
+
+void tst_OAuth1::prepareRequestCalls()
+{
+    QFETCH(QString, consumerKey);
+    QFETCH(QString, consumerSecret);
+    QFETCH(QString, accessKey);
+    QFETCH(QString, accessKeySecret);
+    QFETCH(QUrl, url);
+    QFETCH(QVariantMap, parameters);
+    QFETCH(QByteArray, operation);
+
+    QNetworkAccessManager networkAccessManager;
+    QNetworkReplyPtr reply;
+    QString receivedData;
+    QString parametersString;
+    {
+        if (url.hasQuery()) {
+            parametersString = url.query(QUrl::FullyDecoded);
+            if (!parameters.empty())
+                parametersString.append(QLatin1Char('&'));
+        }
+        bool first = true;
+        for (auto it = parameters.begin(), end = parameters.end(); it != end; 
++it) {
+            if (first)
+                first = false;
+            else
+                parametersString += QLatin1Char('&');
+            parametersString += it.key() + QLatin1Char('=') + 
it.value().toString();
+        }
+    }
+
+    QOAuth1 o1(&networkAccessManager);
+    o1.setClientCredentials(consumerKey, consumerSecret);
+    o1.setTokenCredentials(accessKey, accessKeySecret);
+
+    if (operation != "POST") {
+        QUrlQuery query(url.query());
+        for (auto it = parameters.begin(), end = parameters.end(); it != end; 
++it)
+            query.addQueryItem(it.key(), it.value().toString());
+        url.setQuery(query);
+    }
+    QNetworkRequest request(url);
+    QByteArray body;
+    if (operation == "POST") {
+        QUrlQuery query(url.query());
+        for (auto it = parameters.begin(), end = parameters.end(); it != end; 
++it)
+            query.addQueryItem(it.key(), it.value().toString());
+        body = query.toString().toUtf8();
+        request.setHeader(QNetworkRequest::ContentTypeHeader,
+                          QByteArray("application/x-www-form-urlencoded"));
+    }
+
+    o1.prepareRequest(&request, operation, body);
+    if (body.isEmpty())
+        reply.reset(o1.networkAccessManager()->sendCustomRequest(request, 
operation));
+    else
+        reply.reset(o1.networkAccessManager()->sendCustomRequest(request, 
operation, body));
+    QVERIFY(!reply.isNull());
+    QVERIFY(!reply->isFinished());
+
     connect(&networkAccessManager, &QNetworkAccessManager::finished,
             [&](QNetworkReply *reply) {
         QByteArray data = reply->readAll();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-5.12.3/tests/auto/oauth1signature/tst_oauth1signature.cpp
 
new/qtnetworkauth-everywhere-src-5.13.0/tests/auto/oauth1signature/tst_oauth1signature.cpp
--- 
old/qtnetworkauth-everywhere-src-5.12.3/tests/auto/oauth1signature/tst_oauth1signature.cpp
  2019-04-02 10:44:54.000000000 +0200
+++ 
new/qtnetworkauth-everywhere-src-5.13.0/tests/auto/oauth1signature/tst_oauth1signature.cpp
  2019-05-08 10:49:57.000000000 +0200
@@ -101,6 +101,7 @@
 {
     QTest::addColumn<QUrl>("url");
     QTest::addColumn<QOAuth1Signature::HttpRequestMethod>("method");
+    QTest::addColumn<QByteArray>("customVerb");
     QTest::addColumn<QString>("version");
     QTest::addColumn<QString>("consumerKey");
     QTest::addColumn<QString>("consumerSecret");
@@ -113,6 +114,7 @@
 
     QTest::newRow("standard") << QUrl("http://example.net";)
                               << QOAuth1Signature::HttpRequestMethod::Get
+                              << QByteArray()
                               << "1.0"
                               << "key"
                               << "secret"
@@ -124,6 +126,7 @@
                               << "mQaARxv7pqJyViuwNGtUfm6QSIQ=";
     QTest::newRow("post") << QUrl("http://example.net";)
                           << QOAuth1Signature::HttpRequestMethod::Post
+                          << QByteArray()
                           << "1.0"
                           << "key"
                           << "secret"
@@ -135,6 +138,7 @@
                           << "L4blJKqYMTSNUEt32rCgDLhxQxM=";
     QTest::newRow("put") << QUrl("http://example.net";)
                          << QOAuth1Signature::HttpRequestMethod::Put
+                         << QByteArray()
                          << "1.0"
                          << "key"
                          << "secret"
@@ -146,6 +150,7 @@
                          << "+eiZ+phNoYnETf6SqI+XSE43JSY=";
     QTest::newRow("delete") << QUrl("http://example.net";)
                             << QOAuth1Signature::HttpRequestMethod::Delete
+                            << QByteArray()
                             << "1.0"
                             << "key"
                             << "secret"
@@ -157,6 +162,7 @@
                             << "enbOVNG7/vGliie2/L44NdccMaw=";
     QTest::newRow("head") << QUrl("http://example.net";)
                           << QOAuth1Signature::HttpRequestMethod::Head
+                          << QByteArray()
                           << "1.0"
                           << "key"
                           << "secret"
@@ -168,6 +174,7 @@
                           << "6v74w0rRsVibJsJ796Nj8cJPqEU=";
     QTest::newRow("no-hmac-key") << QUrl("http://example.net";)
                                  << QOAuth1Signature::HttpRequestMethod::Get
+                                 << QByteArray()
                                  << "1.0"
                                  << "key"
                                  << QString()
@@ -179,6 +186,7 @@
                                  << "N2qP+LJdLbjalZq71M7oxPdeUjc=";
     QTest::newRow("custom-values") << QUrl("http://example.net";)
                                    << QOAuth1Signature::HttpRequestMethod::Get
+                                   << QByteArray()
                                    << "1.0"
                                    << "key"
                                    << "secret"
@@ -191,6 +199,30 @@
                                         { "secondKey", "secondValue" }
                                     }
                                    << "xNXgQaO0LrQMbJZGSfKFUmWwGDw=";
+    QTest::newRow("custom-verb-get") << QUrl("http://example.net";)
+                                     << 
QOAuth1Signature::HttpRequestMethod::Custom
+                                     << QByteArray("GET")
+                                     << "1.0"
+                                     << "key"
+                                     << "secret"
+                                     << "accesskey"
+                                     << "accesssecret"
+                                     << "468167367"
+                                     << "1494852816"
+                                     << QVariantMap()
+                                     << "mQaARxv7pqJyViuwNGtUfm6QSIQ=";
+    QTest::newRow("custom-verb-patch") << QUrl("http://example.net";)
+                                       << 
QOAuth1Signature::HttpRequestMethod::Custom
+                                       << QByteArray("PATCH")
+                                       << "1.0"
+                                       << "key"
+                                       << "secret"
+                                       << "accesskey"
+                                       << "accesssecret"
+                                       << "468167367"
+                                       << "1494852816"
+                                       << QVariantMap()
+                                       << "kcRO68D7IBQWlQvUR/jkhuF8AKM=";
 }
 
 void tst_OAuth1Signature::signatures()
@@ -200,6 +232,7 @@
 
     QFETCH(QUrl, url);
     QFETCH(QOAuth1Signature::HttpRequestMethod, method);
+    QFETCH(QByteArray, customVerb);
     QFETCH(QString, version);
     QFETCH(QString, consumerKey);
     QFETCH(QString, consumerSecret);
@@ -218,6 +251,8 @@
     parameters.insert(oauthToken, token);
 
     QOAuth1Signature signature(url, consumerSecret, tokenSecret, method, 
parameters);
+    if (method == QOAuth1Signature::HttpRequestMethod::Custom)
+        signature.setCustomMethodString(customVerb);
     const auto signatureData = signature.hmacSha1();
     QCOMPARE(signatureData.toBase64(), result);
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-5.12.3/tests/auto/oauth2/tst_oauth2.cpp 
new/qtnetworkauth-everywhere-src-5.13.0/tests/auto/oauth2/tst_oauth2.cpp
--- old/qtnetworkauth-everywhere-src-5.12.3/tests/auto/oauth2/tst_oauth2.cpp    
2019-04-02 10:44:54.000000000 +0200
+++ new/qtnetworkauth-everywhere-src-5.13.0/tests/auto/oauth2/tst_oauth2.cpp    
2019-05-08 10:49:57.000000000 +0200
@@ -41,6 +41,7 @@
     void getToken();
     void refreshToken();
     void getAndRefreshToken();
+    void prepareRequest();
 };
 
 struct ReplyHandler : QAbstractOAuthReplyHandler
@@ -165,5 +166,15 @@
     QCOMPARE(oauth2.token(), QLatin1String("refresh_token"));
 }
 
+void tst_OAuth2::prepareRequest()
+{
+    QOAuth2AuthorizationCodeFlow oauth2;
+    oauth2.setToken(QStringLiteral("access_token"));
+
+    QNetworkRequest request(QUrl("http://localhost";));
+    oauth2.prepareRequest(&request, QByteArray());
+    QCOMPARE(request.rawHeader("Authorization"), QByteArray("Bearer 
access_token"));
+}
+
 QTEST_MAIN(tst_OAuth2)
 #include "tst_oauth2.moc"


Reply via email to