|
1
|
|
|
<?php |
|
2
|
|
|
namespace core\auth; |
|
3
|
|
|
|
|
4
|
|
|
use core\App; |
|
5
|
|
|
use core\Configuration; |
|
6
|
|
|
use core\functions\DateHeure; |
|
7
|
|
|
use core\HTML\flashmessage\FlashMessage; |
|
8
|
|
|
|
|
9
|
|
|
class Connexion { |
|
10
|
|
|
|
|
11
|
|
|
public function __construct() { |
|
12
|
|
|
if (session_id() == null) { |
|
13
|
|
|
session_start(); |
|
14
|
|
|
} |
|
15
|
|
|
} |
|
16
|
|
|
|
|
17
|
|
|
|
|
18
|
|
|
/** |
|
19
|
|
|
* Fonction de connexions a un espace membre ou prive avec un login / mdp |
|
20
|
|
|
* @param string $pseudo pseudo que l'utilisateur utilise pour se connecter |
|
21
|
|
|
* @param string $mdp mot de passe que l'utilisateur utilise |
|
22
|
|
|
* @param string $page_retour_err page de retour en cas d'err de mdp ou pseudo |
|
23
|
|
|
* @param string $page_retour page de retour quand connexion ok |
|
24
|
|
|
* @param int|null $remember si on doit mémoriser la connexion au site |
|
25
|
|
|
*/ |
|
26
|
|
|
public static function setLogin($pseudo, $mdp, $page_retour_err, $page_retour, $remember = null) { |
|
27
|
|
|
$dbc = App::getDb(); |
|
28
|
|
|
$mdpbdd = ""; |
|
29
|
|
|
|
|
30
|
|
|
//recup des donnees |
|
31
|
|
|
$pseudo = $dbc->quote(htmlspecialchars($pseudo)); |
|
32
|
|
|
$mdp_nonencrypt = $mdp; |
|
33
|
|
|
$mdp = md5(htmlspecialchars($mdp)); |
|
34
|
|
|
|
|
35
|
|
|
$query = $dbc->query("select * from identite where pseudo=$pseudo"); |
|
36
|
|
|
|
|
37
|
|
|
//aficher query tant que qqch dans $ligne |
|
38
|
|
|
if ((is_array($query)) && (count($query) > 0)) { |
|
39
|
|
|
foreach ($query as $obj) { |
|
40
|
|
|
$id = $obj->ID_identite; |
|
41
|
|
|
$pseudo = $obj->pseudo; |
|
42
|
|
|
$valide = $obj->valide; |
|
43
|
|
|
$archiver = $obj->archiver; |
|
44
|
|
|
$mdpbdd = Encrypt::setDecryptMdp($obj->mdp, $id); |
|
45
|
|
|
} |
|
46
|
|
|
} |
|
47
|
|
|
|
|
48
|
|
|
//verif si num enr = 0 |
|
49
|
|
|
if (!isset($id)) { |
|
50
|
|
|
FlashMessage::setFlash("Vos identifiants de connexions sont incorrects"); |
|
51
|
|
|
header("location:$page_retour_err"); |
|
52
|
|
|
} |
|
53
|
|
|
else { |
|
54
|
|
|
$config = new Configuration(); |
|
55
|
|
|
|
|
56
|
|
|
//cela veut dire que l'utilisateur doit obligatoirement etre valider pour avoir acces au site |
|
57
|
|
|
if (($config->getValiderInscription() == 1) && ((isset($valide)) && ($valide != 1))) { |
|
58
|
|
|
FlashMessage::setFlash("Votre compta n'a encore pas été validé par un administrateur, vous ne pouvez donc pas accéder à ce site, veuillez réesseyer ultérieurement"); |
|
59
|
|
|
header("location:$page_retour_err"); |
|
60
|
|
|
} |
|
61
|
|
|
|
|
62
|
|
|
//si le compte est archiver (bloqué) l'utilisateur ne peut pas se connecter au site |
|
63
|
|
|
if ((isset($archiver)) && ($archiver == 1)) { |
|
64
|
|
|
FlashMessage::setFlash("Votre compte a été bloqué par un administrateur, vous ne pouvez donc pas vous connecter à ce site, veuillez réesseyer ultérieurement"); |
|
65
|
|
|
header("location:$page_retour_err"); |
|
66
|
|
|
} |
|
67
|
|
|
|
|
68
|
|
|
|
|
69
|
|
|
//si les mdp sont egaux on redirige ver esace membre sinon ver login avec un mess d'erreur |
|
70
|
|
|
if ($mdp == $mdpbdd) { |
|
71
|
|
|
$_SESSION['login'] = $pseudo; |
|
72
|
|
|
$_SESSION["idlogin".CLEF_SITE] = $id; |
|
73
|
|
|
|
|
74
|
|
|
self::setTestChangerMdp($id, $mdp_nonencrypt, $remember); |
|
|
|
|
|
|
75
|
|
|
|
|
76
|
|
|
FlashMessage::setFlash("Vous êtes maintenant connecté", "info"); |
|
77
|
|
|
header("location:$page_retour"); |
|
78
|
|
|
} |
|
79
|
|
|
else { |
|
80
|
|
|
FlashMessage::setFlash("Vos identifiants de connexions sont incorrects"); |
|
81
|
|
|
header("location:$page_retour_err"); |
|
82
|
|
|
} |
|
83
|
|
|
} |
|
84
|
|
|
} |
|
85
|
|
|
|
|
86
|
|
|
/** |
|
87
|
|
|
* Fonction pour lancer une connexoin avec un compte |
|
88
|
|
|
* @param int $obj_connecte si = 1 on est obligge d'être connecte pour avoir acces à la page |
|
89
|
|
|
* @param string $page_retour page sur laquel rediriger le mec qui a clique sur déconnexion |
|
90
|
|
|
*/ |
|
91
|
|
|
public static function setConnexion($obj_connecte, $page_retour) { |
|
92
|
|
|
$dbc = App::getDb(); |
|
93
|
|
|
|
|
94
|
|
|
//si le user n'a rien mis dans login on lui de pense a se connecter |
|
95
|
|
|
if ((isset($_COOKIE["auth".CLEF_SITE])) && (!empty($_SESSION["idlogin".CLEF_SITE]))) { |
|
96
|
|
|
$auth = $_COOKIE["auth".CLEF_SITE]; |
|
97
|
|
|
|
|
98
|
|
|
$auth = explode("-----", $auth); |
|
99
|
|
|
|
|
100
|
|
|
$query = $dbc->query("SELECT * FROM identite WHERE ID_identite=".$auth[0]); |
|
101
|
|
|
if ((is_array($query)) && (count($query) > 0)) { |
|
102
|
|
|
foreach ($query as $obj) { |
|
103
|
|
|
//si le compte est archivé on déconnecte la session et le cookie |
|
104
|
|
|
if ($obj->archiver == 1) { |
|
105
|
|
|
setcookie("auth".CLEF_SITE, NULL, -1); |
|
106
|
|
|
self::setDeconnexion($page_retour); |
|
107
|
|
|
} |
|
108
|
|
|
else { |
|
109
|
|
|
$key = sha1($obj->pseudo.$obj->mdp); |
|
110
|
|
|
|
|
111
|
|
|
if ($key == $auth[1]) { |
|
112
|
|
|
$_SESSION['login'] = $obj->pseudo; |
|
113
|
|
|
$_SESSION["idlogin".CLEF_SITE] = $obj->ID_identite; |
|
114
|
|
|
|
|
115
|
|
|
//on test quand le user s'est connecté pour la derniere fois, si la date est supérrieur de trois jour, on refait un mdp |
|
116
|
|
|
$date_array = DateHeure::dateBddToArray(self::getlastConnexion($obj->ID_identite)); |
|
117
|
|
|
$last_change_mdp = mktime(0, 0, 0, $date_array[1], $date_array[2], $date_array[0]); |
|
118
|
|
|
$today = mktime(0, 0, 0, date("m"), date("d"), date("Y")); |
|
119
|
|
|
|
|
120
|
|
|
if (($today - $last_change_mdp) > 259200) { |
|
121
|
|
|
self::setUpdatelastConnexion($obj->ID_identite); |
|
122
|
|
|
|
|
123
|
|
|
//on refait un nouveau mdp encrypté avec le même mdp |
|
124
|
|
|
$mdp_actuel = Encrypt::setDecryptMdp($obj->mdp, $obj->ID_identite); |
|
125
|
|
|
$membre = new Membre($obj->ID_identite); |
|
126
|
|
|
$membre->setMdp($mdp_actuel, $mdp_actuel, $mdp_actuel); |
|
127
|
|
|
|
|
128
|
|
|
//on detruit le cookie et on le refait avec le mdp regénéré |
|
129
|
|
|
setcookie("auth".CLEF_SITE, NULL, -1); |
|
130
|
|
|
$key = sha1($obj->pseudo.$membre->getMdp()); |
|
131
|
|
|
setcookie("auth".CLEF_SITE, $obj->ID_identite."-----".$key, time() + 3600 * 24 * 3, "/", "", false, true); |
|
132
|
|
|
} |
|
133
|
|
|
else { |
|
134
|
|
|
setcookie("auth".CLEF_SITE, $obj->ID_identite."-----".$key, time() + 3600 * 24 * 3, "/", "", false, true); |
|
135
|
|
|
} |
|
136
|
|
|
} |
|
137
|
|
|
else if ($obj_connecte == 1) { |
|
138
|
|
|
self::setDeconnexion($page_retour); |
|
139
|
|
|
} |
|
140
|
|
|
} |
|
141
|
|
|
} |
|
142
|
|
|
} |
|
143
|
|
|
} |
|
144
|
|
|
else if ((!isset($_SESSION["idlogin".CLEF_SITE])) && ($obj_connecte == 1)) { |
|
|
|
|
|
|
145
|
|
|
FlashMessage::setFlash("Vous devez être connecté pour accéder à cette page"); |
|
146
|
|
|
header("location:".$page_retour); |
|
147
|
|
|
} |
|
148
|
|
|
} |
|
149
|
|
|
|
|
150
|
|
|
/** |
|
151
|
|
|
* Fonction pour déconnecter un membre (on degage session et cookie) |
|
152
|
|
|
* @param string $page_retour page sur laquel rediriger le mec qui a clique sur déconnexion |
|
153
|
|
|
*/ |
|
154
|
|
|
public static function setDeconnexion($page_retour) { |
|
155
|
|
|
$_SESSION['login']; |
|
156
|
|
|
$_SESSION["idlogin".CLEF_SITE]; |
|
157
|
|
|
unset($_SESSION['login']); |
|
158
|
|
|
unset($_SESSION["idlogin".CLEF_SITE]); |
|
159
|
|
|
session_destroy(); |
|
160
|
|
|
setcookie("auth".CLEF_SITE, NULL, -1); |
|
161
|
|
|
|
|
162
|
|
|
session_start(); |
|
163
|
|
|
FlashMessage::setFlash("Vous avez été déconnecté avec succès", "success"); |
|
164
|
|
|
|
|
165
|
|
|
header("location:".$page_retour); |
|
166
|
|
|
} |
|
167
|
|
|
|
|
168
|
|
|
|
|
169
|
|
|
//--------------------------------- info concernant les connexion au site du user -------------------------- |
|
170
|
|
|
/** |
|
171
|
|
|
* pour remettre la derniere connexoin à la date du jour |
|
172
|
|
|
* @param $id_identite |
|
173
|
|
|
*/ |
|
174
|
|
|
public static function setUpdatelastConnexion($id_identite) { |
|
175
|
|
|
$dbc = App::getDb(); |
|
176
|
|
|
|
|
177
|
|
|
$dbc->prepare("UPDATE identite SET last_change_mdp=:date WHERE ID_identite=:id_identite", array("date"=>date("Y-m-d"), "id_identite"=>$id_identite)); |
|
178
|
|
|
} |
|
179
|
|
|
|
|
180
|
|
|
/** |
|
181
|
|
|
* permet de récupérer la dernier fois que l'utilisateur s'est connecté au site |
|
182
|
|
|
* @param $id_identite |
|
183
|
|
|
* @return mixed |
|
184
|
|
|
*/ |
|
185
|
|
|
public static function getlastConnexion($id_identite) { |
|
|
|
|
|
|
186
|
|
|
$dbc = App::getDb(); |
|
187
|
|
|
|
|
188
|
|
|
$query = $dbc->query("SELECT last_change_mdp FROM identite WHERE ID_identite=".$id_identite); |
|
189
|
|
|
if ((is_array($query)) && (count($query) > 0)) { |
|
190
|
|
|
foreach ($query as $obj) return $obj->last_change_mdp; |
|
191
|
|
|
} |
|
192
|
|
|
} |
|
193
|
|
|
|
|
194
|
|
|
/** |
|
195
|
|
|
* @param $id_identite |
|
196
|
|
|
* @param null $remember |
|
197
|
|
|
*/ |
|
198
|
|
|
private static function setTestChangerMdp($id_identite, $mdp_nonencrypt_tape, $remember = null) { |
|
199
|
|
|
$membre = new Membre($id_identite); |
|
200
|
|
|
|
|
201
|
|
|
$date_array = DateHeure::dateBddToArray(self::getlastConnexion($id_identite)); |
|
202
|
|
|
$last_change_mdp = mktime(0, 0, 0, $date_array[1], $date_array[2], $date_array[0]); |
|
203
|
|
|
$today = mktime(0, 0, 0, date("m"), date("d"), date("Y")); |
|
204
|
|
|
|
|
205
|
|
|
if (($today - $last_change_mdp) > 259200) { |
|
206
|
|
|
self::setUpdatelastConnexion($id_identite); |
|
207
|
|
|
|
|
208
|
|
|
$membre->setMdp($mdp_nonencrypt_tape, $mdp_nonencrypt_tape, $mdp_nonencrypt_tape); |
|
209
|
|
|
} |
|
210
|
|
|
|
|
211
|
|
|
if ((isset($remember)) && ($remember !== null)) { |
|
212
|
|
|
setcookie("auth".CLEF_SITE, NULL, -1); |
|
213
|
|
|
setcookie("auth".CLEF_SITE, $id_identite."-----".sha1($membre->getPseudo().$membre->getMdp()), time() + 3600 * 24 * 3, "/", "", false, true); |
|
214
|
|
|
} |
|
215
|
|
|
} |
|
216
|
|
|
} |
This check looks at variables that have been passed in as parameters and are passed out again to other methods.
If the outgoing method call has stricter type requirements than the method itself, an issue is raised.
An additional type check may prevent trouble.