9 Commits
10 changed files with 159 additions and 9 deletions

No files matched your search

+7 -1
View File
@@ -10,8 +10,14 @@
} }
], ],
"require": { "require": {
"mcnd/notes": "master-dev" "mcnd/ulmus": "dev-master"
}, },
"repositories": [
{
"type": "vcs",
"url": "https://git.mcnd.ca/mcNdave/ulmus.git"
}
],
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"Ulmus\\User\\": "src/" "Ulmus\\User\\": "src/"
@@ -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;
}
+34
View File
@@ -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
{
}
}
+16
View File
@@ -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";
}
+4 -4
View File
@@ -57,7 +57,7 @@ class User {
public function __toString() : string public function __toString() : string
{ {
return $this->fullname(); return "{$this->firstName} {$this->lastName}";
} }
public function setPassword($password) : self public function setPassword($password) : self
@@ -67,16 +67,16 @@ class User {
return $this->hashPassword(); return $this->hashPassword();
} }
public function hashPassword() : self public function hashPassword(? string $password = null) : self
{ {
$this->password = password_hash($this->password, PASSWORD_DEFAULT); $this->password = password_hash($password ?: $this->password, PASSWORD_DEFAULT);
return $this; return $this;
} }
public function verifyPassword(string $password) : bool public function verifyPassword(string $password) : bool
{ {
return password_verify($password, $this->password ); return password_verify($password, $this->password);
} }
public function fullname() : string public function fullname() : string
+8
View File
@@ -0,0 +1,8 @@
<?php
namespace Ulmus\User\Entity;
interface UserInterface
{
public function __toString() : string;
}
+6 -4
View File
@@ -35,9 +35,9 @@ class Authenticate {
public function rememberMe(\Ulmus\Repository $repository) : ? User public function rememberMe(\Ulmus\Repository $repository) : ? User
{ {
$logUser = function(int $id) use ($repository) { $logUser = function(? int $id) use ($repository) {
if ( null === ( $user = $repository->loadFromPk($id) ) ) { 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; $user->logged = true;
@@ -123,7 +123,9 @@ class Authenticate {
$this->cookie->delete('user.id'); $this->cookie->delete('user.id');
} }
$this->user->logged = false; if (isset($this->user)) {
$this->user->logged = false;
}
return $this; return $this;
} }
+18
View File
@@ -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
{
}
}
+29
View File
@@ -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);
}
}
+26
View File
@@ -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);
}
}