1<?php 2/* 3 * vim:set softtabstop=4 shiftwidth=4 expandtab: 4 * 5 * LICENSE: GNU Affero General Public License, version 3 (AGPL-3.0-or-later) 6 * Copyright 2001 - 2020 Ampache.org 7 * 8 * This program is free software: you can redistribute it and/or modify 9 * it under the terms of the GNU Affero General Public License as published by 10 * the Free Software Foundation, either version 3 of the License, or 11 * (at your option) any later version. 12 * 13 * This program is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU Affero General Public License for more details. 17 * 18 * You should have received a copy of the GNU Affero General Public License 19 * along with this program. If not, see <https://www.gnu.org/licenses/>. 20 * 21 */ 22 23declare(strict_types=0); 24 25namespace Ampache\Module\Application\Register; 26 27use Ampache\Config\ConfigContainerInterface; 28use Ampache\Config\ConfigurationKeyEnum; 29use Ampache\Module\Application\ApplicationActionInterface; 30use Ampache\Module\Application\Exception\AccessDeniedException; 31use Ampache\Module\Authorization\GuiGatekeeperInterface; 32use Ampache\Module\System\Core; 33use Ampache\Module\Util\Mailer; 34use Ampache\Module\Util\UiInterface; 35use Ampache\Repository\UserRepositoryInterface; 36use Psr\Http\Message\ResponseInterface; 37use Psr\Http\Message\ServerRequestInterface; 38 39final class ValidateAction implements ApplicationActionInterface 40{ 41 public const REQUEST_KEY = 'validate'; 42 43 private ConfigContainerInterface $configContainer; 44 45 private UiInterface $ui; 46 47 private UserRepositoryInterface $userRepository; 48 49 public function __construct( 50 ConfigContainerInterface $configContainer, 51 UiInterface $ui, 52 UserRepositoryInterface $userRepository 53 ) { 54 $this->configContainer = $configContainer; 55 $this->ui = $ui; 56 $this->userRepository = $userRepository; 57 } 58 59 public function run(ServerRequestInterface $request, GuiGatekeeperInterface $gatekeeper): ?ResponseInterface 60 { 61 /* Check Perms */ 62 if ( 63 $this->configContainer->isFeatureEnabled(ConfigurationKeyEnum::ALLOW_PUBLIC_REGISTRATION) === false && 64 !Mailer::is_mail_enabled() 65 ) { 66 throw new AccessDeniedException('Error attempted registration'); 67 } 68 69 /* Don't even include it if we aren't going to use it */ 70 if ($this->configContainer->isFeatureEnabled(ConfigurationKeyEnum::CAPTCHA_PUBLIC_REG) === true) { 71 define('CAPTCHA_INVERSE', 1); 72 /** 73 * @todo broken, the path does not exist any longer 74 */ 75 define( 76 'CAPTCHA_BASE_URL', 77 sprintf( 78 '%s/modules/captcha/captcha.php', 79 $this->configContainer->getWebPath() 80 ) 81 ); 82 require_once __DIR__ . '/../../Util/Captcha/init.php'; 83 } 84 85 $username = trim(scrub_in(Core::get_get('username'))); 86 $validation = trim(scrub_in(Core::get_get('auth'))); 87 $userValidationCode = $this->userRepository->getValidationByUsername($username); 88 89 if ($validation !== '' && $validation === $userValidationCode) { 90 $this->userRepository->activateByUsername($username); 91 $validationResult = true; 92 } else { 93 $validationResult = false; 94 } 95 96 $this->ui->show( 97 'show_user_activate.inc.php', 98 [ 99 'validationResult' => $validationResult 100 ] 101 ); 102 103 return null; 104 } 105} 106