mirror of
https://github.com/flarum/core.git
synced 2025-08-12 11:24:30 +02:00
Convert forum app to be PSR-7 compatible.
I also installed one new dependency: a helper library that makes it easier to read and write cookies, given that there are no helper methods for these purposes in the PSR-7 standard.
This commit is contained in:
@@ -1,13 +1,13 @@
|
||||
<?php namespace Flarum\Forum\Actions;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Flarum\Core\Commands\ConfirmEmailCommand;
|
||||
use Flarum\Core\Commands\GenerateAccessTokenCommand;
|
||||
use Flarum\Core\Exceptions\InvalidConfirmationTokenException;
|
||||
use Psr\Http\Message\ServerRequestInterface as Request;
|
||||
|
||||
class ConfirmAction extends BaseAction
|
||||
{
|
||||
use MakesRememberCookie;
|
||||
use WritesRememberCookie;
|
||||
|
||||
public function handle(Request $request, $routeParams = [])
|
||||
{
|
||||
@@ -20,11 +20,12 @@ class ConfirmAction extends BaseAction
|
||||
return 'Invalid confirmation token';
|
||||
}
|
||||
|
||||
$command = new GenerateAccessTokenCommand($user->id);
|
||||
$token = $this->dispatch($command);
|
||||
$token = $this->dispatch(new GenerateAccessTokenCommand($user->id));
|
||||
|
||||
return redirect('/')
|
||||
->withCookie($this->makeRememberCookie($token->id))
|
||||
->with('alert', ['type' => 'success', 'message' => 'Thanks for confirming!']);
|
||||
return $this->withRememberCookie(
|
||||
$this->redirectTo(''),
|
||||
$token->id
|
||||
);
|
||||
// TODO: ->with('alert', ['type' => 'success', 'message' => 'Thanks for confirming!']);
|
||||
}
|
||||
}
|
||||
|
@@ -1,18 +1,17 @@
|
||||
<?php namespace Flarum\Forum\Actions;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Flarum\Support\HtmlAction;
|
||||
use Session;
|
||||
use Auth;
|
||||
use Cookie;
|
||||
use Config;
|
||||
use View;
|
||||
use DB;
|
||||
use Flarum\Forum\Events\RenderView;
|
||||
use Flarum\Api\Request as ApiRequest;
|
||||
use Psr\Http\Message\ServerRequestInterface as Request;
|
||||
|
||||
class IndexAction extends BaseAction
|
||||
class IndexAction extends HtmlAction
|
||||
{
|
||||
public function handle(Request $request, $params = [])
|
||||
public function render(Request $request, $params = [])
|
||||
{
|
||||
$config = DB::table('config')->whereIn('key', ['base_url', 'api_url', 'forum_title', 'welcome_title', 'welcome_message'])->lists('value', 'key');
|
||||
$data = [];
|
||||
@@ -22,7 +21,7 @@ class IndexAction extends BaseAction
|
||||
if (($user = $this->actor->getUser()) && $user->exists) {
|
||||
$session = [
|
||||
'userId' => $user->id,
|
||||
'token' => Cookie::get('flarum_remember')
|
||||
'token' => $request->getCookieParams()['flarum_remember'],
|
||||
];
|
||||
|
||||
$response = app('Flarum\Api\Actions\Users\ShowAction')
|
||||
@@ -35,7 +34,7 @@ class IndexAction extends BaseAction
|
||||
}
|
||||
}
|
||||
|
||||
$view = View::make('flarum.forum::index')
|
||||
$view = view('flarum.forum::index')
|
||||
->with('title', Config::get('flarum::forum_title', 'Flarum Demo Forum'))
|
||||
->with('config', $config)
|
||||
->with('layout', 'flarum.forum::forum')
|
||||
|
@@ -1,13 +1,13 @@
|
||||
<?php namespace Flarum\Forum\Actions;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Flarum\Forum\Events\UserLoggedIn;
|
||||
use Flarum\Core\Repositories\UserRepositoryInterface;
|
||||
use Flarum\Api\Request as ApiRequest;
|
||||
use Psr\Http\Message\ServerRequestInterface as Request;
|
||||
|
||||
class LoginAction extends BaseAction
|
||||
{
|
||||
use MakesRememberCookie;
|
||||
use WritesRememberCookie;
|
||||
|
||||
protected $users;
|
||||
|
||||
@@ -18,13 +18,16 @@ class LoginAction extends BaseAction
|
||||
|
||||
public function handle(Request $request, $routeParams = [])
|
||||
{
|
||||
$response = app('Flarum\Api\Actions\TokenAction')
|
||||
->handle(new ApiRequest($request->only('identification', 'password')));
|
||||
$params = array_only($request->getAttributes(), ['identification', 'password']);
|
||||
|
||||
if ($response->getStatusCode() === 200 && ($data = $response->getData()) && ! empty($data->token)) {
|
||||
$response->withCookie($this->makeRememberCookie($data->token));
|
||||
/** @var \Psr\Http\Message\ResponseInterface $response */
|
||||
$response = app('Flarum\Api\Actions\TokenAction')->handle(new ApiRequest($params));
|
||||
|
||||
if ($response->getStatusCode() === 200) {
|
||||
$data = json_decode($response->getBody());
|
||||
|
||||
event(new UserLoggedIn($this->users->findOrFail($data->userId), $data->token));
|
||||
return $this->withRememberCookie($response, $data->token);
|
||||
}
|
||||
|
||||
return $response;
|
||||
|
@@ -1,11 +1,12 @@
|
||||
<?php namespace Flarum\Forum\Actions;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Flarum\Forum\Events\UserLoggedOut;
|
||||
use Cookie;
|
||||
use Psr\Http\Message\ServerRequestInterface as Request;
|
||||
|
||||
class LogoutAction extends BaseAction
|
||||
{
|
||||
use WritesRememberCookie;
|
||||
|
||||
public function handle(Request $request, $params = [])
|
||||
{
|
||||
$user = $this->actor->getUser();
|
||||
@@ -16,11 +17,6 @@ class LogoutAction extends BaseAction
|
||||
event(new UserLoggedOut($user));
|
||||
}
|
||||
|
||||
return redirect('')->withCookie($this->makeForgetCookie());
|
||||
}
|
||||
|
||||
public function makeForgetCookie()
|
||||
{
|
||||
return Cookie::forget('flarum_remember');
|
||||
return $this->withForgetCookie($this->redirectTo(''));
|
||||
}
|
||||
}
|
||||
|
@@ -1,11 +0,0 @@
|
||||
<?php namespace Flarum\Forum\Actions;
|
||||
|
||||
use Cookie;
|
||||
|
||||
trait MakesRememberCookie
|
||||
{
|
||||
protected function makeRememberCookie($token)
|
||||
{
|
||||
return Cookie::forever('flarum_remember', $token);
|
||||
}
|
||||
}
|
@@ -1,11 +1,12 @@
|
||||
<?php namespace Flarum\Forum\Actions;
|
||||
|
||||
use Flarum\Core\Models\ResetToken;
|
||||
use Illuminate\Http\Request;
|
||||
use Flarum\Support\HtmlAction;
|
||||
use Psr\Http\Message\ServerRequestInterface as Request;
|
||||
|
||||
class ResetPasswordAction extends BaseAction
|
||||
class ResetPasswordAction extends HtmlAction
|
||||
{
|
||||
public function handle(Request $request, $routeParams = [])
|
||||
public function render(Request $request, $routeParams = [])
|
||||
{
|
||||
$token = array_get($routeParams, 'token');
|
||||
|
||||
|
@@ -2,19 +2,19 @@
|
||||
|
||||
use Flarum\Core\Models\ResetToken;
|
||||
use Flarum\Core\Commands\EditUserCommand;
|
||||
use Illuminate\Http\Request;
|
||||
use Psr\Http\Message\ServerRequestInterface as Request;
|
||||
|
||||
class SavePasswordAction extends BaseAction
|
||||
{
|
||||
public function handle(Request $request, $routeParams = [])
|
||||
{
|
||||
$token = ResetToken::findOrFail($request->get('token'));
|
||||
$token = ResetToken::findOrFail($request->getAttribute('token'));
|
||||
|
||||
$password = $request->get('password');
|
||||
$confirmation = $request->get('password_confirmation');
|
||||
$password = $request->getAttribute('password');
|
||||
$confirmation = $request->getAttribute('password_confirmation');
|
||||
|
||||
if (! $password || $password !== $confirmation) {
|
||||
return redirect()->back();
|
||||
return $this->redirectTo(''); // TODO: Redirect back
|
||||
}
|
||||
|
||||
$this->dispatch(
|
||||
@@ -23,6 +23,6 @@ class SavePasswordAction extends BaseAction
|
||||
|
||||
$token->delete();
|
||||
|
||||
return redirect('');
|
||||
return $this->redirectTo('');
|
||||
}
|
||||
}
|
||||
|
26
src/Forum/Actions/WritesRememberCookie.php
Normal file
26
src/Forum/Actions/WritesRememberCookie.php
Normal file
@@ -0,0 +1,26 @@
|
||||
<?php namespace Flarum\Forum\Actions;
|
||||
|
||||
use Dflydev\FigCookies\FigCookies;
|
||||
use Dflydev\FigCookies\SetCookie;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
trait WritesRememberCookie
|
||||
{
|
||||
protected function withRememberCookie(ResponseInterface $response, $token)
|
||||
{
|
||||
// Set a long-living cookie (two weeks) with the remember token
|
||||
return FigCookies::setResponseSetCookie(
|
||||
$response,
|
||||
SetCookie::create('flarum_remember', $token)->withMaxAge(14 * 24 * 60 * 60)
|
||||
);
|
||||
}
|
||||
|
||||
protected function withForgetCookie(ResponseInterface $response)
|
||||
{
|
||||
// Delete the cookie by setting it to an expiration date in the past
|
||||
return FigCookies::setResponseSetCookie(
|
||||
$response,
|
||||
SetCookie::create('flarum_remember')->withMaxAge(-2628000)
|
||||
);
|
||||
}
|
||||
}
|
@@ -2,11 +2,15 @@
|
||||
|
||||
use Flarum\Support\Actor;
|
||||
use Flarum\Core\Models\AccessToken;
|
||||
use Auth;
|
||||
use Closure;
|
||||
use Psr\Http\Message\ResponseInterface as Response;
|
||||
use Psr\Http\Message\ServerRequestInterface as Request;
|
||||
use Zend\Stratigility\MiddlewareInterface;
|
||||
|
||||
class LoginWithCookie
|
||||
class LoginWithCookie implements MiddlewareInterface
|
||||
{
|
||||
/**
|
||||
* @var Actor
|
||||
*/
|
||||
protected $actor;
|
||||
|
||||
public function __construct(Actor $actor)
|
||||
@@ -14,16 +18,21 @@ class LoginWithCookie
|
||||
$this->actor = $actor;
|
||||
}
|
||||
|
||||
public function handle($request, Closure $next)
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function __invoke(Request $request, Response $response, callable $out = null)
|
||||
{
|
||||
if (($token = $request->cookie('flarum_remember')) &&
|
||||
($accessToken = AccessToken::where('id', $token)->first()) &&
|
||||
($user = $accessToken->user)) {
|
||||
$this->actor->setUser($user);
|
||||
$cookies = $request->getCookieParams();
|
||||
|
||||
if (($token = $cookies['flarum_remember']) &&
|
||||
($accessToken = AccessToken::where('id', $token)->first())
|
||||
) {
|
||||
$this->actor->setUser($user = $accessToken->user);
|
||||
|
||||
$user->updateLastSeen()->save();
|
||||
}
|
||||
|
||||
return $next($request);
|
||||
return $out ? $out($request, $response) : $response;
|
||||
}
|
||||
}
|
||||
|
@@ -1,44 +1,31 @@
|
||||
<?php
|
||||
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
|
||||
$action = function ($class) {
|
||||
return function () use ($class) {
|
||||
return function (ServerRequestInterface $httpRequest, $routeParams) use ($class) {
|
||||
$action = $this->app->make($class);
|
||||
$request = $this->app['request']->instance();
|
||||
$parameters = $this->app['router']->current()->parameters();
|
||||
return $action->handle($request, $parameters);
|
||||
|
||||
return $action->handle($httpRequest, $routeParams);
|
||||
};
|
||||
};
|
||||
|
||||
Route::group(['middleware' => 'Flarum\Forum\Middleware\LoginWithCookie'], function () use ($action) {
|
||||
/** @var Flarum\Http\Router $router */
|
||||
$router = $this->app->make('Flarum\Http\Router');
|
||||
|
||||
Route::get('/', [
|
||||
'as' => 'flarum.forum.index',
|
||||
'uses' => $action('Flarum\Forum\Actions\IndexAction')
|
||||
]);
|
||||
/**
|
||||
* Route::group(['middleware' => 'Flarum\Forum\Middleware\LoginWithCookie'], function () use ($action) {
|
||||
* For the two below
|
||||
*/
|
||||
|
||||
Route::get('logout', [
|
||||
'as' => 'flarum.forum.logout',
|
||||
'uses' => $action('Flarum\Forum\Actions\LogoutAction')
|
||||
]);
|
||||
$router->get('/', 'flarum.forum.index', $action('Flarum\Forum\Actions\IndexAction'));
|
||||
|
||||
});
|
||||
$router->get('/logout', 'flarum.forum.logout', $action('Flarum\Forum\Actions\LogoutAction'));
|
||||
|
||||
Route::post('login', [
|
||||
'as' => 'flarum.forum.login',
|
||||
'uses' => $action('Flarum\Forum\Actions\LoginAction')
|
||||
]);
|
||||
$router->post('/login', 'flarum.forum.login', $action('Flarum\Forum\Actions\LoginAction'));
|
||||
|
||||
Route::get('confirm/{id}/{token}', [
|
||||
'as' => 'flarum.forum.confirm',
|
||||
'uses' => $action('Flarum\Forum\Actions\ConfirmAction')
|
||||
]);
|
||||
$router->get('/confirm/{id}/{token}', 'flarum.forum.confirm', $action('Flarum\Forum\Actions\ConfirmAction'));
|
||||
|
||||
Route::get('reset/{token}', [
|
||||
'as' => 'flarum.forum.resetPassword',
|
||||
'uses' => $action('Flarum\Forum\Actions\ResetPasswordAction')
|
||||
]);
|
||||
$router->get('/reset/{token}', 'flarum.forum.resetPassword', $action('Flarum\Forum\Actions\ResetPasswordAction'));
|
||||
|
||||
Route::post('reset', [
|
||||
'as' => 'flarum.forum.savePassword',
|
||||
'uses' => $action('Flarum\Forum\Actions\SavePasswordAction')
|
||||
]);
|
||||
$router->post('/reset', 'flarum.forum.savePassword', $action('Flarum\Forum\Actions\SavePasswordAction'));
|
||||
|
Reference in New Issue
Block a user