You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

120 lines
4.4 KiB

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class verify_otp extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->library('session');
$this->load->helper('url');
$this->load->helper('form');
$this->load->library('form_validation');
}
public function show_otpverify() {
// Charger la vue 'otpverify' située dans 'application/views/payement'
$this->load->view('payment/verify_otp');
}
public function first_confirmation(){
$this->load->view('frontoffice/home/payment_confirmation');
}
// Valider l'OTP
public function validateOtp($otpCodes) {
// Vérifier que l'OTP contient exactement 6 chiffres
if (strlen($otpCodes) !== 6 || !ctype_digit($otpCodes)) {
return false;
}
return true;
}
// Vérifier l'OTP
public function verifyOtp($otpCodes) {
// Vérifier si l'OTP correspond à celui stocké dans la session
return $otpCodes === $this->session->userdata('otp');
}
public function generate_otp() {
// Récupérer le token CSRF envoyé par la requête AJAX
// $csrfToken = $this->input->post('csrf_token');
// $serverToken = $this->security->get_csrf_hash();
// // Vérifier la validité du token CSRF
// if ($csrfToken !== $serverToken) {
// echo json_encode([
// 'success' => false,
// 'message' => 'CSRF token invalide.',
// 'csrf_token' => $this->security->get_csrf_hash() // Nouveau token
// ]);
// return;
// }
// // Limiter les tentatives de génération d'OTP (exemple : 1 par minute)
// $lastOtpTime = $this->session->userdata('last_otp_time');
// if ($lastOtpTime && (time() - $lastOtpTime < 60)) {
// echo json_encode([
// 'success' => false,
// 'message' => 'Veuillez attendre avant de demander un autre OTP.',
// 'csrf_token' => $this->security->get_csrf_hash()
// ]);
// return;
// }
// Génération de l'OTP
$otp = rand(100000, 999999);
$expiration_time = time() + (7 * 60); // Expiration dans 7 minutes
// Stocker l'OTP, l'heure d'expiration et la dernière génération dans la session
$this->session->set_userdata('otp', $otp);
$this->session->set_userdata('otp_expiration', $expiration_time);
$this->session->set_userdata('last_otp_time', time());
// Définir l'URL de redirection
$redirect_url = site_url('verify_otp/otp_verification');
// Retourner la réponse avec l'URL de redirection et le nouveau token CSRF
$response = array(
'success' => true,
'redirect_url' => $redirect_url,
'message' => 'OTP généré avec succès !',
'csrf_token' => $this->security->get_csrf_hash() // Nouveau token pour les prochaines requêtes
);
echo json_encode($response);
}
// Vérifier l'OTP soumis par l'utilisateur
public function verify_otp() {
$user_otp = $this->input->post('otp');
$stored_otp = $this->session->userdata('otp');
$otp_expiration = $this->session->userdata('otp_expiration');
// Vérifier si l'OTP est valide
if (!$this->validateOtp($user_otp)) {
$this->session->set_flashdata('error', 'OTP invalide. Veuillez entrer un code à 6 chiffres.');
//redirect('verify_otp');
return false;
}
// Vérifier si l'OTP a expiré
if (time() > $otp_expiration) {
$this->session->set_flashdata('error', 'L\'OTP a expiré. Veuillez régénérer un nouvel OTP.');
//redirect('verify_otp');
return false;
}
// Vérifier si l'OTP correspond à celui stocké
if ($this->verifyOtp($user_otp)) {
$this->session->set_flashdata('success', 'OTP valide ! Vous avez été authentifié avec succès.');
// Supprimer l'OTP après utilisation
$this->session->unset_userdata('otp');
$this->session->unset_userdata('otp_expiration');
// redirect('payement/otpV');
} else {
$this->session->set_flashdata('error', 'OTP incorrect. Veuillez réessayer.');
// redirect('payement/otpVery');
}
}
}