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.
136 lines
4.5 KiB
136 lines
4.5 KiB
<?php
|
|
defined('BASEPATH') OR exit('No direct script access allowed');
|
|
|
|
class User extends CI_Controller {
|
|
|
|
private $api_keys = [
|
|
'sk_test_51HfABCDEF1234567890qwertyuio98765lkjhgfdsazxcvbnm'
|
|
];
|
|
|
|
public function __construct() {
|
|
parent::__construct();
|
|
$this->load->model('user_model', '', TRUE);
|
|
// Autoriser les requêtes externes (CORS)
|
|
header('Access-Control-Allow-Origin: *');
|
|
header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
|
|
header('Access-Control-Allow-Headers: Content-Type, API-Key, Authorization');
|
|
|
|
// Définir le Content-Type par défaut pour JSON
|
|
header('Content-Type: application/json');
|
|
}
|
|
|
|
|
|
/* Vérifie les en-têtes API-Key et Authorization
|
|
*/
|
|
private function verify_api_key_and_authorization() {
|
|
$api_key = $this->input->get_request_header('API-Key', true);
|
|
$authorization = $this->input->get_request_header('Authorization', true);
|
|
|
|
// Vérification de la clé API
|
|
if (!in_array($api_key, $this->api_keys)) {
|
|
$response = [
|
|
'status' => 'error',
|
|
'message' => 'Clé API invalide.'
|
|
];
|
|
echo json_encode($response);
|
|
http_response_code(403);
|
|
exit;
|
|
}
|
|
|
|
// Vérification de l'Authorization
|
|
if (empty($authorization) || strpos($authorization, 'Bearer ') !== 0) {
|
|
$response = [
|
|
'status' => 'error',
|
|
'message' => 'Authorization invalide ou manquante.'
|
|
];
|
|
echo json_encode($response);
|
|
http_response_code(403);
|
|
exit;
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
public function create_new_admin() {
|
|
// Gérer les requêtes OPTIONS (pré-vol)
|
|
$this->verify_api_key_and_authorization();
|
|
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
|
|
http_response_code(200);
|
|
exit;
|
|
}
|
|
|
|
// Vérifiez la méthode HTTP
|
|
if ($this->input->method() !== 'post') {
|
|
$response = [
|
|
'status' => 'error',
|
|
'message' => 'Méthode non autorisée. Utilisez POST.'
|
|
];
|
|
echo json_encode($response);
|
|
return;
|
|
}
|
|
|
|
// Vérifiez l'API-Key dans les en-têtes
|
|
$api_key = $this->input->get_request_header('API-Key', true);
|
|
if (!in_array($api_key, $this->api_keys)) {
|
|
$response = [
|
|
'status' => 'error',
|
|
'message' => 'Clé API invalide.'
|
|
];
|
|
echo json_encode($response);
|
|
return;
|
|
}
|
|
|
|
// Récupérer les données JSON envoyées
|
|
$input = json_decode($this->input->raw_input_stream, true);
|
|
|
|
if (!$input) {
|
|
$response = [
|
|
'status' => 'error',
|
|
'message' => 'Aucune donnée reçue ou format incorrect.'
|
|
];
|
|
echo json_encode($response);
|
|
return;
|
|
}
|
|
|
|
// Validez les données reçues
|
|
$required_fields = ['last_name', 'first_name', 'email', 'username', 'telephone', 'iban', 'password'];
|
|
foreach ($required_fields as $field) {
|
|
if (empty($input[$field])) {
|
|
$response = [
|
|
'status' => 'error',
|
|
'message' => "Le champ $field est manquant ou vide."
|
|
];
|
|
echo json_encode($response);
|
|
return;
|
|
}
|
|
}
|
|
|
|
// Enregistrez les données dans la base de données
|
|
$user_id = $this->user_model->add_new_user([
|
|
'first_name' => $this->security->xss_clean($input['last_name']),
|
|
'last_name' => $this->security->xss_clean($input['first_name']),
|
|
'email_address' => $this->security->xss_clean($input['email']),
|
|
'username' => $this->security->xss_clean($input['username']),
|
|
'user_role' => 2,
|
|
'telephone' => $this->security->xss_clean($input['telephone']),
|
|
'iban' => $this->security->xss_clean($input['iban']),
|
|
'password' => $this->security->xss_clean($input['password'])
|
|
]);
|
|
|
|
if ($user_id) {
|
|
$response = [
|
|
'status' => 'success',
|
|
'message' => 'Admin crée avec succès.'
|
|
];
|
|
} else {
|
|
$response = [
|
|
'status' => 'error',
|
|
'message' => 'Une erreur est survenue lors de l\'enregistrement des données.'
|
|
];
|
|
}
|
|
|
|
// Retournez la réponse
|
|
echo json_encode($response);
|
|
}
|
|
}
|
|
|