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
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');
|
|
}
|
|
}
|
|
|
|
}
|
|
|