コード例 #1
0
    def test_protected_layers3(self):
        from c2cgeoportal.lib.filter_capabilities import get_protected_layers

        pl = get_protected_layers(self.role3_id, [self.ogc_server_id])
        self.assertEqual(
            {pl[l].name for l in pl},
            {"testpoint_protected", "testpoint_protected_query_with_collect"}
        )
コード例 #2
0
ファイル: pdfreport.py プロジェクト: fredj/c2cgeoportal
    def get_report(self):
        id = self.request.matchdict["id"]
        self.layername = self.request.matchdict["layername"]

        if self._get_config("check_credentials", True):
            # check user credentials
            role_id = None if self.request.user is None else \
                self.request.user.role.id

            # FIXME: support of mapserver groups
            if self.layername in get_private_layers() and \
                    self.layername not in get_protected_layers(role_id):
                raise HTTPForbidden

        show_map = self._get_config("show_map", True)
        if show_map:
            srs = self._get_config("srs")
            if srs is None:
                raise HTTPInternalServerError(
                    "Missing 'srs' in service configuration"
                )
            params = {
                "service": "WFS",
                "version": "1.0.0",
                "request": "GetFeature",
                "typeName": self.layername,
                "featureid": self.layername + "." + id,
                "srsName": srs
            }

            mapserv_url = self.request.route_url("mapserverproxy")
            vector_request_url = mapserv_url + "?" \
                + "&".join(["%s=%s" % i for i in params.items()])

            backgroundlayers = self._get_config("backgroundlayers", '""')
            imageformat = self._get_config("imageformat", "image/png")
        else:
            srs = mapserv_url = vector_request_url = imageformat = ""
            backgroundlayers = '""'

        spec_template = self._get_config("spec_template")
        if spec_template is None:
            spec_template = {
                "layout": "%(layername)s",
                "outputFormat": "pdf",
                "attributes": {
                    "paramID": "%(id)s"
                }
            }
            if show_map:
                spec_template["attributes"]["map"] = {
                    "projection": "%(srs)s",
                    "dpi": 254,
                    "rotation": 0,
                    "bbox": [0, 0, 1000000, 1000000],
                    "zoomToFeatures": {
                        "zoomType": "center",
                        "layer": "vector",
                        "minScale": 25000
                    },
                    "layers": [{
                        "type": "gml",
                        "name": "vector",
                        "style": {
                            "version": "2",
                            "[1 > 0]": {
                                "fillColor": "red",
                                "fillOpacity": 0.2,
                                "symbolizers": [{
                                    "strokeColor": "red",
                                    "strokeWidth": 1,
                                    "type": "point",
                                    "pointRadius": 10
                                }]
                            }
                        },
                        "opacity": 1,
                        "url": "%(vector_request_url)s"
                    }, {
                        "baseURL": "%(mapserv_url)s",
                        "opacity": 1,
                        "type": "WMS",
                        "serverType": "mapserver",
                        "layers": ["%(backgroundlayers)s"],
                        "imageFormat": "%(imageformat)s"
                    }]
                }
        spec = dumps(spec_template) % {
            "layername": self.layername, "id": id, "srs": srs,
            "mapserv_url": mapserv_url,
            "vector_request_url": vector_request_url,
            "imageformat": imageformat,
            "backgroundlayers": backgroundlayers
        }

        return self._do_print(loads(spec))
