Subversion Repositories ALCASAR

Rev

Rev 3003 | Rev 3022 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log

Rev Author Line No. Line
2990 rexy 1
<?php
2
 
3003 rexy 3
/************************************************************************
4
*						ALCASAR INSCRIPTION								*
5
*																		*
3011 rexy 6
*	By K@M3L & T3RRY LaPlateforme										*
3003 rexy 7
*																		*
8
*	Partie back de la page d'inscription des utilisateurs				*
9
*	Récupère les infos de "email_registration_front.php					*
10
*	- Lit le fichier de configuration /usr/local/etc/alcasar.conf		*
3011 rexy 11
*	- Verifie si le login est déjà présent dans la table "radcheck"		*
12
*	- Vérifie si l'@ mail est présent dans la table "userinfo"			*
3003 rexy 13
*	- Vérifie que le domaine du mail est bien WLD (optionnel)			*
3011 rexy 14
*	- Crée l'utilisateur avec un mot de passe aléatoire					*
15
*	- Envoi l'email à l'utilisaeur et à l'admin avec date et IP			*
3003 rexy 16
*																		*
17
*************************************************************************/
2990 rexy 18
 
3011 rexy 19
$Language = 'en';
20
if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
21
	$Langue = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
22
	$Language = strtolower(substr(chop($Langue[0]), 0, 2));
23
}
24
if ($Language === 'fr') {
25
	$l_invalid_Email = "L'adresse email est invalide";
26
	$l_domain = "Le domaine";
27
	$l_not_authorized = "n'est pas autorisé";
28
	$l_Email_already_used = "Cette adresse email est déjà utilisée.";
29
} else {
30
	$l_invalid_Email = "Invalid Email address";
31
	$l_domain = "The domain";
32
	$l_not_authorized = "is not authorized";
33
	$l_Email_already_used = "This Email address is already used.";
34
}
35
 
2990 rexy 36
if (is_file("acc/manager/lib/langues.php"))
37
	include("acc/manager/lib/langues.php");
38
 
39
if(!isset($create)) $create=0;
40
if(!isset($show)) $show=0;
41
if(!isset($login)) $login = '';
42
if(!isset($cn)) $cn = '';
43
if(!isset($mail)) $mail = '';
44
if(!isset($langue_imp)) $langue_imp = '';
45
if(!isset($selected)) $selected = array();
46
if(!isset($selected['='])) $selected['='] = '';
47
 
48
require('/etc/freeradius-web/config.php');
49
require('acc/manager/lib/attrshow.php');
50
require('acc/manager/lib/defaults.php');
51
 
52
if (false && /* Hide operator column */ $config['general_lib_type'] == 'sql' && $config['sql_use_operators'] == 'true') {
53
	$colspan = 2;
54
	$show_ops = 1;
55
	require('acc/manager/lib/operators.php');
56
} else {
57
	$show_ops = 0;
58
	$colspan = 1;
59
}
60
 
61
if (is_file("acc/manager/lib/sql/drivers/$config[sql_type]/functions.php"))
62
	require("acc/manager/lib/sql/drivers/$config[sql_type]/functions.php");
63
else{
64
	echo "<b>Could not include SQL library</b><br />\n";
65
	exit();
66
}
67
 
68
require('acc/manager/lib/functions.php');
69
if ($config['sql_use_operators'] == 'true'){
70
	include_once("acc/manager/lib/operators.php");
71
	$text = ',op';
72
	$passwd_op = ",':='";
73
}
74
 
75
$da_abort=0;
76
$op_val2 = '';
77
 
78
function GenPassword($nb_car="8")
79
{
80
// Random password
81
	$password = "";
82
	$chaine  = "aAzZeErRtTyYuUIopP152346897mMLkK";
83
	$chaine .= "jJhHgGfFdDsSqQwWxXcCvVbBnN152346897";
84
	while($nb_car != 0) {
85
		//$i = rand(0,71);
86
		// Bug corrigé
87
		$i = rand(0,66);
88
		$password .= $chaine[$i];
89
		$nb_car--;
90
	}
91
	return $password;
92
}
93
 
