Skip to content

Commit c3af037

Browse files
committed
Made repository aware (incomplete)
1 parent 049ef92 commit c3af037

File tree

8 files changed

+31
-42
lines changed

8 files changed

+31
-42
lines changed

src/bundle/Core/DependencyInjection/Configuration/Parser/PasswordHash.php renamed to src/bundle/Core/DependencyInjection/Configuration/Parser/Repository/PasswordHash.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,10 @@
66
*/
77
declare(strict_types=1);
88

9-
namespace Ibexa\Bundle\Core\DependencyInjection\Configuration\Parser;
9+
namespace Ibexa\Bundle\Core\DependencyInjection\Configuration\Parser\Repository;
1010

1111
use Ibexa\Bundle\Core\DependencyInjection\Configuration\AbstractParser;
12+
use Ibexa\Bundle\Core\DependencyInjection\Configuration\RepositoryConfigParserInterface;
1213
use Ibexa\Bundle\Core\DependencyInjection\Configuration\SiteAccessAware\ContextualizerInterface;
1314
use Ibexa\Contracts\Core\Repository\Values\User\User;
1415
use Symfony\Component\Config\Definition\Builder\NodeBuilder;
@@ -28,7 +29,7 @@
2829
* update_type_on_change: false
2930
* ```
3031
*/
31-
final class PasswordHash extends AbstractParser
32+
final class PasswordHash extends AbstractParser implements RepositoryConfigParserInterface
3233
{
3334
public function addSemanticConfig(NodeBuilder $nodeBuilder): void
3435
{

src/bundle/Core/IbexaCoreBundle.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,10 @@ public function build(ContainerBuilder $container): void
9898
$container->addCompilerPass(new TranslationCollectorPass());
9999
$container->addCompilerPass(new SlugConverterConfigurationPass());
100100

101+
/** @var \Ibexa\Bundle\Core\DependencyInjection\IbexaCoreExtension $kernel */
102+
$kernel = $container->getExtension('ibexa');
103+
$kernel->addRepositoryConfigParser(new RepositoryConfigParser\PasswordHash());
104+
101105
$container->registerForAutoconfiguration(VariableProvider::class)->addTag('ezplatform.view.variable_provider');
102106
}
103107

@@ -125,13 +129,13 @@ public function getContainerExtension(): ExtensionInterface
125129
new ConfigParser\UrlChecker(),
126130
new ConfigParser\TwigVariablesParser(),
127131
new ConfigParser\UserContentTypeIdentifier(),
128-
new ConfigParser\PasswordHash(),
129132
],
130133
[
131134
new RepositoryConfigParser\Storage(),
132135
new RepositoryConfigParser\Search(),
133136
new RepositoryConfigParser\FieldGroups(),
134137
new RepositoryConfigParser\Options(),
138+
new RepositoryConfigParser\PasswordHash(),
135139
]
136140
);
137141
}

src/bundle/Core/Resources/config/default_settings.yml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,10 +99,6 @@ parameters:
9999
ibexa.site_access.config.default.users_group_root_subtree_path: '/1/5'
100100
ibexa.site_access.config.default.api_keys: {} # Google Maps APIs v3 key (https://developers.google.com/maps/documentation/javascript/get-api-key)
101101

102-
# Password hash
103-
ibexa.site_access.config.default.password_hash.default_type: 7 # Default password hash type, see the constants in Ibexa\Contracts\Core\Repository\Values\User\User
104-
ibexa.site_access.config.default.password_hash.update_type_on_change: false # Whether the password hash type should be changed when the password is changed if it differs from the default hash type
105-
106102
# IO
107103
ibexa.site_access.config.default.io.metadata_handler: "default"
108104
ibexa.site_access.config.default.io.binarydata_handler: "default"

src/lib/Repository/User/PasswordHashService.php

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88

99
namespace Ibexa\Core\Repository\User;
1010

11+
use Ibexa\Contracts\Core\Container\ApiLoader\RepositoryConfigurationProviderInterface;
1112
use Ibexa\Contracts\Core\Repository\PasswordHashService as PasswordHashServiceInterface;
1213
use Ibexa\Contracts\Core\Repository\Values\User\User;
13-
use Ibexa\Contracts\Core\SiteAccess\ConfigResolverInterface;
1414
use Ibexa\Core\Repository\User\Exception\PasswordHashTypeNotCompiled;
1515
use Ibexa\Core\Repository\User\Exception\UnsupportedPasswordHashType;
1616

@@ -19,11 +19,11 @@
1919
*/
2020
final class PasswordHashService implements PasswordHashServiceInterface
2121
{
22-
private ConfigResolverInterface $configResolver;
22+
private RepositoryConfigurationProviderInterface $repositoryConfigurationProvider;
2323

24-
public function __construct(ConfigResolverInterface $configResolver)
24+
public function __construct(RepositoryConfigurationProviderInterface $repositoryConfigurationProvider)
2525
{
26-
$this->configResolver = $configResolver;
26+
$this->repositoryConfigurationProvider = $repositoryConfigurationProvider;
2727
}
2828

2929
public function getSupportedHashTypes(): array
@@ -38,7 +38,9 @@ public function isHashTypeSupported(int $hashType): bool
3838

3939
public function getDefaultHashType(): int
4040
{
41-
return $this->configResolver->getParameter('password_hash.default_type');
41+
$config = $this->repositoryConfigurationProvider->getRepositoryConfig();
42+
43+
return $config['password_hash']['default_type'];
4244
}
4345

4446
public function createPasswordHash(
@@ -105,6 +107,8 @@ public function isValidPassword(
105107

106108
public function shouldPasswordHashTypeBeUpdatedOnChange(): bool
107109
{
108-
return $this->configResolver->getParameter('password_hash.update_type_on_change');
110+
$config = $this->repositoryConfigurationProvider->getRepositoryConfig();
111+
112+
return $config['password_hash']['update_type_on_change'];
109113
}
110114
}

src/lib/Resources/settings/fieldtype_services.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ services:
6262

6363
Ibexa\Core\Repository\User\PasswordHashService:
6464
arguments:
65-
$configResolver: '@ibexa.config.resolver'
65+
$repositoryConfigurationProvider: '@Ibexa\Core\Base\Container\ApiLoader\RepositoryConfigurationProvider'
6666

6767
Ibexa\Contracts\Core\Repository\PasswordHashService:
6868
alias: Ibexa\Core\Repository\User\PasswordHashService

src/lib/Resources/settings/settings.yml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,6 @@ parameters:
1111
ibexa.site_access.config.default.io.permissions.files: 0o644
1212
ibexa.site_access.config.default.io.permissions.directories: 0o755
1313

14-
# Password hash
15-
ibexa.site_access.config.password_hash.default_type: 7 # Password hash type, see the constants in Ibexa\Contracts\Core\Repository\Values\User\User
16-
ibexa.site_access.config.password_hash.update_type_on_change: false # Whether the password hash type should be changed when the password is changed if it differs from the default hash type
17-
1814
services:
1915
ibexa.api.persistence_handler:
2016
#To disable cache, switch alias to Ibexa\Contracts\Core\Persistence\Handler

tests/integration/Core/Resources/settings/integration_legacy.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,6 @@ parameters:
1414

1515
ibexa.site_access.config.default.user_content_type_identifier: ['user']
1616

17-
ibexa.site_access.config.default.password_hash.default_type: 7
18-
ibexa.site_access.config.default.password_hash.update_type_on_change: false
19-
2017
ibexa.repositories:
2118
default:
2219
storage: ~
@@ -29,6 +26,9 @@ parameters:
2926
options:
3027
default_version_archive_limit: 5
3128
remove_archived_versions_on_publish: true
29+
password_hash:
30+
default_type: 7
31+
update_type_on_change: false
3232

3333
ibexa.site_access.config.default.repository: default
3434
ibexa.site_access.config.default.languages: '%languages%'

tests/lib/Repository/User/PasswordHashServiceTest.php

Lines changed: 9 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -10,38 +10,26 @@
1010

1111
use Ibexa\Contracts\Core\Repository\Values\User\User;
1212
use Ibexa\Contracts\Core\SiteAccess\ConfigResolverInterface;
13+
use Ibexa\Core\Base\Container\ApiLoader\RepositoryConfigurationProvider;
1314
use Ibexa\Core\Repository\User\Exception\UnsupportedPasswordHashType;
1415
use Ibexa\Core\Repository\User\PasswordHashService;
15-
use PHPUnit\Framework\MockObject\MockObject;
16-
use PHPUnit\Framework\TestCase;
16+
use Ibexa\Tests\Bundle\Core\ApiLoader\BaseRepositoryConfigurationProviderTestCase;
1717

18-
final class PasswordHashServiceTest extends TestCase
18+
final class PasswordHashServiceTest extends BaseRepositoryConfigurationProviderTestCase
1919
{
2020
private const int NON_EXISTING_PASSWORD_HASH = PHP_INT_MAX;
2121

2222
private PasswordHashService $passwordHashService;
2323

2424
protected function setUp(): void
2525
{
26-
$this->passwordHashService = new PasswordHashService($this->getConfigResolverMock());
27-
}
28-
29-
private function getConfigResolverMock(): ConfigResolverInterface & MockObject
30-
{
31-
$configResolver = $this
32-
->createMock(ConfigResolverInterface::class);
33-
34-
$configResolver
35-
->method('getParameter')
36-
->with('password_hash.default_type')
37-
->willReturn(User::PASSWORD_HASH_PHP_DEFAULT);
38-
39-
$configResolver
40-
->method('getParameter')
41-
->with('password_hash.update_type_on_change')
42-
->willReturn(false);
26+
$repositories = [
27+
'legacy' => $this->buildNormalizedSingleRepositoryConfig('legacy'),
28+
];
4329

44-
return $configResolver;
30+
$configResolver = $this->createMock(ConfigResolverInterface::class);
31+
$repositoryConfigurationProvider = new RepositoryConfigurationProvider($configResolver, $repositories);
32+
$this->passwordHashService = new PasswordHashService($repositoryConfigurationProvider);
4533
}
4634

4735
public function testGetSupportedHashTypes(): void

0 commit comments

Comments
 (0)