convert all the _well_known service controllers which are a bit touchy when it comes to the router
This commit is contained in:
		
							
								
								
									
										24
									
								
								Zotlabs/Module/Hostxrd.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								Zotlabs/Module/Hostxrd.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | ||||
| <?php | ||||
| namespace Zotlabs\Module; | ||||
|  | ||||
|  | ||||
| class Hostxrd extends \Zotlabs\Web\Controller { | ||||
|  | ||||
| 	function init() { | ||||
| 		header('Access-Control-Allow-Origin: *'); | ||||
| 		header("Content-type: application/xrd+xml"); | ||||
| 		logger('hostxrd',LOGGER_DEBUG); | ||||
| 	 | ||||
| 		$tpl = get_markup_template('xrd_host.tpl'); | ||||
| 		$x = replace_macros(get_markup_template('xrd_host.tpl'), array( | ||||
| 			'$zhost' => \App::get_hostname(), | ||||
| 			'$zroot' => z_root() | ||||
| 		)); | ||||
| 		$arr = array('xrd' => $x); | ||||
| 		call_hooks('hostxrd',$arr); | ||||
| 	 | ||||
| 		echo $arr['xrd']; | ||||
| 		killme(); | ||||
| 	} | ||||
| 	 | ||||
| } | ||||
							
								
								
									
										69
									
								
								Zotlabs/Module/Well_known.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								Zotlabs/Module/Well_known.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,69 @@ | ||||
