Subversion Repositories ALCASAR

Rev

Rev 2698 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log

Rev 2698 Rev 2699
1
<?php
1
<?php
2
/**
2
/**
3
 * Print tickets of new users
3
 * Print tickets of new users
4
 *
4
 *
5
 * @author    Tom Houdayer
5
 * @author    Tom Houdayer
6
 * @copyright Copyright (C) ALCASAR (http://www.alcasar.net)
6
 * @copyright Copyright (C) ALCASAR (http://www.alcasar.net)
7
 * @license   GPL-3.0
7
 * @license   GPL-3.0
8
 * @version   $Id: ticket_voucher.php 2698 2019-02-05 10:25:12Z tom.houdayer $
8
 * @version   $Id: ticket_voucher.php 2699 2019-02-05 10:29:25Z tom.houdayer $
9
 */
9
 */
10
 
10
 
11
require_once __DIR__ . '/../lib/alcasar/TicketsGenerator.php';
11
require_once __DIR__ . '/../lib/alcasar/TicketsGenerator.php';
12
$langue_imp = ((isset($_POST['langue_imp'])) ? $_POST['langue_imp'] : 'en');
12
$langue_imp = ((isset($_POST['langue_imp'])) ? $_POST['langue_imp'] : 'en');
13
require_once __DIR__ . '/../lib/langues_imp.php';
13
require_once __DIR__ . '/../lib/langues_imp.php';
14
require_once __DIR__ . '/../lib/langues.php';
14
require_once __DIR__ . '/../lib/langues.php';
15
require_once '/etc/freeradius-web/config.php';
15
require_once '/etc/freeradius-web/config.php';
16
require_once __DIR__ . '/../lib/sql/drivers/'.$config['sql_type'].'/functions.php';;
16
require_once __DIR__ . '/../lib/sql/drivers/'.$config['sql_type'].'/functions.php';;
17
require_once __DIR__ . '/../lib/attrshow.php';
17
require_once __DIR__ . '/../lib/attrshow.php';
18
require_once __DIR__ . '/../lib/defaults.php';
18
require_once __DIR__ . '/../lib/defaults.php';
19
require_once __DIR__ . '/../lib/functions.php';
19
require_once __DIR__ . '/../lib/functions.php';
20
if ($config['sql_use_operators'] === 'true') {
20
if ($config['sql_use_operators'] === 'true') {
21
	require_once __DIR__ . '/../lib/operators.php';
21
	require_once __DIR__ . '/../lib/operators.php';
22
	$text      = ',op';
22
	$text      = ',op';
23
	$passwd_op = ",':='";
23
	$passwd_op = ",':='";
24
}
24
}
25
 
25
 
26
// Get datas from form
26
// Get datas from form
27
if ((!isset($_POST['nbtickets'])) || (!is_numeric($_POST['nbtickets']))){
27
if ((!isset($_POST['nbtickets'])) || (!is_numeric($_POST['nbtickets']))){
28
	header('Location: user_new.php');
28
	header('Location: user_new.php');
29
	exit();
29
	exit();
30
}
30
}
31
$nbTickets = (int)$_POST['nbtickets'];
31
$nbTickets = (int)$_POST['nbtickets'];
32
 
32
 
33
// Get user attributes
33
// Get user attributes
34
$userAttr = [];
34
$userAttr = [];
35
foreach (['Max-All-Session', 'Session-Timeout', 'Max-Daily-Session', 'Expiration'] as $attrName) {
35
foreach (['Max-All-Session', 'Session-Timeout', 'Max-Daily-Session', 'Expiration'] as $attrName) {
36
	if (isset($_POST[$attrName]) && !empty($_POST[$attrName])) {
36
	if (isset($_POST[$attrName]) && !empty($_POST[$attrName])) {
37
		$userAttr[$attrName] = $_POST[$attrName];
37
		$userAttr[$attrName] = $_POST[$attrName];
38
	}
38
	}
39
}
39
}
40
 
40
 
