Skip to content

Commit 4c1883e

Browse files
authored
refactor: make PublicKeyCredentialSource extend CredentialRecord (#804)
This change improves backward compatibility by using inheritance instead of union types. PublicKeyCredentialSource now extends CredentialRecord, allowing code that type-hints CredentialRecord to automatically accept both types. Key changes: - PublicKeyCredentialSource is now an empty class extending CredentialRecord - Repository interfaces use CredentialRecord instead of union types - Deprecated interfaces (PublicKeyCredentialSourceRepositoryInterface, CanSaveCredentialSource) now extend their new counterparts - All ceremony steps and validators updated to use CredentialRecord only - CredentialRecordConverter utility updated to handle inheritance This resolves the concern raised in discussion #803 where downstream packages needed union types to support both v5.2 and v5.3.
1 parent 5b42afd commit 4c1883e

File tree

142 files changed

+468
-1673
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

142 files changed

+468
-1673
lines changed

.ci-tools/phpstan-baseline.neon

Lines changed: 32 additions & 1130 deletions
Large diffs are not rendered by default.

src/symfony/src/CredentialOptionsBuilder/ProfileBasedCreationOptionsBuilder.php

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44

55
namespace Webauthn\Bundle\CredentialOptionsBuilder;
66

7+
use function count;
78
use InvalidArgumentException;
9+
use function is_array;
810
use Symfony\Component\HttpFoundation\Request;
911
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
1012
use Symfony\Component\Serializer\Encoder\JsonEncoder;
@@ -19,10 +21,7 @@
1921
use Webauthn\CredentialRecord;
2022
use Webauthn\PublicKeyCredentialCreationOptions;
2123
use Webauthn\PublicKeyCredentialDescriptor;
22-
use Webauthn\PublicKeyCredentialSource;
2324
use Webauthn\PublicKeyCredentialUserEntity;
24-
use function count;
25-
use function is_array;
2625

2726
final readonly class ProfileBasedCreationOptionsBuilder implements PublicKeyCredentialCreationOptionsBuilder
2827
{
@@ -83,7 +82,7 @@ private function getCredentials(PublicKeyCredentialUserEntity $userEntity): arra
8382
$credentialSources = $this->credentialSourceRepository->findAllForUserEntity($userEntity);
8483

8584
return array_map(
86-
static fn (CredentialRecord|PublicKeyCredentialSource $credential): PublicKeyCredentialDescriptor => $credential->getPublicKeyCredentialDescriptor(),
85+
static fn (CredentialRecord $credential): PublicKeyCredentialDescriptor => $credential->getPublicKeyCredentialDescriptor(),
8786
$credentialSources
8887
);
8988
}

src/symfony/src/CredentialOptionsBuilder/ProfileBasedRequestOptionsBuilder.php

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
namespace Webauthn\Bundle\CredentialOptionsBuilder;
66

7+
use function count;
8+
use function is_array;
79
use Symfony\Component\HttpFoundation\Request;
810
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
911
use Symfony\Component\Serializer\Encoder\JsonEncoder;
@@ -20,10 +22,7 @@
2022
use Webauthn\FakeCredentialGenerator;
2123
use Webauthn\PublicKeyCredentialDescriptor;
2224
use Webauthn\PublicKeyCredentialRequestOptions;
23-
use Webauthn\PublicKeyCredentialSource;
2425
use Webauthn\PublicKeyCredentialUserEntity;
25-
use function count;
26-
use function is_array;
2726

2827
final readonly class ProfileBasedRequestOptionsBuilder implements PublicKeyCredentialRequestOptionsBuilder
2928
{
@@ -86,7 +85,7 @@ private function getCredentials(PublicKeyCredentialUserEntity $userEntity): arra
8685
$credentialSources = $this->credentialSourceRepository->findAllForUserEntity($userEntity);
8786

8887
return array_map(
89-
static fn (CredentialRecord|PublicKeyCredentialSource $credential): PublicKeyCredentialDescriptor => $credential->getPublicKeyCredentialDescriptor(),
88+
static fn (CredentialRecord $credential): PublicKeyCredentialDescriptor => $credential->getPublicKeyCredentialDescriptor(),
9089
$credentialSources
9190
);
9291
}

src/symfony/src/DataCollector/WebauthnCollector.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
namespace Webauthn\Bundle\DataCollector;
66

7+
use const JSON_PRETTY_PRINT;
8+
use const JSON_THROW_ON_ERROR;
79
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
810
use Symfony\Component\HttpFoundation\Request;
911
use Symfony\Component\HttpFoundation\Response;
@@ -21,8 +23,6 @@
2123
use Webauthn\Event\AuthenticatorAssertionResponseValidationSucceededEvent;
2224
use Webauthn\Event\AuthenticatorAttestationResponseValidationFailedEvent;
2325
use Webauthn\Event\AuthenticatorAttestationResponseValidationSucceededEvent;
24-
use const JSON_PRETTY_PRINT;
25-
use const JSON_THROW_ON_ERROR;
2626

2727
class WebauthnCollector extends DataCollector implements EventSubscriberInterface
2828
{

src/symfony/src/DependencyInjection/Compiler/CeremonyStepManagerFactoryCompilerPass.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
namespace Webauthn\Bundle\DependencyInjection\Compiler;
66

7+
use function count;
8+
use function is_array;
79
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
810
use Symfony\Component\DependencyInjection\ContainerBuilder;
911
use Symfony\Component\DependencyInjection\Definition;
@@ -17,8 +19,6 @@
1719
use Webauthn\MetadataService\CertificateChain\CertificateChainValidator;
1820
use Webauthn\MetadataService\MetadataStatementRepository;
1921
use Webauthn\MetadataService\StatusReportRepository;
20-
use function count;
21-
use function is_array;
2222

2323
final class CeremonyStepManagerFactoryCompilerPass implements CompilerPassInterface
2424
{

src/symfony/src/DependencyInjection/Compiler/DynamicRouteCompilerPass.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@
44

55
namespace Webauthn\Bundle\DependencyInjection\Compiler;
66

7+
use function array_key_exists;
78
use InvalidArgumentException;
9+
use function sprintf;
810
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
911
use Symfony\Component\DependencyInjection\ContainerBuilder;
1012
use Webauthn\Bundle\Routing\Loader;
11-
use function array_key_exists;
12-
use function sprintf;
1313

1414
final readonly class DynamicRouteCompilerPass implements CompilerPassInterface
1515
{

src/symfony/src/DependencyInjection/Configuration.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace Webauthn\Bundle\DependencyInjection;
66

7+
use function assert;
78
use Psr\EventDispatcher\EventDispatcherInterface;
89
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
910
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
@@ -21,7 +22,6 @@
2122
use Webauthn\MetadataService\CertificateChain\PhpCertificateChainValidator;
2223
use Webauthn\PublicKeyCredentialCreationOptions;
2324
use Webauthn\SimpleFakeCredentialGenerator;
24-
use function assert;
2525

2626
final readonly class Configuration implements ConfigurationInterface
2727
{

src/symfony/src/DependencyInjection/Factory/Security/WebauthnFactory.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44

55
namespace Webauthn\Bundle\DependencyInjection\Factory\Security;
66

7+
use function array_key_exists;
8+
use function assert;
9+
use function sprintf;
710
use Symfony\Bundle\SecurityBundle\DependencyInjection\Security\Factory\AuthenticatorFactoryInterface;
811
use Symfony\Bundle\SecurityBundle\DependencyInjection\Security\Factory\FirewallListenerFactoryInterface;
912
use Symfony\Component\Config\Definition\Builder\NodeDefinition;
@@ -38,9 +41,6 @@
3841
use Webauthn\Bundle\Service\PublicKeyCredentialRequestOptionsFactory;
3942
use Webauthn\Denormalizer\WebauthnSerializerFactory;
4043
use Webauthn\FakeCredentialGenerator;
41-
use function array_key_exists;
42-
use function assert;
43-
use function sprintf;
4444

4545
final readonly class WebauthnFactory implements FirewallListenerFactoryInterface, AuthenticatorFactoryInterface
4646
{

src/symfony/src/DependencyInjection/WebauthnExtension.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,11 @@
44

55
namespace Webauthn\Bundle\DependencyInjection;
66

7+
use function array_key_exists;
78
use Cose\Algorithm\Algorithm;
9+
use function count;
10+
use function is_array;
11+
use function sprintf;
812
use Symfony\Component\Config\Definition\ConfigurationInterface;
913
use Symfony\Component\Config\Definition\Processor;
1014
use Symfony\Component\Config\FileLocator;
@@ -52,10 +56,6 @@
5256
use Webauthn\MetadataService\CertificateChain\CertificateChainValidator;
5357
use Webauthn\MetadataService\MetadataStatementRepository;
5458
use Webauthn\MetadataService\StatusReportRepository;
55-
use function array_key_exists;
56-
use function count;
57-
use function is_array;
58-
use function sprintf;
5959

6060
final class WebauthnExtension extends Extension implements PrependExtensionInterface
6161
{

src/symfony/src/Doctrine/Type/AAGUIDDataType.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66

77
use Doctrine\DBAL\Platforms\AbstractPlatform;
88
use Doctrine\DBAL\Types\Type;
9-
use Symfony\Component\Uid\Uuid;
109
use function is_string;
10+
use Symfony\Component\Uid\Uuid;
1111

1212
final class AAGUIDDataType extends Type
1313
{

0 commit comments

Comments
 (0)