| <?php | ||||
| namespace Zotlabs\Module; | ||||
|  | ||||
|  | ||||
| class Well_known extends \Zotlabs\Web\Controller { | ||||
|  | ||||
| 	function init(){ | ||||
| 	 | ||||
| 		if(argc() > 1) { | ||||
| 	 | ||||
| 			$arr = array('server' => $_SERVER, 'request' => $_REQUEST); | ||||
| 			call_hooks('well_known', $arr); | ||||
| 	 | ||||
| 	 | ||||
| 			if(! check_siteallowed($_SERVER['REMOTE_ADDR'])) { | ||||
| 				logger('well_known: site not allowed. ' . $_SERVER['REMOTE_ADDR']); | ||||
| 				killme(); | ||||
| 			} | ||||
| 	 | ||||
| 			// from php.net re: REMOTE_HOST: | ||||
| 			//     Note: Your web server must be configured to create this variable. For example in Apache  | ||||
| 			// you'll need HostnameLookups On inside httpd.conf for it to exist. See also gethostbyaddr().  | ||||
| 	 | ||||
| 			if(get_config('system','siteallowed_remote_host') && (! check_siteallowed($_SERVER['REMOTE_HOST']))) { | ||||
| 				logger('well_known: site not allowed. ' . $_SERVER['REMOTE_HOST']); | ||||
| 				killme(); | ||||
| 			} | ||||
| 	 | ||||
| 	 | ||||
| 			switch(argv(1)) { | ||||
| 				case 'zot-info': | ||||
| 					\App::$argc -= 1; | ||||
| 					array_shift(\App::$argv); | ||||
| 					\App::$argv[0] = 'zfinger'; | ||||
| 					$module = new \Zotlabs\Module\Zfinger(); | ||||
| 					$module->init(); | ||||
| 					break; | ||||
| 	 | ||||
| 				case 'webfinger': | ||||
| 					\App::$argc -= 1; | ||||
| 					array_shift(\App::$argv); | ||||
| 					\App::$argv[0] = 'wfinger'; | ||||
| 					$module = new \Zotlabs\Module\Wfinger(); | ||||
| 					$module->init(); | ||||
| 					break; | ||||
| 	 | ||||
| 				case 'host-meta': | ||||
| 					\App::$argc -= 1; | ||||
| 					array_shift(\App::$argv); | ||||
| 					\App::$argv[0] = 'hostxrd'; | ||||
| 					$module = new \Zotlabs\Module\Hostxrd(); | ||||
| 					$module->init(); | ||||
| 					break; | ||||
| 	 | ||||
| 				default: | ||||
| 					if(file_exists(\App::$cmd)) { | ||||
| 						echo file_get_contents(\App::$cmd);  | ||||
| 						killme(); | ||||
| 					} | ||||
| 					elseif(file_exists(\App::$cmd . '.php')) | ||||
| 						require_once(\App::$cmd . '.php'); | ||||
| 					break; | ||||
| 	 | ||||
| 			} | ||||
| 		} | ||||
| 	 | ||||
| 		http_status_exit(404); | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										140
									
								
								Zotlabs/Module/Wfinger.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										140
									
								
								Zotlabs/Module/Wfinger.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,140 @@ | ||||
| <?php | ||||
| namespace Zotlabs\Module; | ||||
|  | ||||
| require_once('include/zot.php'); | ||||
|  | ||||
|  | ||||
| class Wfinger extends \Zotlabs\Web\Controller { | ||||
|  | ||||
| 	function init() { | ||||
| 	 | ||||
| 		$result = array(); | ||||
| 	 | ||||
| 		$scheme = ''; | ||||
| 	 | ||||
| 		if(x($_SERVER,'HTTPS') && $_SERVER['HTTPS']) | ||||
| 			$scheme = 'https'; | ||||
| 		elseif(x($_SERVER,'SERVER_PORT') && (intval($_SERVER['SERVER_PORT']) == 443)) | ||||
| 			$scheme = 'https'; | ||||
| 	 | ||||
| 		$zot = intval($_REQUEST['zot']); | ||||
| 	 | ||||
| 		if(($scheme !== 'https') && (! $zot)) { | ||||
| 			header($_SERVER["SERVER_PROTOCOL"] . ' ' . 500 . ' ' . 'Webfinger requires HTTPS'); | ||||
| 			killme(); | ||||
| 		} | ||||
| 	 | ||||
| 	 | ||||
| 		$resource = $_REQUEST['resource']; | ||||
| 		logger('webfinger: ' . $resource,LOGGER_DEBUG); | ||||
| 	 | ||||
| 		$r = null; | ||||
| 	 | ||||
| 		if($resource) { | ||||
| 	 | ||||
| 			if(strpos($resource,'acct:') === 0) { | ||||
| 				$channel = str_replace('acct:','',$resource); | ||||
| 				if(strpos($channel,'@') !== false) { | ||||
| 					$host = substr($channel,strpos($channel,'@')+1); | ||||
| 					if(strcasecmp($host,\App::get_hostname())) { | ||||
| 						goaway('https://' . $host . '/.well-known/webfinger?f=&resource=' . $resource . (($zot) ? '&zot=' . $zot : '')); | ||||
| 					} | ||||
| 					$channel = substr($channel,0,strpos($channel,'@')); | ||||
| 				}		 | ||||
| 			} | ||||
| 			if(strpos($resource,'http') === 0) { | ||||
| 				$channel = str_replace('~','',basename($resource)); | ||||
| 			} | ||||
| 	 | ||||
| 			$r = q("select * from channel left join xchan on channel_hash = xchan_hash  | ||||
| 				where channel_address = '%s' limit 1", | ||||
| 				dbesc($channel) | ||||
| 			); | ||||
| 	 | ||||
| 		} | ||||
| 	 | ||||
| 		header('Access-Control-Allow-Origin: *'); | ||||
| 	 | ||||
| 	 | ||||
| 		if($resource && $r) { | ||||
| 	 | ||||
| 			$h = q("select hubloc_addr from hubloc where hubloc_hash = '%s' and hubloc_deleted = 0", | ||||
| 				dbesc($r[0]['channel_hash']) | ||||
| 			); | ||||
| 	 | ||||
| 			$result['subject'] = $resource; | ||||
| 	 | ||||
| 			$aliases = array( | ||||
| 				z_root() . '/channel/' . $r[0]['channel_address'], | ||||
| 				z_root() . '/~' . $r[0]['channel_address'] | ||||
| 			); | ||||
| 	 | ||||
| 			if($h) { | ||||
| 				foreach($h as $hh) { | ||||
| 					$aliases[] = 'acct:' . $hh['hubloc_addr']; | ||||
| 				} | ||||
| 			} | ||||
| 	 | ||||
| 			$result['aliases'] = array(); | ||||
| 	 | ||||
| 			$result['properties'] = array( | ||||
| 					'http://webfinger.net/ns/name' => $r[0]['channel_name'], | ||||
| 					'http://xmlns.com/foaf/0.1/name' => $r[0]['channel_name'] | ||||
| 			); | ||||
| 	 | ||||
| 			foreach($aliases as $alias)  | ||||
| 				if($alias != $resource) | ||||
| 					$result['aliases'][] = $alias; | ||||
| 	 | ||||
| 			$result['links'] = array( | ||||
| 	 | ||||
| 				array( | ||||
| 					'rel' => 'http://webfinger.net/rel/avatar', | ||||
| 					'type' => $r[0]['xchan_photo_mimetype'], | ||||
| 					'href' => $r[0]['xchan_photo_l']	 | ||||
| 				), | ||||
| 	 | ||||
| 				array( | ||||
| 					'rel' => 'http://webfinger.net/rel/profile-page', | ||||
| 					'href' => z_root() . '/profile/' . $r[0]['channel_address'], | ||||
| 				), | ||||
| 	 | ||||
| 				array( | ||||
| 					'rel' => 'http://webfinger.net/rel/blog', | ||||
| 					'href' => z_root() . '/channel/' . $r[0]['channel_address'], | ||||
| 				), | ||||
| 	 | ||||
| 				array( | ||||
| 					'rel' => 'http://ostatus.org/schema/1.0/subscribe', | ||||
| 					'template' => z_root() . '/follow/url={uri}', | ||||
| 				), | ||||
| 	 | ||||
| 				array( | ||||
| 					'rel' => 'http://purl.org/zot/protocol', | ||||
| 					'href' => z_root() . '/.well-known/zot-info' . '?address=' . $r[0]['xchan_addr'], | ||||
| 				), | ||||
| 	 | ||||
| 				array( | ||||
| 					'rel' => 'magic-public-key', | ||||
| 					'href' => 'data:application/magic-public-key,' . salmon_key($r[0]['channel_pubkey']), | ||||
| 				) | ||||
| 			); | ||||
| 	 | ||||
| 			if($zot) { | ||||
| 				// get a zotinfo packet and return it with webfinger | ||||
| 				$result['zot'] = zotinfo(array('address' => $r[0]['xchan_addr'])); | ||||
| 			} | ||||
| 		} | ||||
| 		else { | ||||
| 			header($_SERVER["SERVER_PROTOCOL"] . ' ' . 400 . ' ' . 'Bad Request'); | ||||
| 			killme(); | ||||
| 		} | ||||
| 	 | ||||
| 		$arr = array('channel' => $r[0], 'request' => $_REQUEST, 'result' => $result); | ||||
| 		call_hooks('webfinger',$arr); | ||||
| 	 | ||||
| 		json_return_and_die($arr['result'],'application/jrd+json'); | ||||
| 	 | ||||
| 	} | ||||
| 	 | ||||
| } | ||||
							
								
								
									
										18
									
								
								Zotlabs/Module/Zfinger.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								Zotlabs/Module/Zfinger.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | ||||
| <?php | ||||
| namespace Zotlabs\Module; | ||||
|  | ||||
|  | ||||
| class Zfinger extends \Zotlabs\Web\Controller { | ||||
|  | ||||
| 	function init() { | ||||
| 	 | ||||
| 		require_once('include/zot.php'); | ||||
| 		require_once('include/crypto.php'); | ||||
| 	 | ||||
| 	 | ||||
| 		$x = zotinfo($_REQUEST); | ||||
| 		json_return_and_die($x); | ||||
| 	 | ||||
| 	} | ||||
| 	 | ||||
| } | ||||
							
								
								
									
										2
									
								
								boot.php
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								boot.php
									
									
									
									
									
								
							| @@ -860,6 +860,8 @@ class App { | ||||
| 		if ((array_key_exists('0', self::$argv)) && strlen(self::$argv[0])) { | ||||
| 			self::$module = str_replace(".", "_", self::$argv[0]); | ||||
| 			self::$module = str_replace("-", "_", self::$module); | ||||
| 			if(strpos(self::$module,'_') === 0) | ||||
| 				self::$module = substr(self::$module,1); | ||||
| 		} else { | ||||
| 			self::$argc = 1; | ||||
| 			self::$argv = array('home'); | ||||
|   | ||||
| @@ -1,64 +0,0 @@ | ||||
| <?php | ||||
|  | ||||
| function _well_known_init(&$a){ | ||||
|  | ||||
| 	if(argc() > 1) { | ||||
|  | ||||
| 		$arr = array('server' => $_SERVER, 'request' => $_REQUEST); | ||||
| 		call_hooks('well_known', $arr); | ||||
|  | ||||
|  | ||||
| 		if(! check_siteallowed($_SERVER['REMOTE_ADDR'])) { | ||||
| 			logger('well_known: site not allowed. ' . $_SERVER['REMOTE_ADDR']); | ||||
| 			killme(); | ||||
| 		} | ||||
|  | ||||
| 		// from php.net re: REMOTE_HOST: | ||||
| 		//     Note: Your web server must be configured to create this variable. For example in Apache  | ||||
| 		// you'll need HostnameLookups On inside httpd.conf for it to exist. See also gethostbyaddr().  | ||||
|  | ||||
| 		if(get_config('system','siteallowed_remote_host') && (! check_siteallowed($_SERVER['REMOTE_HOST']))) { | ||||
| 			logger('well_known: site not allowed. ' . $_SERVER['REMOTE_HOST']); | ||||
| 			killme(); | ||||
| 		} | ||||
|  | ||||
|  | ||||
| 		switch(argv(1)) { | ||||
| 			case 'zot-info': | ||||
| 				App::$argc -= 1; | ||||
| 				array_shift(App::$argv); | ||||
| 				App::$argv[0] = 'zfinger'; | ||||
| 				require_once('mod/zfinger.php'); | ||||
| 				zfinger_init($a); | ||||
| 				break; | ||||
|  | ||||
| 			case 'webfinger': | ||||
| 				App::$argc -= 1; | ||||
| 				array_shift(App::$argv); | ||||
| 				App::$argv[0] = 'wfinger'; | ||||
| 				require_once('mod/wfinger.php'); | ||||
| 				wfinger_init($a); | ||||
| 				break; | ||||
|  | ||||
| 			case 'host-meta': | ||||
| 				App::$argc -= 1; | ||||
| 				array_shift(App::$argv); | ||||
| 				App::$argv[0] = 'hostxrd'; | ||||
| 				require_once('mod/hostxrd.php'); | ||||
| 				hostxrd_init($a); | ||||
| 				break; | ||||
|  | ||||
| 			default: | ||||
| 				if(file_exists(App::$cmd)) { | ||||
| 					echo file_get_contents(App::$cmd);  | ||||
| 					killme(); | ||||
| 				} | ||||
| 				elseif(file_exists(App::$cmd . '.php')) | ||||
| 					require_once(App::$cmd . '.php'); | ||||
| 				break; | ||||
|  | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	http_status_exit(404); | ||||
| } | ||||
| @@ -1,18 +0,0 @@ | ||||
| <?php | ||||
|  | ||||
| function hostxrd_init(&$a) { | ||||
| 	header('Access-Control-Allow-Origin: *'); | ||||
| 	header("Content-type: application/xrd+xml"); | ||||
| 	logger('hostxrd',LOGGER_DEBUG); | ||||
|  | ||||
| 	$tpl = get_markup_template('xrd_host.tpl'); | ||||
| 	$x = replace_macros(get_markup_template('xrd_host.tpl'), array( | ||||
| 		'$zhost' => App::get_hostname(), | ||||
| 		'$zroot' => z_root() | ||||
| 	)); | ||||
| 	$arr = array('xrd' => $x); | ||||
| 	call_hooks('hostxrd',$arr); | ||||
|  | ||||
| 	echo $arr['xrd']; | ||||
| 	killme(); | ||||
| } | ||||
							
								
								
									
										134
									
								
								mod/wfinger.php
									
									
									
									
									
								
							
							
						
						
									
										134
									
								
								mod/wfinger.php
									
									
									
									
									
								
							| @@ -1,134 +0,0 @@ | ||||
| <?php | ||||
|  | ||||
| require_once('include/zot.php'); | ||||
|  | ||||
| function wfinger_init(&$a) { | ||||
|  | ||||
| 	$result = array(); | ||||
|  | ||||
| 	$scheme = ''; | ||||
|  | ||||
| 	if(x($_SERVER,'HTTPS') && $_SERVER['HTTPS']) | ||||
| 		$scheme = 'https'; | ||||
| 	elseif(x($_SERVER,'SERVER_PORT') && (intval($_SERVER['SERVER_PORT']) == 443)) | ||||
| 		$scheme = 'https'; | ||||
|  | ||||
| 	$zot = intval($_REQUEST['zot']); | ||||
|  | ||||
| 	if(($scheme !== 'https') && (! $zot)) { | ||||
| 		header($_SERVER["SERVER_PROTOCOL"] . ' ' . 500 . ' ' . 'Webfinger requires HTTPS'); | ||||
| 		killme(); | ||||
| 	} | ||||
|  | ||||
|  | ||||
| 	$resource = $_REQUEST['resource']; | ||||
| 	logger('webfinger: ' . $resource,LOGGER_DEBUG); | ||||
|  | ||||
| 	$r = null; | ||||
|  | ||||
| 	if($resource) { | ||||
|  | ||||
| 		if(strpos($resource,'acct:') === 0) { | ||||
| 			$channel = str_replace('acct:','',$resource); | ||||
| 			if(strpos($channel,'@') !== false) { | ||||
| 				$host = substr($channel,strpos($channel,'@')+1); | ||||
| 				if(strcasecmp($host,App::get_hostname())) { | ||||
| 					goaway('https://' . $host . '/.well-known/webfinger?f=&resource=' . $resource . (($zot) ? '&zot=' . $zot : '')); | ||||
| 				} | ||||
| 				$channel = substr($channel,0,strpos($channel,'@')); | ||||
| 			}		 | ||||
| 		} | ||||
| 		if(strpos($resource,'http') === 0) { | ||||
| 			$channel = str_replace('~','',basename($resource)); | ||||
| 		} | ||||
|  | ||||
| 		$r = q("select * from channel left join xchan on channel_hash = xchan_hash  | ||||
| 			where channel_address = '%s' limit 1", | ||||
| 			dbesc($channel) | ||||
| 		); | ||||
|  | ||||
| 	} | ||||
|  | ||||
| 	header('Access-Control-Allow-Origin: *'); | ||||
|  | ||||
|  | ||||
| 	if($resource && $r) { | ||||
|  | ||||
| 		$h = q("select hubloc_addr from hubloc where hubloc_hash = '%s' and hubloc_deleted = 0", | ||||
| 			dbesc($r[0]['channel_hash']) | ||||
| 		); | ||||
|  | ||||
| 		$result['subject'] = $resource; | ||||
|  | ||||
| 		$aliases = array( | ||||
| 			z_root() . '/channel/' . $r[0]['channel_address'], | ||||
| 			z_root() . '/~' . $r[0]['channel_address'] | ||||
| 		); | ||||
|  | ||||
| 		if($h) { | ||||
| 			foreach($h as $hh) { | ||||
| 				$aliases[] = 'acct:' . $hh['hubloc_addr']; | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		$result['aliases'] = array(); | ||||
|  | ||||
| 		$result['properties'] = array( | ||||
| 				'http://webfinger.net/ns/name' => $r[0]['channel_name'], | ||||
| 				'http://xmlns.com/foaf/0.1/name' => $r[0]['channel_name'] | ||||
| 		); | ||||
|  | ||||
| 		foreach($aliases as $alias)  | ||||
| 			if($alias != $resource) | ||||
| 				$result['aliases'][] = $alias; | ||||
|  | ||||
| 		$result['links'] = array( | ||||
|  | ||||
| 			array( | ||||
| 				'rel' => 'http://webfinger.net/rel/avatar', | ||||
| 				'type' => $r[0]['xchan_photo_mimetype'], | ||||
| 				'href' => $r[0]['xchan_photo_l']	 | ||||
| 			), | ||||
|  | ||||
| 			array( | ||||
| 				'rel' => 'http://webfinger.net/rel/profile-page', | ||||
| 				'href' => z_root() . '/profile/' . $r[0]['channel_address'], | ||||
| 			), | ||||
|  | ||||
| 			array( | ||||
| 				'rel' => 'http://webfinger.net/rel/blog', | ||||
| 				'href' => z_root() . '/channel/' . $r[0]['channel_address'], | ||||
| 			), | ||||
|  | ||||
| 			array( | ||||
| 				'rel' => 'http://ostatus.org/schema/1.0/subscribe', | ||||
| 				'template' => z_root() . '/follow/url={uri}', | ||||
| 			), | ||||
|  | ||||
| 			array( | ||||
| 				'rel' => 'http://purl.org/zot/protocol', | ||||
| 				'href' => z_root() . '/.well-known/zot-info' . '?address=' . $r[0]['xchan_addr'], | ||||
| 			), | ||||
|  | ||||
| 			array( | ||||
| 				'rel' => 'magic-public-key', | ||||
| 				'href' => 'data:application/magic-public-key,' . salmon_key($r[0]['channel_pubkey']), | ||||
| 			) | ||||
| 		); | ||||
|  | ||||
| 		if($zot) { | ||||
| 			// get a zotinfo packet and return it with webfinger | ||||
| 			$result['zot'] = zotinfo(array('address' => $r[0]['xchan_addr'])); | ||||
| 		} | ||||
| 	} | ||||
| 	else { | ||||
| 		header($_SERVER["SERVER_PROTOCOL"] . ' ' . 400 . ' ' . 'Bad Request'); | ||||
| 		killme(); | ||||
| 	} | ||||
|  | ||||
| 	$arr = array('channel' => $r[0], 'request' => $_REQUEST, 'result' => $result); | ||||
| 	call_hooks('webfinger',$arr); | ||||
|  | ||||
| 	json_return_and_die($arr['result'],'application/jrd+json'); | ||||
|  | ||||
| } | ||||
| @@ -1,12 +0,0 @@ | ||||
| <?php | ||||
|  | ||||
| function zfinger_init(&$a) { | ||||
|  | ||||
| 	require_once('include/zot.php'); | ||||
| 	require_once('include/crypto.php'); | ||||
|  | ||||
|  | ||||
| 	$x = zotinfo($_REQUEST); | ||||
| 	json_return_and_die($x); | ||||
|  | ||||
| } | ||||
		Reference in New Issue
	
	Block a user