41
if (count($userAttr) < 4) {
41
if (count($userAttr) < 4) {
42
	// Get group attributes
42
	// Get group attributes
43
	$link = da_sql_pconnect($config);
43
	$link = da_sql_pconnect($config);
44
	if ($link) {
44
	if ($link) {
45
		if (isset($_POST['Fgroup']) && !empty($_POST['Fgroup'])) {
45
		if (isset($_POST['Fgroup']) && !empty($_POST['Fgroup'])) {
46
			$default_group = 'ldap';
46
			$default_group = 'ldap';
47
			$group_uid = da_sql_escape_string($link, $_POST['Fgroup']);
47
			$group_uid = da_sql_escape_string($link, $_POST['Fgroup']);
48
			$sql = "SELECT attribute, value FROM (( SELECT attribute, value FROM radgroupcheck WHERE groupname = '$group_uid' AND (attribute IN ('Max-All-Session', 'Max-Daily-Session', 'Expiration'))) UNION ( SELECT attribute, value FROM radgroupcheck WHERE groupname = '$default_group' AND (attribute IN ('Max-All-Session', 'Max-Daily-Session', 'Expiration'))) UNION ( SELECT attribute, value FROM radgroupreply WHERE groupname = '$group_uid' AND (attribute IN ('Session-Timeout'))) UNION ( SELECT attribute, value FROM radgroupreply WHERE groupname = '$default_group' AND (attribute IN ('Session-Timeout')))) attrs GROUP BY attribute;";
48
			$sql = "SELECT attribute, value FROM (( SELECT attribute, value FROM radgroupcheck WHERE groupname = '$group_uid' AND (attribute IN ('Max-All-Session', 'Max-Daily-Session', 'Expiration'))) UNION ( SELECT attribute, value FROM radgroupcheck WHERE groupname = '$default_group' AND (attribute IN ('Max-All-Session', 'Max-Daily-Session', 'Expiration'))) UNION ( SELECT attribute, value FROM radgroupreply WHERE groupname = '$group_uid' AND (attribute IN ('Session-Timeout'))) UNION ( SELECT attribute, value FROM radgroupreply WHERE groupname = '$default_group' AND (attribute IN ('Session-Timeout')))) attrs GROUP BY attribute;";
49
		} else {
49
		} else {
50
			$default_group = 'ldap';
50
			$default_group = 'ldap';
51
			$sql = "SELECT attribute, value FROM (( SELECT attribute, value FROM radgroupcheck WHERE groupname = '$default_group' AND (attribute IN ('Max-All-Session', 'Max-Daily-Session', 'Expiration'))) UNION ( SELECT attribute, value FROM radgroupreply WHERE groupname = '$default_group' AND (attribute IN ('Session-Timeout')))) attrs GROUP BY attribute;";
51
			$sql = "SELECT attribute, value FROM (( SELECT attribute, value FROM radgroupcheck WHERE groupname = '$default_group' AND (attribute IN ('Max-All-Session', 'Max-Daily-Session', 'Expiration'))) UNION ( SELECT attribute, value FROM radgroupreply WHERE groupname = '$default_group' AND (attribute IN ('Session-Timeout')))) attrs GROUP BY attribute;";
52
		}
52
		}
53
		$res = da_sql_query($link, $config, $sql);
53
		$res = da_sql_query($link, $config, $sql);
54
		if ($res) {
54
		if ($res) {
55
			while ($row = da_sql_fetch_array($res, $config)) {
55
			while ($row = da_sql_fetch_array($res, $config)) {
56
				if (!isset($userAttr[$row['attribute']])) {
56
				if (!isset($userAttr[$row['attribute']])) {
57
					$userAttr[$row['attribute']] = $row['value'];
57
					$userAttr[$row['attribute']] = $row['value'];
58
				}
58
				}
59
			}
59
			}
60
		}
60
		}
61
	}
61
	}
62
}
62
}
63
 
63
 
64
// Format user attributes
64
// Format user attributes
65
$userAttr['Session-Timeout']   = ((isset($userAttr['Session-Timeout']))   ? formatTime($userAttr['Session-Timeout'])   : $l_unlimited);
65
$userAttr['Session-Timeout']   = ((isset($userAttr['Session-Timeout']))   ? formatTime($userAttr['Session-Timeout'])   : $l_unlimited);
66
$userAttr['Max-All-Session']   = ((isset($userAttr['Max-All-Session']))   ? formatTime($userAttr['Max-All-Session'])   : $l_unlimited);
66
$userAttr['Max-All-Session']   = ((isset($userAttr['Max-All-Session']))   ? formatTime($userAttr['Max-All-Session'])   : $l_unlimited);
67
$userAttr['Max-Daily-Session'] = ((isset($userAttr['Max-Daily-Session'])) ? formatTime($userAttr['Max-Daily-Session']) : $l_unlimited);
67
$userAttr['Max-Daily-Session'] = ((isset($userAttr['Max-Daily-Session'])) ? formatTime($userAttr['Max-Daily-Session']) : $l_unlimited);
68
$userAttr['Expiration'] = ((isset($userAttr['Expiration'])) ? date('d - m - Y', strtotime($userAttr['Expiration'])) : $l_without);
68
$userAttr['Expiration'] = ((isset($userAttr['Expiration'])) ? date('d - m - Y', strtotime($userAttr['Expiration'])) : $l_without);
69
 
69
 
70
// Generate tickets
70
// Generate tickets
71
$ticketsGenerator = new TicketsGenerator(['language' => $langue_imp]);
71
$ticketsGenerator = new TicketsGenerator(['language' => $langue_imp]);
72
 
72
 
