88 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| 
 | |
| function rmagic_init(&$a) {
 | |
| 
 | |
| 	if(local_user())
 | |
| 		goaway(z_root());
 | |
| 
 | |
| 	$me = get_my_address();
 | |
| 	if($me) {
 | |
| 		$r = q("select hubloc_url from hubloc where hubloc_addr = '%s' limit 1",
 | |
| 			dbesc($me)
 | |
| 		);		
 | |
| 		if($r) {	
 | |
| 			if($r[0]['hubloc_url'] === z_root())
 | |
| 				goaway(z_root() . '/login');
 | |
| 			$dest = z_root() . '/' . str_replace('zid=','zid_=',get_app()->query_string);
 | |
| 			goaway($r[0]['hubloc_url'] . '/magic' . '?f=&dest=' . $dest);
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| function rmagic_post(&$a) {
 | |
| 
 | |
| 	$address = trim($_REQUEST['address']);
 | |
| 
 | |
| 	if(strpos($address,'@') === false) {
 | |
| 		$arr = array('address' => $address);
 | |
| 		call_hooks('reverse_magic_auth', $arr);		
 | |
| 
 | |
| 		try {
 | |
| 			require_once('library/openid/openid.php');
 | |
| 			$openid = new LightOpenID(z_root());
 | |
| 			$openid->identity = $address;
 | |
| 			$openid->returnUrl = z_root() . '/openid'; 
 | |
| 			goaway($openid->authUrl());
 | |
| 		} catch (Exception $e) {
 | |
| 			notice( t('We encountered a problem while logging in with the OpenID you provided. Please check the correct spelling of the ID.').'<br /><br >'. t('The error message was:').' '.$e->getMessage());
 | |
| 		}
 | |
| 
 | |
| 		// if they're still here...
 | |
| 		notice( t('Authentication failed.') . EOL);		
 | |
| 		return;
 | |
| 	}
 | |
| 	else {
 | |
| 
 | |
| 		// Presumed Red identity. Perform reverse magic auth
 | |
| 
 | |
| 		if(strpos($address,'@') === false) {
 | |
| 			notice('Invalid address.');
 | |
| 			return;
 | |
| 		}
 | |
| 
 | |
| 		$r = null;
 | |
| 		if($address) {
 | |
| 			$r = q("select hubloc_url from hubloc where hubloc_addr = '%s' limit 1",
 | |
| 				dbesc($address)
 | |
| 			);		
 | |
| 		}
 | |
| 		if($r) {
 | |
| 			$url = $r[0]['hubloc_url'];
 | |
| 		}
 | |
| 		else {
 | |
| 			$url = 'https://' . substr($address,strpos($address,'@')+1);
 | |
| 		}	
 | |
| 
 | |
| 		if($url) {	
 | |
| 			if($_SESSION['return_url']) 
 | |
| 				$dest = urlencode(z_root() . '/' . str_replace('zid=','zid_=',$_SESSION['return_url']));
 | |
| 			else
 | |
| 				$dest = urlencode(z_root() . '/' . str_replace('zid=','zid_=',$a->query_string));
 | |
| 
 | |
| 			goaway($url . '/magic' . '?f=&dest=' . $dest);
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| 
 | |
| function rmagic_content(&$a) {
 | |
| 
 | |
| 	$o = replace_macros(get_markup_template('rmagic.tpl'),array(
 | |
| 		'$title' => t('Remote Authentication'),
 | |
| 		'$desc' => t('Enter your channel address (e.g. channel@example.com)'),
 | |
| 		'$submit' => t('Authenticate')
 | |
| 	));
 | |
| 	return $o;
 | |
| 
 | |
| } |