forked from bbalet/jorani
-
Notifications
You must be signed in to change notification settings - Fork 0
/
requirements.php
305 lines (263 loc) · 16.3 KB
/
requirements.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
<?php
/**
* This diagnostic page helps you to check your setup.
* @copyright Copyright (c) 2014-2016 Benjamin BALET
* @license http://opensource.org/licenses/AGPL-3.0 AGPL-3.0
* @link https://github.com/bbalet/jorani
* @since 0.3.0
*/
define('BASEPATH','.');//Make this script works with nginx
if (function_exists('apache_get_modules')) {
$modules = apache_get_modules();
$mod_rewrite = in_array('mod_rewrite', $modules);
} else {
$mod_rewrite = getenv('HTTP_MOD_REWRITE')=='On' ? true : false ;
}
$allow_overwrite = getenv('ALLOW_OVERWRITE');
$mod_rewrite = getenv('HTTP_MOD_REWRITE');
$server_software = getenv('SERVER_SOFTWARE');
$mod_gzip = getenv('HTTP_MOD_GZIP');
if ($mod_rewrite == "") $mod_rewrite = '<b>.htaccess not visited</b>';
if ($allow_overwrite == "") $allow_overwrite = '<b>Off</b>';
$tmz = @date_default_timezone_get();
//Check if we can access to the configuration file
$pathConfigFile = realpath(join(DIRECTORY_SEPARATOR, array('application', 'config', 'database.php')));
$configFileExists = file_exists($pathConfigFile);
$dbConnError = TRUE;
$dbSelectDbError = TRUE;
$dbQueryError = TRUE;
$dbProcsError = TRUE;
if ($configFileExists) {
include $pathConfigFile;
//Try to connect to database
$dbConn = new mysqli($db['default']['hostname'], $db['default']['username'], $db['default']['password']);
$dbConnError = mysqli_connect_errno() ? TRUE : FALSE;
if (!$dbConnError) {
$dbConn->select_db($db['default']['database']);
$dbSelectDbError = ($dbConn->errno > 0) ? TRUE : FALSE;
//Try to get the signature of the schema
if (!$dbSelectDbError) {
//Examine organization structure
$resultOrg = $dbConn->query("SELECT id FROM organization WHERE parent_id=-1");
$rowOrg = $resultOrg->fetch_assoc();
$resultOrg->free();;
//Try to use a procedure in order to check the install script
//We don't know if the user has access to information schema
//So we try to call one of the procedures with a parameter returning a small set of results
$dbConn->query("SELECT GetParentIDByID(0) AS result");
$dbProcsError = ($dbConn->errno > 0) ? TRUE : FALSE;
$sql = "SELECT TABLE_NAME, MD5(GROUP_CONCAT(CONCAT(TABLE_NAME, COLUMN_NAME, COALESCE(COLUMN_DEFAULT, ''), IS_NULLABLE, COLUMN_TYPE, COALESCE(COLLATION_NAME, '')) SEPARATOR ', ')) AS signature"
. " FROM information_schema.columns"
. " WHERE table_schema = DATABASE()"
. " GROUP BY TABLE_NAME"
. " ORDER BY TABLE_NAME";
$stmt = $dbConn->prepare($sql);
$dbQueryError = ($dbConn->errno > 0) ? TRUE : FALSE;
if (!$dbQueryError) {
$stmt->execute();
$dbQueryError = ($dbConn->errno > 0) ? TRUE : FALSE;
}
if (!$dbQueryError) {
$stmt->bind_result($table, $signature);
$dbQueryError = ($dbConn->errno > 0) ? TRUE : FALSE;
}
}
}
}
?>
<html>
<head>
<title>Jorani Requirements</title>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<meta charset="UTF-8">
<link rel="icon" type="image/x-icon" href="favicon.ico" sizes="32x32">
<link href="assets/bootstrap/css/bootstrap.min.css" rel="stylesheet">
<script type="text/javascript" src="assets/js/jquery-1.11.0.min.js"></script>
<script type="text/javascript">
function export2csv() {
var content = "";
content += "Table;Description;Value\n";
$("#tblServer tr").each(function() {
$this = $(this)
content += "Server;" + $.trim($(this).find("td:eq(0)").text())
+ ";" + $(this).find("td:eq(1)").text() + "\n";
});
$("#tblDatabase tr").each(function() {
$this = $(this)
content += "Database;" + $.trim($(this).find("td:eq(0)").text())
+ ";" + $(this).find("td:eq(1)").text() + "\n";
});
$("#tblSchema tr").each(function() {
$this = $(this)
content += "Schema;" + $.trim($(this).find("td:eq(0)").text())
+ ";" + $(this).find("td:eq(1)").text() + "\n";
});
// Build a data URI:
uri = "data:text/csv;charset=utf-8," + encodeURIComponent(content);
location.href = uri;
}
</script>
</head>
<body>
<div class="container-fluid">
<ul class="nav nav-pills">
<li class="active"><a href="#">Requirements</a></li>
<li><a href="testmail.php">Email</a></li>
<li><a href="testldap.php">LDAP</a></li>
<li><a href="testssl.php">SSL</a></li>
<li><a href="testoauth2.php">OAuth2</a></li>
<li><a href="opcache.php">Opcache</a></li>
</ul>
<h1>Jorani Requirements</h1>
<noscript>
Javascript is disabled. Jorani requires Javascript to be enabled.
</noscript>
<button class="btn btn-primary" onclick="export2csv();"><i class="icon-download-alt icon-white"></i> Export to a CSV file</button>
<h2>Web Server</h2>
<table class="table table-bordered table-hover table-condensed">
<thead>
<tr>
<th>Requirement</th>
<th>Value / Description</th>
</tr>
</thead>
<tbody id="tblServer">
<tr><td><i class="icon-info-sign"></i> Server software</td><td><?php echo $server_software; ?></td></tr>
<tr><td><?php if (strtolower($allow_overwrite) == "on") {?><i class="icon-ok-sign"></i><?php } else { ?><i class="icon-remove-sign"></i><?php } ?>
Allow overwrite (.htaccess files)</td><td><?php echo $allow_overwrite; ?> (used for cool URLs) Ignore this message if you are running something else than Apache.</td></tr>
<tr><td><?php if (strtolower($mod_rewrite) == "on") {?><i class="icon-ok-sign"></i><?php } else { ?><i class="icon-remove-sign"></i><?php } ?>
Apache module rewrite (mod_rewrite)</td><td><?php echo $mod_rewrite; ?> (used for cool URLs) Ignore this message if you are running something else than Apache.</td></tr>
<tr><td><?php if (strtolower($mod_gzip) == "on") {?><i class="icon-ok-sign"></i><?php } else { ?><i class="icon-remove-sign"></i><?php } ?>
Apache module gzip (mod_gzip)</td><td><?php echo $mod_gzip; ?> Improve response times.</td></tr>
<?php if (version_compare(PHP_VERSION, '5.3.0') >= 0) {?>
<tr><td><i class="icon-ok-sign"></i> PHP 5.3+</td>
<?php } else { ?>
<tr><td><i class="icon-remove-sign"></i> Old PHP version</td>
<?php } ?><td>Ignore this message if you are running an exotic PHP runtime</td></tr>
<?php if (defined('HHVM_VERSION')) {?>
<tr><td><i class="icon-info-sign"></i> HHVM</td><td><?php echo HHVM_VERSION; ?></td></tr>
<?php } else { ?>
<tr><td><i class="icon-info-sign"></i> PHP</td><td><?php echo PHP_VERSION; ?></td></tr>
<?php } ?>
<?php if ($tmz != 'UTC') {?>
<tr><td><i class="icon-ok-sign"></i> Timezone defined</td>
<?php } else { ?>
<tr><td><i class="icon-remove-sign"></i> Timezone undefined</td>
<?php } ?><td>If error, please check date.timezone into PHP.ini.</td></tr>
<?php if (function_exists('mb_strimwidth')) {?>
<tr><td><i class="icon-ok-sign"></i> <code>mb_strimwidth</code> function exists</td>
<?php } else { ?>
<tr><td><i class="icon-remove-sign"></i> <code>mb_strimwidth</code> function doesn't exist</td>
<?php } ?><td>PHP must be compiled with <a href="http://php.net/manual/en/mbstring.installation.php" target="_blank">multibyte string support<a>.</td></tr>
<?php if (extension_loaded('mcrypt')) {?>
<tr><td><i class="icon-ok-sign"></i> mcrypt is LOADED</td>
<?php } else { ?>
<tr><td><i class="icon-remove-sign"></i> mcrypt IS NOT LOADED.</td>
<?php } ?><td>PHP Extension mcrypt is required for some security features.</td></tr>
<?php if (extension_loaded('Zend OPcache')) {?>
<tr><td><i class="icon-ok-sign"></i> OPcache is LOADED</td>
<?php } else { ?>
<tr><td><i class="icon-exclamation-sign"></i> OPcache IS NOT LOADED.</td>
<?php } ?><td>Please consider activating OPcache for the best performances.</td></tr>
<?php if (extension_loaded('openssl')) {?>
<tr><td><i class="icon-ok-sign"></i> openssl is LOADED</td>
<?php } else { ?>
<tr><td><i class="icon-exclamation-sign"></i> openssl IS NOT LOADED.</td>
<?php } ?><td>PHP Extension openssl speeds up the log in page.</td></tr>
<?php if (extension_loaded('curl')) {?>
<tr><td><i class="icon-ok-sign"></i> curl is LOADED</td>
<?php } else { ?>
<tr><td><i class="icon-exclamation-sign"></i> curl IS NOT LOADED.</td>
<?php } ?><td>PHP Extension curl is needed for OAuth2 authentication.</td></tr>
<?php if (extension_loaded('ldap')) {?>
<tr><td><i class="icon-ok-sign"></i> ldap is LOADED</td>
<?php } else { ?>
<tr><td><i class="icon-exclamation-sign"></i> ldap IS NOT LOADED</td>
<?php } ?><td>PHP Extension ldap is optional and allows you to use LDAP for authentication.</td></tr>
<?php if (extension_loaded('zip')) {?>
<tr><td><i class="icon-ok-sign"></i> zip is LOADED</td>
<?php } else { ?>
<tr><td><i class="icon-exclamation-sign"></i> zip IS NOT LOADED</td>
<?php } ?><td>PHP Extension zip allows you to use the export to Excel feature.</td></tr>
<?php if (extension_loaded('xml')) {?>
<tr><td><i class="icon-ok-sign"></i> xml is LOADED</td>
<?php } else { ?>
<tr><td><i class="icon-exclamation-sign"></i> xml IS NOT LOADED</td>
<?php } ?><td>PHP Extension xml allows you to use the export to Excel feature.</td></tr>
<?php if (extension_loaded('gd')) {?>
<tr><td><i class="icon-ok-sign"></i> gd is LOADED</td>
<?php } else { ?>
<tr><td><i class="icon-exclamation-sign"></i> gd IS NOT LOADED</td>
<?php } ?><td>PHP Extension gd2 allows you to use the export to Excel feature.</td></tr>
<?php if (extension_loaded('mysqli')) {?>
<tr><td><i class="icon-ok-sign"></i> mysqli is LOADED</td>
<?php } else { ?>
<tr><td><i class="icon-exclamation-sign"></i> mysqli IS NOT LOADED</td>
<?php } ?><td>mysqli is the recommended database driver.</td></tr>
</tbody>
</table>
<h2>Additional configuration</h2>
<p>You can test the following settings, but you need to edit the corresponding PHP scripts :</p>
<ul>
<li><a href="testssl.php" target="_blank">SSL Configuration and Utility.</a></li>
<li><a href="testoauth2.php" target="_blank">OAuth2 Settings.</a></li>
<li><a href="testmail.php" target="_blank">E-mail Settings.</a></li>
<li><a href="testldap.php" target="_blank">LDAP Settings.</a></li>
<li><a href="opcache.php" target="_blank">OPCache Tester.</a></li>
</ul>
<h2>Database</h2>
<table class="table table-bordered table-hover table-condensed">
<thead>
<tr>
<th>Requirement</th>
<th>Value / Description</th>
</tr>
</thead>
<tbody id="tblDatabase">
<?php if ($configFileExists) { ?><tr><td><i class="icon-ok-sign"></i> Configuration file</td><td>Found</td></tr>
<?php } else { ?><tr><td><i class="icon-remove-sign"></i> Configuration file</td><td>Not Found</td></tr>
<?php } ?>
<?php if (!$dbConnError) { ?><tr><td><i class="icon-ok-sign"></i> Database connection</td><td>OK</td></tr>
<?php } else { ?><tr><td><i class="icon-remove-sign"></i> Database connection</td><td>Error</td></tr>
<?php } ?>
<?php if (!$dbSelectDbError) { ?><tr><td><i class="icon-ok-sign"></i> Database name</td><td>Found</td></tr>
<?php } else { ?><tr><td><i class="icon-remove-sign"></i> Database name</td><td>Doesn't exist</td></tr>
<?php } ?>
<?php if (!$dbQueryError) { ?><tr><td><i class="icon-ok-sign"></i> Database query</td><td>OK</td></tr>
<?php } else { ?><tr><td><i class="icon-remove-sign"></i> Database query</td><td>Error</td></tr>
<?php } ?>
<?php if (!$dbProcsError) { ?><tr><td><i class="icon-ok-sign"></i> Database procedures</td><td>OK</td></tr>
<?php } else { ?><tr><td><i class="icon-remove-sign"></i> Database procedures</td><td>Error. Please check if your hosting company allows custom procedures (e.g. <a href="https://techtavern.wordpress.com/2013/06/17/mysql-triggers-and-amazon-rds/" target="_blank">Amazon RDS</a>).</td></tr>
<?php } ?>
<?php if (is_null($rowOrg)) { ?><tr><td><i class="icon-remove-sign"></i> Organization structure</td><td>No root entity was found.</td></tr>
<?php } else { ?>
<?php if ($rowOrg['id'] != 0) { ?><tr><td><i class="icon-remove-sign"></i> Organization structure</td><td>The root entity must be equal to zero. To fix a problem of backup/restore, please execute this query: <br />
<code>UPDATE `organization` SET `organization`.`id` = 0 WHERE `parent_id` = -1</code></td></tr>
<?php } else { ?><tr><td><i class="icon-ok-sign"></i> Organization structure</td><td>OK</td></tr>
<?php }
}?>
</tbody>
</table>
<h2>Schema</h2>
<table class="table table-bordered table-hover table-condensed">
<thead>
<tr>
<th>Table</th>
<th>Signature</th>
</tr>
</thead>
<tbody id="tblSchema">
<?php if (!$dbQueryError) {
while ($stmt->fetch()) { ?>
<tr><td><i class="icon-info-sign"></i> <?php echo $table; ?></td><td><?php echo $signature; ?></td></tr>
<?php }
$stmt->close();
if (!$dbConnError) $dbConn->close();
} else { ?>
<tr><td colspan="2"><i>Impossible to query database</i></td></tr>
<?php } ?>
</tbody>
</table>
</div>
</body>
</html>