コード例 #3
0
ファイル: pdfreport.py プロジェクト: rmichaelis/c2cgeoportal
    def get_report(self):
        id = self.request.matchdict["id"]
        self.layername = self.request.matchdict["layername"]
        self.layer_config = self.config.get("layers", {}).get(self.layername, {})

        if self._get_config("check_credentials", True):
            # check user credentials
            role_id = None if self.request.user is None else self.request.user.role.id

            # FIXME: support of mapserver groups
            if self.layername in get_private_layers() and self.layername not in get_protected_layers(role_id):
                raise HTTPForbidden

        srs = self._get_config("srs")
        if srs is None:
            raise HTTPInternalServerError("Missing 'srs' in service configuration")

        mapserv_url = self.request.route_url("mapserverproxy")
        vector_request_url = "%s?%s" % (
            mapserv_url,
            "&".join(
                [
                    "%s=%s" % i
                    for i in {
                        "service": "WFS",
                        "version": "1.1.0",
                        "outputformat": "gml3",
                        "request": "GetFeature",
                        "typeName": self.layername,
                        "featureid": self.layername + "." + id,
                        "srsName": "epsg:" + str(srs),
                    }.items()
                ]
            ),
        )

        spec = self._get_config("spec")
        if spec is None:
            spec = {"layout": self.layername, "outputFormat": "pdf", "attributes": {"paramID": id}}
            map_config = self.layer_config.get("map")
            if map_config is not None:
                spec["attributes"]["map"] = self._build_map(mapserv_url, vector_request_url, srs, map_config)

            maps_config = self.layer_config.get("maps")
            if maps_config is not None:
                spec["attributes"]["maps"] = []
                for map_config in maps_config:
                    spec["attributes"]["maps"].append(self._build_map(mapserv_url, vector_request_url, srs, map_config))
        else:
            spec = loads(
                dumps(spec)
                % {
                    "layername": self.layername,
                    "id": id,
                    "srs": srs,
                    "mapserv_url": mapserv_url,
                    "vector_request_url": vector_request_url,
                }
            )

        return self._do_print(spec)
コード例 #4
0
    def get_report(self):
        ids = self.request.matchdict["ids"].split(",")
        self.layername = self.request.matchdict["layername"]
        layer_config = self.config["layers"].get(self.layername)

        if layer_config is None:
            raise HTTPBadRequest("Layer not found")

        features_ids = [self.layername + "." + id_ for id_ in ids]

        if layer_config["check_credentials"]:
            # check user credentials
            role_id = None if self.request.user is None else \
                self.request.user.role.id

            # FIXME: support of mapserver groups
            ogc_server_ids = [self.default_ogc_server.id]

            private_layers_object = get_private_layers(ogc_server_ids)
            private_layers_names = [
                private_layers_object[oid].name
                for oid in private_layers_object
            ]

            protected_layers_object = get_protected_layers(
                role_id, ogc_server_ids)
            protected_layers_names = [
                protected_layers_object[oid].name
                for oid in protected_layers_object
            ]

            if self.layername in private_layers_names and \
                    self.layername not in protected_layers_names:
                raise HTTPForbidden

        srs = layer_config["srs"]

        mapserv_url = self.request.route_url("mapserverproxy")
        vector_request_url = "{0!s}?{1!s}".format(
            mapserv_url, "&".join([
                "{0!s}={1!s}".format(*i)
                for i in list({
                    "service": "WFS",
                    "version": "1.1.0",
                    "outputformat": "gml3",
                    "request": "GetFeature",
                    "typeName": self.layername,
                    "featureid": ",".join(features_ids),
                    "srsName": "epsg:" + str(srs)
                }.items())
            ]))

        spec = layer_config["spec"]
        if spec is None:
            spec = {
                "layout": self.layername,
                "outputFormat": "pdf",
                "attributes": {
                    "ids": ids
                }
            }
            map_config = layer_config.get("map")
            if map_config is not None:
                spec["attributes"]["map"] = self._build_map(
                    mapserv_url, vector_request_url, srs, map_config)

            maps_config = layer_config.get("maps")
            if maps_config is not None:
                spec["attributes"]["maps"] = []
                for map_config in maps_config:
                    spec["attributes"]["maps"].append(
                        self._build_map(mapserv_url, vector_request_url, srs,
                                        map_config))
        else:
            spec = loads(
                dumps(spec) % {
                    "layername": self.layername,
                    "ids": dumps(ids),
                    "srs": srs,
                    "mapserv_url": mapserv_url,
                    "vector_request_url": vector_request_url,
                })

        return self._do_print(spec)
