| 
									
										
										
										
											2009-08-10 14:48:50 +02:00
										 |  |  | <?php | 
					
						
							|  |  |  | /** | 
					
						
							| 
									
										
										
										
											2010-06-29 14:39:57 -04:00
										 |  |  |  * This file is part of libomb | 
					
						
							| 
									
										
										
										
											2009-08-10 14:48:50 +02:00
										 |  |  |  * | 
					
						
							|  |  |  |  * PHP version 5 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * LICENSE: This program is free software: you can redistribute it and/or modify | 
					
						
							|  |  |  |  * it under the terms of the GNU Affero General Public License as published by | 
					
						
							|  |  |  |  * the Free Software Foundation, either version 3 of the License, 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 Affero General Public License for more details. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * You should have received a copy of the GNU Affero General Public License | 
					
						
							|  |  |  |  * along with this program.  If not, see <http://www.gnu.org/licenses/>. | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2010-06-29 14:39:57 -04:00
										 |  |  |  * @package OMB | 
					
						
							|  |  |  |  * @author  Adrian Lang <mail@adrianlang.de> | 
					
						
							|  |  |  |  * @license http://www.gnu.org/licenses/agpl.html GNU AGPL 3.0 | 
					
						
							|  |  |  |  * @version 0.1a-20090828 | 
					
						
							|  |  |  |  * @link    http://adrianlang.de/libomb | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require_once 'xrds_writer.php'; | 
					
						
							| 
									
										
										
										
											2009-08-10 14:48:50 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-06-29 14:39:57 -04:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Write OMB-specific XRDS using XMLWriter | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This class writes the XRDS file announcing the OMB server. It uses XMLWriter. | 
					
						
							|  |  |  |  * An instance of OMB_Plain_XRDS_Writer should be passed to | 
					
						
							|  |  |  |  * OMB_Service_Provider->writeXRDS. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | class OMB_Plain_XRDS_Writer implements OMB_XRDS_Writer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Write XRDS using XMLWriter | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * Outputs a XRDS document specifying an OMB service. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param OMB_profile     $user   The target user for the OMB service | 
					
						
							|  |  |  |      * @param OMB_XRDS_Mapper $mapper An OMB_XRDS_Mapper providing endpoint URLs | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function writeXRDS($user, $mapper) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         header('Content-Type: application/xrds+xml'); | 
					
						
							|  |  |  |         $xw = new XMLWriter(); | 
					
						
							|  |  |  |         $xw->openURI('php://output'); | 
					
						
							|  |  |  |         $xw->setIndent(true); | 
					
						
							| 
									
										
										
										
											2009-08-10 14:48:50 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-06-29 14:39:57 -04:00
										 |  |  |         $xw->startDocument('1.0', 'UTF-8'); | 
					
						
							|  |  |  |         $this->_writeFullElement($xw, 'XRDS', array('xmlns' => 'xri://$xrds'), array( | 
					
						
							|  |  |  |         array('XRD', array('xmlns' => 'xri://$xrd*($v*2.0)', | 
					
						
							|  |  |  |                             'xml:id' => 'oauth', | 
					
						
							|  |  |  |                             'xmlns:simple' => 'http://xrds-simple.net/core/1.0', | 
					
						
							|  |  |  |                             'version' => '2.0'), array( | 
					
						
							| 
									
										
										
										
											2009-08-10 14:48:50 +02:00
										 |  |  |           array('Type', null, 'xri://$xrds*simple'), | 
					
						
							|  |  |  |           array('Service', null, array( | 
					
						
							|  |  |  |             array('Type', null, OAUTH_ENDPOINT_REQUEST), | 
					
						
							|  |  |  |             array('URI', null, $mapper->getURL(OAUTH_ENDPOINT_REQUEST)), | 
					
						
							|  |  |  |             array('Type', null, OAUTH_AUTH_HEADER), | 
					
						
							|  |  |  |             array('Type', null, OAUTH_POST_BODY), | 
					
						
							|  |  |  |             array('Type', null, OAUTH_HMAC_SHA1), | 
					
						
							|  |  |  |             array('LocalID', null, $user->getIdentifierURI()) | 
					
						
							|  |  |  |           )), | 
					
						
							|  |  |  |           array('Service', null, array( | 
					
						
							|  |  |  |             array('Type', null, OAUTH_ENDPOINT_AUTHORIZE), | 
					
						
							|  |  |  |             array('URI', null, $mapper->getURL(OAUTH_ENDPOINT_AUTHORIZE)), | 
					
						
							|  |  |  |             array('Type', null, OAUTH_AUTH_HEADER), | 
					
						
							|  |  |  |             array('Type', null, OAUTH_POST_BODY), | 
					
						
							|  |  |  |             array('Type', null, OAUTH_HMAC_SHA1) | 
					
						
							|  |  |  |           )), | 
					
						
							|  |  |  |           array('Service', null, array( | 
					
						
							|  |  |  |             array('Type', null, OAUTH_ENDPOINT_ACCESS), | 
					
						
							|  |  |  |             array('URI', null, $mapper->getURL(OAUTH_ENDPOINT_ACCESS)), | 
					
						
							|  |  |  |             array('Type', null, OAUTH_AUTH_HEADER), | 
					
						
							|  |  |  |             array('Type', null, OAUTH_POST_BODY), | 
					
						
							|  |  |  |             array('Type', null, OAUTH_HMAC_SHA1) | 
					
						
							|  |  |  |           )), | 
					
						
							|  |  |  |           array('Service', null, array( | 
					
						
							|  |  |  |             array('Type', null, OAUTH_ENDPOINT_RESOURCE), | 
					
						
							|  |  |  |             array('Type', null, OAUTH_AUTH_HEADER), | 
					
						
							|  |  |  |             array('Type', null, OAUTH_POST_BODY), | 
					
						
							|  |  |  |             array('Type', null, OAUTH_HMAC_SHA1) | 
					
						
							|  |  |  |           )) | 
					
						
							|  |  |  |         )), | 
					
						
							| 
									
										
										
										
											2010-06-29 14:39:57 -04:00
										 |  |  |         array('XRD', array('xmlns' => 'xri://$xrd*($v*2.0)', | 
					
						
							|  |  |  |                            'xml:id' => 'omb', | 
					
						
							|  |  |  |                            'xmlns:simple' => 'http://xrds-simple.net/core/1.0', | 
					
						
							|  |  |  |                            'version' => '2.0'), array( | 
					
						
							| 
									
										
										
										
											2009-08-10 14:48:50 +02:00
										 |  |  |           array('Type', null, 'xri://$xrds*simple'), | 
					
						
							|  |  |  |           array('Service', null, array( | 
					
						
							|  |  |  |             array('Type', null, OMB_ENDPOINT_POSTNOTICE), | 
					
						
							|  |  |  |             array('URI', null, $mapper->getURL(OMB_ENDPOINT_POSTNOTICE)) | 
					
						
							|  |  |  |           )), | 
					
						
							|  |  |  |           array('Service', null, array( | 
					
						
							|  |  |  |             array('Type', null, OMB_ENDPOINT_UPDATEPROFILE), | 
					
						
							|  |  |  |             array('URI', null, $mapper->getURL(OMB_ENDPOINT_UPDATEPROFILE)) | 
					
						
							|  |  |  |           )) | 
					
						
							|  |  |  |         )), | 
					
						
							| 
									
										
										
										
											2010-06-29 14:39:57 -04:00
										 |  |  |         array('XRD', array('xmlns' => 'xri://$xrd*($v*2.0)', | 
					
						
							|  |  |  |                            'version' => '2.0'), array( | 
					
						
							| 
									
										
										
										
											2009-08-10 14:48:50 +02:00
										 |  |  |           array('Type', null, 'xri://$xrds*simple'), | 
					
						
							|  |  |  |           array('Service', null, array( | 
					
						
							|  |  |  |             array('Type', null, OAUTH_DISCOVERY), | 
					
						
							|  |  |  |             array('URI', null, '#oauth') | 
					
						
							|  |  |  |           )), | 
					
						
							|  |  |  |           array('Service', null, array( | 
					
						
							|  |  |  |             array('Type', null, OMB_VERSION), | 
					
						
							|  |  |  |             array('URI', null, '#omb') | 
					
						
							|  |  |  |           )) | 
					
						
							| 
									
										
										
										
											2010-06-29 14:39:57 -04:00
										 |  |  |         )))); | 
					
						
							|  |  |  |         $xw->endDocument(); | 
					
						
							|  |  |  |         $xw->flush(); | 
					
						
							| 
									
										
										
										
											2009-08-10 14:48:50 +02:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2010-06-29 14:39:57 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Write a complex XML element | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * Outputs a XML element with attributes and content. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param XMLWriter    $xw         The XMLWriter used to output the element | 
					
						
							|  |  |  |      * @param string       $tag        The tag name | 
					
						
							|  |  |  |      * @param array|null   $attributes A map of XML attributes | 
					
						
							|  |  |  |      * @param array|string $content    The content of the element; either an | 
					
						
							|  |  |  |      *                                 array of child nodes each specified by a | 
					
						
							|  |  |  |      *                                 three entry-array ($tag, $attributes, | 
					
						
							|  |  |  |      *                                 $content) or a string | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     private function _writeFullElement($xw, $tag, $attributes, $content) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $xw->startElement($tag); | 
					
						
							|  |  |  |         if (!is_null($attributes)) { | 
					
						
							|  |  |  |             foreach ($attributes as $name => $value) { | 
					
						
							|  |  |  |                 $xw->writeAttribute($name, $value); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         if (is_array($content)) { | 
					
						
							|  |  |  |             foreach ($content as $val) { | 
					
						
							|  |  |  |                 $this->_writeFullElement($xw, $val[0], $val[1], $val[2]); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             $xw->text($content); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         $xw->fullEndElement(); | 
					
						
							| 
									
										
										
										
											2009-08-10 14:48:50 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | ?>
 |