• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Yoast / wordpress-seo / e69c2e79c97a57e26aa5c15ba3ca2a387f561b7d

02 Mar 2026 03:20PM UTC coverage: 53.204% (-0.7%) from 53.915%
e69c2e79c97a57e26aa5c15ba3ca2a387f561b7d

Pull #23031

github

web-flow
Merge 25ffa8e80 into 4ff1bc18e
Pull Request #23031: Refactor ai organization

5938 of 10669 branches covered (55.66%)

Branch coverage included in aggregate %.

718 of 759 new or added lines in 38 files covered. (94.6%)

718 existing lines in 33 files now uncovered.

21852 of 41564 relevant lines covered (52.57%)

71980.72 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/ai-authorization/application/code-verifier-handler.php
1
<?php
2

3
namespace Yoast\WP\SEO\AI_Authorization\Application;
4

5
use RuntimeException;
6
use Yoast\WP\SEO\AI_Authorization\Domain\Code_Verifier;
7
use Yoast\WP\SEO\AI_Authorization\Infrastructure\Code_Verifier_User_Meta_Repository;
8
use Yoast\WP\SEO\Helpers\Date_Helper;
9

10
/**
11
 * Class Code_Verifier_Service
12
 * Handles the generation and validation of code verifiers for users.
13
 */
14
class Code_Verifier_Handler implements Code_Verifier_Handler_Interface {
15

16
        private const VALIDITY_IN_SECONDS = 300; // 5 minutes
17

18
        /**
19
         * The date helper.
20
         *
21
         * @var Date_Helper
22
         */
23
        private $date_helper;
24

25
        /**
26
         * The code verifier repository.
27
         *
28
         * @var Code_Verifier_User_Meta_Repository
29
         */
30
        private $code_verifier_repository;
31

32
        /**
33
         * The code generator.
34
         *
35
         * @var Code_Generator_Interface
36
         */
37
        private $code_generator;
38

39
        /**
40
         * Code_Verifier_Service constructor.
41
         *
42
         * @param Date_Helper                        $date_helper              The date helper.
43
         * @param Code_Verifier_User_Meta_Repository $code_verifier_repository The code verifier repository.
44
         * @param Code_Generator_Interface           $code_generator           The code  generator.
45
         */
UNCOV
46
        public function __construct( Date_Helper $date_helper, Code_Verifier_User_Meta_Repository $code_verifier_repository, Code_Generator_Interface $code_generator ) {
×
UNCOV
47
                $this->date_helper              = $date_helper;
×
UNCOV
48
                $this->code_verifier_repository = $code_verifier_repository;
×
UNCOV
49
                $this->code_generator           = $code_generator;
×
50
        }
51

52
        /**
53
         * Generate a code verifier for a user.
54
         *
55
         * @param string $user_email The user email.
56
         *
57
         * @return Code_Verifier The generated code verifier.
58
         */
UNCOV
59
        public function generate( string $user_email ): Code_Verifier {
×
UNCOV
60
                $code       = $this->code_generator->generate( $user_email );
×
UNCOV
61
                $created_at = $this->date_helper->current_time();
×
62

UNCOV
63
                return new Code_Verifier( $code, $created_at );
×
64
        }
65

66
        /**
67
         * Validate the code verifier for a user.
68
         *
69
         * @param int $user_id The user ID.
70
         *
71
         * @return string The code verifier.
72
         *
73
         * @throws RuntimeException If the code verifier is expired or invalid.
74
         */
UNCOV
75
        public function validate( int $user_id ): string {
×
UNCOV
76
                $code_verifier = $this->code_verifier_repository->get_code_verifier( $user_id );
×
77

UNCOV
78
                if ( $code_verifier === null || $code_verifier->is_expired( self::VALIDITY_IN_SECONDS ) ) {
×
UNCOV
79
                        $this->code_verifier_repository->delete_code_verifier( $user_id );
×
UNCOV
80
                        throw new RuntimeException( 'Code verifier has expired or is invalid.' );
×
81
                }
82

UNCOV
83
                return $code_verifier->get_code();
×
84
        }
85
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc