2016-04-19 03:38:38 +00:00
< ? php
namespace Zotlabs\Module ;
class Rmagic extends \Zotlabs\Web\Controller {
function init () {
if ( local_channel ())
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_=' , \App :: $query_string );
goaway ( $r [ 0 ][ 'hubloc_url' ] . '/magic' . '?f=&dest=' . $dest );
}
}
}
2016-06-09 23:20:16 +00:00
function post () {
2016-04-19 03:38:38 +00:00
$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' );
2016-06-09 23:20:16 +00:00
$openid = new \LightOpenID ( z_root ());
2016-04-19 03:38:38 +00:00
$openid -> identity = $address ;
$openid -> returnUrl = z_root () . '/openid' ;
$openid -> required = array ( 'namePerson/friendly' , 'namePerson' );
$openid -> optional = array ( 'namePerson/first' , 'media/image/aspect11' , 'media/image/default' );
goaway ( $openid -> authUrl ());
2016-06-09 23:20:16 +00:00
} catch ( \Exception $e ) {
2016-04-19 03:38:38 +00:00
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_=' , \App :: $query_string ));
goaway ( $url . '/magic' . '?f=&dest=' . $dest );
}
}
}
2016-06-09 23:20:16 +00:00
function get () {
2016-04-19 03:38:38 +00:00
$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 ;
}
}