mirror of
https://github.com/BookStackApp/BookStack.git
synced 2024-10-01 01:36:00 -04:00
6f1b88a6a6
Email confirmation middleware caused more mess than good, As caused priority issues and it depended on auth actions. Instead its now a trai used on auth middlewares. Also used 'EncryptCookies' middleware on API instead of custom decryption in custom middleware since we'd need to do replicate all the same actions anyway. Shouldn't have too much effect since it only actions over cookies that exist, of which none should be there for most API requests. Also split out some large guard functions to be a little more readable and appease codeclimate.
57 lines
1.5 KiB
PHP
57 lines
1.5 KiB
PHP
<?php
|
|
|
|
namespace BookStack\Http\Middleware;
|
|
|
|
use BookStack\Exceptions\ApiAuthException;
|
|
use Closure;
|
|
use Illuminate\Http\Request;
|
|
|
|
class ApiAuthenticate
|
|
{
|
|
use ChecksForEmailConfirmation;
|
|
|
|
/**
|
|
* Handle an incoming request.
|
|
*/
|
|
public function handle(Request $request, Closure $next)
|
|
{
|
|
// Return if the user is already found to be signed in via session-based auth.
|
|
// This is to make it easy to browser the API via browser after just logging into the system.
|
|
if (signedInUser()) {
|
|
if ($this->awaitingEmailConfirmation()) {
|
|
return $this->emailConfirmationErrorResponse($request);
|
|
}
|
|
return $next($request);
|
|
}
|
|
|
|
// Set our api guard to be the default for this request lifecycle.
|
|
auth()->shouldUse('api');
|
|
|
|
// Validate the token and it's users API access
|
|
try {
|
|
auth()->authenticate();
|
|
} catch (ApiAuthException $exception) {
|
|
return $this->unauthorisedResponse($exception->getMessage(), $exception->getCode());
|
|
}
|
|
|
|
if ($this->awaitingEmailConfirmation()) {
|
|
return $this->emailConfirmationErrorResponse($request);
|
|
}
|
|
|
|
return $next($request);
|
|
}
|
|
|
|
/**
|
|
* Provide a standard API unauthorised response.
|
|
*/
|
|
protected function unauthorisedResponse(string $message, int $code)
|
|
{
|
|
return response()->json([
|
|
'error' => [
|
|
'code' => $code,
|
|
'message' => $message,
|
|
]
|
|
], 401);
|
|
}
|
|
}
|