From a017676d4836ffc4107644fbee37defc78d9565a Mon Sep 17 00:00:00 2001 From: Lee Jones Date: Sat, 15 Nov 2025 10:39:51 -0600 Subject: [PATCH 1/4] converts to using the new dto based request model. --- composer.json | 1 + .../app/Initializers/AuthInitializer.php | 10 +- .../Initializers/PasswordResetInitializer.php | 14 +- .../Initializers/RegistrationInitializer.php | 26 ++- .../app/Initializers/ViewDataInitializer.php | 4 +- resources/views/layouts/member.php | 3 +- resources/views/member/dashboard/index.php | 52 ----- resources/views/member/profile/edit.php | 175 +++++++++------- src/Cms/Auth/Filters/AuthenticationFilter.php | 10 +- src/Cms/Auth/Filters/CsrfFilter.php | 10 +- .../Filters/MemberAuthenticationFilter.php | 10 +- src/Cms/Controllers/Admin/Dashboard.php | 6 +- src/Cms/Controllers/Admin/Posts.php | 32 ++- src/Cms/Controllers/Admin/Profile.php | 6 +- src/Cms/Controllers/Admin/Users.php | 22 +- src/Cms/Controllers/Auth/Login.php | 30 +-- src/Cms/Controllers/Auth/PasswordReset.php | 32 +-- src/Cms/Controllers/Member/Dashboard.php | 8 +- src/Cms/Controllers/Member/Profile.php | 8 +- src/Cms/Controllers/Member/Registration.php | 47 ++--- src/Cms/Controllers/Traits/UsesDtos.php | 142 +++++++++++++ src/Cms/Dtos/CreateCategoryDto.yaml | 12 +- src/Cms/Dtos/CreatePostDto.yaml | 20 +- src/Cms/Dtos/CreateUserDto.yaml | 24 +-- src/Cms/Dtos/RegisterUserDto.yaml | 28 +-- src/Cms/Dtos/UpdateCategoryDto.yaml | 12 +- src/Cms/Dtos/UpdatePostDto.yaml | 20 +- src/Cms/Dtos/UpdateUserDto.yaml | 23 +- .../Auth/Authentication.php} | 10 +- .../Auth/CsrfToken.php} | 10 +- .../Auth/EmailVerifier.php} | 8 +- .../Auth/PasswordResetter.php} | 9 +- src/Cms/Services/Dto/DtoFactoryService.php | 167 +++++++++++++++ .../Services/Member/RegistrationService.php | 117 ++++++++++- .../Auth/MemberAuthenticationFilterTest.php | 22 +- .../AuthenticationTest.php} | 146 ++++++------- .../CsrfTokenTest.php} | 72 +++---- .../Services/Dto/DtoFactoryServiceTest.php | 198 ++++++++++++++++++ .../EmailVerifierTest.php} | 14 +- .../PasswordResetterTest.php} | 14 +- .../Cms/Services/RegistrationServiceTest.php | 18 +- tests/bootstrap.php | 14 ++ versionlog.md | 7 +- 43 files changed, 1085 insertions(+), 528 deletions(-) create mode 100644 src/Cms/Controllers/Traits/UsesDtos.php rename src/Cms/{Auth/AuthManager.php => Services/Auth/Authentication.php} (97%) rename src/Cms/{Auth/CsrfTokenManager.php => Services/Auth/CsrfToken.php} (88%) rename src/Cms/{Auth/EmailVerificationManager.php => Services/Auth/EmailVerifier.php} (98%) rename src/Cms/{Auth/PasswordResetManager.php => Services/Auth/PasswordResetter.php} (97%) create mode 100644 src/Cms/Services/Dto/DtoFactoryService.php rename tests/Cms/{Auth/AuthManagerTest.php => Services/AuthenticationTest.php} (61%) rename tests/Cms/{Auth/CsrfTokenManagerTest.php => Services/CsrfTokenTest.php} (61%) create mode 100644 tests/Cms/Services/Dto/DtoFactoryServiceTest.php rename tests/Cms/{Auth/EmailVerificationManagerTest.php => Services/EmailVerifierTest.php} (96%) rename tests/Cms/{Auth/PasswordResetManagerTest.php => Services/PasswordResetterTest.php} (95%) diff --git a/composer.json b/composer.json index 0433b96..e8bd809 100644 --- a/composer.json +++ b/composer.json @@ -16,6 +16,7 @@ "neuron-php/cli": "0.8.*", "neuron-php/jobs": "0.2.*", "neuron-php/orm": "0.1.*", + "neuron-php/dto": "0.0.*", "phpmailer/phpmailer": "^6.9" }, "require-dev": { diff --git a/resources/app/Initializers/AuthInitializer.php b/resources/app/Initializers/AuthInitializer.php index 8cfb18f..48e70af 100644 --- a/resources/app/Initializers/AuthInitializer.php +++ b/resources/app/Initializers/AuthInitializer.php @@ -2,7 +2,7 @@ namespace App\Initializers; -use Neuron\Cms\Auth\AuthManager; +use Neuron\Cms\Services\Auth\Authentication; use Neuron\Cms\Auth\Filters\AuthenticationFilter; use Neuron\Cms\Auth\PasswordHasher; use Neuron\Cms\Auth\SessionManager; @@ -55,16 +55,16 @@ public function run( array $argv = [] ): mixed $userRepository = new DatabaseUserRepository( $settings ); $sessionManager = new SessionManager(); $passwordHasher = new PasswordHasher(); - $authManager = new AuthManager( $userRepository, $sessionManager, $passwordHasher ); + $authentication = new Authentication( $userRepository, $sessionManager, $passwordHasher ); // Create authentication filter - $authFilter = new AuthenticationFilter( $authManager, '/login' ); + $authFilter = new AuthenticationFilter( $authentication, '/login' ); // Register the auth filter with the Router $app->getRouter()->registerFilter( 'auth', $authFilter ); - // Store AuthManager in Registry for easy access - Registry::getInstance()->set( 'AuthManager', $authManager ); + // Store Authentication in Registry for easy access + Registry::getInstance()->set( 'Authentication', $authentication ); } } catch( \Exception $e ) diff --git a/resources/app/Initializers/PasswordResetInitializer.php b/resources/app/Initializers/PasswordResetInitializer.php index 50d61ce..ab38cea 100644 --- a/resources/app/Initializers/PasswordResetInitializer.php +++ b/resources/app/Initializers/PasswordResetInitializer.php @@ -3,7 +3,7 @@ namespace App\Initializers; use Neuron\Cms\Auth\PasswordHasher; -use Neuron\Cms\Auth\PasswordResetManager; +use Neuron\Cms\Services\Auth\PasswordResetter; use Neuron\Cms\Repositories\DatabasePasswordResetTokenRepository; use Neuron\Cms\Repositories\DatabaseUserRepository; use Neuron\Data\Setting\SettingManager; @@ -14,7 +14,7 @@ /** * Initialize the password reset system * - * Registers the PasswordResetManager in the Registry + * Registers the PasswordResetter in the Registry */ class PasswordResetInitializer implements IRunnable { @@ -59,8 +59,8 @@ public function run( array $argv = [] ): mixed // Create password reset URL $resetUrl = rtrim( $siteUrl, '/' ) . '/reset-password'; - // Create password reset manager - $resetManager = new PasswordResetManager( + // Create password reset service + $passwordResetter = new PasswordResetter( $tokenRepository, $userRepository, $passwordHasher, @@ -70,10 +70,10 @@ public function run( array $argv = [] ): mixed ); // Set token expiration if configured - $resetManager->setTokenExpirationMinutes( (int)$tokenExpiration ); + $passwordResetter->setTokenExpirationMinutes( (int)$tokenExpiration ); - // Store PasswordResetManager in Registry for easy access - Registry::getInstance()->set( 'PasswordResetManager', $resetManager ); + // Store PasswordResetter in Registry for easy access + Registry::getInstance()->set( 'PasswordResetter', $passwordResetter ); } } catch( \Exception $e ) diff --git a/resources/app/Initializers/RegistrationInitializer.php b/resources/app/Initializers/RegistrationInitializer.php index faeeddc..17ad73a 100644 --- a/resources/app/Initializers/RegistrationInitializer.php +++ b/resources/app/Initializers/RegistrationInitializer.php @@ -2,9 +2,9 @@ namespace App\Initializers; -use Neuron\Cms\Auth\EmailVerificationManager; +use Neuron\Cms\Services\Auth\EmailVerifier; use Neuron\Cms\Auth\Filters\MemberAuthenticationFilter; -use Neuron\Cms\Auth\AuthManager; +use Neuron\Cms\Services\Auth\Authentication; use Neuron\Cms\Auth\PasswordHasher; use Neuron\Cms\Repositories\DatabaseEmailVerificationTokenRepository; use Neuron\Cms\Repositories\DatabaseUserRepository; @@ -46,12 +46,12 @@ public function run( array $argv = [] ): mixed return null; } - // Get AuthManager from Registry (must be initialized first by AuthInitializer) - $authManager = Registry::getInstance()->get( 'AuthManager' ); + // Get Authentication from Registry (must be initialized first by AuthInitializer) + $authentication = Registry::getInstance()->get( 'Authentication' ); - if( !$authManager ) + if( !$authentication ) { - Log::error( "AuthManager not found in Registry, skipping registration initialization" ); + Log::error( "Authentication not found in Registry, skipping registration initialization" ); return null; } @@ -75,8 +75,8 @@ public function run( array $argv = [] ): mixed $verificationPath = $settings->get( 'member', 'verification_url' ) ?? '/verify-email'; $verificationUrl = rtrim( $siteUrl, '/' ) . '/' . ltrim( $verificationPath, '/' ); - // Create EmailVerificationManager - $verificationManager = new EmailVerificationManager( + // Create EmailVerifier + $emailVerifier = new EmailVerifier( $tokenRepository, $userRepository, $settings, @@ -86,7 +86,7 @@ public function run( array $argv = [] ): mixed // Set token expiration from settings $tokenExpiration = $settings->get( 'member', 'verification_token_expiration_minutes' ) ?? 60; - $verificationManager->setTokenExpirationMinutes( $tokenExpiration ); + $emailVerifier->setTokenExpirationMinutes( $tokenExpiration ); // Get event emitter if available $emitter = Registry::getInstance()->get( 'EventEmitter' ); @@ -95,7 +95,7 @@ public function run( array $argv = [] ): mixed $registrationService = new RegistrationService( $userRepository, $passwordHasher, - $verificationManager, + $emailVerifier, $settings, $emitter ); @@ -103,7 +103,7 @@ public function run( array $argv = [] ): mixed // Create member authentication filter $requireVerification = $settings->get( 'member', 'require_email_verification' ) ?? true; $memberFilter = new MemberAuthenticationFilter( - $authManager, + $authentication, '/login', $requireVerification ); @@ -112,10 +112,8 @@ public function run( array $argv = [] ): mixed $app->getRouter()->registerFilter( 'member', $memberFilter ); // Store services in Registry for easy access - Registry::getInstance()->set( 'EmailVerificationManager', $verificationManager ); + Registry::getInstance()->set( 'EmailVerifier', $emailVerifier ); Registry::getInstance()->set( 'RegistrationService', $registrationService ); - - Log::info( "Registration system initialized successfully" ); } } catch( \Exception $e ) diff --git a/resources/app/Initializers/ViewDataInitializer.php b/resources/app/Initializers/ViewDataInitializer.php index d9b5765..ae9afa1 100644 --- a/resources/app/Initializers/ViewDataInitializer.php +++ b/resources/app/Initializers/ViewDataInitializer.php @@ -65,8 +65,8 @@ public function run( array $argv = [] ): mixed // Check if user is authenticated (convenience helper) $provider->share( 'isAuthenticated', function() use ( $registry ) { - $authManager = $registry->get( 'AuthManager' ); - return $authManager && $authManager->check(); + $authentication = $registry->get( 'Authentication' ); + return $authentication && $authentication->check(); }); return null; diff --git a/resources/views/layouts/member.php b/resources/views/layouts/member.php index 05c1e36..d7ee1c8 100644 --- a/resources/views/layouts/member.php +++ b/resources/views/layouts/member.php @@ -11,8 +11,7 @@ - - +