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