Passed
Push — master ( 9db407...b7ae74 )
by Anthony
02:58
created

Connexion   B

Complexity

Total Complexity 37

Size/Duplication

Total Lines 218
Duplicated Lines 3.67 %

Coupling/Cohesion

Components 1
Dependencies 7

Importance

Changes 7
Bugs 1 Features 0
Metric Value
wmc 37
c 7
b 1
f 0
lcom 1
cbo 7
dl 8
loc 218
rs 8.6

6 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 2
A setDeconnexion() 0 13 1
A setUpdatelastConnexion() 0 5 1
D setLogin() 0 87 17
C setConnexion() 0 62 12
A getlastConnexion() 8 8 4

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

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
		 */
25
		public static function setLogin($pseudo, $mdp, $page_retour_err, $page_retour) {
26
			$dbc = App::getDb();
27
28
			//recup des donnees
29
			$pseudo = $dbc->quote(htmlspecialchars($pseudo));
30
			$mdp_noncrypt = $mdp;
31
			$mdp = md5(htmlspecialchars($mdp));
32
33
			$query = $dbc->query("select * from identite where pseudo=$pseudo");
34
35
			//aficher query tant que qqch dans $ligne
36
			if ((is_array($query)) && (count($query) > 0)) {
37
				foreach ($query as $obj) {
38
					$id = $obj->ID_identite;
39
					$pseudo = $obj->pseudo;
40
					$valide = $obj->valide;
41
					$archiver = $obj->archiver;
42
				}
43
			}
44
45
46
			//verif si num enr = 0
47
			if (!isset($id)) {
48
				FlashMessage::setFlash("Vos identifiants de connexions sont incorrects");
49
				header("location:$page_retour_err");
50
			}
51
			else {
52
				$config = new Configuration();
53
54
				//cela veut dire que l'utilisateur doit obligatoirement etre valider pour avoir acces au site
55
				if (($config->getValiderInscription() == 1) && ((isset($valide)) && ($valide != 1))) {
56
					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");
57
					header("location:$page_retour_err");
58
				}
59
60
				//si le compte est archiver (bloqué) l'utilisateur ne peut pas se connecter au site
61
				if ((isset($archiver)) && ($archiver == 1)) {
62
					FlashMessage::setFlash("Votre compte a été bloqué par un administrateur, vous ne pouvez donc pas vous connecter à ce site, veuillez réesseyer ultérieurement");
63
					header("location:$page_retour_err");
64
				}
65
66
				$mdpbdd = "";
67
				$query2 = $dbc->query("select mdp from identite where ID_identite='$id'");
68
				if ((is_array($query2)) && (count($query2) > 0)) {
69
					foreach ($query2 as $obj2) {
70
						$mdpbdd = Encrypt::setDecryptMdp($obj2->mdp, $id);
71
					}
72
				}
73
74
				
75
76
				//si les mdp sont egaux on redirige ver esace membre sinon ver login avec un mess d'erreur
77
				if ($mdp == $mdpbdd) {
78
					$_SESSION['login'] = $pseudo;
79
					$_SESSION["idlogin".CLEF_SITE] = $id;
80
81
					//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
82
					$date_array = DateHeure::dateBddToArray(self::getlastConnexion($id));
83
					$last_change_mdp = mktime(0, 0, 0, $date_array[1], $date_array[2], $date_array[0]);
84
					$today = mktime(0, 0, 0, date("m"), date("d"), date("Y"));
85
86
					if (($today - $last_change_mdp) > 259200) {
87
						self::setUpdatelastConnexion($id);
88
89
						$membre = new Membre($id);
90
						$membre->setMdp($mdpbdd, $mdp_noncrypt, $mdp_noncrypt);
91
92
						if (isset($_POST['remember'])) {
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...
93
							setcookie("auth".CLEF_SITE, $id."-----".sha1($pseudo.$membre->getMdp()), time() + 3600 * 24 * 3, "/", "", false, true);
94
						}
95
					}
96
					else {
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...
97
						if (isset($_POST['remember'])) {
98
							setcookie("auth".CLEF_SITE, $id."-----".sha1($pseudo.$mdpbdd), time() + 3600 * 24 * 3, "/", "", false, true);
99
						}
100
					}
101
102
103
					FlashMessage::setFlash("Vous êtes maintenant connecté", "info");
104
					header("location:$page_retour");
105
				}
106
				else {
107
					FlashMessage::setFlash("Vos identifiants de connexions sont incorrects");
108
					header("location:$page_retour_err");
109
				}
110
			}
111
		}
112
113
		/**
114
		 * Fonction pour lancer une connexoin avec un compte
115
		 * @param int $obj_connecte si = 1 on est obligge d'être connecte pour avoir acces à la page
116
		 * @param string $page_retour page sur laquel rediriger le mec qui a clique sur déconnexion
117
		 *
118
		 * Ne pa oublier de changer auth et mettre auth_nomdusite opur ne pas avoir de conflits
119
		 */
