PluginProbe
Yoast SEO – Advanced SEO with real-time guidance and built-in AI / 27.9
Yoast SEO – Advanced SEO with real-time guidance and built-in AI v27.9
28.5 28.4 28.3 28.2 28.1 28.0 27.9 27.8 27.7 27.6 27.5 trunk 18.0 18.1 18.2 18.3 18.4 18.4.1 18.5 18.5.1 18.6 18.7 18.8 18.9 19.0 All 129 releases
wordpress-seo / src / ai-authorization / application / code-verifier-handler.php

code-verifier-handler.php in Yoast SEO – Advanced SEO with real-time guidance and built-in AI 27.9, at src/ai-authorization/application/code-verifier-handler.php

86 lines 2.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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 */
46 public function __construct( Date_Helper $date_helper, Code_Verifier_User_Meta_Repository $code_verifier_repository, Code_Generator_Interface $code_generator ) {
47 $this->date_helper = $date_helper;
48 $this->code_verifier_repository = $code_verifier_repository;
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 */
59 public function generate( string $user_email ): Code_Verifier {
60 $code = $this->code_generator->generate( $user_email );
61 $created_at = $this->date_helper->current_time();
62
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 */
75 public function validate( int $user_id ): string {
76 $code_verifier = $this->code_verifier_repository->get_code_verifier( $user_id );
77
78 if ( $code_verifier === null || $code_verifier->is_expired( self::VALIDITY_IN_SECONDS ) ) {
79 $this->code_verifier_repository->delete_code_verifier( $user_id );
80 throw new RuntimeException( 'Code verifier has expired or is invalid.' );
81 }
82
83 return $code_verifier->get_code();
84 }
85 }
86