Skip to content

Commit 880e490

Browse files
committed
Merge branch 'api-create-decrypt'
2 parents 8c7af0d + 38f7b59 commit 880e490

18 files changed

Lines changed: 3369 additions & 104 deletions

File tree

application/config/config.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -455,7 +455,7 @@
455455
$config['csrf_cookie_name'] = 'csrf_cookie_name';
456456
$config['csrf_expire'] = 7200;
457457
$config['csrf_regenerate'] = TRUE;
458-
$config['csrf_exclude_uris'] = array('upload/image');
458+
$config['csrf_exclude_uris'] = array('upload/image', 'api/.*');
459459

460460
/*
461461
|--------------------------------------------------------------------------

application/config/routes.php

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,9 @@
8181
$route['admin/campagnes/delete/(:any)'] = 'admin/delete_campaign/$1';
8282
$route['admin/campagnes/edit/(:any)'] = 'admin/edit_campaign/$1';
8383
$route['admin/campagnes/toggle'] = 'admin/toggle_campaign_active';
84+
$route['admin/api-keys'] = 'admin/api_keys';
85+
$route['admin/api-keys/create'] = 'admin/api_keys_create';
86+
$route['admin/api-keys/revoke/(:num)'] = 'admin/api_keys_revoke/$1';
8487

8588

8689
// MpDashboard
@@ -191,8 +194,32 @@
191194
$route['parrainages-2022'] = 'parrainages/index';
192195
// FAQ
193196
$route['faq'] = 'faq/index';
194-
// API
195-
$route['api/(:any)/(:any)'] = 'api/index/$1/$2';
197+
// API (secured with API key)
198+
// Tables SQL autorisees
199+
$route['api/tables'] = 'api/tables/index';
200+
$route['api/tables/meta'] = 'api/tables/meta';
201+
$route['api/tables/(:any)'] = 'api/tables/index/$1';
202+
// Votes bruts (votes_info)
203+
$route['api/votes'] = 'api/votes/index';
204+
$route['api/votes/meta'] = 'api/votes/meta';
205+
$route['api/votes/(:any)'] = 'api/votes/index/$1';
206+
// Votes décryptés (votes_datan)
207+
$route['api/decrypted_votes'] = 'api/decrypted_votes/index';
208+
$route['api/decrypted_votes/meta'] = 'api/decrypted_votes/meta';
209+
$route['api/decrypted_votes/(:num)'] = 'api/decrypted_votes/index/$1';
210+
// Votes non décryptés
211+
$route['api/non_decrypted_votes'] = 'api/non_decrypted_votes/index';
212+
$route['api/non_decrypted_votes/meta'] = 'api/non_decrypted_votes/meta';
213+
$route['api/non_decrypted_votes/(:any)'] = 'api/non_decrypted_votes/index/$1';
214+
// Exposés des motifs
215+
$route['api/exposes'] = 'api/exposes/index';
216+
$route['api/exposes/meta'] = 'api/exposes/meta';
217+
$route['api/exposes/stats'] = 'api/exposes/stats';
218+
$route['api/exposes/by_vote/(:num)/(:num)'] = 'api/exposes/by_vote/$1/$2';
219+
$route['api/exposes/(:num)'] = 'api/exposes/index/$1';
220+
221+
// API (public)
222+
$route['api/(:any)/(:any)'] = 'legacy_api/index/$1/$2';
196223
// LOGIN & REGISTER
197224
$route['login'] = 'users/login';
198225
$route['register/(:any)'] = 'users/register/$1';

application/controllers/Admin.php

Lines changed: 83 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -881,7 +881,87 @@ public function toggle_campaign_active()
881881
}
882882

883883
$this->campaign_model->set_active_status($id, $is_active);
884-
redirect('admin/campagnes');
885-
}
886-
}
884+
redirect('admin/campagnes');
885+
}
886+
887+
// API KEYS MANAGEMENT (admin only)
888+
889+
public function api_keys()
890+
{
891+
$data = $this->data;
892+
893+
if ($data['usernameType'] != 'admin') {
894+
show_404();
895+
}
896+
897+
$this->load->model('api_key_model');
898+
$this->load->model('user_model');
899+
900+
$data['title'] = 'Gestion des clés API';
901+
$data['keys'] = $this->api_key_model->get_all_keys();
902+
903+
// Meta
904+
$data['title_meta'] = $data['title'] . ' - Dashboard | Datan';
905+
906+
// Views
907+
$this->load->view('dashboard/header', $data);
908+
$this->load->view('dashboard/api-keys/list', $data);
909+
$this->load->view('dashboard/footer');
910+
}
911+
912+
public function api_keys_create()
913+
{
914+
$data = $this->data;
915+
916+
if ($data['usernameType'] != 'admin') {
917+
show_404();
918+
}
919+
920+
$this->load->model('api_key_model');
921+
$this->load->model('user_model');
922+
923+
$data['title'] = 'Créer une clé API';
924+
$data['users'] = $this->user_model->get_team_users();
925+
926+
// Available endpoints and methods
927+
$data['endpoints'] = $this->api_key_model->get_available_endpoints();
928+
929+
// Form validation
930+
$this->form_validation->set_rules('name', 'Nom', 'required');
931+
$this->form_validation->set_rules('user_id', 'Utilisateur', 'required');
932+
933+
if ($this->form_validation->run() === FALSE) {
934+
$data['title_meta'] = $data['title'] . ' - Dashboard | Datan';
935+
$this->load->view('dashboard/header', $data);
936+
$this->load->view('dashboard/api-keys/create', $data);
937+
$this->load->view('dashboard/footer');
938+
} else {
939+
$permissions = $this->input->post('all_permissions') ? null : $this->input->post('permissions');
940+
$result = $this->api_key_model->create_key(
941+
$this->input->post('user_id'),
942+
$this->input->post('name'),
943+
$permissions
944+
);
945+
946+
// Store the key in flash data to show it once
947+
$this->session->set_flashdata('new_api_key', $result['key']);
948+
redirect('admin/api-keys');
949+
}
950+
}
951+
952+
public function api_keys_revoke($id)
953+
{
954+
$data = $this->data;
955+
956+
if ($data['usernameType'] != 'admin') {
957+
show_404();
958+
}
959+
960+
$this->load->model('api_key_model');
961+
$this->api_key_model->revoke_key($id);
962+
963+
$this->session->set_flashdata('success', 'Clé API révoquée avec succès');
964+
redirect('admin/api-keys');
965+
}
966+
}
887967
?>

application/controllers/Api.php

Lines changed: 0 additions & 96 deletions
This file was deleted.

0 commit comments

Comments
 (0)