73
ob_start();
73
ob_start();
74
$nbFailUsers = 0;
74
$nbFailUsers = 0;
75
for ($i = 0; $i < $nbTickets; $i++) {
75
for ($i = 0; $i < $nbTickets; $i++) {
76
	// Generate username and password
76
	// Generate username and password
77
	$username = generateRandomString(8);
77
	$login    = generateRandomString(8);
78
	$password = generateRandomString(12);
78
	$password = generateRandomString(12);
79
	
79
	
80
	// Check user exist
80
	// Check user exist
81
	require '../lib/'.$config['general_lib_type'].'/user_info.php';
81
	require '../lib/'.$config['general_lib_type'].'/user_info.php';
82
	if ($user_exists === 'yes') {
82
	if ($user_exists === 'yes') {
83
		$nbFailUsers++;
83
		$nbFailUsers++;
84
		continue;
84
		continue;
85
	}
85
	}
86
 
86
 
87
	// Create user in database
87
	// Create user in database
88
	require '../lib/'.$config['general_lib_type'].'/create_user.php';
88
	require '../lib/'.$config['general_lib_type'].'/create_user.php';
89
 
89
 
90
	// Add user ticket
90
	// Add user ticket
91
	$ticketsGenerator->addTicket([
91
	$ticketsGenerator->addTicket([
92
		'username'        => $username,
92
		'username'        => $login,
93
		'password'        => $password,
93
		'password'        => $password,
94
		'maxAllSession'   => $userAttr['Max-All-Session'],
94
		'maxAllSession'   => $userAttr['Max-All-Session'],
95
		'sessionTimeout'  => $userAttr['Session-Timeout'],
95
		'sessionTimeout'  => $userAttr['Session-Timeout'],
96
		'maxDailySession' => $userAttr['Max-Daily-Session'],
96
		'maxDailySession' => $userAttr['Max-Daily-Session'],
97
		'expiration'      => $userAttr['Expiration']
97
		'expiration'      => $userAttr['Expiration']
98
	]);
98
	]);
99
}
99
}
100
$content_generation = ob_get_clean();
100
$content_generation = ob_get_clean();
101
 
101
 
102
// Generate the PDF
102
// Generate the PDF
103
$ret = $ticketsGenerator->output();
103
$ret = $ticketsGenerator->output();
104
 
104
 
105
if (!$ret) {
105
if (!$ret) {
106
	echo $content_generation;
106
	echo $content_generation;
107
	echo 'Error during tickets report generation';
107
	echo 'Error during tickets report generation';
108
}
108
}
109
 
109
 
110
 
110
 
111
/**
111
/**
112
 * Format time in seconds to days/hours/minutes/secondes.
112
 * Format time in seconds to days/hours/minutes/secondes.
113
 *
113
 *
114
 * @param int $time Time in seconds.
114
 * @param int $time Time in seconds.
115
 *
115
 *
116
 * @return string Formated time.
116
 * @return string Formated time.
117
 */
117
 */
118
function formatTime($time)
118
function formatTime($time)
119
{
119
{
120
	$days     = floor($time / 86400); $rest = $time % 86400;
120
	$days     = floor($time / 86400); $rest = $time % 86400;
121
	$hours    = floor($rest /  3600); $rest = $rest %  3600;
121
	$hours    = floor($rest /  3600); $rest = $rest %  3600;
122
	$minutes  = floor($rest /    60);
122
	$minutes  = floor($rest /    60);
123
	$secondes = $rest % 60;
123
	$secondes = $rest % 60;
124
 
124
 
125
	$result = '';
125
	$result = '';
126
	if ($days     != 0) $result .= $days.' J ';
126
	if ($days     != 0) $result .= $days.' J ';
127
	if ($hours    != 0) $result .= $hours.' H ';
127
	if ($hours    != 0) $result .= $hours.' H ';
128
	if ($minutes  != 0) $result .= $minutes.' m ';
128
	if ($minutes  != 0) $result .= $minutes.' m ';
129
	if ($secondes != 0) $result .= $secondes.' s ';
129
	if ($secondes != 0) $result .= $secondes.' s ';
130
 
130
 
131
	return $result;
131
	return $result;
132
}
132
}
133
 
133
 
134
/**
134
/**
135
 * Generate a random string.
135
 * Generate a random string.
136
 *
136
 *
137
 * @param int $length Length of the string.
137
 * @param int $length Length of the string.
138
 *
138
 *
139
 * @return string Random string.
139
 * @return string Random string.
140
 */
140
 */
141
function generateRandomString($length = 8)
141
function generateRandomString($length = 8)
142
{
142
{
143
	$string  = '';
143
	$string  = '';
144
	$chars   = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
144
	$chars   = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
145
	$randoms = openssl_random_pseudo_bytes($length);
145
	$randoms = openssl_random_pseudo_bytes($length);
146
	for ($i = 0; $i < $length; $i++) {
146
	for ($i = 0; $i < $length; $i++) {
147
		$string .= $chars[ord($randoms[$i]) % 62];
147
		$string .= $chars[ord($randoms[$i]) % 62];
148
	}
148
	}
149
	return $string;
149
	return $string;
150
}
150
}
151
 
151