コード例 #5
0
    def get_report(self):
        id = self.request.matchdict["id"]
        self.layername = self.request.matchdict["layername"]
        self.layer_config = self.config.get("layers", {}).get(self.layername, {})

        if self._get_config("check_credentials", True):
            # check user credentials
            role_id = None if self.request.user is None else \
                self.request.user.role.id

            # FIXME: support of mapserver groups
            if self.layername in get_private_layers() and \
                    self.layername not in get_protected_layers(role_id):
                raise HTTPForbidden

        srs = self._get_config("srs")
        if srs is None:
            raise HTTPInternalServerError(
                "Missing 'srs' in service configuration"
            )

        mapserv_url = self.request.route_url("mapserverproxy")
        vector_request_url = "%s?%s" % (
            mapserv_url,
            "&".join(["%s=%s" % i for i in {
                "service": "WFS",
                "version": "1.1.0",
                "outputformat": "gml3",
                "request": "GetFeature",
                "typeName": self.layername,
                "featureid": self.layername + "." + id,
                "srsName": "epsg:" + str(srs)
            }.items()])
        )

        spec = self._get_config("spec")
        if spec is None:
            spec = {
                "layout": self.layername,
                "outputFormat": "pdf",
                "attributes": {
                    "paramID": id
                }
            }
            map_config = self.layer_config.get("map")
            if map_config is not None:
                spec["attributes"]["map"] = self._build_map(
                    mapserv_url, vector_request_url, srs, map_config
                )

            maps_config = self.layer_config.get("maps")
            if maps_config is not None:
                spec["attributes"]["maps"] = []
                for map_config in maps_config:
                    spec["attributes"]["maps"].append(self._build_map(
                        mapserv_url, vector_request_url, srs, map_config
                    ))
        else:
            spec = loads(dumps(spec) % {
                "layername": self.layername,
                "id": id,
                "srs": srs,
                "mapserv_url": mapserv_url,
                "vector_request_url": vector_request_url,
            })

        return self._do_print(spec)
コード例 #6
0
ファイル: pdfreport.py プロジェクト: camptocamp/c2cgeoportal
    def get_report(self):
        id = self.request.matchdict["id"]
        self.layername = self.request.matchdict["layername"]
        layer_config = self.config["layers"].get(self.layername)

        if layer_config is None:
            raise HTTPBadRequest("Layer not found")

        if layer_config["check_credentials"]:
            # check user credentials
            role_id = None if self.request.user is None else \
                self.request.user.role.id

            # FIXME: support of mapserver groups
            if self.layername in get_private_layers() and \
                    self.layername not in get_protected_layers(role_id):
                raise HTTPForbidden

        srs = layer_config["srs"]

        mapserv_url = self.request.route_url("mapserverproxy")
        vector_request_url = "{0!s}?{1!s}".format(
            mapserv_url,
            "&".join(["{0!s}={1!s}".format(*i) for i in {
                "service": "WFS",
                "version": "1.1.0",
                "outputformat": "gml3",
                "request": "GetFeature",
                "typeName": self.layername,
                "featureid": self.layername + "." + id,
                "srsName": "epsg:" + str(srs)
            }.items()])
        )

        spec = layer_config["spec"]
        if spec is None:
            spec = {
                "layout": self.layername,
                "outputFormat": "pdf",
                "attributes": {
                    "paramID": id
                }
            }
            map_config = layer_config.get("map")
            if map_config is not None:
                spec["attributes"]["map"] = self._build_map(
                    mapserv_url, vector_request_url, srs, map_config
                )

            maps_config = layer_config.get("maps")
            if maps_config is not None:
                spec["attributes"]["maps"] = []
                for map_config in maps_config:
                    spec["attributes"]["maps"].append(self._build_map(
                        mapserv_url, vector_request_url, srs, map_config
                    ))
        else:
            spec = loads(dumps(spec) % {
                "layername": self.layername,
                "id": id,
                "srs": srs,
                "mapserv_url": mapserv_url,
                "vector_request_url": vector_request_url,
            })

        return self._do_print(spec)