diff --git a/src/Authorize/AuthorizeMethodInterface.php b/src/Authorize/AuthorizeMethodInterface.php new file mode 100644 index 0000000..36a43db --- /dev/null +++ b/src/Authorize/AuthorizeMethodInterface.php @@ -0,0 +1,11 @@ +<?php + +namespace Ulmus\User\Authorize; + +use Psr\Http\Message\ServerRequestInterface; +use Ulmus\User\Entity\UserInterface; + +interface AuthorizeMethodInterface +{ + public function connect(ServerRequestInterface $request) : UserInterface|false; +} \ No newline at end of file diff --git a/src/Authorize/BasicAuthentication.php b/src/Authorize/BasicAuthentication.php new file mode 100644 index 0000000..fc21214 --- /dev/null +++ b/src/Authorize/BasicAuthentication.php @@ -0,0 +1,34 @@ +<?php + +namespace Ulmus\User\Authorize; + +use Psr\Http\Message\ServerRequestInterface; +use Ulmus\User\Entity\UserInterface; + +class BasicAuthentication implements AuthorizeMethodInterface +{ + public function connect(ServerRequestInterface $request): UserInterface|false + { + if ( null === $auth = $request->getHeader('Authorization') ) { + list($method, $userPass) = explode(' ', $auth, 2) + [ null, null ]; + + if (! $method ) { + throw new \InvalidArgumentException("An authentication method must be provided"); + } + elseif (! $userPass ) { + throw new \InvalidArgumentException("A base64-encoded 'user:password' value must be provided"); + } + + + return false; + } + + return false; + } + + protected function basicMethod(string $header) : UserInterface|false + { + + } + +} \ No newline at end of file diff --git a/src/Common/AuthorizeEnum.php b/src/Common/AuthorizeEnum.php new file mode 100644 index 0000000..9839acd --- /dev/null +++ b/src/Common/AuthorizeEnum.php @@ -0,0 +1,16 @@ +<?php + +namespace Ulmus\User\Common; + +enum AuthorizeEnum : string +{ + case Basic = "basic"; + case Token = "token"; + + # case Bearer = "bearer"; +# case Custom = "custom"; +# case Digest = "digest"; +# case Key = "key"; +# case Ntlm = "ntlm"; +# case Negotiate = "negotiate"; +} diff --git a/src/Entity/UserInterface.php b/src/Entity/UserInterface.php new file mode 100644 index 0000000..7c1b010 --- /dev/null +++ b/src/Entity/UserInterface.php @@ -0,0 +1,8 @@ +<?php + +namespace Ulmus\User\Entity; + +interface UserInterface +{ + public function __toString() : string; +} \ No newline at end of file diff --git a/src/Lib/Authenticate.php b/src/Lib/Authenticate.php index 9d02681..f605988 100644 --- a/src/Lib/Authenticate.php +++ b/src/Lib/Authenticate.php @@ -37,7 +37,7 @@ class Authenticate { { $logUser = function(? int $id) use ($repository) { if ( $id === null || null === ( $user = $repository->loadFromPk($id) ) ) { - throw new \Exception("User not found."); + throw new \InvalidArgumentException(sprintf("User having id '%s' was not found.", $id)); } $user->logged = true; diff --git a/src/Lib/Authorize.php b/src/Lib/Authorize.php new file mode 100644 index 0000000..8825c8b --- /dev/null +++ b/src/Lib/Authorize.php @@ -0,0 +1,18 @@ +<?php + +namespace Ulmus\User\Lib; + +use Ulmus\User\Entity\User; + +class Authorize extends Authenticate +{ + public function rememberMe(\Ulmus\Repository $repository) : ? User + { + return null; + } + + public function authorize(\Ulmus\Repository $repository, array $userLogin, string $password) : User + { + + } +} \ No newline at end of file diff --git a/src/Middleware/AuthenticateMiddleware.php b/src/Middleware/AuthenticateMiddleware.php new file mode 100644 index 0000000..718df86 --- /dev/null +++ b/src/Middleware/AuthenticateMiddleware.php @@ -0,0 +1,29 @@ +<?php + +namespace Ulmus\User\Middleware; + +use Psr\Http\{ + Message\ResponseInterface, + Message\ServerRequestInterface, + Server\MiddlewareInterface, + Server\RequestHandlerInterface +}; +use Ulmus\User\Authorize\AuthorizeMethodInterface; +use Ulmus\User\Common\AuthorizeEnum; + +class AuthorizeMiddleware implements MiddlewareInterface +{ + public function __construct( + protected AuthorizeMethodInterface $method, + protected ResponseInterface $loginFailed, + ) { } + + public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface + { + if ( false ) { + return $this->loginFailed; + } + + return $handler->handle($request); + } +} diff --git a/src/Middleware/AuthorizeMiddleware.php b/src/Middleware/AuthorizeMiddleware.php new file mode 100644 index 0000000..7b8bd13 --- /dev/null +++ b/src/Middleware/AuthorizeMiddleware.php @@ -0,0 +1,26 @@ +<?php + +namespace Ulmus\User\Middleware; + +use Psr\Http\{ + Message\ResponseInterface, + Message\ServerRequestInterface, + Server\MiddlewareInterface, + Server\RequestHandlerInterface +}; + +class AuthorizeMiddleware implements MiddlewareInterface +{ + public function __construct( + protected ResponseInterface $loginFailed + ) { } + + public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface + { + if ( false ) { + return $this->loginFailed; + } + + return $handler->handle($request); + } +}