summaryrefslogtreecommitdiff
path: root/sanity_check.php
blob: 3e5c0980358b25f0d51aa55262f8d777c401c5f7 (plain)
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
<?php
	require_once "functions.php";

	define('EXPECTED_CONFIG_VERSION', 23);
	define('SCHEMA_VERSION', 86);

	if (!file_exists("config.php")) {
		print "<b>Fatal Error</b>: You forgot to copy
		<b>config.php-dist</b> to <b>config.php</b> and edit it.\n";
		exit;
	}

	require_once "config.php";
	require_once "sanity_config.php";

	if (CONFIG_VERSION != EXPECTED_CONFIG_VERSION) {
		$err_msg = "config: your config file version is incorrect. See config.php-dist.\n";
	}

	$purifier_cache_dir = CACHE_DIR . "/htmlpurifier";

	if (!is_writable($purifier_cache_dir)) {
		$err_msg = "config: HTMLPurifier cache directory should be writable by anyone (chmod -R 777 $purifier_cache_dir)";
	}

	if (GENERATED_CONFIG_CHECK != EXPECTED_CONFIG_VERSION) {
		$err_msg = "config: your sanity_config.php is outdated, please recreate it using ./utils/regen_config_checks.sh";
	}

	foreach ($requred_defines as $d) {
		if (!defined($d)) {
			$err_msg = "config: required constant $d is not defined. Please check config.php";
		}
	}

	if (defined('RSS_BACKEND_TYPE')) {
		print "<b>Fatal error</b>: RSS_BACKEND_TYPE is deprecated. Please remove this
			option from config.php\n";
		exit;
	}

	if (file_exists("xml-export.php") || file_exists("xml-import.php")) {
		print "<b>Fatal Error</b>: XML Import/Export tools (<b>xml-export.php</b>
		and <b>xml-import.php</b>) could be used maliciously. Please remove them
		from your TT-RSS instance.\n";
		exit;
	}

	if (SINGLE_USER_MODE && DAEMON_UPDATE_LOGIN_LIMIT > 0) {
		print "<b>Fatal Error</b>: Please set DAEMON_UPDATE_LOGIN_LIMIT
			to 0 in single user mode.\n";
		exit;
	}

	if (!defined('SESSION_EXPIRE_TIME')) {
		$err_msg = "config: SESSION_EXPIRE_TIME is undefined";
	}

	if (SESSION_EXPIRE_TIME < 60) {
		$err_msg = "config: SESSION_EXPIRE_TIME is too low (less than 60)";
	}

	if (SESSION_EXPIRE_TIME < SESSION_COOKIE_LIFETIME) {
		$err_msg = "config: SESSION_EXPIRE_TIME should be greater or equal to" .
			"SESSION_COOKIE_LIFETIME";
	}

/*	if (defined('DISABLE_SESSIONS')) {
		$err_msg = "config: you have enabled DISABLE_SESSIONS. Please disable this option.";
} */

	if (DATABASE_BACKED_SESSIONS && SINGLE_USER_MODE) {
		$err_msg = "config: DATABASE_BACKED_SESSIONS is incompatible with SINGLE_USER_MODE";
	}

	if (DATABASE_BACKED_SESSIONS && DB_TYPE == "mysql") {
		$err_msg = "config: DATABASE_BACKED_SESSIONS are currently broken with MySQL";
	}

	if (SINGLE_USER_MODE) {
		$link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);

		if ($link) {
			$result = db_query($link, "SELECT id FROM ttrss_users WHERE id = 1");

			if (db_num_rows($result) != 1) {
				$err_msg = "config: SINGLE_USER_MODE is enabled but default admin account (UID=1) is not found.";
			}
		}
	}

	if (defined('MAIL_FROM')) {
		$err_msg = "config: MAIL_FROM has been split into DIGEST_FROM_NAME and DIGEST_FROM_ADDRESS";
	}

	if (!defined('COUNTERS_MAX_AGE')) {
		$err_msg = "config: option COUNTERS_MAX_AGE expected, but not defined";
	}

	if (defined('DAEMON_REFRESH_ONLY')) {
		$err_msg = "config: option DAEMON_REFRESH_ONLY is obsolete. Please remove this option and read about other ways to update feeds on the <a href='http://tt-rss.org/wiki/UpdatingFeeds'>wiki</a>.";

	}

	if (defined('ENABLE_SIMPLEPIE')) {
		$err_msg = "config: ENABLE_SIMPLEPIE is obsolete and replaced with DEFAULT_UPDATE_METHOD. Please adjust your config.php.";
	}

	if (!defined('DEFAULT_UPDATE_METHOD') || (DEFAULT_UPDATE_METHOD != 0 &&
			DEFAULT_UPDATE_METHOD != 1)) {
		$err_msg = "config: DEFAULT_UPDATE_METHOD should be either 0 or 1.";
	}

	if (SELF_URL_PATH == "http://yourserver/tt-rss/") {
		$err_msg = "config: please set SELF_URL_PATH to the correct value.";
	}

	if (!is_writable(ICONS_DIR)) {
		$err_msg = "config: your ICONS_DIR (" . ICONS_DIR . ") is not writable.\n";
	}

	if (ini_get("open_basedir")) {
		$err_msg = "php.ini: open_basedir is not supported.";
	}

	if (!function_exists("curl_init") && !ini_get("allow_url_fopen")) {
		$err_msg = "php.ini: either allow_url_fopen or CURL needs to be enabled.";
	}

	if (!function_exists("json_encode")) {
		$err_msg = "PHP: json functions not found.";
	}

	if (DB_TYPE == "mysql" && !function_exists("mysql_connect")) {
		$err_msg = "PHP: MySQL functions not found.";
	}

	if (DB_TYPE == "pgsql" && !function_exists("pg_connect")) {
		$err_msg = "PHP: PostgreSQL functions not found.";
	}

	if (!function_exists("mb_strlen")) {
		$err_msg = "PHP: mbstring functions not found.";
	}

	if (!function_exists("ctype_lower")) {
		$err_msg = "PHP: ctype functions not found (required for HTMLPurifier).";
	}

	if (ini_get("safe_mode")) {
		$err_msg = "php.ini: Safe mode is not supported. If you wish to continue, remove this test from sanity_check.php and proceeed at your own risk. Please note that your bug reports will not be accepted or reviewed.";
	}

	if ((PUBSUBHUBBUB_HUB || PUBSUBHUBBUB_ENABLED) && !function_exists("curl_init")) {
		$err_msg = "CURL is required for PubSubHubbub support.";
	}

	if (!class_exists("DOMDocument")) {
		$err_msg = "PHP: DOMDocument extension not found.";
	}

	if (SELF_URL_PATH == "http://local.host/tt-rss") {
		$err_msg = "config: please set SELF_URL_PATH to the correct value";
	}

	if (!ISCONFIGURED) {
		$err_msg = "config: please read config.php completely.";
	}

	if ($err_msg) {
		print "<b>Fatal Error</b>: $err_msg\n";
		exit;
	}

?>