Connexion::setDeconnexion()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 13
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 13
rs 9.4285
cc 1
eloc 10
nc 1
nop 1
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)) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

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.

Loading history...
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
	}