94
// Lecture du fichier de configuration, récupération des listes WLD et l'email de l'admin
3003 rexy 95
$alcasar_Conf_File = "/usr/local/etc/alcasar.conf";
96
if (is_file ($alcasar_Conf_File)){
97
	$tab=file($alcasar_Conf_File);
2990 rexy 98
	if ($tab){
99
		foreach ($tab as $line){
100
			$field=explode("=", $line);
101
			switch ($field[0]){
3003 rexy 102
				case 'MAIL_WHITEDOMAIN':
2990 rexy 103
					$whiteDomain = explode(" ", strtolower(trim($field[1])));
104
				break;
3003 rexy 105
				case 'MAIL_ADMIN':
2990 rexy 106
					$adminMail = $field[1];
107
				break;
108
			}
109
		}
110
	}
111
}
112
 
113
if(isset($_POST['Fmail'])){
114
 
115
	extract($_POST);
116
 
117
	$Fmail = htmlentities(strtolower(trim($Fmail)));
118
 
119
	if(!filter_var($Fmail, FILTER_VALIDATE_EMAIL)){
3011 rexy 120
		echo "<b>$l_invalid_Email</b><br />\n";
2990 rexy 121
		exit();
122
	}
123
 
124
	// on récupère le nom de domaine du mail@domain.com
125
	list($user, $domain) = explode('@', $Fmail);
126
 
127
	// on vérifie si le domaine est dans la WLD, sinon on bloque
128
	if (!empty($whiteDomain)){
129
		if (!in_array($domain, $whiteDomain)){
3011 rexy 130
			echo "$l_domain $domain $l_not_authorized";
2990 rexy 131
			exit();
132
		}
133
	}
134
 
135
	$login  = $Fmail;
136
 
137
	// si le login est présent
138
	$link = @da_sql_pconnect($config);
139
	if ($link) {
140
		$sql = "SELECT id FROM $config[sql_check_table] WHERE username = '$login';";
141
		$res = @da_sql_query($link,$config, $sql);
142
	}
143
 
144
	$login_check = 	da_sql_num_rows($res,$config);
145
 
146
//	da_sql_close($link,$config)
147
 
148
	// si le mail est présent
149
	$link = @da_sql_pconnect($config);
150
	if ($link) {
151
		$sql = "SELECT id FROM $config[sql_user_info_table] WHERE mail = '$Fmail';";
152
		$res = @da_sql_query($link,$config, $sql);
153
	}
154
 
155
	$email_check = 	da_sql_num_rows($res,$config);
156
 
157
//	da_sql_close($link,$config)
158
 
159
 
3011 rexy 160
	if($login_check > 0) { //Adresse email utilisée en tant que login
161
		echo "<b>$l_Email_already_used</b><br />\n";
162
	} else if($email_check > 0) { //Adresse email utilisée dans les infos utilisateur
163
		echo "<b>$l_Email_already_used</b><br />\n";
2990 rexy 164
	} else {
165
		$password = GenPassword();
166
 
167
		// si on ajoute des inputs pour les infos user
168
/*		$Fcn = "$prenom".".$nom";
169
		$Fou = "";
170
		$Fhomephone = "";
171
		$Ftelephonenumber = "";
172
		$Fmobile = "";
173
*/
174
		$link = da_sql_pconnect($config);
175
		if ($link){
176
			mysqli_set_charset($link,"utf8");
177
			if (is_file("acc/manager/lib/crypt/$config[general_encryption_method].php")){
178
				include_once("acc/manager/lib/crypt/$config[general_encryption_method].php");
179
 
180
				$passwd = da_encrypt($password);
181
				$passwd = da_sql_escape_string($link, $passwd);
182
				$res = da_sql_query($link,$config,
183
				"INSERT INTO $config[sql_check_table] (attribute,value,username $text)
184
				VALUES ('$config[sql_password_attribute]','$passwd','$login' $passwd_op);");
185
				if (!$res || !da_sql_affected_rows($link,$res,$config)){
186
					echo "<b>Erreur lors de la création de l'utilisateur $login: " . da_sql_error($link,$config) . "</b><br />\n";
187
					$da_abort=1;
188
				}
189
 
190
				if ($config['sql_use_user_info_table'] == 'true' && !$da_abort){
191
					$res = da_sql_query($link,$config,
192
					"SELECT username FROM $config[sql_user_info_table] WHERE
193
					username = '$login';");
194
					if ($res){
195
						if (!da_sql_num_rows($res,$config)){
196
							$Fcn = (isset($Fcn)) ? da_sql_escape_string($link, $Fcn) : '';
197
							$Fmail = (isset($Fmail)) ? da_sql_escape_string($link, $Fmail) : '';
198
							$Fou = (isset($Fou)) ? da_sql_escape_string($link, $Fou) : '';
199
							$Fhomephone = (isset($Fhomephone)) ? da_sql_escape_string($link, $Fhomephone) : '';
200
							$Ftelephonenumber = (isset($Ftelephonenumber)) ? da_sql_escape_string($link, $Ftelephonenumber) : '';
201
							$Fmobile = (isset($Fmobile)) ? da_sql_escape_string($link, $Fmobile) : '';
202
							$res = da_sql_query($link,$config,
203
							"INSERT INTO $config[sql_user_info_table]
204
							(username,name,mail,department,homephone,workphone,mobile) VALUES
205
							('$login','$Fcn','$Fmail','$Fou','$Fhomephone','$Ftelephonenumber','$Fmobile');");
206
							if (!$res || !da_sql_affected_rows($link,$res,$config))
207
								// Erreur sql à supprimer : l'info ne devrait pas être communiquer au client.
208
								echo "<b>Une erreur s'est produite lors de la création du compte : " . da_sql_error($link,$config) . "</b><br />\n";
209
						}
210
						else
211
							echo "<b>L'utilisateur existe déjà</b><br />\n";
212
					}
213
					else
214
						echo "<b>Une erreur s'est produite lors de la création du compte : " . da_sql_error($link,$config) . "</b><br />\n";
215
				}
216
				// si on veut ajouter les nouveau utilisateurs a un groupe par défaut, autre que celui par défaut d'alcasar
217
				if (isset($Fgroup) && $Fgroup != ''){
218
					$Fgroup = da_sql_escape_string($link, $Fgroup);
219
					$res = da_sql_query($link,$config,
220
					"SELECT username FROM $config[sql_usergroup_table]
221
					WHERE username = '$login' AND groupname = '$Fgroup';");
222
					if ($res){
223
						if (!da_sql_num_rows($res,$config)){
224
							$res = da_sql_query($link,$config,
225
							"INSERT INTO $config[sql_usergroup_table]
226
							(username,groupname) VALUES ('$login','$Fgroup');");
227
							if (!$res || !da_sql_affected_rows($link,$res,$config))
228
								echo "<b>Impossible d'ajouter l'utilisateur dans le groupe $Fgroup.</b><br />\n";
229
						}
230
						else
231
							echo "<b>L'utilisateur est déjà présent dans le groupe $Fgroup</b><br />\n";
232
					}
233
					else
234
						echo "<b>Impossible d'ajouter l'utilisateur dans le groupe $Fgroup: " . da_sql_error($link,$config) . "</b><br />\n";
235
				}
236
				if (!$da_abort){
237
					if (isset($Fgroup) && $Fgroup != '')
238
						require('acc/manager/lib/defaults.php');
239
					foreach($show_attrs as $key => $attr){
240
						if ($attrmap["$key"] == 'none')
241
							continue;
242
						if ($key == "Filter-Id" && $$attrmap["$key"] == "None")
243
							continue;
244
						if ($attrmap["$key"] == ''){
245
							$attrmap["$key"] = $key;
246
							$attr_type["$key"] = 'replyItem';
247
							$rev_attrmap["$key"] = $key;
248
						}
249
						if (isset($attr_type["$key"]) && $attr_type["$key"] == 'checkItem'){
250
							$table = "$config[sql_check_table]";
251
							$type = 1;
252
						}
253
						else if (isset($attr_type["$key"]) && $attr_type["$key"] == 'replyItem'){
254
							$table = "$config[sql_reply_table]";
255
							$type = 2;
256
						}
257
						$val = (isset($_POST[$attrmap["$key"]])) ? $_POST[$attrmap["$key"]] : '';
258
						$val = da_sql_escape_string($link, $val);
259
						$op_name = $attrmap["$key"] . '_op';
260
						$op_val = (isset($$op_name)) ? $$op_name : '';
261
						if ($op_val != ''){
262
							$op_val = da_sql_escape_string($link, $op_val);
263
							if (check_operator($op_val,$type) == -1){
264
								echo "<b>Invalid operator ($op_val) for attribute $key</b><br />\n";
265
								continue;
266
							}
267
							$op_val2 = ",'$op_val'";
268
						}
269
						$chkdef = (isset($default_vals["$key"])) ? check_defaults($val,$op_val,$default_vals["$key"]) : 0;
270
						if ($val == '' || $chkdef)
271
							continue;
272
						$sqlquery = "INSERT INTO $table (attribute,value,username $text)
273
							VALUES ('$attrmap[$key]','$val','$login' $op_val2);";
274
						$res = da_sql_query($link,$config,$sqlquery);
275
						if (!$res || !da_sql_affected_rows($link,$res,$config))
276
							echo "<b>Query failed for attribute $key: " . da_sql_error($link,$config) . "</b><br />\n";
277
					}
278
				}
279
				// L'utilisateur est ajouter dans la radcheck, ses info dans la userinfo, on envoi le mail avec identifiant et passwd
280
 
281
				$ip = $_SERVER['REMOTE_ADDR'];
282
				$time = date_create('now')->format('d-m-Y H:i:s');
283
				$domain = $conf["DOMAIN"];
284
				$hostname  = $conf["HOSTNAME"].'.'.$domain;
285
 
286
				$to = $Fmail;
287
				$from = "alcasar@$domain";
288
				$subject = "Activation de votre compte ALCASAR";
289
				$message = "<!DOCTYPE html>
290
						<html>
291
							<head>
292
								<meta charset=\"UTF-8\" />
293
							</head>
294
							<body>
295
								Bonjour,<br/><br/>
296
								<h3>Bienvenue sur ALCASAR @ $domain</h3>
297
								<p>Ceci est un email automatique avec vos identifiants, veuillez changer votre mot de passe.<br/>
298
								<h4>Indentifiants de connexion:</h4>
299
								<pre>
300
									Adresse e-mail : $Fmail
301
									Login :		$login
302
									Mot de passe :   $password
303
								</pre>
304
								<p>Rendez-vous sur le portail <a href=\"https://$hostname\">$domain</a></p>
305
							</body>
306
						</html>";
307
 
308
				$header = "From: $from\n";
309
				$header .= "MIME-Version: 1.0\n";
310
				$header .= "Content-type: text/html; charset=utf-8\n";
311
 
312
				if(mail($to, $subject, $message, $header)){
313
					echo "<center>success : <b>Vous y êtes presque ! $l_user '$login' $l_created</b></center><br />";
314
					echo "<center>success : <b>Un email contenant vos informations de connexion vient de vous être envoyé.</b></center><br />";
315
 
316
					// le mail pour l'uitilisateur est envoyé, si l'admin a configuré son mail, on lui envoi
317
					// une notification d'inscription avec l'ip, l'heure, et le login de l'utilisateur
318
					if (!empty($adminMail)){
319
						$to = $adminMail;
320
						$from = "alcasar@$domain";
321
						$subject = "Nouvelle inscription sur ALCASAR";
322
						$message = "<!DOCTYPE html>
323
							<html>
324
								<head>
325
									<meta charset=\"UTF-8\" />
326
								</head>
327
								<body>
328
									Bonjour,<br/><br/>
329
 
330
									<p>Ceci est un mail automatique.<br/>
331
									<h3>Une nouvelle inscription à <strong>ALCASR $domain</strong> a été faite.</h3>
332
 
333
									<h4>Indentifiants de connexion:</h4>
334
									<pre>
335
										Adresse IP :	$ip
336
										Heure :		$time;
337
										Login :		$login
338
										Email :		$Fmail
339
									</pre>
340
									<p>ALCASAR <a href=\"https://$hostname\">$domain</a></p>
341
								</body>
342
							</html>";
343
						$header = "From: $from\n";
344
						$header .= "MIME-Version: 1.0\n";
345
						$header .= "Content-type: text/html; charset=utf-8\n";
346
						mail($to, $subject, $message, $header);
347
					}
348
 
349
				} else {
350
					//Le mot de passe est généré aléatoirement, si le mail n'est pas envoyé, on supprime le compte de la bdd ou on lui demande d'utiliser la page reset
351
/*					$link = da_sql_pconnect($config);
352
 
353
					$res2 = da_sql_query($link,$config,
354
					"DELETE FROM $config[sql_user_info_table] WHERE username = '$login';");
355
 
356
					$res3 = da_sql_query($link,$config,
357
						"DELETE FROM $config[sql_check_table] WHERE username = '$login';");
358
 
359
//					da_sql_close($link,$config)
360
*/
361
					echo "<b>Erreur lors de l'envoi du mail, veuillez renouveler votre inscription. Utilisez le formulaire de réinitialisation, ou contactez votre administrateur.</b><br />\n";
362
				}
363
			}
364
			else // Could not open encryption library file
365
				echo "<b>Erreur lors de la création du compte</b><br />\n";
366
		}
367
		else // Could not connect to SQL database
368
			echo "<b>Erreur lors de la création du compte</b><br />\n";
369
	}
370
}
371
?>