chore: add authorize page
This commit is contained in:
parent
386664042e
commit
6e6055c44a
8 changed files with 105 additions and 10 deletions
10
extend.php
10
extend.php
|
@ -12,13 +12,21 @@
|
|||
namespace FoskyM\OAuthCenter;
|
||||
|
||||
use Flarum\Extend;
|
||||
use FoskyM\OAuthCenter\Middlewares\ResourceScopeMiddleware;
|
||||
|
||||
return [
|
||||
(new Extend\Frontend('forum'))
|
||||
->js(__DIR__.'/js/dist/forum.js')
|
||||
->css(__DIR__.'/less/forum.less'),
|
||||
->css(__DIR__.'/less/forum.less')
|
||||
->route('/oauth/authorize', 'oauth.authorize'),
|
||||
|
||||
(new Extend\Frontend('admin'))
|
||||
->js(__DIR__.'/js/dist/admin.js')
|
||||
->css(__DIR__.'/less/admin.less'),
|
||||
new Extend\Locales(__DIR__.'/locale'),
|
||||
|
||||
(new Extend\Routes('forum'))
|
||||
->post('/oauth/authorize', 'oauth.authorize.post', Controllers\AuthorizeController::class),
|
||||
|
||||
(new Extend\Middleware('api'))->add(ResourceScopeMiddleware::class),
|
||||
];
|
||||
|
|
BIN
js/dist/forum.js
generated
vendored
BIN
js/dist/forum.js
generated
vendored
Binary file not shown.
BIN
js/dist/forum.js.map
generated
vendored
BIN
js/dist/forum.js.map
generated
vendored
Binary file not shown.
30
js/src/forum/components/oauth/AuthorizePage.js
Normal file
30
js/src/forum/components/oauth/AuthorizePage.js
Normal file
|
@ -0,0 +1,30 @@
|
|||
import app from 'flarum/forum/app';
|
||||
import {extend} from 'flarum/common/extend';
|
||||
import Page from 'flarum/common/components/Page';
|
||||
import IndexPage from 'flarum/forum/components/IndexPage';
|
||||
import LogInModal from 'flarum/forum/components/LogInModal';
|
||||
import extractText from 'flarum/common/utils/extractText';
|
||||
|
||||
export default class AuthorizePage extends IndexPage {
|
||||
oninit(vnode) {
|
||||
super.oninit(vnode);
|
||||
if (!app.session.user) {
|
||||
setTimeout(() => app.modal.show(LogInModal), 500);
|
||||
}
|
||||
|
||||
const params = m.route.param();
|
||||
}
|
||||
|
||||
setTitle() {
|
||||
app.setTitle(extractText(app.translator.trans('foskym-oauth-center.forum.page.title.authorize')));
|
||||
app.setTitleCount(0);
|
||||
}
|
||||
view() {
|
||||
return (
|
||||
<div className="AuthorizePage">
|
||||
<div className="container">
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
|
@ -1,12 +1,12 @@
|
|||
import UserPage from 'flarum/forum/components/UserPage';
|
||||
export default class AuthorizePage extends UserPage {
|
||||
export default class AuthorizedPage extends UserPage {
|
||||
oninit(vnode) {
|
||||
super.oninit(vnode);
|
||||
this.loadUser(m.route.param('username'));
|
||||
}
|
||||
content() {
|
||||
return (
|
||||
<div className="AuthorizePage">
|
||||
<div className="AuthorizedPage">
|
||||
</div>
|
||||
);
|
||||
}
|
|
@ -2,23 +2,29 @@ import app from 'flarum/forum/app';
|
|||
import {extend} from 'flarum/common/extend';
|
||||
import UserPage from 'flarum/forum/components/UserPage';
|
||||
import LinkButton from 'flarum/common/components/LinkButton';
|
||||
import AuthorizePage from "./components/user/AuthorizePage";
|
||||
import AuthorizePage from "./components/oauth/AuthorizePage";
|
||||
import AuthorizedPage from "./components/user/AuthorizedPage";
|
||||
app.initializers.add('foskym/flarum-oauth-center', () => {
|
||||
app.routes['user.authorize'] = {
|
||||
path: '/u/:username/authorize',
|
||||
app.routes['oauth.authorize'] = {
|
||||
path: '/oauth/authorize',
|
||||
component: AuthorizePage
|
||||
};
|
||||
|
||||
app.routes['user.authorized'] = {
|
||||
path: '/u/:username/authorized',
|
||||
component: AuthorizedPage
|
||||
};
|
||||
extend(UserPage.prototype, 'navItems', function (items) {
|
||||
if (app.session.user && app.session.user.id() === this.user.id()) {
|
||||
items.add(
|
||||
'authorize',
|
||||
'authorized',
|
||||
LinkButton.component(
|
||||
{
|
||||
href: app.route('user.authorize', { username: this.user.username() }),
|
||||
href: app.route('user.authorized', { username: this.user.username() }),
|
||||
icon: 'fas fa-user-friends',
|
||||
},
|
||||
[
|
||||
app.translator.trans('foskym-oauth-center.forum.page.label.authorize'),
|
||||
app.translator.trans('foskym-oauth-center.forum.page.label.authorized'),
|
||||
// this.user.moderatorNoteCount() > 0 ? <span className="Button-badge">{this.user.moderatorNoteCount()}</span> : '',
|
||||
]
|
||||
),
|
||||
|
|
|
@ -3,5 +3,7 @@ foskym-oauth-center:
|
|||
|
||||
forum:
|
||||
page:
|
||||
label:
|
||||
title:
|
||||
authorize: 授权
|
||||
label:
|
||||
authorized: 授权记录
|
||||
|
|
49
src/Controllers/AuthorizeController.php
Normal file
49
src/Controllers/AuthorizeController.php
Normal file
|
@ -0,0 +1,49 @@
|
|||
<?php
|
||||
|
||||
namespace FoskyM\OAuthCenter\Controllers;
|
||||
use Flarum\User\User;
|
||||
use Flarum\Http\RequestUtil;
|
||||
use FoskyM\OAuthCenter\OAuth;
|
||||
use Illuminate\Support\Arr;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
use Psr\Http\Server\RequestHandlerInterface;
|
||||
use Laminas\Diactoros\Response\JsonResponse;
|
||||
use Flarum\Settings\SettingsRepositoryInterface;
|
||||
use Flarum\Group\Group;
|
||||
|
||||
class AuthorizeController implements RequestHandlerInterface
|
||||
{
|
||||
protected $settings;
|
||||
public function __construct(SettingsRepositoryInterface $settings)
|
||||
{
|
||||
$this->settings = $settings;
|
||||
}
|
||||
|
||||
public function handle(ServerRequestInterface $request): ResponseInterface
|
||||
{
|
||||
$actor = RequestUtil::getActor($request);
|
||||
$actor->assertRegistered();
|
||||
|
||||
$params = $request->getParsedBody();
|
||||
|
||||
$oauth = new OAuth();
|
||||
$server = $oauth->server();
|
||||
$request = $oauth->request()::createFromGlobals();
|
||||
$response = $oauth->response();
|
||||
|
||||
if (!$server->validateAuthorizeRequest($request, $response)) {
|
||||
$response->send();
|
||||
die;
|
||||
}
|
||||
|
||||
$is_authorized = (Arr::get($params, 'authorized', 'no') === 'yes');
|
||||
$server->handleAuthorizeRequest($request, $response, $is_authorized, $actor->id);
|
||||
if ($is_authorized) {
|
||||
// this is only here so that you get to see your code in the cURL request. Otherwise, we'd redirect back to the client
|
||||
/* $code = substr($response->getHttpHeader('Location'), strpos($response->getHttpHeader('Location'), 'code=')+5, 40);
|
||||
exit("SUCCESS! Authorization Code: $code");*/
|
||||
}
|
||||
$response->send();
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue