Skip to content

Commit

Permalink
Header enum
Browse files Browse the repository at this point in the history
  • Loading branch information
sbrunner committed Mar 12, 2021
1 parent af01a41 commit b06cf95
Show file tree
Hide file tree
Showing 5 changed files with 98 additions and 52 deletions.
1 change: 1 addition & 0 deletions python/server/auto_additions/qgsserverrequest.py
@@ -1,2 +1,3 @@
# The following has been generated automatically from src/server/qgsserverrequest.h # The following has been generated automatically from src/server/qgsserverrequest.h
QgsServerRequest.Method.baseClass = QgsServerRequest QgsServerRequest.Method.baseClass = QgsServerRequest
QgsServerRequest.RequestHeader.baseClass = QgsServerRequest
42 changes: 33 additions & 9 deletions python/server/auto_generated/qgsserverrequest.sip.in
Expand Up @@ -34,15 +34,28 @@ class QgsServerRequest
PatchMethod PatchMethod
}; };


static const QString HOST; enum RequestHeader
static const QString FORWARDED; {
static const QString X_FORWARDED_HOST; // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Host
static const QString X_FORWARDED_PROTO; HOST,
static const QString X_QGIS_SERVICE_URL; // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Forwarded
static const QString X_QGIS_WMS_SERVICE_URL; // https://tools.ietf.org/html/rfc7239
static const QString X_QGIS_WFS_SERVICE_URL; FORWARDED,
static const QString X_QGIS_WCS_SERVICE_URL; // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Host
static const QString X_QGIS_WMTS_SERVICE_URL; X_FORWARDED_HOST,
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Proto
X_FORWARDED_PROTO,
// The QGIS service URL
X_QGIS_SERVICE_URL,
// The QGIS WMS service URL
X_QGIS_WMS_SERVICE_URL,
// The QGIS WFS service URL
X_QGIS_WFS_SERVICE_URL,
// The QGIS WCS service URL
X_QGIS_WCS_SERVICE_URL,
// The QGIS WMTS service URL
X_QGIS_WMTS_SERVICE_URL,
};


QgsServerRequest(); QgsServerRequest();
%Docstring %Docstring
Expand Down Expand Up @@ -130,6 +143,15 @@ Returns the header value


:param name: of the header :param name: of the header


:return: the header value or an empty string
%End

virtual QString header( const RequestHeader &headerEnum ) const;
%Docstring
Returns the header value

:param headerEnum: of the header

:return: the header value or an empty string :return: the header value or an empty string
%End %End


Expand All @@ -153,6 +175,8 @@ Returns the header map
Remove an header Remove an header


:param name: :param name:

.. versionadded:: 3.20
%End %End


virtual QByteArray data() const; virtual QByteArray data() const;
Expand Down
18 changes: 9 additions & 9 deletions src/server/qgsserverprojectutils.cpp
Expand Up @@ -324,29 +324,29 @@ QString QgsServerProjectUtils::serviceUrl( const QString &service, const QgsServ
return url; return url;
} }


