| @@ 698-725 (lines=28) @@ | ||
| 695 | $this->vettedSecondFactors->set((string) $secondFactor->getId(), $secondFactor); |
|
| 696 | } |
|
| 697 | ||
| 698 | protected function applyYubikeyPossessionProvenEvent(YubikeyPossessionProvenEvent $event) |
|
| 699 | { |
|
| 700 | $secondFactorType = new SecondFactorType('yubikey'); |
|
| 701 | ||
| 702 | if ($event->emailVerificationRequired) { |
|
| 703 | $secondFactor = UnverifiedSecondFactor::create( |
|
| 704 | $event->secondFactorId, |
|
| 705 | $this, |
|
| 706 | $secondFactorType, |
|
| 707 | $event->yubikeyPublicId, |
|
| 708 | $event->emailVerificationWindow, |
|
| 709 | $event->emailVerificationNonce |
|
| 710 | ); |
|
| 711 | ||
| 712 | $this->unverifiedSecondFactors->set((string)$secondFactor->getId(), $secondFactor); |
|
| 713 | } else { |
|
| 714 | $secondFactor = VerifiedSecondFactor::create( |
|
| 715 | $event->secondFactorId, |
|
| 716 | $this, |
|
| 717 | $secondFactorType, |
|
| 718 | $event->yubikeyPublicId, |
|
| 719 | DateTime::now(), |
|
| 720 | OtpGenerator::generate(8) |
|
| 721 | ); |
|
| 722 | ||
| 723 | $this->verifiedSecondFactors->set((string)$secondFactor->getId(), $secondFactor); |
|
| 724 | } |
|
| 725 | } |
|
| 726 | ||
| 727 | protected function applyPhonePossessionProvenEvent(PhonePossessionProvenEvent $event) |
|
| 728 | { |
|
| @@ 727-754 (lines=28) @@ | ||
| 724 | } |
|
| 725 | } |
|
| 726 | ||
| 727 | protected function applyPhonePossessionProvenEvent(PhonePossessionProvenEvent $event) |
|
| 728 | { |
|
| 729 | $secondFactorType = new SecondFactorType('sms'); |
|
| 730 | ||
| 731 | if ($event->emailVerificationRequired) { |
|
| 732 | $secondFactor = UnverifiedSecondFactor::create( |
|
| 733 | $event->secondFactorId, |
|
| 734 | $this, |
|
| 735 | $secondFactorType, |
|
| 736 | $event->phoneNumber, |
|
| 737 | $event->emailVerificationWindow, |
|
| 738 | $event->emailVerificationNonce |
|
| 739 | ); |
|
| 740 | ||
| 741 | $this->unverifiedSecondFactors->set((string)$secondFactor->getId(), $secondFactor); |
|
| 742 | } else { |
|
| 743 | $secondFactor = VerifiedSecondFactor::create( |
|
| 744 | $event->secondFactorId, |
|
| 745 | $this, |
|
| 746 | $secondFactorType, |
|
| 747 | $event->phoneNumber, |
|
| 748 | DateTime::now(), |
|
| 749 | OtpGenerator::generate(8) |
|
| 750 | ); |
|
| 751 | ||
| 752 | $this->verifiedSecondFactors->set((string)$secondFactor->getId(), $secondFactor); |
|
| 753 | } |
|
| 754 | } |
|
| 755 | ||
| 756 | protected function applyGssfPossessionProvenEvent(GssfPossessionProvenEvent $event) |
|
| 757 | { |
|
| @@ 756-792 (lines=37) @@ | ||
| 753 | } |
|
| 754 | } |
|
| 755 | ||
| 756 | protected function applyGssfPossessionProvenEvent(GssfPossessionProvenEvent $event) |
|
| 757 | { |
|
| 758 | $secondFactorType = new SecondFactorType((string)$event->stepupProvider); |
|
| 759 | ||
| 760 | if ($event->emailVerificationRequired) { |
|
| 761 | $secondFactor = UnverifiedSecondFactor::create( |
|
| 762 | $event->secondFactorId, |
|
| 763 | $this, |
|
| 764 | $secondFactorType, |
|
| 765 | $event->gssfId, |
|
| 766 | $event->emailVerificationWindow, |
|
| 767 | $event->emailVerificationNonce |
|
| 768 | ); |
|
| 769 | ||
| 770 | $this->unverifiedSecondFactors->set((string)$secondFactor->getId(), $secondFactor); |
|
| 771 | } else { |
|
| 772 | // WIP! Culprit here! |
|
| 773 | // |
|
| 774 | // In 2.7, we can't create the verified second factor here, |
|
| 775 | // because that's done via the email verified event. Post 2.7, we |
|
| 776 | // want to create it directly. But that's in conflict because this |
|
| 777 | // breaks replay of old events. |
|
| 778 | // |
|
| 779 | // To solve this, we need to introduce a version on the event to |
|
| 780 | // distinguish between version 2.7 and 2.8. |
|
| 781 | $secondFactor = VerifiedSecondFactor::create( |
|
| 782 | $event->secondFactorId, |
|
| 783 | $this, |
|
| 784 | $secondFactorType, |
|
| 785 | $event->gssfId, |
|
| 786 | DateTime::now(), |
|
| 787 | OtpGenerator::generate(8) |
|
| 788 | ); |
|
| 789 | ||
| 790 | $this->verifiedSecondFactors->set((string)$secondFactor->getId(), $secondFactor); |
|
| 791 | } |
|
| 792 | } |
|
| 793 | ||
| 794 | protected function applyU2fDevicePossessionProvenEvent(U2fDevicePossessionProvenEvent $event) |
|
| 795 | { |
|
| @@ 794-821 (lines=28) @@ | ||
| 791 | } |
|
| 792 | } |
|
| 793 | ||
| 794 | protected function applyU2fDevicePossessionProvenEvent(U2fDevicePossessionProvenEvent $event) |
|
| 795 | { |
|
| 796 | $secondFactorType = new SecondFactorType('u2f'); |
|
| 797 | ||
| 798 | if ($event->emailVerificationRequired) { |
|
| 799 | $secondFactor = UnverifiedSecondFactor::create( |
|
| 800 | $event->secondFactorId, |
|
| 801 | $this, |
|
| 802 | $secondFactorType, |
|
| 803 | $event->keyHandle, |
|
| 804 | $event->emailVerificationWindow, |
|
| 805 | $event->emailVerificationNonce |
|
| 806 | ); |
|
| 807 | ||
| 808 | $this->unverifiedSecondFactors->set((string)$secondFactor->getId(), $secondFactor); |
|
| 809 | } else { |
|
| 810 | $secondFactor = VerifiedSecondFactor::create( |
|
| 811 | $event->secondFactorId, |
|
| 812 | $this, |
|
| 813 | $secondFactorType, |
|
| 814 | $event->keyHandle, |
|
| 815 | DateTime::now(), |
|
| 816 | OtpGenerator::generate(8) |
|
| 817 | ); |
|
| 818 | ||
| 819 | $this->verifiedSecondFactors->set((string)$secondFactor->getId(), $secondFactor); |
|
| 820 | } |
|
| 821 | } |
|
| 822 | ||
| 823 | protected function applyEmailVerifiedEvent(EmailVerifiedEvent $event) |
|
| 824 | { |
|