feat: Add comprehensive documentation suite and reorganize project structure
- Created complete documentation in docs/ directory - Added PROJECT_OVERVIEW.md with feature highlights and getting started guide - Added ARCHITECTURE.md with system design and technical details - Added SECURITY.md with comprehensive security implementation guide - Added DEVELOPMENT.md with development workflows and best practices - Added DEPLOYMENT.md with production deployment instructions - Added API.md with complete REST API documentation - Added CONTRIBUTING.md with contribution guidelines - Added CHANGELOG.md with version history and migration notes - Reorganized all documentation files into docs/ directory for better organization - Updated README.md with proper documentation links and quick navigation - Enhanced project structure with professional documentation standards
This commit is contained in:
116
f_modules/m_frontend/m_auth/recovery.php
Normal file
116
f_modules/m_frontend/m_auth/recovery.php
Normal file
@@ -0,0 +1,116 @@
|
||||
<?php
|
||||
/*******************************************************************************************************************
|
||||
| Software Name : EasyStream
|
||||
| Software Description : High End YouTube Clone Script with Videos, Shorts, Streams, Images, Audio, Documents, Blogs
|
||||
| Software Author : (c) Sami Ahmed
|
||||
|*******************************************************************************************************************
|
||||
|
|
||||
|*******************************************************************************************************************
|
||||
| This source file is subject to the EasyStream Proprietary License Agreement.
|
||||
|
|
||||
| By using this software, you acknowledge having read this Agreement and agree to be bound thereby.
|
||||
|*******************************************************************************************************************
|
||||
| Copyright (c) 2025 Sami Ahmed. All rights reserved.
|
||||
|*******************************************************************************************************************/
|
||||
|
||||
define('_ISVALID', true);
|
||||
|
||||
$main_dir = realpath(dirname(__FILE__) . '/../../../');
|
||||
set_include_path($main_dir);
|
||||
|
||||
include_once 'f_core/config.core.php';
|
||||
|
||||
include_once 'f_core/f_classes/class_recaptcha/autoload.php';
|
||||
|
||||
include_once $class_language->setLanguageFile('frontend', 'language.global');
|
||||
include_once $class_language->setLanguageFile('frontend', 'language.recovery');
|
||||
include_once $class_language->setLanguageFile('frontend', 'language.signup');
|
||||
include_once $class_language->setLanguageFile('frontend', 'language.signin');
|
||||
include_once $class_language->setLanguageFile('frontend', 'language.notifications');
|
||||
include_once $class_language->setLanguageFile('frontend', 'language.email.notif');
|
||||
|
||||
$error_message = null;
|
||||
$notice_message = null;
|
||||
$notifier = new VNotify;
|
||||
|
||||
$cfg = $class_database->getConfigurations('activity_logging,password_recovery_captcha,username_recovery_captcha,recovery_link_lifetime,allow_username_recovery,allow_password_recovery,backend_username_recovery,backend_password_recovery,backend_username_recovery_captcha,backend_password_recovery_captcha,backend_username,backend_email,noreply_email,recaptcha_site_key,recaptcha_secret_key');
|
||||
$section_check = ($class_smarty->backendSectionCheck() == 1) ? 'backend' : 'frontend';
|
||||
$logged_in = $section_check == 'frontend' ? VLogin::isLoggedIn('fe') : ($section_check == 'backend' ? VLogin::isLoggedIn('be') : null);
|
||||
|
||||
$rec_username = $_POST["rec_username"] != '' ? $class_filter->clr_str($_POST["rec_username"]) : null;
|
||||
$rec_email = $_POST["rec_email"] != '' ? $class_filter->clr_str($_POST["rec_email"]) : null;
|
||||
$left_captcha = (($cfg["password_recovery_captcha"] == 1 or $cfg["backend_password_recovery_captcha"] == 1) and $_POST["g-recaptcha-response"] != '') ? $class_filter->clr_str($_POST["g-recaptcha-response"]) : null;
|
||||
$right_captcha = (($cfg["username_recovery_captcha"] == 1 or $cfg["backend_username_recovery_captcha"] == 1) and $_POST["g-recaptcha-response"] != '') ? $class_filter->clr_str($_POST["g-recaptcha-response"]) : null;
|
||||
|
||||
$pass_rec_cond = ($section_check == 'backend') ? $cfg["backend_password_recovery"] : $cfg["allow_password_recovery"];
|
||||
$pass_rec_captcha = ($section_check == 'backend') ? $cfg["backend_password_recovery_captcha"] : $cfg["password_recovery_captcha"];
|
||||
$user_rec_cond = ($section_check == 'backend') ? $cfg["backend_username_recovery"] : $cfg["allow_username_recovery"];
|
||||
$user_rec_captcha = ($section_check == 'backend') ? $cfg["backend_username_recovery_captcha"] : $cfg["username_recovery_captcha"];
|
||||
|
||||
$siteKey = $cfg['recaptcha_site_key'];
|
||||
$secret = $cfg['recaptcha_secret_key'];
|
||||
|
||||
switch (intval($_GET["t"])) {
|
||||
case '':break;
|
||||
case '0':break;
|
||||
case '1':
|
||||
if ($pass_rec_cond == 1) {
|
||||
switch ($pass_rec_captcha) {
|
||||
case '0':$password_recovery = (!VUserinfo::existingUsername($rec_username, $section_check)) ? $notifier->showNotice('error', $language["notif.error.invalid.request"]) : (VUserinfo::existingUsername($rec_username, $section_check)) ? VNotify::queInit('password_recovery', array(VUserinfo::getUserEmail(VUserinfo::getUserID($rec_username))), $section_check) . VNotify::showNotice('confirmation', $language["notif.success.request"], 'x_err') : null;
|
||||
break;
|
||||
case '1':
|
||||
if (!VUserinfo::existingUsername($rec_username, $section_check) or $left_captcha == '') {
|
||||
$notifier->showNotice('error', $language["notif.error.invalid.request"]);
|
||||
} elseif (VUserinfo::existingUsername($rec_username, $section_check)) {
|
||||
$recaptcha = new \ReCaptcha\ReCaptcha($secret, new \ReCaptcha\RequestMethod\CurlPost());
|
||||
$resp = $recaptcha->verify($left_captcha, $_SERVER[REM_ADDR]);
|
||||
|
||||
if ($resp->isSuccess()) {
|
||||
VNotify::queInit('password_recovery', array(VUserinfo::getUserEmail(VUserinfo::getUserID($rec_username))), $section_check) . VNotify::showNotice('confirmation', $language["notif.success.request"], 'x_err');
|
||||
} else {
|
||||
foreach ($resp->getErrorCodes() as $code) {
|
||||
$notifier->showNotice('error', $code);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
$log = ($cfg["activity_logging"] == 1 and $action = new VActivity($user_id, 0)) ? $action->addTo('log_urecovery') : null;
|
||||
}
|
||||
break;
|
||||
case '2':
|
||||
if ($user_rec_cond == 1) {
|
||||
switch ($user_rec_captcha) {
|
||||
case '0':$username_recovery = (!VUserinfo::existingEmail($rec_email, $section_check)) ? $notifier->showNotice('error', $language["notif.error.invalid.request"], 'r_err') : (VUserinfo::existingEmail($rec_email, $section_check)) ? VNotify::queInit('username_recovery', array($rec_email), $section_check) . VNotify::showNotice('confirmation', $language["notif.success.request"], 'r_err') : null;
|
||||
break;
|
||||
case '1':
|
||||
if (!VUserinfo::existingEmail($rec_email, $section_check) or $right_captcha == '') {
|
||||
$notifier->showNotice('error', $language["notif.error.invalid.request"], 'r_err');
|
||||
} elseif (VUserinfo::existingEmail($rec_email, $section_check)) {
|
||||
$recaptcha = new \ReCaptcha\ReCaptcha($secret, new \ReCaptcha\RequestMethod\CurlPost());
|
||||
$resp = $recaptcha->verify($right_captcha, $_SERVER[REM_ADDR]);
|
||||
|
||||
if ($resp->isSuccess()) {
|
||||
VNotify::queInit('username_recovery', array($rec_email), $section_check) . VNotify::showNotice('confirmation', $language["notif.success.request"], 'r_err');
|
||||
} else {
|
||||
foreach ($resp->getErrorCodes() as $code) {
|
||||
$notifier->showNotice('error', $code);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
$log = ($cfg["activity_logging"] == 1 and $action = new VActivity($user_id, 0)) ? $action->addTo('log_precovery') : null;
|
||||
}
|
||||
break;
|
||||
default:break;
|
||||
}
|
||||
if (intval($_POST["reset_password"] == 1) or ($_GET["s"] != '' and $_GET["id"] != '')) {
|
||||
$error_message = ($_GET["s"] != '' and $_GET["id"] != '') ? VRecovery::validCheck($section_check) : null;
|
||||
$error_message = (intval($_POST["reset_password"] == 1) and $error_message == '') ? VRecovery::processForm($section_check) : $error_message;
|
||||
$notice_message = ((intval($_POST["reset_password"] == 1)) and ($error_message == '' and VRecovery::doPasswordReset($section_check))) ? $language["recovery.forgot.password.confirm"] : null;
|
||||
}
|
||||
|
||||
$u = VUserinfo::getUserInfo(VRecovery::getRecoveryID($_GET["s"]));
|
||||
$recovery_username = ($_GET["s"] != '' and $_GET["id"] != '' and $section_check == 'frontend') ? $smarty->assign('fe_recovery_username', $u["uname"]) : ($_GET["s"] != '' and $_GET["id"] != '' and $section_check == 'backend') ? $smarty->assign('recovery_username', $cfg["backend_username"]) : null;
|
||||
$page_display = ($_GET["t"] == '') ? $class_smarty->displayPage($section_check, ($section_check == 'frontend' ? 'tpl_recovery' : 'backend_tpl_recovery'), $error_message, $notice_message) : null;
|
||||
Reference in New Issue
Block a user