QString header = QgsServerRequest::X_QGIS_SERVICE_URL; QgsServerRequest::RequestHeader header = QgsServerRequest::RequestHeader::X_QGIS_SERVICE_URL;
if ( serviceUpper == QStringLiteral( "WMS" ) ) if ( serviceUpper == QStringLiteral( "WMS" ) )
{ {
header = QgsServerRequest::X_QGIS_WMS_SERVICE_URL; header = QgsServerRequest::RequestHeader::X_QGIS_WMS_SERVICE_URL;
} }
else if ( serviceUpper == QStringLiteral( "WFS" ) ) else if ( serviceUpper == QStringLiteral( "WFS" ) )
{ {
header = QgsServerRequest::X_QGIS_WFS_SERVICE_URL; header = QgsServerRequest::RequestHeader::X_QGIS_WFS_SERVICE_URL;
} }
else if ( serviceUpper == QStringLiteral( "WCS" ) ) else if ( serviceUpper == QStringLiteral( "WCS" ) )
{ {
header = QgsServerRequest::X_QGIS_WCS_SERVICE_URL; header = QgsServerRequest::RequestHeader::X_QGIS_WCS_SERVICE_URL;
} }
else if ( serviceUpper == QStringLiteral( "WMTS" ) ) else if ( serviceUpper == QStringLiteral( "WMTS" ) )
{ {
header = QgsServerRequest::X_QGIS_WMTS_SERVICE_URL; header = QgsServerRequest::RequestHeader::X_QGIS_WMTS_SERVICE_URL;
} }
url = request.header( header ); url = request.header( header );
if ( ! url.isEmpty() ) if ( ! url.isEmpty() )
{ {
return url; return url;
} }
url = request.header( QgsServerRequest::X_QGIS_SERVICE_URL ); url = request.header( QgsServerRequest::RequestHeader::X_QGIS_SERVICE_URL );
if ( ! url.isEmpty() ) if ( ! url.isEmpty() )
{ {
return url; return url;
Expand Down Expand Up @@ -376,13 +376,13 @@ QString QgsServerProjectUtils::serviceUrl( const QString &service, const QgsServ


if ( host.isEmpty() ) if ( host.isEmpty() )
{ {
host = request.header( QgsServerRequest::X_FORWARDED_HOST ); host = request.header( QgsServerRequest::RequestHeader::X_FORWARDED_HOST );
proto = request.header( QgsServerRequest::X_FORWARDED_PROTO ); proto = request.header( QgsServerRequest::RequestHeader::X_FORWARDED_PROTO );
} }


if ( host.isEmpty() ) if ( host.isEmpty() )
{ {
host = request.header( QgsServerRequest::HOST ); host = request.header( QgsServerRequest::RequestHeader::HOST );
} }


QUrl urlQUrl = request.baseUrl(); QUrl urlQUrl = request.baseUrl();
Expand Down
30 changes: 19 additions & 11 deletions src/server/qgsserverrequest.cpp
Expand Up @@ -21,16 +21,6 @@
#include <QUrlQuery> #include <QUrlQuery>




const QString QgsServerRequest::HOST = QStringLiteral( "Host" );
const QString QgsServerRequest::FORWARDED = QStringLiteral( "Forwarded" );
const QString QgsServerRequest::X_FORWARDED_HOST = QStringLiteral( "X-Forwarded-Host" );
const QString QgsServerRequest::X_FORWARDED_PROTO = QStringLiteral( "X-Forwarded-Proto" );
const QString QgsServerRequest::X_QGIS_SERVICE_URL = QStringLiteral( "X-Qgis-Service-Url" );
const QString QgsServerRequest::X_QGIS_WMS_SERVICE_URL = QStringLiteral( "X-Qgis-Wms-Service-Url" );
const QString QgsServerRequest::X_QGIS_WFS_SERVICE_URL = QStringLiteral( "X-Qgis-Wfs-Service-Url" );
const QString QgsServerRequest::X_QGIS_WCS_SERVICE_URL = QStringLiteral( "X-Qgis-Wcs-Service-Url" );
const QString QgsServerRequest::X_QGIS_WMTS_SERVICE_URL = QStringLiteral( "X-Qgis-Wmts-Service-Url" );

QgsServerRequest::QgsServerRequest( const QString &url, Method method, const Headers &headers ) QgsServerRequest::QgsServerRequest( const QString &url, Method method, const Headers &headers )
: QgsServerRequest( QUrl( url ), method, headers ) : QgsServerRequest( QUrl( url ), method, headers )
{ {
Expand All @@ -42,7 +32,18 @@ QgsServerRequest::QgsServerRequest( const QUrl &url, Method method, const Header
, mBaseUrl( url ) , mBaseUrl( url )
, mMethod( method ) , mMethod( method )
, mHeaders( headers ) , mHeaders( headers )
{ , mRequestHeaderConv()
{
mRequestHeaderConv.add( HOST, "Host" )
mRequestHeaderConv.add( FORWARDED, "Forwarded" )
mRequestHeaderConv.add( X_FORWARDED_HOST, "X-Forwarded-Host" )
mRequestHeaderConv.add( X_FORWARDED_PROTO, "X-Forwarded-Proto" )
mRequestHeaderConv.add( X_QGIS_SERVICE_URL, "X-Qgis-Service-Url" )
mRequestHeaderConv.add( X_QGIS_WMS_SERVICE_URL, "X-Qgis-Wms-Service-Url" )
mRequestHeaderConv.add( X_QGIS_WFS_SERVICE_URL, "X-Qgis-Wfs-Service-Url" )
mRequestHeaderConv.add( X_QGIS_WCS_SERVICE_URL, "X-Qgis-Wcs-Service-Url" )
mRequestHeaderConv.add( X_QGIS_WMTS_SERVICE_URL, "X-Qgis-Wmts-Service-Url" )

mParams.load( QUrlQuery( url ) ); mParams.load( QUrlQuery( url ) );
} }


Expand All @@ -53,6 +54,7 @@ QgsServerRequest::QgsServerRequest( const QgsServerRequest &other )
, mMethod( other.mMethod ) , mMethod( other.mMethod )
, mHeaders( other.mHeaders ) , mHeaders( other.mHeaders )
, mParams( other.mParams ) , mParams( other.mParams )
, mRequestHeaderConv( other.mRequestHeaderConv )
{ {
} }


Expand All @@ -67,6 +69,12 @@ QString QgsServerRequest::header( const QString &name ) const
return mHeaders.value( name ); return mHeaders.value( name );
} }



QString header( const RequestHeader &headerEnum ) const;
{
return header( mRequestHeaderConv.get( headerEnum ) )
}

void QgsServerRequest::setHeader( const QString &name, const QString &value ) void QgsServerRequest::setHeader( const QString &name, const QString &value )
{ {
mHeaders.insert( name, value ); mHeaders.insert( name, value );
Expand Down
59 changes: 36 additions & 23 deletions src/server/qgsserverrequest.h
Expand Up @@ -59,27 +59,31 @@ class SERVER_EXPORT QgsServerRequest
Q_ENUM( Method ) Q_ENUM( Method )


/** /**
* HTTP Headers used for the request * The internal HTTP Header used for the request as enum
*/ */
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Host enum RequestHeader
static const QString HOST; {
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Forwarded // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Host
// https://tools.ietf.org/html/rfc7239 HOST,
static const QString FORWARDED; // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Forwarded
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Host // https://tools.ietf.org/html/rfc7239
static const QString X_FORWARDED_HOST; FORWARDED,
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Proto // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Host
static const QString X_FORWARDED_PROTO; X_FORWARDED_HOST,
// The QGIS service URL // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Proto
static const QString X_QGIS_SERVICE_URL; X_FORWARDED_PROTO,
// The QGIS WMS service URL // The QGIS service URL
static const QString X_QGIS_WMS_SERVICE_URL; X_QGIS_SERVICE_URL,
// The QGIS WFS service URL // The QGIS WMS service URL
static const QString X_QGIS_WFS_SERVICE_URL; X_QGIS_WMS_SERVICE_URL,
// The QGIS WCS service URL // The QGIS WFS service URL
static const QString X_QGIS_WCS_SERVICE_URL; X_QGIS_WFS_SERVICE_URL,
// The QGIS WMTS service URL // The QGIS WCS service URL
static const QString X_QGIS_WMTS_SERVICE_URL; X_QGIS_WCS_SERVICE_URL,
// The QGIS WMTS service URL
X_QGIS_WMTS_SERVICE_URL,
};
Q_ENUM( RequestHeader )


/** /**
* Constructor * Constructor
Expand Down Expand Up @@ -167,6 +171,13 @@ class SERVER_EXPORT QgsServerRequest
*/ */
virtual QString header( const QString &name ) const; virtual QString header( const QString &name ) const;


/**
* Returns the header value
* \param headerEnum of the header
* \return the header value or an empty string
*/
virtual QString header( const RequestHeader &headerEnum ) const;

/** /**
* Set an header * Set an header
* \param name * \param name
Expand All @@ -181,9 +192,10 @@ class SERVER_EXPORT QgsServerRequest
QMap<QString, QString> headers() const; QMap<QString, QString> headers() const;


/** /**
* Remove an header * Remove an header
* \param name * \param name
*/ * \since QGIS 3.20
*/
void removeHeader( const QString &name ); void removeHeader( const QString &name );


/** /**
Expand Down Expand Up @@ -259,6 +271,7 @@ class SERVER_EXPORT QgsServerRequest
// to support lazy initialization // to support lazy initialization
mutable Headers mHeaders; mutable Headers mHeaders;
QgsServerParameters mParams; QgsServerParameters mParams;
QMap<RequestHeader, QString> mRequestHeaderConv;
}; };


#endif #endif

2 comments on commit b06cf95

@3nids
Copy link
Member

@3nids 3nids commented on b06cf95 Jun 17, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@sbrunner this branched was pushed to the main repo. Can we drop it or shall we keep it?

@sbrunner
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, it's a mistake to have this branch, I just delete it :-)

Please sign in to comment.