. * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU Affero General Public License version 3. * * In accordance with Section 7(b) of the GNU Affero General Public License version 3, * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. ************************************************************************/ namespace Espo\Controllers; use Espo\Core\Exceptions\Error; use Espo\Core\Exceptions\Forbidden; use Espo\Core\Exceptions\BadRequest; use Espo\Core\Api\Request; use Espo\Core\Exceptions\NotFound; use Espo\Tools\UserSecurity\TwoFactor\EmailService as Service; use Espo\Entities\User; class TwoFactorEmail { private Service $service; private User $user; /** * @throws Forbidden */ public function __construct(Service $service, User $user) { $this->service = $service; $this->user = $user; if ( !$this->user->isAdmin() && !$this->user->isRegular() && !$this->user->isPortal() ) { throw new Forbidden(); } } /** * @throws BadRequest * @throws Forbidden * @throws Error * @throws NotFound */ public function postActionSendCode(Request $request): bool { $data = $request->getParsedBody(); $id = $data->id ?? null; $emailAddress = $data->emailAddress ?? null; if (!$id) { throw new BadRequest("No 'id'."); } if (!$emailAddress) { throw new BadRequest("No 'emailAddress'."); } if (!$this->user->isAdmin() && $id !== $this->user->getId()) { throw new Forbidden(); } $this->service->sendCode($id, $emailAddress); return true; } }