PluginProbe
Yoast SEO – Advanced SEO with real-time guidance and built-in AI / 28.3
Yoast SEO – Advanced SEO with real-time guidance and built-in AI v28.3
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 28.3, at src/ai/authorization/application/code-verifier-handler.php

88 lines 2.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 // phpcs:disable Yoast.NamingConventions.NamespaceName.TooLong -- Needed in the folder structure.
4
5 namespace Yoast\WP\SEO\AI\Authorization\Application;
6
7 use RuntimeException;
8 use Yoast\WP\SEO\AI\Authorization\Domain\Code_Verifier;
9 use Yoast\WP\SEO\AI\Authorization\Infrastructure\Code_Verifier_User_Meta_Repository;
10 use Yoast\WP\SEO\Helpers\Date_Helper;
11
12 /**
13 * Class Code_Verifier_Service
14 * Handles the generation and validation of code verifiers for users.
15 */
16 class Code_Verifier_Handler implements Code_Verifier_Handler_Interface {
17
18 private const VALIDITY_IN_SECONDS = 300; // 5 minutes
19
20 /**
21 * The date helper.
22 *
23 * @var Date_Helper
24 */
25 private $date_helper;
26
27 /**
28 * The code verifier repository.
29 *
30 * @var Code_Verifier_User_Meta_Repository
31 */
32 private $code_verifier_repository;
33
34 /**
35 * The code generator.
36 *
37 * @var Code_Generator_Interface
38 */
39 private $code_generator;
40
41 /**
42 * Code_Verifier_Service constructor.
43 *
44 * @param Date_Helper $date_helper The date helper.
45 * @param Code_Verifier_User_Meta_Repository $code_verifier_repository The code verifier repository.
46 * @param Code_Generator_Interface $code_generator The code generator.
47 */
48 public function __construct( Date_Helper $date_helper, Code_Verifier_User_Meta_Repository $code_verifier_repository, Code_Generator_Interface $code_generator ) {
49 $this->date_helper = $date_helper;
50 $this->code_verifier_repository = $code_verifier_repository;
51 $this->code_generator = $code_generator;
52 }
53
54 /**
55 * Generate a code verifier for a user.
56 *
57 * @param string $user_email The user email.
58 *
59 * @return Code_Verifier The generated code verifier.
60 */
61 public function generate( string $user_email ): Code_Verifier {
62 $code = $this->code_generator->generate( $user_email );
63 $created_at = $this->date_helper->current_time();
64
65 return new Code_Verifier( $code, $created_at );
66 }
67
68 /**
69 * Validate the code verifier for a user.
70 *
71 * @param int $user_id The user ID.
72 *
73 * @return string The code verifier.
74 *
75 * @throws RuntimeException If the code verifier is expired or invalid.
76 */
77 public function validate( int $user_id ): string {
78 $code_verifier = $this->code_verifier_repository->get_code_verifier( $user_id );
79
80 if ( $code_verifier === null || $code_verifier->is_expired( self::VALIDITY_IN_SECONDS ) ) {
81 $this->code_verifier_repository->delete_code_verifier( $user_id );
82 throw new RuntimeException( 'Code verifier has expired or is invalid.' );
83 }
84
85 return $code_verifier->get_code();
86 }
87 }
88