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
|
|
|
* @param $valide |
19
|
|
|
* @param $archiver |
20
|
|
|
* @param string $page_retour_err |
21
|
|
|
*/ |
22
|
|
|
private function setTestParamCompte($valide, $archiver, $page_retour_err) { |
23
|
|
|
$config = new Configuration(); |
24
|
|
|
|
25
|
|
|
//cela veut dire que l'utilisateur doit obligatoirement etre valider pour avoir acces au site |
26
|
|
|
if (($config->getValiderInscription() == 1) && ($valide != 1)) { |
27
|
|
|
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"); |
28
|
|
|
header("location:$page_retour_err"); |
29
|
|
|
} |
30
|
|
|
|
31
|
|
|
//si le compte est archiver (bloqué) l'utilisateur ne peut pas se connecter au site |
32
|
|
|
if ($archiver == 1) { |
33
|
|
|
FlashMessage::setFlash("Votre compte a été bloqué par un administrateur, vous ne pouvez donc pas vous connecter à ce site, veuillez réesseyer ultérieurement"); |
34
|
|
|
header("location:$page_retour_err"); |
35
|
|
|
} |
36
|
|
|
} |
37
|
|
|
|
38
|
|
|
/** |
39
|
|
|
* @param $query |
40
|
|
|
* @param $auth |
41
|
|
|
* @param $page_retour |
42
|
|
|
* @return bool |
43
|
|
|
*/ |
44
|
|
|
private function setTestConnexion($query, $auth, $page_retour) { |
45
|
|
|
if (count($query) > 0) { |
46
|
|
|
foreach ($query as $obj) { |
47
|
|
|
self::setTestParamCompte($obj->valide, $obj->archiver, $page_retour); |
48
|
|
|
|
49
|
|
|
$key = sha1($obj->pseudo.$obj->mdp); |
50
|
|
|
|
51
|
|
|
if ($key == $auth[1]) { |
52
|
|
|
$_SESSION['login'] = $obj->pseudo; |
53
|
|
|
$_SESSION["idlogin".CLEF_SITE] = $obj->ID_identite; |
54
|
|
|
|
55
|
|
|
setcookie("auth".CLEF_SITE, $obj->ID_identite."-----".$key, time()+3600*24*3, "/", "", false, true); |
56
|
|
|
|
57
|
|
|
return true; |
58
|
|
|
} |
59
|
|
|
} |
60
|
|
|
} |
61
|
|
|
} |
62
|
|
|
|
63
|
|
|
|
64
|
|
|
/** |
65
|
|
|
* Fonction de connexions a un espace membre ou prive avec un login / mdp |
66
|
|
|
* @param string $pseudo pseudo que l'utilisateur utilise pour se connecter |
67
|
|
|
* @param string $mdp mot de passe que l'utilisateur utilise |
68
|
|
|
* @param string $page_retour_err page de retour en cas d'err de mdp ou pseudo |
69
|
|
|
* @param string $page_retour page de retour quand connexion ok |
70
|
|
|
* @param int $remember si on doit mémoriser la connexion au site |
71
|
|
|
*/ |
72
|
|
|
public static function setLogin($pseudo, $mdp, $page_retour_err, $page_retour, $remember) { |
73
|
|
|
$dbc = App::getDb(); |
74
|
|
|
$mdpbdd = ""; |
75
|
|
|
$valide = ""; |
76
|
|
|
$archiver = ""; |
77
|
|
|
$id = 0; |
78
|
|
|
|
79
|
|
|
//recup des donnees |
80
|
|
|
$pseudo = $dbc->quote(htmlspecialchars($pseudo)); |
81
|
|
|
$mdp_nonencrypt = $mdp; |
82
|
|
|
$mdp = md5(htmlspecialchars($mdp)); |
83
|
|
|
$query = $dbc->select()->from("identite")->where("pseudo", "=", $pseudo, "", true)->get(); |
84
|
|
|
|
85
|
|
|
//aficher query tant que qqch dans $ligne |
86
|
|
|
if (count($query) > 0) { |
87
|
|
|
foreach ($query as $obj) { |
88
|
|
|
$id = $obj->ID_identite; |
89
|
|
|
$pseudo = $obj->pseudo; |
90
|
|
|
$valide = $obj->valide; |
91
|
|
|
$archiver = $obj->archiver; |
92
|
|
|
$mdpbdd = Encrypt::setDecryptMdp($obj->mdp, $id); |
93
|
|
|
} |
94
|
|
|
} |
95
|
|
|
else { |
96
|
|
|
FlashMessage::setFlash("Vos identifiants de connexions sont incorrects"); |
97
|
|
|
header("location:$page_retour_err"); |
98
|
|
|
} |
99
|
|
|
|
100
|
|
|
//verif si num enr = 0 |
101
|
|
|
self::setTestParamCompte($valide, $archiver, $page_retour_err); |
102
|
|
|
|
103
|
|
|
//si les mdp sont egaux on redirige ver esace membre sinon ver login avec un mess d'erreur |
104
|
|
|
if ($mdp == $mdpbdd) { |
105
|
|
|
$_SESSION['login'] = $pseudo; |
106
|
|
|
$_SESSION["idlogin".CLEF_SITE] = $id; |
107
|
|
|
|
108
|
|
|
self::setTestChangerMdp($id, $mdp_nonencrypt, $remember); |
109
|
|
|
|
110
|
|
|
FlashMessage::setFlash("Vous êtes maintenant connecté", "info"); |
111
|
|
|
header("location:$page_retour"); |
112
|
|
|
} |
113
|
|
|
else { |
114
|
|
|
FlashMessage::setFlash("Vos identifiants de connexions sont incorrects"); |
115
|
|
|
header("location:$page_retour_err"); |
116
|
|
|
} |
117
|
|
|
} |
118
|
|
|
|
119
|
|
|
public static function setObgConnecte($page_retour) { |
120
|
|
|
if (!isset($_SESSION["idlogin".CLEF_SITE])) { |
121
|
|
|
FlashMessage::setFlash("Vous devez être connecté pour accéder à cette page"); |
122
|
|
|
header("location:".$page_retour); |
123
|
|
|
} |
124
|
|
|
} |
125
|
|
|
|
126
|
|
|
/** |
127
|
|
|
* Fonction pour lancer une connexoin avec un compte |
128
|
|
|
* @param string $page_retour page sur laquel rediriger le mec qui a clique sur déconnexion |
129
|
|
|
*/ |
130
|
|
|
public static function setConnexion($page_retour) { |
131
|
|
|
$dbc = App::getDb(); |
132
|
|
|
|
133
|
|
|
//si le user n'a rien mis dans login on lui de pense a se connecter |
134
|
|
|
if ((isset($_COOKIE["auth".CLEF_SITE])) && (!empty($_SESSION["idlogin".CLEF_SITE]))) { |
135
|
|
|
$auth = $_COOKIE["auth".CLEF_SITE]; |
136
|
|
|
|
137
|
|
|
$auth = explode("-----", $auth); |
138
|
|
|
|
139
|
|
|
$query = $dbc->select()->from("identite")->where("ID_identite", "=", $auth[0])->get(); |
140
|
|
|
|
141
|
|
|
self::setTestConnexion($query, $auth, $page_retour); |
142
|
|
|
} |
143
|
|
|
} |
144
|
|
|
|
145
|
|
|
/** |
146
|
|
|
* Fonction pour déconnecter un membre (on degage session et cookie) |
147
|
|
|
* @param string $page_retour page sur laquel rediriger le mec qui a clique sur déconnexion |
148
|
|
|
*/ |
149
|
|
|
public static function setDeconnexion($page_retour) { |
150
|
|
|
$_SESSION['login'] = ""; |
151
|
|
|
$_SESSION["idlogin".CLEF_SITE] = ""; |
152
|
|
|
unset($_SESSION['login']); |
153
|
|
|
unset($_SESSION["idlogin".CLEF_SITE]); |
154
|
|
|
session_destroy(); |
155
|
|
|
unset($_COOKIE["auth".CLEF_SITE]); |
156
|
|
|
setcookie("auth".CLEF_SITE, "", -1, "/", "", false, true); |
157
|
|
|
|
158
|
|
|
session_start(); |
159
|
|
|
|
160
|
|
|
header("location:".$page_retour); |
161
|
|
|
} |
162
|
|
|
|
163
|
|
|
|
164
|
|
|
//--------------------------------- info concernant les connexion au site du user -------------------------- |
165
|
|
|
/** |
166
|
|
|
* pour remettre la derniere connexoin à la date du jour |
167
|
|
|
* @param $id_identite |
168
|
|
|
*/ |
169
|
|
|
public static function setUpdatelastConnexion($id_identite) { |
170
|
|
|
$dbc = App::getDb(); |
171
|
|
|
|
172
|
|
|
$dbc->update("last_change_mdp", date("Y-m-d"))->from("identite")->where("ID_identite", "=", $id_identite)->set(); |
173
|
|
|
} |
174
|
|
|
|
175
|
|
|
/** |
176
|
|
|
* permet de récupérer la dernier fois que l'utilisateur s'est connecté au site |
177
|
|
|
* @param $id_identite |
178
|
|
|
* @return mixed |
179
|
|
|
*/ |
180
|
|
|
public static function getlastConnexion($id_identite) { |
181
|
|
|
$dbc = App::getDb(); |
182
|
|
|
$query = $dbc->select("last_change_mdp")->from("identite")->where("ID_identite", "=", $id_identite)->get(); |
183
|
|
View Code Duplication |
if ((is_array($query)) && (count($query) > 0)) { |
|
|
|
|
184
|
|
|
foreach ($query as $obj) { |
185
|
|
|
return $obj->last_change_mdp; |
186
|
|
|
} |
187
|
|
|
} |
188
|
|
|
} |
189
|
|
|
|
190
|
|
|
/** |
191
|
|
|
* @param $id_identite |
192
|
|
|
* @param string $mdp_nonencrypt_tape |
193
|
|
|
* @param integer $remember |
194
|
|
|
*/ |
195
|
|
|
private static function setTestChangerMdp($id_identite, $mdp_nonencrypt_tape, $remember) { |
196
|
|
|
$membre = new Membre($id_identite); |
197
|
|
|
|
198
|
|
|
$date_array = DateHeure::dateBddToArray(self::getlastConnexion($id_identite)); |
199
|
|
|
$last_change_mdp = mktime(0, 0, 0, $date_array[1], $date_array[2], $date_array[0]); |
200
|
|
|
$today = mktime(0, 0, 0, date("m"), date("d"), date("Y")); |
201
|
|
|
|
202
|
|
|
if (($today-$last_change_mdp) > 259200) { |
203
|
|
|
self::setUpdatelastConnexion($id_identite); |
204
|
|
|
|
205
|
|
|
$membre->setMdp($mdp_nonencrypt_tape, $mdp_nonencrypt_tape, $mdp_nonencrypt_tape); |
206
|
|
|
} |
207
|
|
|
|
208
|
|
|
if ((isset($remember)) && ($remember != 0)) { |
209
|
|
|
setcookie("auth".CLEF_SITE, NULL, -1); |
210
|
|
|
setcookie("auth".CLEF_SITE, $id_identite."-----".sha1($membre->getPseudo().$membre->getMdp()), time()+3600*24*3, "/", "", false, true); |
211
|
|
|
} |
212
|
|
|
} |
213
|
|
|
} |
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.