[Mapbender-commits] r9492 - trunk/mapbender/owsproxy/http
svn_mapbender at osgeo.org
svn_mapbender at osgeo.org
Fri May 27 00:29:34 PDT 2016
Author: armin11
Date: 2016-05-27 00:29:34 -0700 (Fri, 27 May 2016)
New Revision: 9492
Removed:
trunk/mapbender/owsproxy/http/index.php_old
Log:
fix wrong commit
Deleted: trunk/mapbender/owsproxy/http/index.php_old
===================================================================
--- trunk/mapbender/owsproxy/http/index.php_old 2016-05-27 07:26:54 UTC (rev 9491)
+++ trunk/mapbender/owsproxy/http/index.php_old 2016-05-27 07:29:34 UTC (rev 9492)
@@ -1,831 +0,0 @@
-<?php
-# $Id: index.php 8750 2013-12-11 06:53:13Z armin11 $
-# http://www.mapbender.org/index.php/Owsproxy
-# Module maintainer Uli
-# Copyright (C) 2002 CCGIS
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-require_once(dirname(__FILE__)."/../../core/globalSettings.php");
-require_once(dirname(__FILE__) . "/../../http/classes/class_administration.php");
-require_once(dirname(__FILE__) . "/../../http/classes/class_connector.php");
-require_once(dirname(__FILE__) . "/./classes/class_QueryHandler.php");
-/***** conf *****/
-$imageformats = array("image/png","image/gif","image/jpeg", "image/jpg");
-$width = 400;
-$height = 400;
-/***** conf *****/
-if (ini_get('session.save_handler') == "memcache") {
- $memcache_obj = new Memcache;
- $memcache_obj->connect('localhost', 11211);
- $e = new mb_notice("sessions stored to memcached");
-}
-$postdata = $HTTP_RAW_POST_DATA;
-$owsproxyService = $_REQUEST['wms']; //ToDo: change this to 'service' in the apache url-rewriting
-$query = new QueryHandler();
-// an array with keys and values toLowerCase -> caseinsensitiv
-$reqParams = $query->getRequestParams();
-$e = new mb_notice("incoming request: ".OWSPROXY."/".$_REQUEST['sid']."/".$_REQUEST['wms'].$query->getRequest());
-$e = new mb_notice("owsproxy requested from: ".$_SERVER["REMOTE_ADDR"]);
-
-if (defined("OWSPROXY_SESSION_GRABBING_WHITELIST")) {
- $whiteListArray = explode(",", OWSPROXY_SESSION_GRABBING_WHITELIST);
- if (in_array($_SERVER["REMOTE_ADDR"], $whiteListArray)) {
- $grabbingAllowed = true;
- $e = new mb_notice("Grabbing allowed for IP: ".$_SERVER["REMOTE_ADDR"]);
- } else {
- $grabbingAllowed = false;
- $e = new mb_notice("Grabbing not allowed for IP: ".$_SERVER["REMOTE_ADDR"]."!");
- }
-} else {
- $grabbingAllowed = false;
-}
-
-$e = new mb_notice("Initial session_id: ".session_id());
-//The session can be set by a given cookie value or was newly created by core/globalSettings.php
-//either empty (without mb_user_id value) - when the corresponding session file was lost or timed out
-//or filled, when there was an actual mapbender session before
-//check if mb_user_id is given and is an string with an integer:
-if(!$_SESSION['mb_user_id'] && !is_int($_SESSION['mb_user_id'])){
- $e = new mb_notice("Newly initialized session - no logged in mapbender user for this session!");
-}
-//Possibility to grap an existing session:
-if (defined("OWSPROXY_ALLOW_SESSION_GRABBING") && OWSPROXY_ALLOW_SESSION_GRABBING == true) {
- if ($grabbingAllowed) {
- //first check is to find out if a session with the current sid exists! If so use this one, if not use the current one which was generated from globalSettings.php
- switch (ini_get('session.save_handler')) {
- //$e = new mb_notice("filesystem session found");
- case "files":
- $e = new mb_notice("search for session in filesystem");
- if (file_exists(ini_get('session.save_path')."/sess_".$_REQUEST["sid"]) && session_id() !== $_REQUEST["sid"]) {
- //there is a current session for the requested url
- $e = new mb_notice("A current session exists for this url and will be used!");
- $oldsessionId = session_id();
- $tmpSessionFile = ini_get('session.save_path')."/sess_".session_id();
- //do the following only, if a user is in this session - maybe it is a session which was generated from an external application and therefor it is empty!
- session_id($_REQUEST["sid"]);
- $e = new mb_notice("Grabbed session with id: ".session_id());
- //kill dynamical session
- //@unlink($tmpSessionFile);
- $e = new mb_notice("Following user was found and will be used for authorization: ".Mapbender::session()->get('mb_user_id'));
- $foundUserId = Mapbender::session()->get('mb_user_id');
- if (!isset($foundUserId) || $foundUserId =='') {
- $e = new mb_notice("No user found in the existing session - switch to the initial old one!");
-
- session_id($oldsessionId);
- //unset($tmpSessionFile);
- } else {
- //delete session as it will not be needed any longer
- $e = new mb_notice("User found in grabbed session. Following temporary session will be deleted: ".$tmpSessionFile);
- @unlink($tmpSessionFile);
- unset($tmpSessionFile);
- }
- } else {
- $e = new mb_notice("session exists but maybe no user in this session?");
- }
- break;
- case "memcache":
- //check if a session exists for the SID param and if this session
- $currentSession = $memcache_obj->get($_REQUEST["sid"]);
- if ($currentSession !== false && session_id() !== $_REQUEST["sid"]) {
- //there is a current session for the requested url
- $e = new mb_exception("A current session exists for this url and will be used!");
- //$oldsessionId = session_id();
- //get actual session as key from memcached - new if not there
- $tmpSessionFile = session_id();
- //$tmpSessionFile = ini_get('session.save_path')."/sess_".session_id();
- //do the following only, if a user is in this session - maybe it is a session which was generated from an external application and therefor it is empty!
- session_id($_REQUEST["sid"]);
- $e = new mb_exception("Grabbed session with id: ".session_id());
- //kill dynamical session
- //@unlink($tmpSessionFile);
- $e = new mb_exception("Following user was found and will be used for authorization: ".Mapbender::session()->get('mb_user_id'));
- $foundUserId = Mapbender::session()->get('mb_user_id');
- if (!isset($foundUserId) || $foundUserId =='') {
- $e = new mb_exception("No user found in the existing session - switch to the initial one!");
- session_id($tmpSessionFile);
- //unset($tmpSessionFile);
- } else {
- //delete old initial session as it will not be needed any longer
- $e = new mb_exception("Following temporary session will be deleted: ".$tmpSessionFile);
- //delete session from memcached
- //@unlink($tmpSessionFile);
- $memcache_obj->delete($tmpSessionFile);
- unset($tmpSessionFile);
- }
- }
- break;
- }
- }
-}
-
-//check for user
-
-//check if current session has the same id as the session which is requested in the owsproxy url
-//exchange them, if they differ and redirect to an new one with the current session
-if (session_id() !== $_REQUEST["sid"]) {
- //get all request params which are original
- //build reuquest
- $redirectUrl = OWSPROXY."/".session_id()."/".$_REQUEST['wms'].$query->getRequest();
- $e = new mb_exception("IDs differ - redirect to new owsproxy url: ".$redirectUrl);
- header("Location: ".$redirectUrl);
- die();
-} else {
- $e = new mb_exception("Current session_id() identical to requested SID!");
-}
-//this is the request which may have been redirected
-//check for given user session with user_id which can be tested again the authorization
-(integer)$foundUserId = Mapbender::session()->get('mb_user_id');
-$e = new mb_exception("Found user id: ".$foundUserId ." of type: ".gettype($foundUserId));
-
-
-if(is_int($foundUserId) && $foundUserId > 0){
- //Define the session to be temporary. This file can be deleted after the request was successful. It will be generated every time again.
- $e = new mb_exception("userId is_int and > 0");
-
- switch (ini_get('session.save_handler')) {
- case "files":
- $tmpSessionFile = ini_get('session.save_path')."/sess_".session_id();
- break;
- case "memcache":
- $tmpSessionFile = session_id();
- break;
- }
- $e = new mb_notice("user_id not found in session!");
- //if configured in mapbender.conf, create guest session so that also proxied service can be watched in external applications when they are available to the anonymous user
- //only possible for webapplications - in case of desktop applications the user have to use his credentials and http_auth module
- if (defined("OWSPROXY_ALLOW_PUBLIC_USER") && OWSPROXY_ALLOW_PUBLIC_USER && defined("PUBLIC_USER") && PUBLIC_USER != "") {
- //setSession();
- Mapbender::session()->set("mb_user_id",PUBLIC_USER);
- Mapbender::session()->set("external_proxy_user",true);
- Mapbender::session()->set("mb_user_ip",$_SERVER['REMOTE_ADDR']);
- $e = new mb_notice("Permission allowed for public user with id: ".PUBLIC_USER);
- } else {
- $e = new mb_notice("Permission denied - public user not allowed to access ressource!");
- //kill actual session file
- switch (ini_get('session.save_handler')) {
- case "files":
- $e = new mb_exception("delete temporary session file: ".$tmpSessionFile);
- @unlink($tmpSessionFile);
- throwE(array("Permission denied"," - no current session found and ","public user not allowed to access ressource!"));
- unset($tmpSessionFile);
- die();
- break;
- case "memcache":
- $e = new mb_exception("delete temporary session ".session_id());
- $memcache_obj->delete($tmpSessionFile);
- //@unlink($tmpSessionFile);
- throwE(array("Permission denied"," - no current session found and ","public user not allowed to access ressource!"));
- unset($tmpSessionFile);
- die();
- break;
- }
- }
-} else {
- $e = new mb_notice("mb_user_id found in session: ".$_SESSION['mb_user_id']);
- $e = new mb_notice("tmpSessionFile: exists: ".isset($tmpSessionFile));
-}
-//start the session to be able to write urls to it - for
-session_start();//maybe it was started by globalSettings.php
-$n = new administration;
-//Extra security - IP check
-if (defined("OWSPROXY_BIND_IP") && OWSPROXY_BIND_IP == true) {
- if($_SESSION['mb_user_ip'] != $_SERVER['REMOTE_ADDR']){
- throwE(array("Session not identified.","Permission denied.","Please authenticate."));
- die();
- }
-}
-$e = new mb_notice("user id for authorization test: ".$_SESSION['mb_user_id']);
-$wmsId = $n->getWmsIdFromOwsproxyString($query->getOwsproxyServiceId());
-//get authentication infos if they are available in wms table! if not $auth = false
-$auth = $n->getAuthInfoOfWMS($wmsId);
-if ($auth['auth_type']==''){
- unset($auth);
-}
-/************* workflow ************/
-$n = new administration();
-switch (strtolower($reqParams['request'])) {
- case 'getcapabilities':
- $arrayOnlineresources = checkWmsPermission($query->getOwsproxyServiceId());
- $query->setOnlineResource($arrayOnlineresources['wms_getcapabilities']);
- $request = $query->getRequest();
- if(isset($auth)){
- getCapabilities($request,$auth);
- }
- else {
- getCapabilities($request);
- }
- break;
- case 'getfeatureinfo':
- $arrayOnlineresources = checkWmsPermission($query->getOwsproxyServiceId());
- $query->setOnlineResource($arrayOnlineresources['wms_getfeatureinfo']);
- $request = $query->getRequest();
- if(isset($auth)){
- getFeatureInfo($request,$auth);
- }
- else {
- getFeatureInfo($request);
- }
- break;
- case 'getmap':
- $arrayOnlineresources = checkWmsPermission($owsproxyService);
- $query->setOnlineResource($arrayOnlineresources['wms_getmap']);
- $layers = checkLayerPermission($arrayOnlineresources['wms_id'],$reqParams['layers']);
- if($layers===""){
- throwE("Permission denied");
- die();
- }
- $query->setParam("layers",urldecode($layers));//the decoding of layernames dont make problems - but not really good names will be requested also ;-)
- //Following is only needed for high quality print and is vendor specific for mapservers mapfiles!
- if (defined("OWSPROXY_SUPPORT_HQ_PRINTING") && OWSPROXY_SUPPORT_HQ_PRINTING) {
- //if url has integrated mapfile - exchange it
- //$e = new mb_notice("owsproxy/http/index.php: OWSPROXY_SUPPORT_HQ_PRINTING is set");
- if ($reqParams['mapbenderhighqualityprint'] === "true") {
- //exchange mapfiles with high quality ones
- $request = preg_replace("/\.map/","_4.map",$query->getRequest());
- } else {
- $request = $query->getRequest();
- }
- } else {
- $request = $query->getRequest();
- }
- //log proxy requests
- if($n->getWmsLogTag($arrayOnlineresources['wms_id'])==1) {
- #do log to db
- #TODO read out size of bbox and calculate price
- #get price out of db
- $price=intval($n->getWmsPrice($arrayOnlineresources['wms_id']));
- $n->logWmsProxyRequest($arrayOnlineresources['wms_id'],$_SESSION['mb_user_id'],$request,$price);
- }
- //$e = new mb_exception("owsproxy/http/index.php: ".$request);
- if(isset($auth)){
- getImage($request,$auth);
- }
- else {
- getImage($request);
- }
- break;
- case 'map':
- $arrayOnlineresources = checkWmsPermission($owsproxyService);
- $query->setOnlineResource($arrayOnlineresources['wms_getmap']);
- $layers = checkLayerPermission($arrayOnlineresources['wms_id'],$reqParams['layers']);
- if($layers===""){
- throwE("Permission denied");
- die();
- }
- $query->setParam("layers",urldecode($layers));
- $request = $query->getRequest();
- if(isset($auth)){
- getImage($url,$auth);
- }
- else {
- getImage($url);
- }
- break;
- case 'getlegendgraphic':
- $url = getLegendUrl($query->getOwsproxyServiceId());
- if (isset ($reqParams['sld']) && $reqParams['sld'] != "") {
- $url = $url . getConjunctionCharacter($url) . "SLD=".$reqParams['sld'];
- }
- if(isset($auth)){
- getImage($url,$auth);
- }
- else {
- getImage($url);
- }
- break;
- case 'external':
- getExternalRequest($query->getOwsproxyServiceId());
- break;
- case 'getfeature':
- $arrayFeatures = array($reqParams['typename']);
- $arrayOnlineresources = checkWfsPermission($query->getOwsproxyServiceId(), $arrayFeatures);
- $query->setOnlineResource($arrayOnlineresources['wfs_getfeature']);
- $request = $query->getRequest();
- $request = stripslashes($request);
- getFeature($request);
- break;
- // case wfs transaction (because of raw POST the request param is empty)
- case '':
- $arrayFeatures = getWfsFeaturesFromTransaction($HTTP_RAW_POST_DATA);
- $arrayOnlineresources = checkWfsPermission($query->getOwsproxyServiceId(), $arrayFeatures);
- $query->setOnlineResource($arrayOnlineresources['wfs_transaction']);
- $request = $query->getRequest();
- doTransaction($request, $HTTP_RAW_POST_DATA);
- break;
- default:
-
-}
-//why delete session here - only if it was temporary?
-switch (ini_get('session.save_handler')) {
- case "files":
- if (isset($tmpSessionFile) && file_exists($tmpSessionFile)) {
- $e = new mb_notice("Following temporary session will be deleted: ".$tmpSessionFile);
- @unlink($tmpSessionFile);
- }
- break;
- case "memcache":
- if (isset($tmpSessionFile) && $memcache_obj->get($tmpSessionFile) != false) {
- $e = new mb_notice("Following temporary session will be deleted: ".$tmpSessionFile);
- $memcache_obj->delete($tmpSessionFile);
- }
- break;
-}
-
-/*********************************************************/
-function throwE($e){
- global $reqParams, $imageformats;
- if(in_array($reqParams['format'],$imageformats)){
- throwImage($e);
- }
- else{
- throwText($e);
- }
-}
-
-function throwImage($e){
- global $width,$height;
- $image = imagecreate($width,$height);
- $transparent = ImageColorAllocate($image,155,155,155);
- ImageFilledRectangle($image,0,0,$width,$height,$transparent);
- imagecolortransparent($image, $transparent);
- $text_color = ImageColorAllocate ($image, 233, 14, 91);
- if (count($e) > 1){
- for($i=0; $i<count($e); $i++){
- $imageString = $e[$i];
- ImageString ($image, 3, 5, $i*20, $imageString, $text_color);
- }
- } else {
- if (is_array($e)) {
- $imageString = $e[0];
- } else {
- $imageString = $e;
- }
- if ($imageString == "") {
- $imageString = "An unknown error occured!";
- }
- ImageString ($image, 3, 5, $i*20, $imageString, $text_color);
- }
- responseImage($image);
-}
-function throwText($e){
- echo join(" ", $e);
-}
-function responseImage($im){
- global $reqParams;
- $format = $reqParams['format'];
- $format="image/gif";
- if($format == 'image/png'){header("Content-Type: image/png");}
- if($format == 'image/jpeg' || $format == 'image/jpg'){header("Content-Type: image/jpeg");}
- if($format == 'image/gif'){header("Content-Type: image/gif");}
-
- if($format == 'image/png'){imagepng($im);}
- if($format == 'image/jpeg' || $format == 'image/jpg'){imagejpeg($im);}
- if($format == 'image/gif'){imagegif($im);}
-}
-function completeURL($url){
- global $reqParams;
- $mykeys = array_keys($reqParams);
- for($i=0; $i<count($mykeys);$i++){
- if($i > 0){ $url .= "&"; }
- $url .= $mykeys[$i]."=".urlencode($reqParams[$mykeys[$i]]);
- }
- return $url;
-}
-
-/**
- * fetch and returns an image to client
- *
- * @param string the original url of the image to send
- */
-
-function getImage($or){
- global $reqParams;
- header("Content-Type: ".$reqParams['format']);
- #log the image_requests to database
- #log the following to table mb_proxy_log
- #timestamp,user_id,getmaprequest,amount pixel,price - but do this only for wms to log - therefor first get log tag out of wms!
- #
- #
- if (func_num_args() == 2) { //new for HTTP Authentication
- $auth = func_get_arg(1);
- echo getDocumentContent($or,$auth);
- }
- else
- {
- echo getDocumentContent($or);
- }
-
-}
-
-/**
- * fetchs and returns the content of the FeatureInfo Response
- *
- * @param string the url of the FeatureInfoRequest
- * @return string the content of the FeatureInfo document
- */
-function getFeatureInfo($url){
- global $reqParams;
- //$e = new mb_notice("owsproxy: Try to fetch FeatureInfoRequest: ".$url);
- header("Content-Type: ".$reqParams['info_format']);
-
- if (func_num_args() == 2) { //new for HTTP Authentication
- $auth = func_get_arg(1);
- $content = getDocumentContent($url,$auth);
- }
- else {
- $content = getDocumentContent($url);
- }
- $content = matchUrls($content);
- echo $content;
-}
-
-/**
- * fetchs and returns the content of WFS GetFeature response
- *
- * @param string the url of the GetFeature request
- * @return echo the content of the GetFeature document
- */
-function getFeature($url){
- global $reqParams;
-
- header("Content-Type: ".$reqParams['info_format']);
- $content = getDocumentContent($url);
- $content = matchUrls($content);
- echo $content;
-}
-
-/**
- * simulates a post request to host
- *
- * @param string host to send the request to
- * @param string port of host to send the request to
- * @param string method to send data (should be "POST")
- * @param string path on host
- * @param string data to send to host
- * @return string hosts response
- */
-
-function sendToHost($host,$port,$method,$path,$data){
- $buf = '';
- if (empty($method)) $method = 'POST';
- $method = mb_strtoupper($method);
- $fp = fsockopen($host, $port);
- fputs($fp, "$method $path HTTP/1.1\r\n");
- fputs($fp, "Host: $host\r\n");
- fputs($fp,"Content-type: application/xml\r\n");
- fputs($fp, "Content-length: " . strlen($data) . "\r\n");
- fputs($fp, "Connection: close\r\n\r\n");
- if ($method == 'POST') fputs($fp, $data);
- while (!feof($fp)) $buf .= fgets($fp,4096);
- fclose($fp);
- return $buf;
-}
-
-/**
- * get wfs featurenames that are touched by a tansaction request defined in XML $data
- *
- * @param string XML that contains the tansaction request
- * @return array array of touched feature names
- */
-
-function getWfsFeaturesFromTransaction($data){
- new mb_exception("owsproxy.getWfsFeaturesFromTransaction.data: ".$data);
- if(!$data || $data == ""){
- return false;
- }
- $features = array();
- $values = NULL;
- $tags = NULL;
- $parser = xml_parser_create();
- xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
- xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1);
- xml_parse_into_struct($parser,$data,$values,$tags);
-
- $code = xml_get_error_code ($parser);
- if ($code) {
- $line = xml_get_current_line_number($parser);
- $col = xml_get_current_column_number($parser);
- $mb_exception = new mb_exception("OWSPROXY invalid Tansaction XML: ".xml_error_string($code) . " in line " . $line. " at character ". $col);
- die();
- }
- xml_parser_free($parser);
-
- $insert = false;
- $insertlevel = 0;
- foreach ($values as $element) {
- //features touched by insert
- if(strtoupper($element[tag]) == "WFS:INSERT" && $element[type] == "open"){
- $insert = true;
- $insertlevel = $element[level];
- }
- if($insert && $element[level] == $insertlevel + 1 && $element[type] == "open"){
- array_push($features, $element[tag]);
- }
- if(strtoupper($element[tag]) == "WFS:INSERT" && $element[type] == "close"){
- $insert = false;
- }
- //updated features
- if(strtoupper($element[tag]) == "WFS:UPDATE" && $element[type] == "open"){
- array_push($features, $element[attributes]["typeName"]);
- }
- //deleted features
- if(strtoupper($element[tag]) == "WFS:DELETE" && $element[type] == "open"){
- array_push($features, $element[attributes]["typeName"]);
- }
- }
- return $features;
-}
-
-/**
- * sends the data of WFS Transaction and echos the response
- *
- * @param string url to send the WFS Transaction to
- * @param string WFS Transaction data
- */
-
-function doTransaction($url, $data){
- $arURL = parse_url($url);
- $host = $arURL["host"];
- $port = $arURL["port"];
- if($port == '') $port = 80;
-
- $path = $arURL["path"];
- $method = "POST";
- $result = sendToHost($host,$port,$method,html_entity_decode($path),$data);
-
- //delete header from result
- $result = mb_eregi_replace("^[^<]*", "", $result);
- $result = mb_eregi_replace("[^>]*$", "", $result);
-
- echo $result;
-}
-
-function matchUrls($content){
- if(!isset($_SESSION["owsproxyUrls"])){
- $_SESSION["owsproxyUrls"] = array();
- $_SESSION["owsproxyUrls"]["id"] = array();
- $_SESSION["owsproxyUrls"]["url"] = array();
- }
- $pattern = "/[\"|\'](https*:\/\/[^\"|^\']*)[\"|\']/";
- preg_match_all($pattern,$content,$matches);
- for($i=0; $i<count($matches[1]); $i++){
- $req = $matches[1][$i];
- $notice = new mb_exception("owsproxy found URL ".$i.": ".$req);
- #$notice = new mb_exception("owsproxy id:".$req);
- $id = registerURL($req);
- $extReq = setExternalRequest($id);
- $notice = new mb_exception("MD5 URL ".$id." - external link: ".$extReq);
- $content = str_replace($req,$extReq,$content);
- }
- return $content;
-}
-
-function setExternalRequest($id){
- global $reqParams,$query;
-// $extReq = "http://".$_SESSION['HTTP_HOST'] ."/owsproxy/". $reqParams['sid'] ."/".$id."?request=external";
- $extReq = OWSPROXY ."/". $reqParams['sid'] ."/".$id."?request=external";
- return $extReq;
-}
-function getExternalRequest($id){
- for($i=0; $i<count($_SESSION["owsproxyUrls"]["url"]); $i++){
- if($id == $_SESSION["owsproxyUrls"]["id"][$i]){
- $cUrl = $_SESSION["owsproxyUrls"]["url"][$i];
- $query_string = removeOWSGetParams($_SERVER["QUERY_STRING"]);
- if($query_string != ''){
- $cUrl .= getConjunctionCharacter($cUrl).$query_string;
- }
- $metainfo = get_headers($cUrl,1);
- // just for the stupid InternetExplorer
- header('Pragma: private');
- header('Cache-control: private, must-revalidate');
-
- header("Content-Type: ".$metainfo['Content-Type']);
-
- $content = getDocumentContent($cUrl);
- #$content = matchUrls($content);
- echo $content;
- }
- }
-}
-function removeOWSGetParams($query_string){
- $r = preg_replace("/.*request=external&/","",$query_string);
- #return $r;
- return "";
-}
-function getConjunctionCharacter($url){
- if(strpos($url,"?")){
- if(strpos($url,"?") == strlen($url)){
- $cchar = "";
- }else if(strpos($url,"&") == strlen($url)){
- $cchar = "";
- }else{
- $cchar = "&";
- }
- }
- if(strpos($url,"?") === false){
- $cchar = "?";
- }
- return $cchar;
-}
-function registerUrl($url){
- if(!in_array($url,$_SESSION["owsproxyUrls"]["url"])){
- $id = md5($url);
- array_push($_SESSION["owsproxyUrls"]["url"],$url);
- array_push($_SESSION["owsproxyUrls"]["id"], $id);
- }
- else{
- for($i=0; $i<count($_SESSION["owsproxyUrls"]["url"]); $i++){
- if($url == $_SESSION["owsproxyUrls"]["url"][$i]){
- $id = $_SESSION["owsproxyUrls"]["id"][$i];
- }
- }
- }
- return $id;
-}
-function getCapabilities($url){
- global $arrayOnlineresources;
- global $sid,$wms;
- $t = array(htmlentities($arrayOnlineresources["wms_getcapabilities"]),htmlentities($arrayOnlineresources["wms_getmap"]),htmlentities($arrayOnlineresources["wms_getfeatureinfo"]));
- $new = OWSPROXY ."/". $sid ."/".$wms."?";
- $r = str_replace($t,$new,$arrayOnlineresources["wms_getcapabilities_doc"]);
- header("Content-Type: application/xml");
- echo $r;
-}
-
-/**
- * gets the original url of the requested legend graphic
- *
- * @param string owsproxy md5
- * @return string url to legend graphic
- */
-function getLegendUrl($wms){
- global $reqParams;
- //get wms id
- $sql = "SELECT * FROM wms WHERE wms_owsproxy = $1";
- $v = array($wms);
- $t = array("s");
- $res = db_prep_query($sql, $v, $t);
- if($row = db_fetch_array($res)) {
- $wmsid = $row["wms_id"];
- $getLegendUrl = $row["wms_getlegendurl"];
- } else {
- throwE(array("No wms data available."));
- die();
- }
- //get the url
- $sql = "SELECT layer_style.legendurl ";
- $sql .= "FROM layer_style JOIN layer ";
- $sql .= "ON layer_style.fkey_layer_id = layer.layer_id ";
- $sql .= "WHERE layer.layer_name = $2 AND layer.fkey_wms_id = $1 ";
- $sql .= "AND layer_style.name = $3 AND layer_style.legendurlformat = $4";
- $v = array($wmsid, $reqParams['layer'], $reqParams['style'], $reqParams['format']);
- $t = array("i", "s", "s", "s");
- $res = db_prep_query($sql, $v, $t);
- if($row = db_fetch_array($res)) {
- if (strpos($row["legendurl"],'http') !== 0) {
- $e = new mb_exception("combine legendurls!");
- return $getLegendUrl.$row["legendurl"];
- }
- return $row["legendurl"];
- } else {
- throwE(array("No legend available."));
- die();
- }
-}
-/**
- * validated access permission on requested wms
- *
- * @param string OWSPROXY md5
- * @return array array with detailed information about requested wms
- */
-function checkWmsPermission($wms){
- global $con, $n;
- $myguis = $n->getGuisByPermission($_SESSION["mb_user_id"],true);
- $mywms = $n->getWmsByOwnGuis($myguis);
- $sql = "SELECT * FROM wms WHERE wms_owsproxy = $1";
- $v = array($wms);
- $t = array("s");
- $res = db_prep_query($sql, $v, $t);
- $service = array();
- if($row = db_fetch_array($res)){
- $service["wms_id"] = $row["wms_id"];
- $service["wms_getcapabilities"] = $row["wms_getcapabilities"];
- $service["wms_getmap"] = $row["wms_getmap"];
- $service["wms_getfeatureinfo"] = $row["wms_getfeatureinfo"];
- $service["wms_getcapabilities_doc"] = $row["wms_getcapabilities_doc"];
- }
-
- if(!$row || count($mywms) == 0){
- throwE(array("No wms data available."));
- die();
- }
-
- if(!in_array($service["wms_id"], $mywms)){
- throwE(array("Permission denied."," -> ".$service["wms_id"], implode(",", $mywms)));
- die();
- }
- return $service;
-}
-/**
- * validates the access permission by getting the appropriate wfs_conf
- * to each feature requested and check the wfs_conf permission
- *
- * @param string owsproxy md5
- * @param array array of requested featuretype names
- * @return array array with detailed information on reqested wfs
- */
-function checkWfsPermission($wfsOws, $features){
- global $con, $n;
- $myconfs = $n->getWfsConfByPermission($_SESSION["mb_user_id"]);
-
- //check if we know the features requested
- if(count($features) == 0){
- throwE(array("No wfs_feature data available."));
- die();
- }
-
- //get wfs
- $sql = "SELECT * FROM wfs WHERE wfs_owsproxy = $1";
- $v = array($wfsOws);
- $t = array("s");
- $res = db_prep_query($sql, $v, $t);
- $service = array();
- if($row = db_fetch_array($res)){
- $service["wfs_id"] = $row["wfs_id"];
- $service["wfs_getcapabilities"] = $row["wfs_getcapabilities"];
- $service["wfs_getfeature"] = $row["wfs_getfeature"];
- $service["wfs_describefeaturetype"] = $row["wfs_describefeaturetype"];
- $service["wfs_transaction"] = $row["wfs_transaction"];
- $service["wfs_getcapabilities_doc"] = $row["wfs_getcapabilities_doc"];
- }
- else{
- throwE(array("No wfs data available."));
- die();
- }
-
- foreach($features as $feature){
-
- //get appropriate wfs_conf
- $sql = "SELECT wfs_conf.wfs_conf_id FROM wfs_conf ";
- $sql.= "JOIN wfs_featuretype ";
- $sql.= "ON wfs_featuretype.featuretype_id = wfs_conf.fkey_featuretype_id ";
- $sql.= "WHERE wfs_featuretype.featuretype_name = $2 ";
- $sql.= "AND wfs_featuretype.fkey_wfs_id = $1";
- $v = array($service["wfs_id"], $feature);
- $t = array("i","s");
- $res = db_prep_query($sql, $v, $t);
- if(!($row = db_fetch_array($res))){
- $notice = new mb_exception("Permissioncheck failed no wfs conf for wfs ".$service["wfs_id"]." with feturetype ".$feature);
- throwE(array("No wfs_conf data for featuretype ".$feature));
- die();
- }
- $conf_id = $row["wfs_conf_id"];
-
- //check permission
- if(!in_array($conf_id, $myconfs)){
- $notice = new mb_exception("Permissioncheck failed:".$conf_id." not in ".implode(",", $myconfs));
- throwE(array("Permission denied."," -> ".$conf_id, implode(",", $myconfs)));
- die();
- }
- }
-
- return $service;
-}
-
-function checkLayerPermission($wms_id,$l){
- global $n, $owsproxyService;
-// $notice = new mb_exception("owsproxy: checkLayerpermission: wms: ".$wms_id.", layer: ".$l);
- $myl = split(",",$l);
- $r = array();
- foreach($myl as $mysl){
- if($n->getLayerPermission($wms_id, $mysl, $_SESSION["mb_user_id"]) === true){
- array_push($r, $mysl);
- }
- }
- $ret = implode(",",$r);
- return $ret;
-}
-function getDocumentContent($url){
- if (func_num_args() == 2) { //new for HTTP Authentication
- $auth = func_get_arg(1);
- $d = new connector($url, $auth);
- }
- else {
- $d = new connector($url);
- }
-
- return $d->file;
-}
-?>
More information about the Mapbender_commits
mailing list