Added logout via AuthController
This commit is contained in:
parent
2e51fbff9d
commit
6ed891fc04
|
@ -11,6 +11,9 @@ $route->get('/', function () {
|
|||
});
|
||||
$route->get('/credits', 'CreditsController@index');
|
||||
|
||||
// Authentication
|
||||
$route->get('/logout', 'AuthController@logout');
|
||||
|
||||
// Stats
|
||||
$route->get('/metrics', 'Metrics\\Controller@metrics');
|
||||
$route->get('/stats', 'Metrics\\Controller@stats');
|
||||
|
|
|
@ -24,14 +24,6 @@ function register_title()
|
|||
return __('Register');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
function logout_title()
|
||||
{
|
||||
return __('Logout');
|
||||
}
|
||||
|
||||
/**
|
||||
* Engel registrieren
|
||||
*
|
||||
|
@ -378,16 +370,6 @@ function entry_required()
|
|||
return '<span class="text-info glyphicon glyphicon-warning-sign"></span>';
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
function guest_logout()
|
||||
{
|
||||
session()->invalidate();
|
||||
redirect(page_link_to('start'));
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
<?php
|
||||
|
||||
namespace Engelsystem\Controllers;
|
||||
|
||||
use Engelsystem\Http\Response;
|
||||
use Engelsystem\Http\UrlGeneratorInterface;
|
||||
use Symfony\Component\HttpFoundation\Session\SessionInterface;
|
||||
|
||||
class AuthController extends BaseController
|
||||
{
|
||||
/** @var Response */
|
||||
protected $response;
|
||||
|
||||
/** @var SessionInterface */
|
||||
protected $session;
|
||||
|
||||
/** @var UrlGeneratorInterface */
|
||||
protected $url;
|
||||
|
||||
public function __construct(Response $response, SessionInterface $session, UrlGeneratorInterface $url)
|
||||
{
|
||||
$this->response = $response;
|
||||
$this->session = $session;
|
||||
$this->url = $url;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Response
|
||||
*/
|
||||
public function logout()
|
||||
{
|
||||
$this->session->invalidate();
|
||||
|
||||
return $this->response->redirectTo($this->url->to('/'));
|
||||
}
|
||||
}
|
|
@ -121,4 +121,27 @@ class Response extends SymfonyResponse implements ResponseInterface
|
|||
|
||||
return $new;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return an redirect instance
|
||||
*
|
||||
* This method retains the immutability of the message and returns
|
||||
* an instance with the updated status and headers
|
||||
*
|
||||
* @param string $path
|
||||
* @param int $status
|
||||
* @param array $headers
|
||||
* @return Response
|
||||
*/
|
||||
public function redirectTo($path, $status = 302, $headers = [])
|
||||
{
|
||||
$response = $this->withStatus($status);
|
||||
$response = $response->withHeader('location', $path);
|
||||
|
||||
foreach ($headers as $name => $value) {
|
||||
$response = $response->withAddedHeader($name, $value);
|
||||
}
|
||||
|
||||
return $response;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,5 +11,6 @@ class UrlGeneratorServiceProvider extends ServiceProvider
|
|||
$urlGenerator = $this->app->make(UrlGenerator::class);
|
||||
$this->app->instance(UrlGenerator::class, $urlGenerator);
|
||||
$this->app->instance('http.urlGenerator', $urlGenerator);
|
||||
$this->app->bind(UrlGeneratorInterface::class, UrlGenerator::class);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -183,10 +183,6 @@ class LegacyMiddleware implements MiddlewareInterface
|
|||
$title = register_title();
|
||||
$content = guest_register();
|
||||
return [$title, $content];
|
||||
case 'logout':
|
||||
$title = logout_title();
|
||||
$content = guest_logout();
|
||||
return [$title, $content];
|
||||
case 'admin_questions':
|
||||
$title = admin_questions_title();
|
||||
$content = admin_questions();
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
<?php
|
||||
|
||||
namespace Engelsystem\Test\Unit\Controllers;
|
||||
|
||||
use Engelsystem\Controllers\AuthController;
|
||||
use Engelsystem\Http\Response;
|
||||
use Engelsystem\Http\UrlGeneratorInterface;
|
||||
use PHPUnit\Framework\MockObject\MockObject;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\HttpFoundation\Session\SessionInterface;
|
||||
|
||||
class AuthControllerTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @covers \Engelsystem\Controllers\AuthController::__construct
|
||||
* @covers \Engelsystem\Controllers\AuthController::logout
|
||||
*/
|
||||
public function testLogout()
|
||||
{
|
||||
/** @var Response|MockObject $response */
|
||||
$response = $this->createMock(Response::class);
|
||||
/** @var SessionInterface|MockObject $session */
|
||||
$session = $this->getMockForAbstractClass(SessionInterface::class);
|
||||
/** @var UrlGeneratorInterface|MockObject $url */
|
||||
$url = $this->getMockForAbstractClass(UrlGeneratorInterface::class);
|
||||
|
||||
$session->expects($this->once())
|
||||
->method('invalidate');
|
||||
|
||||
$response->expects($this->once())
|
||||
->method('redirectTo')
|
||||
->with('https://foo.bar/');
|
||||
|
||||
$url->expects($this->once())
|
||||
->method('to')
|
||||
->with('/')
|
||||
->willReturn('https://foo.bar/');
|
||||
|
||||
$controller = new AuthController($response, $session, $url);
|
||||
$controller->logout();
|
||||
}
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
<?php
|
||||
|
||||
namespace Unit\Controllers;
|
||||
namespace Engelsystem\Test\Unit\Controllers;
|
||||
|
||||
use Engelsystem\Config\Config;
|
||||
use Engelsystem\Controllers\CreditsController;
|
||||
|
|
|
@ -85,4 +85,23 @@ class ResponseTest extends TestCase
|
|||
$response = new Response();
|
||||
$response->withView('foo');
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers \Engelsystem\Http\Response::redirectTo
|
||||
*/
|
||||
public function testRedirectTo()
|
||||
{
|
||||
$response = new Response();
|
||||
$newResponse = $response->redirectTo('http://foo.bar/lorem', 301, ['test' => 'ing']);
|
||||
|
||||
$this->assertNotEquals($response, $newResponse);
|
||||
$this->assertEquals(301, $newResponse->getStatusCode());
|
||||
$this->assertArraySubset(
|
||||
[
|
||||
'location' => ['http://foo.bar/lorem'],
|
||||
'test' => ['ing'],
|
||||
],
|
||||
$newResponse->getHeaders()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
namespace Engelsystem\Test\Unit\Http;
|
||||
|
||||
use Engelsystem\Http\UrlGenerator;
|
||||
use Engelsystem\Http\UrlGeneratorInterface;
|
||||
use Engelsystem\Http\UrlGeneratorServiceProvider;
|
||||
use Engelsystem\Test\Unit\ServiceProviderTest;
|
||||
use PHPUnit\Framework\MockObject\MockObject;
|
||||
|
@ -25,7 +26,8 @@ class UrlGeneratorServiceProviderTest extends ServiceProviderTest
|
|||
->method('instance')
|
||||
->withConsecutive(
|
||||
[UrlGenerator::class, $urlGenerator],
|
||||
['http.urlGenerator', $urlGenerator]
|
||||
['http.urlGenerator', $urlGenerator],
|
||||
[UrlGeneratorInterface::class, $urlGenerator]
|
||||
);
|
||||
|
||||
$serviceProvider = new UrlGeneratorServiceProvider($app);
|
||||
|
|
Loading…
Reference in New Issue