streams/Code/Module/Rmagic.php

97 lines
2.7 KiB
PHP
Raw Normal View History

2016-04-19 03:38:38 +00:00
<?php
2021-12-03 03:01:39 +00:00
2022-02-16 04:08:28 +00:00
namespace Code\Module;
2016-04-19 03:38:38 +00:00
use App;
2022-02-16 04:08:28 +00:00
use Code\Web\Controller;
use Code\Lib\Channel;
use Code\Extend\Hook;
use Code\Render\Theme;
2022-02-12 20:43:29 +00:00
2016-04-19 03:38:38 +00:00
2021-12-02 23:02:31 +00:00
class Rmagic extends Controller
{
2016-04-19 03:38:38 +00:00
2021-12-02 23:02:31 +00:00
public function init()
{
if (local_channel()) {
goaway(z_root());
}
2022-01-25 01:26:12 +00:00
$me = Channel::get_my_address();
2021-12-02 23:02:31 +00:00
if ($me) {
2021-12-03 03:01:39 +00:00
$r = q(
"select hubloc_url from hubloc where hubloc_addr = '%s' limit 1",
2021-12-02 23:02:31 +00:00
dbesc($me)
);
if ($r) {
if ($r[0]['hubloc_url'] === z_root()) {
goaway(z_root() . '/login');
}
$dest = bin2hex(z_root() . '/' . str_replace(['rmagic', 'zid='], ['', 'zid_='], App::$query_string));
goaway($r[0]['hubloc_url'] . '/magic' . '?f=&owa=1&bdest=' . $dest);
}
}
}
public function post()
{
$address = trim($_REQUEST['address']);
if (strpos($address, '@') === false) {
$arr = ['address' => $address];
Hook::call('reverse_magic_auth', $arr);
2021-12-02 23:02:31 +00:00
// 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) {
2021-12-03 03:01:39 +00:00
$r = q(
"select hubloc_url from hubloc where hubloc_addr = '%s' limit 1",
2021-12-02 23:02:31 +00:00
dbesc($address)
);
}
if ($r) {
$url = $r[0]['hubloc_url'];
} else {
$url = 'https://' . substr($address, strpos($address, '@') + 1);
}
if ($url) {
if ($_SESSION['return_url']) {
$dest = bin2hex(z_root() . '/' . str_replace('zid=', 'zid_=', $_SESSION['return_url']));
} else {
$dest = bin2hex(z_root() . '/' . str_replace(['rmagic', 'zid='], ['', 'zid_='], App::$query_string));
}
goaway($url . '/magic' . '?f=&owa=1&bdest=' . $dest);
}
}
}
public function get()
{
2021-12-03 03:01:39 +00:00
return replace_macros(
2022-02-12 20:43:29 +00:00
Theme::get_template('rmagic.tpl'),
2021-12-02 23:02:31 +00:00
[
'$title' => t('Remote Authentication'),
'$address' => ['address', t('Enter your channel address (e.g. channel@example.com)'), '', ''],
'$action' => 'rmagic',
'$method' => 'post',
'$submit' => t('Authenticate')
]
);
}
2016-04-19 03:38:38 +00:00
}