2013-02-09 02:14:54 +00:00
< ? php
function rmagic_init ( & $a ) {
2015-01-29 04:56:04 +00:00
if ( local_channel ())
2013-02-09 02:28:39 +00:00
goaway ( z_root ());
2013-02-09 02:14:54 +00:00
$me = get_my_address ();
if ( $me ) {
$r = q ( " select hubloc_url from hubloc where hubloc_addr = '%s' limit 1 " ,
dbesc ( $me )
);
if ( $r ) {
2013-02-09 02:28:39 +00:00
if ( $r [ 0 ][ 'hubloc_url' ] === z_root ())
goaway ( z_root () . '/login' );
2013-02-13 08:14:01 +00:00
$dest = z_root () . '/' . str_replace ( 'zid=' , 'zid_=' , get_app () -> query_string );
2013-02-09 02:28:39 +00:00
goaway ( $r [ 0 ][ 'hubloc_url' ] . '/magic' . '?f=&dest=' . $dest );
2013-02-09 02:14:54 +00:00
}
}
}
function rmagic_post ( & $a ) {
2014-02-18 02:23:01 +00:00
$address = trim ( $_REQUEST [ 'address' ]);
2013-02-09 02:14:54 +00:00
2014-02-18 03:48:05 +00:00
if ( strpos ( $address , '@' ) === false ) {
2014-02-18 02:23:01 +00:00
$arr = array ( 'address' => $address );
call_hooks ( 'reverse_magic_auth' , $arr );
2014-02-18 03:48:05 +00:00
try {
require_once ( 'library/openid/openid.php' );
$openid = new LightOpenID ( z_root ());
$openid -> identity = $address ;
$openid -> returnUrl = z_root () . '/openid' ;
2015-03-12 22:19:54 +00:00
$openid -> required = array ( 'namePerson/friendly' , 'namePerson' );
$openid -> optional = array ( 'namePerson/first' , 'media/image/aspect11' , 'media/image/default' );
2014-02-18 03:48:05 +00:00
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 ());
}
2014-02-18 02:23:01 +00:00
// if they're still here...
notice ( t ( 'Authentication failed.' ) . EOL );
return ;
2013-02-09 02:14:54 +00:00
}
else {
2014-02-18 02:23:01 +00:00
// Presumed Red identity. Perform reverse magic auth
2013-02-09 02:14:54 +00:00
2014-02-18 02:23:01 +00:00
if ( strpos ( $address , '@' ) === false ) {
notice ( 'Invalid address.' );
return ;
}
2013-02-09 02:14:54 +00:00
2014-02-18 02:23:01 +00:00
$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 ) {
2014-07-18 02:07:39 +00:00
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 ));
2014-02-18 02:23:01 +00:00
goaway ( $url . '/magic' . '?f=&dest=' . $dest );
}
}
2013-02-09 02:14:54 +00:00
}
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 ;
}