00001 <?php
00002
00005
00026 class AuthLister extends WebService
00027 {
00029 private $db;
00030
00032 private $conneg;
00033
00035 private $dtdURL;
00036
00038 private $requester_ip = "";
00039
00041 private $registered_ip = "";
00042
00044 private $dataset = "";
00045
00047 private $mode = "";
00048
00050 private $datasets = array();
00051
00053 private $webservices = array();
00054
00056 private $accesses = array();
00057
00059 private $errorMessenger =
00060 '{
00061 "ws": "/ws/auth/lister/",
00062 "_200": {
00063 "id": "WS-AUTH-LISTER-200",
00064 "level": "Warning",
00065 "name": "Unknown Listing Mode",
00066 "description": "The mode you specified for the \'mode\' parameter is unknown. Please check the documentation of this web service endpoint for more information"
00067 },
00068 "_201": {
00069 "id": "WS-AUTH-LISTER-201",
00070 "level": "Warning",
00071 "name": "No Target Dataset URI",
00072 "description": "No target dataset URI defined for this request. A target dataset URI is needed for the mode \'ws\' and \'dataset\'"
00073 },
00074 "_300": {
00075 "id": "WS-AUTH-LISTER-300",
00076 "level": "Fatal",
00077 "name": "Can\'t get the list of datasets",
00078 "description": "An error occured when we tried to get the list of datasets available to the user"
00079 },
00080 "_301": {
00081 "id": "WS-AUTH-LISTER-301",
00082 "level": "Fatal",
00083 "name": "Can\'t get the list of web services",
00084 "description": "An error occured when we tried to get the list of web services endpoints registered to this web service network"
00085 },
00086 "_302": {
00087 "id": "WS-AUTH-LISTER-302",
00088 "level": "Fatal",
00089 "name": "Can\'t get the list of accesses for that dataset",
00090 "description": "An error occured when we tried to get the list of accesses defined for this dataset"
00091 },
00092 "_303": {
00093 "id": "WS-AUTH-LISTER-303",
00094 "level": "Fatal",
00095 "name": "Can\'t get the list of accesses an datasets available to that user",
00096 "description": "An error occured when we tried to get the list of accesses and datasets accessible to that user"
00097 },
00098 "_304": {
00099 "id": "WS-AUTH-LISTER-304",
00100 "level": "Fatal",
00101 "name": "Can\'t get access information for this web service",
00102 "description": "An error occured when we tried to get the information for the access to that web service."
00103 }
00104 }';
00105
00107 public static $supportedSerializations =
00108 array ("application/json", "application/rdf+xml", "application/rdf+n3", "application/*", "text/xml", "text/*",
00109 "*/*");
00110
00130 function __construct($mode, $dataset, $registered_ip, $requester_ip)
00131 {
00132 parent::__construct();
00133
00134 $this->db = new DB_Virtuoso($this->db_username, $this->db_password, $this->db_dsn, $this->db_host);
00135
00136 $this->requester_ip = $requester_ip;
00137 $this->registered_ip = $registered_ip;
00138 $this->mode = $mode;
00139 $this->dataset = $dataset;
00140
00141 if($this->registered_ip == "")
00142 {
00143 $this->registered_ip = $requester_ip;
00144 }
00145
00146 if(strtolower(substr($this->registered_ip, 0, 4)) == "self")
00147 {
00148 $pos = strpos($this->registered_ip, "::");
00149
00150 if($pos !== FALSE)
00151 {
00152 $account = substr($this->registered_ip, $pos + 2, strlen($this->registered_ip) - ($pos + 2));
00153
00154 $this->registered_ip = $requester_ip . "::" . $account;
00155 }
00156 else
00157 {
00158 $this->registered_ip = $requester_ip;
00159 }
00160 }
00161
00162 $this->uri = $this->wsf_base_url . "/wsf/ws/auth/lister/";
00163 $this->title = "Authentication Lister Web Service";
00164 $this->crud_usage = new CrudUsage(FALSE, TRUE, FALSE, FALSE);
00165 $this->endpoint = $this->wsf_base_url . "/ws/auth/lister/";
00166
00167 $this->dtdURL = "auth/authLister.dtd";
00168
00169 $this->errorMessenger = json_decode($this->errorMessenger);
00170 }
00171
00172 function __destruct()
00173 {
00174 parent::__destruct();
00175
00176 if(isset($this->db))
00177 {
00178 @$this->db->close();
00179 }
00180 }
00181
00192 protected function validateQuery()
00193 {
00194
00195
00196 if($this->mode != "dataset" && $this->mode != "access_user")
00197 {
00198 $ws_av = new AuthValidator($this->requester_ip, $this->wsf_graph, $this->uri);
00199
00200 $ws_av->pipeline_conneg($this->conneg->getAccept(), $this->conneg->getAcceptCharset(),
00201 $this->conneg->getAcceptEncoding(), $this->conneg->getAcceptLanguage());
00202
00203 $ws_av->process();
00204
00205 if($ws_av->pipeline_getResponseHeaderStatus() != 200)
00206 {
00207 $this->conneg->setStatus($ws_av->pipeline_getResponseHeaderStatus());
00208 $this->conneg->setStatusMsg($ws_av->pipeline_getResponseHeaderStatusMsg());
00209 $this->conneg->setStatusMsgExt($ws_av->pipeline_getResponseHeaderStatusMsgExt());
00210 $this->conneg->setError($ws_av->pipeline_getError()->id, $ws_av->pipeline_getError()->webservice,
00211 $ws_av->pipeline_getError()->name, $ws_av->pipeline_getError()->description,
00212 $ws_av->pipeline_getError()->debugInfo, $ws_av->pipeline_getError()->level);
00213 return;
00214 }
00215 }
00216 }
00217
00228 public function pipeline_getError() { return ($this->conneg->error); }
00229
00240 public function pipeline_getResultset()
00241 {
00242 $xml = new ProcessorXML();
00243
00244
00245 $resultset = $xml->createResultset();
00246
00247
00248 $void = $xml->createPrefix("owl", "http://www.w3.org/2002/07/owl#");
00249 $resultset->appendChild($void);
00250 $rdf = $xml->createPrefix("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#");
00251 $resultset->appendChild($rdf);
00252 $dcterms = $xml->createPrefix("rdfs", "http://www.w3.org/2000/01/rdf-schema#");
00253 $resultset->appendChild($dcterms);
00254 $dcterms = $xml->createPrefix("wsf", "http://purl.org/ontology/wsf#");
00255 $resultset->appendChild($dcterms);
00256
00257 if(strtolower($this->mode) != "access_dataset" && strtolower($this->mode) != "access_user")
00258 {
00259
00260 $subject = $xml->createSubject("rdf:Bag", "");
00261
00262 if(strtolower($this->mode) == "ws")
00263 {
00264 foreach($this->webservices as $ws)
00265 {
00266
00267 $pred = $xml->createPredicate("rdf:li");
00268
00269
00270 $object = $xml->createObject("wsf:WebService", "$ws");
00271
00272 $pred->appendChild($object);
00273 $subject->appendChild($pred);
00274 }
00275 }
00276 elseif(strtolower($this->mode) == "dataset")
00277 {
00278 foreach($this->datasets as $dataset)
00279 {
00280
00281 $pred = $xml->createPredicate("rdf:li");
00282
00283
00284 $object = $xml->createObject("void:Dataset", "$dataset");
00285
00286 $pred->appendChild($object);
00287 $subject->appendChild($pred);
00288 }
00289 }
00290
00291 $resultset->appendChild($subject);
00292 }
00293 else
00294 {
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316 foreach($this->accesses as $access)
00317 {
00318 $subject = $xml->createSubject("wsf:Access", $access[0]);
00319
00320 if(strtolower($this->mode) == "access_user")
00321 {
00322 $pred = $xml->createPredicate("wsf:datasetAccess");
00323 $object = $xml->createObject("void:Dataset", $access[1]);
00324 $pred->appendChild($object);
00325 $subject->appendChild($pred);
00326
00327 $pred = $xml->createPredicate("wsf:registeredIP");
00328 $object = $xml->createObjectContent($access[6]);
00329 $pred->appendChild($object);
00330 $subject->appendChild($pred);
00331 }
00332 else
00333 {
00334 $pred = $xml->createPredicate("wsf:registeredIP");
00335 $object = $xml->createObjectContent($access[1]);
00336 $pred->appendChild($object);
00337 $subject->appendChild($pred);
00338 }
00339
00340 $pred = $xml->createPredicate("wsf:create");
00341 $object = $xml->createObjectContent($this->xmlEncode($access[2]));
00342 $pred->appendChild($object);
00343 $subject->appendChild($pred);
00344
00345 $pred = $xml->createPredicate("wsf:read");
00346 $object = $xml->createObjectContent($this->xmlEncode($access[3]));
00347 $pred->appendChild($object);
00348 $subject->appendChild($pred);
00349
00350 $pred = $xml->createPredicate("wsf:update");
00351 $object = $xml->createObjectContent($this->xmlEncode($access[4]));
00352 $pred->appendChild($object);
00353 $subject->appendChild($pred);
00354
00355 $pred = $xml->createPredicate("wsf:delete");
00356 $object = $xml->createObjectContent($this->xmlEncode($access[5]));
00357 $pred->appendChild($object);
00358 $subject->appendChild($pred);
00359
00360 $nbWS = count($access) - 7;
00361
00362 for($i = 0; $i < $nbWS; $i++)
00363 {
00364 $pred = $xml->createPredicate("wsf:webServiceAccess");
00365 $object = $xml->createObject("wsf:WebService", $access[(7 + $i)]);
00366 $pred->appendChild($object);
00367 $subject->appendChild($pred);
00368 }
00369
00370 $resultset->appendChild($subject);
00371 }
00372 }
00373
00374 return ($this->injectDoctype($xml->saveXML($resultset)));
00375 }
00376
00389 public function injectDoctype($xmlDoc)
00390 {
00391 $posHeader = strpos($xmlDoc, '"?>') + 3;
00392 $xmlDoc = substr($xmlDoc, 0, $posHeader)
00393 . "\n<!DOCTYPE resultset PUBLIC \"-//Structured Dynamics LLC//Auth Lister DTD 0.1//EN\" \"" . $this->dtdBaseURL
00394 . $this->dtdURL . "\">" . substr($xmlDoc, $posHeader, strlen($xmlDoc) - $posHeader);
00395
00396 return ($xmlDoc);
00397 }
00398
00417 public function ws_conneg($accept, $accept_charset, $accept_encoding, $accept_language)
00418 {
00419 $this->conneg =
00420 new Conneg($accept, $accept_charset, $accept_encoding, $accept_language, AuthLister::$supportedSerializations);
00421
00422
00423 if(strtolower($this->mode) != "ws" && strtolower($this->mode) != "dataset"
00424 && strtolower($this->mode) != "access_dataset" && strtolower($this->mode) != "access_user")
00425 {
00426 $this->conneg->setStatus(400);
00427 $this->conneg->setStatusMsg("Bad Request");
00428 $this->conneg->setStatusMsgExt("Unknown listing type");
00429 $this->conneg->setError($this->errorMessenger->_200->id, $this->errorMessenger->ws,
00430 $this->errorMessenger->_200->name, $this->errorMessenger->_200->description, odbc_errormsg(),
00431 $this->errorMessenger->_200->level);
00432 return;
00433 }
00434
00435
00436 if(strtolower($this->mode) != "access_dataset" && $dataset = "")
00437 {
00438 $this->conneg->setStatus(400);
00439 $this->conneg->setStatusMsg("Bad Request");
00440 $this->conneg->setStatusMsgExt($this->errorMessenger->_201->name);
00441 $this->conneg->setError($this->errorMessenger->_201->id, $this->errorMessenger->ws,
00442 $this->errorMessenger->_201->name, $this->errorMessenger->_201->description, odbc_errormsg(),
00443 $this->errorMessenger->_201->level);
00444 return;
00445 }
00446 }
00447
00466 public function pipeline_conneg($accept, $accept_charset, $accept_encoding, $accept_language)
00467 { $this->ws_conneg($accept, $accept_charset, $accept_encoding, $accept_language); }
00468
00479 public function pipeline_getResponseHeaderStatus() { return $this->conneg->getStatus(); }
00480
00491 public function pipeline_getResponseHeaderStatusMsg() { return $this->conneg->getStatusMsg(); }
00492
00505 public function pipeline_getResponseHeaderStatusMsgExt() { return $this->conneg->getStatusMsgExt(); }
00506
00517 public function pipeline_serialize()
00518 {
00519
00520 $rdf_part = "";
00521
00522 switch($this->conneg->getMime())
00523 {
00524 case "application/json":
00525 $json_part = "";
00526 $xml = new ProcessorXML();
00527 $xml->loadXML($this->pipeline_getResultset());
00528
00529 $subjects = $xml->getSubjects();
00530
00531 foreach($subjects as $subject)
00532 {
00533 $subjectURI = $xml->getURI($subject);
00534 $subjectType = $xml->getType($subject);
00535
00536 $json_part .= " { \n";
00537 $json_part .= " \"uri\": \"" . parent::jsonEncode($subjectURI) . "\", \n";
00538 $json_part .= " \"type\": \"" . parent::jsonEncode($subjectType) . "\", \n";
00539
00540 $predicates = $xml->getPredicates($subject);
00541
00542 $nbPredicates = 0;
00543
00544 foreach($predicates as $predicate)
00545 {
00546 $objects = $xml->getObjects($predicate);
00547
00548 foreach($objects as $object)
00549 {
00550 $nbPredicates++;
00551
00552 if($nbPredicates == 1)
00553 {
00554 $json_part .= " \"predicate\": [ \n";
00555 }
00556
00557 $objectType = $xml->getType($object);
00558 $predicateType = $xml->getType($predicate);
00559
00560 if($objectType == "rdfs:Literal")
00561 {
00562 $objectValue = $xml->getContent($object);
00563
00564 $json_part .= " { \n";
00565 $json_part .= " \"" . parent::jsonEncode($predicateType) . "\": \""
00566 . parent::jsonEncode($objectValue) . "\" \n";
00567 $json_part .= " },\n";
00568 }
00569 else
00570 {
00571 $objectURI = $xml->getURI($object);
00572 $rdf_part .= " <$predicateType> <$objectURI> ;\n";
00573
00574 $json_part .= " { \n";
00575 $json_part .= " \"" . parent::jsonEncode($predicateType) . "\": { \n";
00576 $json_part .= " \"uri\": \"" . parent::jsonEncode($objectURI) . "\" \n";
00577 $json_part .= " } \n";
00578 $json_part .= " },\n";
00579 }
00580 }
00581 }
00582
00583 if(strlen($json_part) > 0)
00584 {
00585 $json_part = substr($json_part, 0, strlen($json_part) - 2) . "\n";
00586 }
00587
00588 if($nbPredicates > 0)
00589 {
00590 $json_part .= " ]\n";
00591 }
00592
00593 $json_part .= " },\n";
00594 }
00595
00596 if(strlen($json_part) > 0)
00597 {
00598 $json_part = substr($json_part, 0, strlen($json_part) - 2) . "\n";
00599 }
00600
00601 return ($json_part);
00602 break;
00603
00604 case "application/rdf+n3":
00605
00606 $xml = new ProcessorXML();
00607 $xml->loadXML($this->pipeline_getResultset());
00608
00609 if(strtolower($this->mode) != "access_dataset" && strtolower($this->mode) != "access_user")
00610 {
00611 $subjects = $xml->getSubjectsByType("rdf:Bag");
00612
00613 foreach($subjects as $subject)
00614 {
00615 $predicates = $xml->getPredicatesByType($subject, "rdf:li");
00616
00617 foreach($predicates as $predicate)
00618 {
00619 if(strtolower($this->mode) == "dataset")
00620 {
00621 $objects = $xml->getObjectsByType($predicate, "void:Dataset");
00622 }
00623 else
00624 {
00625 $objects = $xml->getObjectsByType($predicate, "wsf:WebService");
00626 }
00627
00628 foreach($objects as $object)
00629 {
00630 $rdf_part .= " rdf:li <" . $xml->getURI($object) . "> ;\n";
00631 }
00632 }
00633 }
00634
00635 if(strlen($rdf_part) > 0)
00636 {
00637 $rdf_part = substr($rdf_part, 0, strlen($rdf_part) - 2) . ".\n";
00638 }
00639 }
00640 else
00641 {
00642 $xml = new ProcessorXML();
00643 $xml->loadXML($this->pipeline_getResultset());
00644
00645 $accesses = $xml->getSubjectsByType("wsf:Access");
00646
00647 foreach($accesses as $access)
00648 {
00649 $access_uri = $xml->getURI($access);
00650
00651 $rdf_part .= "<$access_uri> a wsf:Access ;\n";
00652
00653
00654 $predicates = $xml->getPredicatesByType($access, "wsf:datasetAccess");
00655 $objects = $xml->getObjectsByType($predicates->item(0), "void:Dataset");
00656
00657 $rdf_part .= "wsf:datasetAccess <" . $xml->getURI($objects->item(0)) . "> ;\n";
00658
00659
00660
00661 $predicates = $xml->getPredicatesByType($access, "wsf:create");
00662 $objects = $xml->getObjectsByType($predicates->item(0), "rdfs:Literal");
00663 $rdf_part .= "wsf:create \"" . $xml->getContent($objects->item(0)) . "\" ;\n";
00664
00665 $predicates = $xml->getPredicatesByType($access, "wsf:read");
00666 $objects = $xml->getObjectsByType($predicates->item(0), "rdfs:Literal");
00667 $rdf_part .= "wsf:read \"" . $xml->getContent($objects->item(0)) . "\" ;\n";
00668
00669 $predicates = $xml->getPredicatesByType($access, "wsf:update");
00670 $objects = $xml->getObjectsByType($predicates->item(0), "rdfs:Literal");
00671 $rdf_part .= "wsf:update \"" . $xml->getContent($objects->item(0)) . "\" ;\n";
00672
00673 $predicates = $xml->getPredicatesByType($access, "wsf:delete");
00674 $objects = $xml->getObjectsByType($predicates->item(0), "rdfs:Literal");
00675 $rdf_part .= "wsf:delete \"" . $xml->getContent($objects->item(0)) . "\" ;\n";
00676
00677
00678 $webservices = $xml->getXPath('//predicate/object[attribute::type="wsf:WebService"]', $access);
00679
00680 foreach($webservices as $element)
00681 {
00682 $rdf_part .= "wsf:webServiceAccess <" . $xml->getURI($element) . "> ;\n";
00683 }
00684
00685 if(strlen($rdf_part) > 0)
00686 {
00687 $rdf_part = substr($rdf_part, 0, strlen($rdf_part) - 2) . ".\n";
00688 }
00689 }
00690 }
00691
00692 return ($rdf_part);
00693 break;
00694
00695 case "application/rdf+xml":
00696
00697 $xml = new ProcessorXML();
00698 $xml->loadXML($this->pipeline_getResultset());
00699
00700 if(strtolower($this->mode) != "access_dataset" && strtolower($this->mode) != "access_user")
00701 {
00702 $subjects = $xml->getSubjectsByType("rdf:Bag");
00703
00704 foreach($subjects as $subject)
00705 {
00706 $predicates = $xml->getPredicatesByType($subject, "rdf:li");
00707
00708 foreach($predicates as $predicate)
00709 {
00710 if(strtolower($this->mode) == "dataset")
00711 {
00712 $objects = $xml->getObjectsByType($predicate, "void:Dataset");
00713 }
00714 else
00715 {
00716 $objects = $xml->getObjectsByType($predicate, "wsf:WebService");
00717 }
00718
00719 foreach($objects as $object)
00720 {
00721 $rdf_part .= " <rdf:li rdf:resource=\"" . $xml->getURI($object) . "\" />\n";
00722 }
00723 }
00724 }
00725 }
00726 else
00727 {
00728 $xml = new ProcessorXML();
00729 $xml->loadXML($this->pipeline_getResultset());
00730
00731 $accesses = $xml->getSubjectsByType("wsf:Access");
00732
00733 foreach($accesses as $access)
00734 {
00735 $access_uri = $xml->getURI($access);
00736
00737 $rdf_part .= "<wsf:Access rdf:about=\"$access_uri\">\n";
00738
00739
00740 $predicates = $xml->getPredicatesByType($access, "wsf:datasetAccess");
00741 $objects = $xml->getObjectsByType($predicates->item(0), "void:Dataset");
00742
00743 $rdf_part .= "<wsf:datasetAccess rdf:resource=\"" . $xml->getURI($objects->item(0)) . "\" />\n";
00744
00745
00746
00747 $predicates = $xml->getPredicatesByType($access, "wsf:create");
00748 $objects = $xml->getObjectsByType($predicates->item(0), "rdfs:Literal");
00749 $rdf_part .= "<wsf:create>" . $xml->getContent($objects->item(0)) . "</wsf:create>\n";
00750
00751 $predicates = $xml->getPredicatesByType($access, "wsf:read");
00752 $objects = $xml->getObjectsByType($predicates->item(0), "rdfs:Literal");
00753 $rdf_part .= "<wsf:read>" . $xml->getContent($objects->item(0)) . "</wsf:read>\n";
00754
00755 $predicates = $xml->getPredicatesByType($access, "wsf:update");
00756 $objects = $xml->getObjectsByType($predicates->item(0), "rdfs:Literal");
00757 $rdf_part .= "<wsf:update>" . $xml->getContent($objects->item(0)) . "</wsf:update>\n";
00758
00759 $predicates = $xml->getPredicatesByType($access, "wsf:delete");
00760 $objects = $xml->getObjectsByType($predicates->item(0), "rdfs:Literal");
00761 $rdf_part .= "<wsf:delete>" . $xml->getContent($objects->item(0)) . "</wsf:delete>\n";
00762
00763
00764 $webservices = $xml->getXPath('//predicate/object[attribute::type="wsf:WebService"]', $access);
00765
00766 foreach($webservices as $element)
00767 {
00768 $rdf_part .= "<wsf:webServiceAccess rdf:resource=\"" . $xml->getURI($element) . "\" />\n";
00769 }
00770
00771 $rdf_part .= "</wsf:Access>\n";
00772 }
00773 }
00774
00775 return ($rdf_part);
00776 break;
00777 }
00778 }
00779
00788 public function pipeline_serialize_reification() { return ""; }
00789
00800 public function ws_serialize()
00801 {
00802 switch($this->conneg->getMime())
00803 {
00804 case "application/rdf+n3":
00805 $rdf_document = "";
00806 $rdf_document .= "@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .\n";
00807 $rdf_document .= "@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .\n";
00808 $rdf_document .= "@prefix owl: <http://www.w3.org/2002/07/owl#> .\n";
00809 $rdf_document .= "@prefix void: <http://rdfs.org/ns/void#> .\n";
00810 $rdf_document .= "@prefix wsf: <http://purl.org/ontology/wsf#> .\n";
00811
00812 if(strtolower($this->mode) != "access_dataset" && strtolower($this->mode) != "access_user")
00813 {
00814 $rdf_document .= "_:bnode0 rdf:type rdf:Bag ;\n";
00815 }
00816
00817 $rdf_document .= $this->pipeline_serialize();
00818
00819 $rdf_document = substr($rdf_document, 0, strlen($rdf_document) - 2) . ".\n";
00820
00821 return $rdf_document;
00822 break;
00823
00824 case "application/rdf+xml":
00825 $rdf_document = "";
00826 $rdf_document .= "<?xml version=\"1.0\"?>\n";
00827 $rdf_document
00828 .= "<rdf:RDF xmlns:bibo=\"http://purl.org/ontology/bibo/\" xmlns:void=\"http://rdfs.org/ns/void#\" xmlns:wsf=\"http://purl.org/ontology/wsf#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n\n";
00829
00830 if(strtolower($this->mode) != "access_dataset" && strtolower($this->mode) != "access_user")
00831 {
00832 $rdf_document .= "<rdf:Bag>\n";
00833 }
00834
00835 $rdf_document .= $this->pipeline_serialize();
00836
00837 if(strtolower($this->mode) != "access_dataset" && strtolower($this->mode) != "access_user")
00838 {
00839 $rdf_document .= "</rdf:Bag>\n\n";
00840 }
00841
00842 $rdf_document .= "</rdf:RDF>";
00843
00844 return $rdf_document;
00845 break;
00846
00847 case "application/json":
00848 $json_document = "";
00849 $json_document .= "{\n";
00850
00851 $json_document .= " \"prefixes\": [ \n";
00852 $json_document .= " {\n";
00853 $json_document .= " \"rdf\": \"http://www.w3.org/1999/02/22-rdf-syntax-ns#\",\n";
00854 $json_document .= " \"owl\": \"http://www.w3.org/2002/07/owl#\",\n";
00855 $json_document .= " \"rdfs\": \"http://www.w3.org/2000/01/rdf-schema#\",\n";
00856 $json_document .= " \"wsf\": \"http://purl.org/ontology/wsf#\"\n";
00857 $json_document .= " } \n";
00858 $json_document .= " ],\n";
00859
00860 $json_document .= " \"resultset\": {\n";
00861 $json_document .= " \"subject\": [\n";
00862 $json_document .= $this->pipeline_serialize();
00863 $json_document .= " ]\n";
00864 $json_document .= " }\n";
00865 $json_document .= "}";
00866
00867 return ($json_document);
00868 break;
00869
00870 case "text/xml":
00871 return $this->pipeline_getResultset();
00872 break;
00873 }
00874 }
00875
00888 public function ws_respond($content)
00889 {
00890
00891 $this->conneg->respond();
00892
00893
00894
00895
00896 if($this->conneg->getStatus() == 200)
00897 {
00898 echo $content;
00899 }
00900
00901 $this->__destruct();
00902 }
00903
00904
00915 public function process()
00916 {
00917
00918 if($this->conneg->getStatus() == 200)
00919 {
00920 $this->validateQuery();
00921
00922
00923 if($this->conneg->getStatus() == 200)
00924 {
00925 if(strtolower($this->mode) == "dataset")
00926 {
00927 $query =
00928 " select distinct ?dataset
00929 from <" . $this->wsf_graph
00930 . ">
00931 where
00932 {
00933 {
00934 ?access <http://purl.org/ontology/wsf#registeredIP> \"$this->registered_ip\" ;
00935 <http://purl.org/ontology/wsf#datasetAccess> ?dataset .
00936 }
00937 UNION
00938 {
00939 ?access <http://purl.org/ontology/wsf#registeredIP> \"0.0.0.0\" ;
00940 <http://purl.org/ontology/wsf#create> ?create ;
00941 <http://purl.org/ontology/wsf#read> ?read ;
00942 <http://purl.org/ontology/wsf#update> ?update ;
00943 <http://purl.org/ontology/wsf#delete> ?delete ;
00944 <http://purl.org/ontology/wsf#datasetAccess> ?dataset .
00945 filter( str(?create) = \"True\" or str(?read) = \"True\" or str(?update) = \"True\" or str(?delete) = \"True\").
00946 }
00947 }";
00948
00949 $resultset =
00950 @$this->db->query($this->db->build_sparql_query(str_replace(array ("\n", "\r", "\t"), " ", $query), array(),
00951 FALSE));
00952
00953 if(odbc_error())
00954 {
00955 $this->conneg->setStatus(500);
00956 $this->conneg->setStatusMsg("Internal Error");
00957 $this->conneg->setStatusMsgExt($this->errorMessenger->_300->name);
00958 $this->conneg->setError($this->errorMessenger->_300->id, $this->errorMessenger->ws,
00959 $this->errorMessenger->_300->name, $this->errorMessenger->_300->description, odbc_errormsg(),
00960 $this->errorMessenger->_300->level);
00961 return;
00962 }
00963
00964 while(odbc_fetch_row($resultset))
00965 {
00966 $dataset = odbc_result($resultset, 1);
00967
00968 array_push($this->datasets, $dataset);
00969 }
00970 }
00971 elseif(strtolower($this->mode) == "ws")
00972 {
00973 $query =
00974 " select distinct ?ws from <" . $this->wsf_graph
00975 . ">
00976 where
00977 {
00978 ?wsf a <http://purl.org/ontology/wsf#WebServiceFramework> ;
00979 <http://purl.org/ontology/wsf#hasWebService> ?ws .
00980 }";
00981
00982 $resultset =
00983 @$this->db->query($this->db->build_sparql_query(str_replace(array ("\n", "\r", "\t"), " ", $query), array(),
00984 FALSE));
00985
00986 if(odbc_error())
00987 {
00988 $this->conneg->setStatus(500);
00989 $this->conneg->setStatusMsg("Internal Error");
00990 $this->conneg->setStatusMsgExt($this->errorMessenger->_301->name);
00991 $this->conneg->setError($this->errorMessenger->_301->id, $this->errorMessenger->ws,
00992 $this->errorMessenger->_301->name, $this->errorMessenger->_301->description, odbc_errormsg(),
00993 $this->errorMessenger->_301->level);
00994 return;
00995 }
00996
00997 while(odbc_fetch_row($resultset))
00998 {
00999 $ws = odbc_result($resultset, 1);
01000
01001 array_push($this->webservices, $ws);
01002 }
01003 }
01004 else
01005 {
01006 if(strtolower($this->mode) == "access_user")
01007 {
01008 $query = " select ?access ?datasetAccess ?create ?read ?update ?delete ?registeredIP
01009 from <" . $this->wsf_graph
01010 . ">
01011 where
01012 {
01013 {
01014 ?access a <http://purl.org/ontology/wsf#Access> ;
01015 <http://purl.org/ontology/wsf#registeredIP> \"$this->registered_ip\" ;
01016 <http://purl.org/ontology/wsf#create> ?create ;
01017 <http://purl.org/ontology/wsf#read> ?read ;
01018 <http://purl.org/ontology/wsf#update> ?update ;
01019 <http://purl.org/ontology/wsf#delete> ?delete ;
01020 <http://purl.org/ontology/wsf#datasetAccess> ?datasetAccess ;
01021 <http://purl.org/ontology/wsf#registeredIP> ?registeredIP .
01022 }
01023 union
01024 {
01025 ?access a <http://purl.org/ontology/wsf#Access> ;
01026 <http://purl.org/ontology/wsf#registeredIP> \"0.0.0.0\" ;
01027 <http://purl.org/ontology/wsf#create> ?create ;
01028 <http://purl.org/ontology/wsf#read> ?read ;
01029 <http://purl.org/ontology/wsf#update> ?update ;
01030 <http://purl.org/ontology/wsf#delete> ?delete ;
01031 <http://purl.org/ontology/wsf#datasetAccess> ?datasetAccess ;
01032 <http://purl.org/ontology/wsf#registeredIP> ?registeredIP .
01033
01034 filter( str(?create) = \"True\" or str(?read) = \"True\" or str(?update) = \"True\" or str(?delete) = \"True\").
01035 }
01036 }";
01037 }
01038 else
01039 {
01040 $query = " select ?access ?registeredIP ?create ?read ?update ?delete
01041 from <" . $this->wsf_graph
01042 . ">
01043 where
01044 {
01045 ?access a <http://purl.org/ontology/wsf#Access> ;
01046 <http://purl.org/ontology/wsf#registeredIP> ?registeredIP ;
01047 <http://purl.org/ontology/wsf#create> ?create ;
01048 <http://purl.org/ontology/wsf#read> ?read ;
01049 <http://purl.org/ontology/wsf#update> ?update ;
01050 <http://purl.org/ontology/wsf#delete> ?delete ;
01051 <http://purl.org/ontology/wsf#datasetAccess> <$this->dataset> .
01052 }";
01053 }
01054
01055 $resultset =
01056 @$this->db->query($this->db->build_sparql_query(str_replace(array ("\n", "\r", "\t"), " ", $query), array(),
01057 FALSE));
01058
01059 if(odbc_error())
01060 {
01061 $this->conneg->setStatus(500);
01062 $this->conneg->setStatusMsg("Internal Error");
01063
01064 if(strtolower($this->mode) == "access_user")
01065 {
01066 $this->conneg->setStatusMsgExt($this->errorMessenger->_302->name);
01067 $this->conneg->setError($this->errorMessenger->_302->id, $this->errorMessenger->ws,
01068 $this->errorMessenger->_302->name, $this->errorMessenger->_302->description, odbc_errormsg(),
01069 $this->errorMessenger->_302->level);
01070 }
01071 else
01072 {
01073 $this->conneg->setStatusMsgExt($this->errorMessenger->_303->name);
01074 $this->conneg->setError($this->errorMessenger->_303->id, $this->errorMessenger->ws,
01075 $this->errorMessenger->_303->name, $this->errorMessenger->_303->description, odbc_errormsg(),
01076 $this->errorMessenger->_303->level);
01077 }
01078
01079 return;
01080 }
01081
01082 while(odbc_fetch_row($resultset))
01083 {
01084 $lastElement = "";
01085
01086 if(strtolower($this->mode) == "access_user")
01087 {
01088 $lastElement = odbc_result($resultset, 7);
01089 }
01090
01091 array_push($this->accesses,
01092 array (odbc_result($resultset, 1), odbc_result($resultset, 2), odbc_result($resultset, 3),
01093 odbc_result($resultset, 4), odbc_result($resultset, 5), odbc_result($resultset, 6), $lastElement));
01094 }
01095
01096 foreach($this->accesses as $key => $access)
01097 {
01098 $query = "select ?webServiceAccess from <" . $this->wsf_graph . ">
01099 {
01100 <" . $access[0] . "> <http://purl.org/ontology/wsf#webServiceAccess> ?webServiceAccess .
01101 }";
01102
01103 $resultset =
01104 @$this->db->query($this->db->build_sparql_query(str_replace(array ("\n", "\r", "\t"), " ", $query),
01105 array(), FALSE));
01106
01107 if(odbc_error())
01108 {
01109 $this->conneg->setStatus(500);
01110 $this->conneg->setStatusMsg("Internal Error");
01111 $this->conneg->setStatusMsgExt($this->errorMessenger->_304->name);
01112 $this->conneg->setError($this->errorMessenger->_304->id, $this->errorMessenger->ws,
01113 $this->errorMessenger->_304->name, $this->errorMessenger->_304->description, odbc_errormsg(),
01114 $this->errorMessenger->_304->level);
01115 return;
01116 }
01117
01118 while(odbc_fetch_row($resultset))
01119 {
01120 array_push($this->accesses[$key], odbc_result($resultset, 1));
01121 }
01122 }
01123 }
01124 }
01125 }
01126 }
01127 }
01128
01130
01131 ?>