QGIS API Documentation 3.28.0-Firenze (ed3ad0430f)
qgsserverapiutils.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsserverapiutils.h
3
4 Class defining utilities for QGIS server APIs.
5 -------------------
6 begin : 2019-04-16
7 copyright : (C) 2019 by Alessandro Pasotti
8 email : elpaso at itopen dot it
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
21#ifndef QGSSERVERAPIUTILS_H
22#define QGSSERVERAPIUTILS_H
23
24#include "qgis_server.h"
25#include <QString>
26#include "qgsproject.h"
28#include "qgsserverapicontext.h"
29#include "qgsserverexception.h"
31#include "qgsrange.h"
32#include "qgsjsonutils.h"
33
34#ifdef HAVE_SERVER_PYTHON_PLUGINS
35#include "qgsaccesscontrol.h"
36#include "qgsserverinterface.h"
37#endif
38
39class QgsRectangle;
41class QgsVectorLayer;
42
43#ifndef SIP_RUN
44#include "nlohmann/json_fwd.hpp"
45using namespace nlohmann;
46#endif
47
53class SERVER_EXPORT QgsServerApiUtils
54{
55
56 public:
57
63 static QgsRectangle parseBbox( const QString &bbox );
64
69 static QList< QgsServerWmsDimensionProperties::WmsDimensionInfo > temporalDimensions( const QgsVectorLayer *layer );
70
77 static QgsDateRange parseTemporalDateInterval( const QString &interval ) SIP_THROW( QgsServerApiBadRequestException );
78
85 static QgsDateTimeRange parseTemporalDateTimeInterval( const QString &interval ) SIP_THROW( QgsServerApiBadRequestException );
86
87
93 static QString fieldName( const QString &name, const QgsVectorLayer *layer ) SIP_THROW( QgsServerApiBadRequestException );
94
96 // T is TemporalDateInterval|TemporalDateTimeInterval, T2 is QDate|QdateTime
97 template<typename T, class T2> static T parseTemporalInterval( const QString &interval ) SIP_SKIP;
99
100
113 static QgsExpression temporalFilterExpression( const QgsVectorLayer *layer, const QString &interval );
114
118 static json layerExtent( const QgsVectorLayer *layer ) SIP_SKIP;
119
137 static json temporalExtent( const QgsVectorLayer *layer ) SIP_SKIP;
138
155 static QVariantList temporalExtentList( const QgsVectorLayer *layer ) SIP_PYNAME( temporalExtent );
156
160 static QgsCoordinateReferenceSystem parseCrs( const QString &bboxCrs );
161
167 static const QVector<QgsVectorLayer *> publishedWfsLayers( const QgsServerApiContext &context );
168
169#ifndef SIP_RUN
170
180 template <typename T>
181 static const QVector<T> publishedWfsLayers( const QgsServerApiContext &context )
182 {
183#ifdef HAVE_SERVER_PYTHON_PLUGINS
184 QgsAccessControl *accessControl = context.serverInterface()->accessControls();
185#endif
186 const QgsProject *project = context.project();
187 QVector<T> result;
188 if ( project )
189 {
190 const QStringList wfsLayerIds = QgsServerProjectUtils::wfsLayerIds( *project );
191 const auto constLayers { project->layers<T>() };
192 for ( const auto &layer : constLayers )
193 {
194 if ( ! wfsLayerIds.contains( layer->id() ) )
195 {
196 continue;
197 }
198#ifdef HAVE_SERVER_PYTHON_PLUGINS
199 if ( accessControl && !accessControl->layerReadPermission( layer ) )
200 {
201 continue;
202 }
203#endif
204 result.push_back( layer );
205 }
206 }
207 return result;
208 }
209
210#endif
211
212
217 static QString sanitizedFieldValue( const QString &value );
218
223 static QStringList publishedCrsList( const QgsProject *project );
224
229 static QString crsToOgcUri( const QgsCoordinateReferenceSystem &crs );
230
234 static QString appendMapParameter( const QString &path, const QUrl &requestUrl );
235
236};
237#endif // QGSSERVERAPIUTILS_H
A helper class that centralizes restrictions given by all the access control filter plugins.
bool layerReadPermission(const QgsMapLayer *layer) const
Returns the layer read right.
This class represents a coordinate reference system (CRS).
Class for parsing and evaluation of expressions (formerly called "search strings").
QString id() const
Returns the layer's unique ID, which is used to access this layer from QgsProject.
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
Definition: qgsproject.h:104
QVector< T > layers() const
Returns a list of registered map layers with a specified layer type.
Definition: qgsproject.h:1178
A rectangle specified with double values.
Definition: qgsrectangle.h:42
Bad request error API exception.
The QgsServerApiContext class encapsulates the resources for a particular client request: the request...
const QgsProject * project() const
Returns the (possibly NULL) project.
QgsServerInterface * serverInterface() const
Returns the server interface.
The QgsServerApiUtils class contains helper functions to handle common API operations.
static const QVector< T > publishedWfsLayers(const QgsServerApiContext &context)
Returns the list of layers of type T accessible to the WFS service for a given project.
virtual QgsAccessControl * accessControls() const =0
Gets the registered access control filters.
Represents a vector layer which manages a vector based data sets.
SERVER_EXPORT QStringList wfsLayerIds(const QgsProject &project)
Returns the Layer ids list defined in a QGIS project as published in WFS.
QgsRectangle parseBbox(const QString &bboxStr)
Parse bounding box.
#define SIP_SKIP
Definition: qgis_sip.h:126
#define SIP_PYNAME(name)
Definition: qgis_sip.h:81
#define SIP_THROW(name,...)
Definition: qgis_sip.h:198
const QgsCoordinateReferenceSystem & crs