-
Notifications
You must be signed in to change notification settings - Fork 289
Expand file tree
/
Copy pathBaseAdapter.php
More file actions
94 lines (85 loc) · 2.43 KB
/
Copy pathBaseAdapter.php
File metadata and controls
94 lines (85 loc) · 2.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<?php
declare(strict_types=1);
namespace CakeDC\Users\Webauthn;
use Cake\Core\Configure;
use Cake\Http\ServerRequest;
use Cake\ORM\TableRegistry;
use CakeDC\Users\Model\Table\UsersTable;
use CakeDC\Users\Webauthn\Repository\UserCredentialSourceRepository;
use Webauthn\PublicKeyCredentialRpEntity;
use Webauthn\PublicKeyCredentialUserEntity;
use Webauthn\Server;
class BaseAdapter
{
/**
* @var \Cake\Http\ServerRequest
*/
protected $request;
/**
* @var \CakeDC\Users\Webauthn\Repository\UserCredentialSourceRepository
*/
protected $repository;
/**
* @var \Webauthn\Server
*/
protected $server;
/**
* @var \Cake\Datasource\EntityInterface|\CakeDC\Users\Model\Entity\User
*/
private $user;
/**
* @param \Cake\Http\ServerRequest $request The request.
* @param \CakeDC\Users\Model\Table\UsersTable|null $usersTable The users table.
*/
public function __construct(ServerRequest $request, ?UsersTable $usersTable = null)
{
$this->request = $request;
$rpEntity = new PublicKeyCredentialRpEntity(
Configure::read('Webauthn2fa.appName'), // The application name
Configure::read('Webauthn2fa.id')
);
/**
* @var \Cake\ORM\Entity $userSession
*/
$userSession = $request->getSession()->read('Webauthn2fa.User');
$usersTable = $usersTable ?? TableRegistry::getTableLocator()
->get($userSession->getSource());
$this->user = $usersTable->get($userSession->id);
$this->repository = new UserCredentialSourceRepository(
$this->user,
$usersTable
);
$this->server = new Server(
$rpEntity,
$this->repository
);
}
/**
* @return \Webauthn\PublicKeyCredentialUserEntity
*/
protected function getUserEntity(): PublicKeyCredentialUserEntity
{
$user = $this->getUser();
return new PublicKeyCredentialUserEntity(
$user->webauthn_username ?? $user->username,
(string)$user->id,
(string)$user->first_name
);
}
/**
* @return array|mixed|null
*/
public function getUser()
{
return $this->user;
}
/**
* @return bool
*/
public function hasCredential(): bool
{
return (bool)$this->repository->findAllForUserEntity(
$this->getUserEntity()
);
}
}