Passed
Push — master ( 86e6da...16ec04 )
by Anthony
02:54
created

Connexion::setTestConnexion()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 18
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 18
rs 9.2
c 0
b 0
f 0
cc 4
eloc 10
nc 4
nop 3
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
		private function setTestConnexion($query, $auth, $page_retour) {
39
			if (count($query) > 0) {
40
				foreach ($query as $obj) {
41
					self::setTestParamCompte($obj->valide, $obj->archiver, $page_retour);
42
43
					$key = sha1($obj->pseudo.$obj->mdp);
44
45
					if ($key == $auth[1]) {
46
						$_SESSION['login'] = $obj->pseudo;
47
						$_SESSION["idlogin".CLEF_SITE] = $obj->ID_identite;
48
49
						setcookie("auth".CLEF_SITE, $obj->ID_identite."-----".$key, time()+3600*24*3, "/", "", false, true);
50
51
						return true;
52
					}
53
				}
54
			}
55
		}
56
57
58
		/**
59
		 * Fonction de connexions a un espace membre ou prive avec un login / mdp
60
		 * @param string $pseudo pseudo que l'utilisateur utilise pour se connecter
61
		 * @param string $mdp mot de passe que l'utilisateur utilise
62
		 * @param string $page_retour_err page de retour en cas d'err de mdp ou pseudo
63
		 * @param string $page_retour page de retour quand connexion ok
64
		 * @param int $remember si on doit mémoriser la connexion au site
65
		 */
66
		public static function setLogin($pseudo, $mdp, $page_retour_err, $page_retour, $remember) {
67
			$dbc = App::getDb();
68
			$mdpbdd = "";
69
			$valide = "";
70
			$archiver = "";
71
72
			//recup des donnees
73
			$pseudo = $dbc->quote(htmlspecialchars($pseudo));
74
			$mdp_nonencrypt = $mdp;
75
			$mdp = md5(htmlspecialchars($mdp));
76
			$query = $dbc->select()->from("identite")->where("pseudo", "=", $pseudo, "", true)->get();
77
78
			//aficher query tant que qqch dans $ligne
79
			if ((is_array($query)) && (count($query) > 0)) {
80
				foreach ($query as $obj) {
81
					$id = $obj->ID_identite;
82
					$pseudo = $obj->pseudo;
83
					$valide = $obj->valide;
84
					$archiver = $obj->archiver;
85
					$mdpbdd = Encrypt::setDecryptMdp($obj->mdp, $id);
86
				}
87
			}
88
89
			//verif si num enr = 0
90
			if (!isset($id)) {
91
				FlashMessage::setFlash("Vos identifiants de connexions sont incorrects");
92
				header("location:$page_retour_err");
93
			}
94
			else {
95
				self::setTestParamCompte($valide, $archiver, $page_retour_err);
96
97
				//si les mdp sont egaux on redirige ver esace membre sinon ver login avec un mess d'erreur
98
				if ($mdp == $mdpbdd) {
99
					$_SESSION['login'] = $pseudo;
100
					$_SESSION["idlogin".CLEF_SITE] = $id;
101
102
					self::setTestChangerMdp($id, $mdp_nonencrypt, $remember);
103
104
					FlashMessage::setFlash("Vous êtes maintenant connecté", "info");
105
					header("location:$page_retour");
106
				}
107
				else {
108
					FlashMessage::setFlash("Vos identifiants de connexions sont incorrects");
109
					header("location:$page_retour_err");
110
				}
111
			}
112
		}
113
114
		public static function setObgConnecte($page_retour) {
115
			if (!isset($_SESSION["idlogin".CLEF_SITE])) {
116
				FlashMessage::setFlash("Vous devez être connecté pour accéder à cette page");
117
				header("location:".$page_retour);
118
			}
119
		}
120
121
		/**
122
		 * Fonction pour lancer une connexoin avec un compte
123
		 * @param string $page_retour page sur laquel rediriger le mec qui a clique sur déconnexion
124
		 */
125
		public static function setConnexion($page_retour) {
126
			$dbc = App::getDb();
127
128
			//si le user n'a rien mis dans login on lui de pense a se connecter
129
			if ((isset($_COOKIE["auth".CLEF_SITE])) && (!empty($_SESSION["idlogin".CLEF_SITE]))) {
130
				$auth = $_COOKIE["auth".CLEF_SITE];
131
132
				$auth = explode("-----", $auth);
133
134
				$query = $dbc->select()->from("identite")->where("ID_identite", "=", $auth[0])->get();
135
136
				self::setTestConnexion($query, $auth, $page_retour);
137
			}
138
		}
139
140
		/**
141
		 * Fonction pour déconnecter un membre (on degage session et cookie)
142
		 * @param string $page_retour page sur laquel rediriger le mec qui a clique sur déconnexion
143
		 */
144
		public static function setDeconnexion($page_retour) {
145
			$_SESSION['login'] = "";
146
			$_SESSION["idlogin".CLEF_SITE] = "";
147
			unset($_SESSION['login']);
148
			unset($_SESSION["idlogin".CLEF_SITE]);
149
			session_destroy();
150
			unset($_COOKIE["auth".CLEF_SITE]);
151
			setcookie("auth".CLEF_SITE, "", -1, "/", "", false, true);
152
			
153
			session_start();
154
			
155
			header("location:".$page_retour);
156
		}
157
158
159
		//--------------------------------- info concernant les connexion au site du user --------------------------
160
		/**
161
		 * pour remettre la derniere connexoin à la date du jour
162
		 * @param $id_identite
163
		 */
164
		public static function setUpdatelastConnexion($id_identite) {
165
			$dbc = App::getDb();
166
167
			$dbc->update("last_change_mdp", date("Y-m-d"))->from("identite")->where("ID_identite", "=", $id_identite)->set();
168
		}
169
170
		/**
171
		 * permet de récupérer la dernier fois que l'utilisateur s'est connecté au site
172
		 * @param $id_identite
173
		 * @return mixed
174
		 */
175
		public static function getlastConnexion($id_identite) {
176
			$dbc = App::getDb();
177
			$query = $dbc->select("last_change_mdp")->from("identite")->where("ID_identite", "=", $id_identite)->get();
178 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...
179
				foreach ($query as $obj) {
180
					return $obj->last_change_mdp;
181
				}
182
			}
183
		}
184
185
		/**
186
		 * @param $id_identite
187
		 * @param string $mdp_nonencrypt_tape
188
		 * @param integer $remember
189
		 */
190
		private static function setTestChangerMdp($id_identite, $mdp_nonencrypt_tape, $remember) {
191
			$membre = new Membre($id_identite);
192
193
			$date_array = DateHeure::dateBddToArray(self::getlastConnexion($id_identite));
194
			$last_change_mdp = mktime(0, 0, 0, $date_array[1], $date_array[2], $date_array[0]);
195
			$today = mktime(0, 0, 0, date("m"), date("d"), date("Y"));
196
197
			if (($today-$last_change_mdp) > 259200) {
198
				self::setUpdatelastConnexion($id_identite);
199
200
				$membre->setMdp($mdp_nonencrypt_tape, $mdp_nonencrypt_tape, $mdp_nonencrypt_tape);
201
			}
202
203
			if ((isset($remember)) && ($remember != 0)) {
204
				setcookie("auth".CLEF_SITE, NULL, -1);
205
				setcookie("auth".CLEF_SITE, $id_identite."-----".sha1($membre->getPseudo().$membre->getMdp()), time()+3600*24*3, "/", "", false, true);
206
			}
207
		}
208
	}