1 /***************************************************************************
2 qgsserverrequest.cpp
3
4 Define ruquest class for getting request contents
5 -------------------
6 begin : 2016-12-05
7 copyright : (C) 2016 by David Marteau
8 email : david dot marteau at 3liz dot com
9 ***************************************************************************/
10
11 /***************************************************************************
12 * *
13 * This program is free software; you can redistribute it and/or modify *
14 * it under the terms of the GNU General Public License as published by *
15 * the Free Software Foundation; either version 2 of the License, or *
16 * (at your option) any later version. *
17 * *
18 ***************************************************************************/
19
20 #include "qgsserverrequest.h"
21 #include <QUrlQuery>
22
QgsServerRequest(const QString & url,Method method,const Headers & headers)23 QgsServerRequest::QgsServerRequest( const QString &url, Method method, const Headers &headers )
24 : QgsServerRequest( QUrl( url ), method, headers )
25 {
26 }
27
QgsServerRequest(const QUrl & url,Method method,const Headers & headers)28 QgsServerRequest::QgsServerRequest( const QUrl &url, Method method, const Headers &headers )
29 : mUrl( url )
30 , mOriginalUrl( url )
31 , mMethod( method )
32 , mHeaders( headers )
33 {
34 mParams.load( QUrlQuery( url ) );
35 }
36
methodToString(const QgsServerRequest::Method & method)37 QString QgsServerRequest::methodToString( const QgsServerRequest::Method &method )
38 {
39 static QMetaEnum metaEnum = QMetaEnum::fromType<QgsServerRequest::Method>();
40 return QString( metaEnum.valueToKey( method ) ).remove( QStringLiteral( "Method" ) ).toUpper( );
41 }
42
header(const QString & name) const43 QString QgsServerRequest::header( const QString &name ) const
44 {
45 return mHeaders.value( name );
46 }
47
48
setHeader(const QString & name,const QString & value)49 void QgsServerRequest::setHeader( const QString &name, const QString &value )
50 {
51 mHeaders.insert( name, value );
52 }
53
headers() const54 QMap<QString, QString> QgsServerRequest::headers() const
55 {
56 return mHeaders;
57 }
58
59
removeHeader(const QString & name)60 void QgsServerRequest::removeHeader( const QString &name )
61 {
62 mHeaders.remove( name );
63 }
64
url() const65 QUrl QgsServerRequest::url() const
66 {
67 return mUrl;
68 }
69
originalUrl() const70 QUrl QgsServerRequest::originalUrl() const
71 {
72 return mOriginalUrl;
73 }
74
setOriginalUrl(const QUrl & url)75 void QgsServerRequest::setOriginalUrl( const QUrl &url )
76 {
77 mOriginalUrl = url;
78 }
79
method() const80 QgsServerRequest::Method QgsServerRequest::method() const
81 {
82 return mMethod;
83 }
84
parameters() const85 QMap<QString, QString> QgsServerRequest::parameters() const
86 {
87 return mParams.toMap();
88 }
89
serverParameters() const90 QgsServerParameters QgsServerRequest::serverParameters() const
91 {
92 return mParams;
93 }
94
data() const95 QByteArray QgsServerRequest::data() const
96 {
97 return QByteArray();
98 }
99
setParameter(const QString & key,const QString & value)100 void QgsServerRequest::setParameter( const QString &key, const QString &value )
101 {
102 mParams.add( key, value );
103 mUrl.setQuery( mParams.urlQuery() );
104 }
105
parameter(const QString & key,const QString & defaultValue) const106 QString QgsServerRequest::parameter( const QString &key, const QString &defaultValue ) const
107 {
108 const auto value { mParams.value( key ) };
109 if ( value.isEmpty() )
110 {
111 return defaultValue;
112 }
113 return value;
114 }
115
removeParameter(const QString & key)116 void QgsServerRequest::removeParameter( const QString &key )
117 {
118 mParams.remove( key );
119 mUrl.setQuery( mParams.urlQuery() );
120 }
121
setUrl(const QUrl & url)122 void QgsServerRequest::setUrl( const QUrl &url )
123 {
124 mUrl = url;
125 mParams.clear();
126 mParams.load( QUrlQuery( mUrl ) );
127 }
128
setMethod(Method method)129 void QgsServerRequest::setMethod( Method method )
130 {
131 mMethod = method;
132 }
133
queryParameter(const QString & name,const QString & defaultValue) const134 const QString QgsServerRequest::queryParameter( const QString &name, const QString &defaultValue ) const
135 {
136 if ( !QUrlQuery( mUrl ).hasQueryItem( name ) )
137 {
138 return defaultValue;
139 }
140 return QUrl::fromPercentEncoding( QUrlQuery( mUrl ).queryItemValue( name ).toUtf8() );
141 }
142
143