
























共有 2 个文件被更改,包括 76 次插入 和 0 次删除
@ -0,0 +1,72 @@
|
||||
<?php
|
||||
|
||||
namespace App;
|
||||
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
|
||||
class IndieAuthController extends \Schmarty\Micropubkit\IndieAuthController {
|
||||
|
||||
/**
|
||||
* Extend MicropubKit login_start.
|
||||
* If the regular IndieAuth-endpoint lookup fails, fall back to indielogin.com
|
||||
*/
|
||||
public function login_start(ServerRequestInterface $request): ResponseInterface {
|
||||
$this->flash = $request->getAttribute('flash');
|
||||
$this->loginPath = $this->loginFormPath($request);
|
||||
$params = $request->getParsedBody();
|
||||
|
||||
if(!isset($params['me']) || empty($params['me'])) {
|
||||
return $this->error_redirect('missing_url', 'Website URL is required');
|
||||
}
|
||||
|
||||
list($authorizationURL, $error) = \IndieAuth\Client::begin($params['me'], $this->scopes);
|
||||
|
||||
if($error) {
|
||||
// use indielogin instead
|
||||
// NOTE: this duplicates a _bunch_ of \IndieAuth\Client::begin. Smells like
|
||||
// a refactor maybe?
|
||||
$state = \IndieAuth\Client::generateStateParameter();
|
||||
$codeVerifier = \IndieAuth\Client::generatePKCECodeVerifier();
|
||||
|
||||
// set up session info so \IndieAuth\Client can find it later
|
||||
$_SESSION['indieauth_entered_url'] = $params['me'];
|
||||
$_SESSION['indieauth_state'] = $state;
|
||||
$_SESSION['indieauth_code_verifier'] = $codeVerifier;
|
||||
$_SESSION['indieauth_authorization_endpoint'] = 'https://indielogin.com/auth';
|
||||
|
||||
// HACK 2024-08-25: indielogin.com maybe only has our old client_id
|
||||
$clientId = \IndieAuth\Client::$clientID;
|
||||
$u = parse_url($clientId);
|
||||
\IndieAuth\Client::$clientID = $u['scheme'] . '://' . $u['host'] . '/';
|
||||
|
||||
$authorizationURL = \IndieAuth\Client::buildAuthorizationURL(
|
||||
"https://indielogin.com/auth",
|
||||
[
|
||||
'me' => $params['me'],
|
||||
'redirect_uri' => \IndieAuth\Client::$redirectURL,
|
||||
'client_id' => \IndieAuth\Client::$clientID,
|
||||
'code_verifier' => $codeVerifier,
|
||||
'state' => $state,
|
||||
]
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
return $this->response->withHeader('Location', $authorizationURL)->withStatus(302);
|
||||
}
|
||||
|
||||
// FIXME: remove this once indielogin.com allows https://xn--sr8hvo.ws/auth/id client ID
|
||||
public function login_callback(ServerRequestInterface $request): ResponseInterface {
|
||||
if ($_SESSION['indieauth_authorization_endpoint'] === 'https://indielogin.com/auth')
|
||||
{
|
||||
// HACK 2024-08-25: indielogin.com maybe only has our old client_id
|
||||
$clientId = \IndieAuth\Client::$clientID;
|
||||
$u = parse_url($clientId);
|
||||
\IndieAuth\Client::$clientID = $u['scheme'] . '://' . $u['host'] . '/';
|
||||
}
|
||||
|
||||
return parent::login_callback($request);
|
||||
}
|
||||
|
||||
}
|
||||
@ -13,6 +13,10 @@ $app = new Micropubkit\IndieAuthEngine(dirname(__FILE__).'/../views', [
|
||||
'logo_uri' => \Config::$logo_uri,
|
||||
]);
|
||||
|
||||
// override indieauth controller
|
||||
$app->container->extend(Micropubkit\IndieAuthController::class)
|
||||
->setConcrete(App\IndieAuthController::class);
|
||||
|
||||
// set up db
|
||||
|
||||
$app->container->addShared(App\DB::class)
|
||||
|
||||
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。