-
Notifications
You must be signed in to change notification settings - Fork 451
/
UserSelectInstanceFactory.php
61 lines (49 loc) · 2.19 KB
/
UserSelectInstanceFactory.php
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
<?php
namespace Concrete\Core\User\Component;
use Concrete\Core\Application\ApplicationAwareInterface;
use Concrete\Core\Application\ApplicationAwareTrait;
use Concrete\Core\Validation\CSRF\Token;
use Symfony\Component\HttpFoundation\Request;
/**
* Methods for use with the ConcreteUserSelect component - primarily for creating on-the-fly access tokens
*/
class UserSelectInstanceFactory implements ApplicationAwareInterface
{
use ApplicationAwareTrait;
const LABEL_FORMAT_AUTO = 'auto'; // uses username_email unless username is disabled on site.
const LABEL_FORMAT_AUTO_MINIMUM = 'auto_minimum'; // Only uses username and no email - unless username is disabled on site.
const LABEL_FORMAT_USERNAME = 'username';
const LABEL_FORMAT_EMAIL = 'email';
const LABEL_FORMAT_USERNAME_EMAIL = 'username_email';
protected $tokenService;
public function __construct(Token $tokenService)
{
$this->tokenService = $tokenService;
}
protected function getAccessTokenString(string $labelFormat, bool $includeAvatar): string
{
return sprintf('user_select:format:%s:avatar:%s', $labelFormat, $includeAvatar ? '1' : '0');
}
public function createInstance(string $labelFormat, bool $includeAvatar): UserSelectInstance
{
$accessToken = $this->tokenService->generate($this->getAccessTokenString($labelFormat, $includeAvatar));
$instance = $this->app->make(UserSelectInstance::class);
$instance->setAccessToken($accessToken);
$instance->setLabelFormat($labelFormat);
$instance->setIncludeAvatar($includeAvatar);
return $instance;
}
public function createInstanceFromRequest(Request $request)
{
$labelFormat = $request->request->get('labelFormat') ?? '';
$includeAvatar = $request->request->getBoolean('includeAvatar') ?? false;
return $this->createInstance($labelFormat, $includeAvatar);
}
public function instanceMatchesAccessToken(UserSelectInstance $instance, string $accessToken): bool
{
return $this->tokenService->validate(
$this->getAccessTokenString($instance->getLabelFormat(), $instance->includeAvatar()),
$accessToken
);
}
}