- Work done to support Basic / Bearer / Digest method

This commit is contained in:
Dave Mc Nicoll committed 2023-11-13 14:23:24 -05:00
1 parent 0f2886b266
commit 9570320a3b
8 files changed
+33 -11

No files matched your search

+4 -3
View File
@@ -3,13 +3,14 @@
namespace Ulmus\User\Authorize\Header;
use Psr\Http\Message\ServerRequestInterface;
use Ulmus\User\Entity\BasicAuthUserInterface;
use Ulmus\User\Entity\UserInterface;
use Ulmus\User\Lib\Authorize;
class BasicMethod
class BasicMethod implements MethodInterface
{
public function __construct(
protected UserInterface $user,
protected BasicAuthUserInterface $user,
protected string|array $arguments
) {}
@@ -28,7 +29,7 @@ class BasicMethod
throw new \RuntimeException("A password must be provided");
}
( new Authorize($this->user) )->authenticate([ 'email' => $userName, 'username' => $userName ], $password);
( new Authorize($this->user) )->authenticate([ $this->user->usernameField() => $userName ], $password);
return $this->user->loggedIn();
}
+1 -1
View File
@@ -5,7 +5,7 @@ namespace Ulmus\User\Authorize\Header;
use Psr\Http\Message\ServerRequestInterface;
use Ulmus\User\Entity\UserInterface;
class BearerMethod
class BearerMethod implements MethodInterface
{
public function __construct(
protected UserInterface $user,
+1 -1
View File
@@ -5,7 +5,7 @@ namespace Ulmus\User\Authorize\Header;
use Psr\Http\Message\ServerRequestInterface;
use Ulmus\User\Entity\DigestAuthUserInterface;
class DigestMethod
class DigestMethod implements MethodInterface
{
public function __construct(
protected DigestAuthUserInterface $user,
+10
View File
@@ -0,0 +1,10 @@
<?php
namespace Ulmus\User\Authorize\Header;
use Psr\Http\Message\ServerRequestInterface;
interface MethodInterface
{
public function execute(ServerRequestInterface $request) : bool;
}
+7 -4
View File
@@ -15,24 +15,27 @@ class HeaderAuthentication implements AuthorizeMethodInterface
switch(strtolower($method)) {
case "basic":
return (new Header\BasicMethod($user, $value))->execute($request);
$methodObj = new Header\BasicMethod($user, $value);
break;
case "digest":
if (! $user instanceof DigestAuthUserInterface) {
throw new \RuntimeException("Your user entity must provide a valid hash of `user:realm:password` ");
}
return (new Header\DigestMethod($user, $value))->execute($request);
$method = new Header\DigestMethod($user, $value);
break;
case "bearer":
return (new Header\BearerMethod($user, $value))->execute($request);
$method = new Header\BearerMethod($user, $value);
break;
default:
throw new \InvalidArgumentException("An authentication method must be provided");
}
}
return false;
return isset($methodObj) && $methodObj->execute($request);
}