120
		public static function setConnexion($obj_connecte, $page_retour) {
121
			$dbc = App::getDb();
122
123
			//si le user n'a rien mis dans login on lui de pense a se connecter
124
			if ((isset($_COOKIE["auth".CLEF_SITE])) && (!empty($_SESSION["idlogin".CLEF_SITE]))) {
125
				$auth = $_COOKIE["auth".CLEF_SITE];
126
127
				$auth = explode("-----", $auth);
128
129
				$query = $dbc->query("SELECT * FROM identite WHERE ID_identite=".$auth[0]);
130
				if ((is_array($query)) && (count($query) > 0)) {
131
					foreach ($query as $obj) {
132
						//si le compte est archivé on déconnecte la session et le cookie
133
						if ($obj->archiver == 1) {
134
							setcookie("auth".CLEF_SITE, NULL, -1);
135
							self::setDeconnexion($page_retour);
136
						}
137
						else {
138
							$key = sha1($obj->pseudo.$obj->mdp);
139
140
							if ($key == $auth[1]) {
141
								$_SESSION['login'] = $obj->pseudo;
142
								$_SESSION["idlogin".CLEF_SITE] = $obj->ID_identite;
143
144
								//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
145
								$date_array = DateHeure::dateBddToArray(self::getlastConnexion($obj->ID_identite));
146
								$last_change_mdp = mktime(0, 0, 0, $date_array[1], $date_array[2], $date_array[0]);
147
								$today = mktime(0, 0, 0, date("m"), date("d"), date("Y"));
148
149
								if (($today - $last_change_mdp) > 259200) {
150
									self::setUpdatelastConnexion($obj->ID_identite);
151
152
									//on refait un nouveau mdp encrypté avec le même mdp
153
									$mdp_actuel = Encrypt::setDecryptMdp($obj->mdp, $obj->ID_identite);
154
									$membre = new Membre($obj->ID_identite);
155
									$membre->setMdp($mdp_actuel, $mdp_actuel, $mdp_actuel);
156
157
									//on detruit le cookie et on le refait avec le mdp regénéré
158
									setcookie("auth".CLEF_SITE, NULL, -1);
159
									$key = sha1($obj->pseudo.$membre->getMdp());
160
									setcookie("auth".CLEF_SITE, $obj->ID_identite."-----".$key, time() + 3600 * 24 * 3, "/", "", false, true);
161
								}
162
								else {
163
									setcookie("auth".CLEF_SITE, $obj->ID_identite."-----".$key, time() + 3600 * 24 * 3, "/", "", false, true);
164
								}
165
							}
166
							else {
167
								if ($obj_connecte == 1) {
168
									self::setDeconnexion($page_retour);
169
								}
170
							}
171
						}
172
					}
173
				}
174
			}
175
			else if (!isset($_SESSION["idlogin".CLEF_SITE])) {
176
				if ($obj_connecte == 1) {
177
					FlashMessage::setFlash("Vous devez être connecté pour accéder à cette page");
178
					header("location:".$page_retour);
179
				}
180
			}
181
		}
182
183
		/**
184
		 * Fonction pour déconnecter un membre (on degage session et cookie)
185
		 * @param string $page_retour page sur laquel rediriger le mec qui a clique sur déconnexion
186
		 */
187
		public static function setDeconnexion($page_retour) {
188
			$_SESSION['login'];
189
			$_SESSION["idlogin".CLEF_SITE];
190
			unset($_SESSION['login']);
191
			unset($_SESSION["idlogin".CLEF_SITE]);
192
			session_destroy();
193
			setcookie("auth".CLEF_SITE, NULL, -1);
194
195
			session_start();
196
			FlashMessage::setFlash("Vous avez été déconnecté avec succès", "success");
197
198
			header("location:".$page_retour);
199
		}
200
201
202
		//--------------------------------- info concernant les connexion au site du user --------------------------
203
		/**
204
		 * pour remettre la derniere connexoin à la date du jour
205
		 * @param $id_identite
206
		 */
207
		public static function setUpdatelastConnexion($id_identite) {
208
			$dbc = App::getDb();
209
210
			$dbc->prepare("UPDATE identite SET last_change_mdp=:date WHERE ID_identite=:id_identite", array("date"=>date("Y-m-d"), "id_identite"=>$id_identite));
211
		}
212
213
		/**
214
		 * permet de récupérer la dernier fois que l'utilisateur s'est connecté au site
215
		 * @param $id_identite
216
		 * @return mixed
217
		 */
218 View Code Duplication
		public static function getlastConnexion($id_identite) {
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in 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...
219
			$dbc = App::getDb();
220
221
			$query = $dbc->query("SELECT last_change_mdp FROM identite WHERE ID_identite=".$id_identite);
222
			if ((is_array($query)) && (count($query) > 0)) {
223
				foreach ($query as $obj) return $obj->last_change_mdp;
224
			}
225
		}
226
	}