Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- class UsersController extends AppController {
- var $name = 'Users';
- var $obj_users_api;
- var $obj_auth_api;
- var $array_errors;
- function beforeFilter() {
- parent::beforeFilter();
- App::import('Lib', 'users_api_class');
- App::import('Lib', 'auth_api_class');
- $this->obj_users_api = new Users_API;
- $this->obj_auth_api = new Auth_API;
- }
- // I. AFFICHAGE DES PAGES
- // ----------------------------------------------------------------------------------------------------------------------------
- function index() {}
- // II. VERIFICATIONS SUR LES SAISIES UTILISATEUR
- // ----------------------------------------------------------------------------------------------------------------------------
- function check_signUp_inputs($data) {
- $this->autoRender = false;
- $this->array_errors = array();
- // Si les données n'existent pas, redirection vers la page d'inscription
- if (!isset($data)) {$this->redirect(array('controller' => 'users', 'action' => 'login'));}
- $bool_isError = false;
- foreach ($data as $inputName => $inputValue) {
- switch($inputName) {
- // VÉRIFICATION DU LOGIN
- case 'login':
- // 1. Est-ce que l'utilisateur a bien saisi un login ?
- if (empty($data[$inputName]) && $data[$inputName] != '0') {
- $this->array_errors['login'] = 'veuillez saisir un login';
- $bool_isError = true;
- }
- // 2. Le login dépasse t-il 25 caractères?
- elseif (strlen($inputValue) > 25) {
- $this->array_errors['login'] = 'le login ne doit pas dépasser pas 25 caractères';
- $bool_isError = true;
- }
- // 3. Est-ce que le login contient des caractères interdits ?
- else {
- $int_match_result = preg_match_all('/\w+|[-]/', $inputValue, $matches);
- // Si des occurrences sont trouvées
- if ($int_match_result > 0) {
- // Comparaison de la concaténation des occurrences avec le login saisi
- if (implode('', $matches[0]) != $inputValue) {
- $this->array_errors['login'] = 'le login ne doit contenir que des chiffres, des lettres non-accentuées, et les caractères suivants : _-';
- $bool_isError = true;
- }
- // 4. Est-ce que le login est disponible ?
- else {
- $str_post = '{ user : { login : "'.$inputValue.'" } }';
- $bool_isAvailable = $this->check_login(false, $str_post);
- if ($bool_isAvailable == false) {
- $this->array_errors['login'] = 'le login saisi est indisponible';
- $bool_isError = true;
- }
- }
- }
- // Si aucune occurrence n'est trouvée
- elseif ($int_match_result == 0) {
- $this->array_errors['login'] = 'le login ne doit contenir que des chiffres, des lettres non-accentuées, et les caractères suivants : _-';
- $bool_isError = true;
- }
- }
- break;
- // VÉRIFICATION DE L'EMAIL
- case 'email':
- // 1. Est-ce que l'utilisateur a sais un email ?
- if (empty($data[$inputName]) && $data[$inputName] != '0') {
- $this->array_errors['email'] = 'veuillez saisir un email';
- $bool_isError = true;
- }
- // 2. Est-ce que l'email saisi dépasse 255 caractères ?
- elseif (strlen($inputValue) > 255) {
- $this->array_errors['email'] = 'l\'email ne doit pas dépasser pas 255 caractères';
- $bool_isError = true;
- }
- // 3. Est-ce que le format de l'email saisi est valide ?
- elseif (preg_match('/^[\w-]+\.*[\w-]*@[a-z0-9-]+\.[a-z]+$/i', $inputValue) == 0) {
- $this->array_errors['email'] = 'l\'email doit avoir un format valide (exemple : mon@adresse.com)';
- $bool_isError = true;
- }
- // 4. Est-ce que l'email est disponible ?
- else {
- $str_post = '{ user : { email : "'.$inputValue.'" } }';
- $bool_isAvailable = $this->check_email(false, $str_post);
- if ($bool_isAvailable == false) {
- $this->array_errors['email'] = 'l\'email saisi est indisponible';
- $bool_isError = true;
- }
- }
- break;
- // VÉRIFICATION DU NOM
- case 'last_name':
- // 1. Est-ce que l'utilisateur a saisi un nom ?
- if (empty($data[$inputName]) && $data[$inputName] != '0') {
- $this->array_errors['last_name'] = 'veuillez saisir un nom';
- $bool_isError = true;
- }
- // 2. Est-ce que le nom dépasse 50 caractères ?
- elseif (strlen($inputValue) > 50) {
- $this->array_errors['last_name'] = 'le nom ne doit pas dépasser pas 50 caractères';
- $bool_isError = true;
- }
- break;
- // VÉRIFICATION DU PRÉNOM
- case 'first_name':
- // 1. Est-ce que l'utilisateur a saisi un prénom ?
- if (empty($data[$inputName]) && $data[$inputName] != '0') {
- $this->array_errors['first_name'] = 'veuillez saisir un prénom';
- $bool_isError = true;
- }
- // 2. Est-ce que le prénom dépasse 50 caractères ?
- elseif (strlen($inputValue) > 50) {
- $this->array_errors['first_name'] = 'le nom ne doit pas dépasser pas 50 caractères';
- $bool_isError = true;
- }
- break;
- default:
- break;
- }
- }
- if ($bool_isError == false) { return true; } else { return false; }
- }
- function check_email($ajax = true, $data = null) {
- $this->autoRender = false;
- // Si cette méthode est appelée sans requête Ajax
- if ($ajax == false) {
- $result = $this->obj_users_api->POST('check_email', $data);
- if ($result['header'] == 200) { return true; } else { return false; }
- }
- // Si cette méthode est appelée avec requête Ajax
- else {
- $result = $this->obj_users_api->POST('check_email', $this->params['form']['ajaxData']);
- if ($result['header'] == 200) { header('HTTP/1.1 200 OK', true, 200); }
- elseif ($result['header'] == 409) { header('HTTP/1.1 409 CONFLICT', true, 409); }
- else { header('HTTP/1.1 500 INTERNAL SERVER ERROR', true, 500); }
- }
- }
- function check_login($ajax = true, $data = null) {
- $this->autoRender = false;
- if ($ajax == false) {
- $result = $this->obj_users_api->POST('check_login', $data);
- if ($result['header'] == 200) { return true; } else { return false; }
- }
- else {
- $result = $this->obj_users_api->POST('check_login', $this->params['form']['ajaxData']);
- if ($result['header'] == 200) { header('HTTP/1.1 200 OK', true, 200); }
- elseif ($result['header'] == 409) { header('HTTP/1.1 409 CONFLICT', true, 409); }
- else { header('HTTP/1.1 500 INTERNAL SERVER ERROR', true, 500); }
- }
- }
- // III. CONNEXION (EN ATTENTE)
- // ----------------------------------------------------------------------------------------------------------------------------
- function login($signUp_data = null) {
- $this->autoRender = false;
- if (isset($signUp_data)) {
- // appel direct de session_auth
- echo 'login depuis inscription';
- } else {
- $match = $this->User->find('first', array('conditions' => array('User.login' => $this->data['User']['username'], 'User.password' => md5($this->data['User']['password']),)));
- if ($match != false) {
- echo '<h2>User trouvé</h2>';
- $login = $match['User']['login'];
- $personal_key = $match['User']['personal_key'];
- $token = $this->session_auth_token($personal_key);
- $api_data = "{ credentials : { personal_key : $personal_key, token : $token } }";
- $cookie = $this->obj_auth_api->POST('session_auth', $api_data);
- echo '<pre>';
- var_dump($cookie);
- echo '<pre>';
- }
- else {
- echo 'Vos identifiants sont incorrects';
- }
- }
- }
- function logout() {exit('action logout');}
- // IV. INSCRIPTION
- // ----------------------------------------------------------------------------------------------------------------------------
- function create() {
- $this->autoRender = false;
- $isDataOK = $this->check_signUp_inputs($this->data['User']);
- // Est-ce que les données sont correctes ?
- if ($isDataOK == true) {
- extract($this->data['User']);
- $data = '{user : { login : "'.$login.'", first_name : "'.$first_name.'", last_name : "'.$last_name.'", email : "'.$email.'", birthdate : {year : '.(int)$year.', month : '.(int)$month.', day : '.(int)$day.' } } }';
- $result = $this->obj_users_api->POST('create', $data);
- // Inscription réussie
- if ($result['header'] == 201) {
- $personal_key = json_decode($result['content'], true);
- $personal_key = $personal_key[1]["personal_key"]["personal_key"];
- $password = $this->random_password();
- $user = array('login' => $login, 'password' => md5($password), 'personal_key' => $personal_key);
- $this->user_to_database($user); // 1. Sauvegarde dans la base de donnée
- $this->sendCredentials($login, $password); // 2. Envoi du mot de passe par email
- // 3. Fonction : Connexion
- }
- // Mauvais paramètres (API) -> les tests effectués avec check_signUp_inputs ne respectent plus les restrictions de la documentation
- elseif ($result['header'] == 422) {$this->flash('[422] UNE ERREUR INTERNE EST SURVENUE, VEUILLEZ RÉESSAYER ULTÉRIEUREMENT', array('controller' => 'users', 'action' => 'index'), 3);}
- // Erreur interne (API)
- else {$this->flash('[500] UNE ERREUR INTERNE EST SURVENUE, VEUILLEZ RÉESSAYER ULTÉRIEUREMENT', array('controller' => 'users', 'action' => 'index'), 3);}
- }
- else {
- $this->Session->write(array('Errors.signUp' => $this->array_errors, 'SignUp.data' => $this->data['User']));
- $this->redirect(array('controller' => 'users', 'action' => 'index'));
- }
- }
- // Création du deuxième paramètre pour la fonction session_auth de l'API
- function session_auth_token($personal_key) {
- $this->autoRender = false;
- $delta = time() - (int)$this->obj_auth_api->GET('sync', 'content');
- $time = (int)((time() + $delta) / 30);
- $to_hash = $personal_key.'--'.$time;
- $token = substr(hash('sha256', $to_hash), 0, 8);
- return $token;
- }
- function user_to_database($user) {
- $this->autoRender = false;
- $this->User->save($user);
- }
- function random_password($length = 8) {
- $this->autoRender = false;
- $hash = str_shuffle(str_shuffle('bcdfghjkmnpqrstvwxyz23456789%{&:[}]#-_^@)(=~+'));
- $password = substr($hash, rand(0, (strlen($hash) - $length)), $length);
- return $password;
- }
- function sendCredentials ($login, $password) {
- $this->autoRender = false;
- // Envoyer le mail avec les id
- echo 'login : ' . $login;
- echo '<br />';
- echo 'pwd : ' . $password;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement