aboutsummaryrefslogtreecommitdiffhomepage
path: root/application/Config.php
diff options
context:
space:
mode:
Diffstat (limited to 'application/Config.php')
-rw-r--r--[-rwxr-xr-x]application/Config.php263
1 files changed, 134 insertions, 129 deletions
diff --git a/application/Config.php b/application/Config.php
index ec799d7f..c71ef68c 100755..100644
--- a/application/Config.php
+++ b/application/Config.php
@@ -1,129 +1,134 @@
1<?php 1<?php
2/** 2/**
3 * Functions related to configuration management. 3 * Functions related to configuration management.
4 */ 4 */
5 5
6/** 6/**
7 * Re-write configuration file according to given array. 7 * Re-write configuration file according to given array.
8 * Requires mandatory fields listed in $MANDATORY_FIELDS. 8 * Requires mandatory fields listed in $MANDATORY_FIELDS.
9 * 9 *
10 * @param array $config contains all configuration fields. 10 * @param array $config contains all configuration fields.
11 * @param bool $isLoggedIn true if user is logged in. 11 * @param bool $isLoggedIn true if user is logged in.
12 * 12 *
13 * @return void 13 * @return void
14 * 14 *
15 * @throws MissingFieldConfigException: a mandatory field has not been provided in $config. 15 * @throws MissingFieldConfigException: a mandatory field has not been provided in $config.
16 * @throws UnauthorizedConfigException: user is not authorize to change configuration. 16 * @throws UnauthorizedConfigException: user is not authorize to change configuration.
17 * @throws Exception: an error occured while writing the new config file. 17 * @throws Exception: an error occured while writing the new config file.
18 */ 18 */
19function writeConfig($config, $isLoggedIn) 19function writeConfig($config, $isLoggedIn)
20{ 20{
21 // These fields are required in configuration. 21 // These fields are required in configuration.
22 $MANDATORY_FIELDS = array( 22 $MANDATORY_FIELDS = array(
23 'login', 'hash', 'salt', 'timezone', 'title', 'titleLink', 23 'login', 'hash', 'salt', 'timezone', 'title', 'titleLink',
24 'redirector', 'disablesessionprotection', 'privateLinkByDefault' 24 'redirector', 'disablesessionprotection', 'privateLinkByDefault'
25 ); 25 );
26 26
27 if (!isset($config['config']['CONFIG_FILE'])) { 27 if (!isset($config['config']['CONFIG_FILE'])) {
28 throw new MissingFieldConfigException('CONFIG_FILE'); 28 throw new MissingFieldConfigException('CONFIG_FILE');
29 } 29 }
30 30
31 // Only logged in user can alter config. 31 // Only logged in user can alter config.
32 if (is_file($config['config']['CONFIG_FILE']) && !$isLoggedIn) { 32 if (is_file($config['config']['CONFIG_FILE']) && !$isLoggedIn) {
33 throw new UnauthorizedConfigException(); 33 throw new UnauthorizedConfigException();
34 } 34 }
35 35
36 // Check that all mandatory fields are provided in $config. 36 // Check that all mandatory fields are provided in $config.
37 foreach ($MANDATORY_FIELDS as $field) { 37 foreach ($MANDATORY_FIELDS as $field) {
38 if (!isset($config[$field])) { 38 if (!isset($config[$field])) {
39 throw new MissingFieldConfigException($field); 39 throw new MissingFieldConfigException($field);
40 } 40 }
41 } 41 }
42 42
43 $configStr = '<?php '. PHP_EOL; 43 $configStr = '<?php '. PHP_EOL;
44 $configStr .= '$GLOBALS[\'login\'] = '.var_export($config['login'], true).';'. PHP_EOL; 44 $configStr .= '$GLOBALS[\'login\'] = '.var_export($config['login'], true).';'. PHP_EOL;
45 $configStr .= '$GLOBALS[\'hash\'] = '.var_export($config['hash'], true).';'. PHP_EOL; 45 $configStr .= '$GLOBALS[\'hash\'] = '.var_export($config['hash'], true).';'. PHP_EOL;
46 $configStr .= '$GLOBALS[\'salt\'] = '.var_export($config['salt'], true).'; '. PHP_EOL; 46 $configStr .= '$GLOBALS[\'salt\'] = '.var_export($config['salt'], true).'; '. PHP_EOL;
47 $configStr .= '$GLOBALS[\'timezone\'] = '.var_export($config['timezone'], true).';'. PHP_EOL; 47 $configStr .= '$GLOBALS[\'timezone\'] = '.var_export($config['timezone'], true).';'. PHP_EOL;
48 $configStr .= 'date_default_timezone_set('.var_export($config['timezone'], true).');'. PHP_EOL; 48 $configStr .= 'date_default_timezone_set('.var_export($config['timezone'], true).');'. PHP_EOL;
49 $configStr .= '$GLOBALS[\'title\'] = '.var_export($config['title'], true).';'. PHP_EOL; 49 $configStr .= '$GLOBALS[\'title\'] = '.var_export($config['title'], true).';'. PHP_EOL;
50 $configStr .= '$GLOBALS[\'titleLink\'] = '.var_export($config['titleLink'], true).'; '. PHP_EOL; 50 $configStr .= '$GLOBALS[\'titleLink\'] = '.var_export($config['titleLink'], true).'; '. PHP_EOL;
51 $configStr .= '$GLOBALS[\'redirector\'] = '.var_export($config['redirector'], true).'; '. PHP_EOL; 51 $configStr .= '$GLOBALS[\'redirector\'] = '.var_export($config['redirector'], true).'; '. PHP_EOL;
52 $configStr .= '$GLOBALS[\'disablesessionprotection\'] = '.var_export($config['disablesessionprotection'], true).'; '. PHP_EOL; 52 $configStr .= '$GLOBALS[\'disablesessionprotection\'] = '.var_export($config['disablesessionprotection'], true).'; '. PHP_EOL;
53 $configStr .= '$GLOBALS[\'privateLinkByDefault\'] = '.var_export($config['privateLinkByDefault'], true).'; '. PHP_EOL; 53 $configStr .= '$GLOBALS[\'privateLinkByDefault\'] = '.var_export($config['privateLinkByDefault'], true).'; '. PHP_EOL;
54 54
55 // Store all $config['config'] 55 // Store all $config['config']
56 foreach ($config['config'] as $key => $value) { 56 foreach ($config['config'] as $key => $value) {
57 $configStr .= '$GLOBALS[\'config\'][\''. $key .'\'] = '.var_export($config['config'][$key], true).';'. PHP_EOL; 57 $configStr .= '$GLOBALS[\'config\'][\''. $key .'\'] = '.var_export($config['config'][$key], true).';'. PHP_EOL;
58 } 58 }
59 $configStr .= '?>'; 59
60 60 if (isset($config['plugins'])) {
61 if (!file_put_contents($config['config']['CONFIG_FILE'], $configStr) 61 foreach ($config['plugins'] as $key => $value) {
62 || strcmp(file_get_contents($config['config']['CONFIG_FILE']), $configStr) != 0 62 $configStr .= '$GLOBALS[\'plugins\'][\''. $key .'\'] = '.var_export($config['plugins'][$key], true).';'. PHP_EOL;
63 ) { 63 }
64 throw new Exception( 64 }
65 'Shaarli could not create the config file. 65
66 Please make sure Shaarli has the right to write in the folder is it installed in.' 66 if (!file_put_contents($config['config']['CONFIG_FILE'], $configStr)
67 ); 67 || strcmp(file_get_contents($config['config']['CONFIG_FILE']), $configStr) != 0
68 } 68 ) {
69} 69 throw new Exception(
70 70 'Shaarli could not create the config file.
71/** 71 Please make sure Shaarli has the right to write in the folder is it installed in.'
72 * Milestone 0.9 - shaarli/Shaarli#41: options.php is not supported anymore. 72 );
73 * ==> if user is loggedIn, merge its content with config.php, then delete options.php. 73 }
74 * 74}
75 * @param array $config contains all configuration fields. 75
76 * @param bool $isLoggedIn true if user is logged in. 76/**
77 * 77 * Milestone 0.9 - shaarli/Shaarli#41: options.php is not supported anymore.
78 * @return void 78 * ==> if user is loggedIn, merge its content with config.php, then delete options.php.
79 */ 79 *
80function mergeDeprecatedConfig($config, $isLoggedIn) 80 * @param array $config contains all configuration fields.
81{ 81 * @param bool $isLoggedIn true if user is logged in.
82 $config_file = $config['config']['CONFIG_FILE']; 82 *
83 83 * @return void
84 if (is_file($config['config']['DATADIR'].'/options.php') && $isLoggedIn) { 84 */
85 include $config['config']['DATADIR'].'/options.php'; 85function mergeDeprecatedConfig($config, $isLoggedIn)
86 86{
87 // Load GLOBALS into config 87 $config_file = $config['config']['CONFIG_FILE'];
88 foreach ($GLOBALS as $key => $value) { 88
89 $config[$key] = $value; 89 if (is_file($config['config']['DATADIR'].'/options.php') && $isLoggedIn) {
90 } 90 include $config['config']['DATADIR'].'/options.php';
91 $config['config']['CONFIG_FILE'] = $config_file; 91
92 writeConfig($config, $isLoggedIn); 92 // Load GLOBALS into config
93 93 foreach ($GLOBALS as $key => $value) {
94 unlink($config['config']['DATADIR'].'/options.php'); 94 $config[$key] = $value;
95 } 95 }
96} 96 $config['config']['CONFIG_FILE'] = $config_file;
97 97 writeConfig($config, $isLoggedIn);
98/** 98
99 * Exception used if a mandatory field is missing in given configuration. 99 unlink($config['config']['DATADIR'].'/options.php');
100 */ 100 }
101class MissingFieldConfigException extends Exception 101}
102{ 102
103 public $field; 103/**
104 104 * Exception used if a mandatory field is missing in given configuration.
105 /** 105 */
106 * Construct exception. 106class MissingFieldConfigException extends Exception
107 * 107{
108 * @param string $field field name missing. 108 public $field;
109 */ 109
110 public function __construct($field) 110 /**
111 { 111 * Construct exception.
112 $this->field = $field; 112 *
113 $this->message = 'Configuration value is required for '. $this->field; 113 * @param string $field field name missing.
114 } 114 */
115} 115 public function __construct($field)
116 116 {
117/** 117 $this->field = $field;
118 * Exception used if an unauthorized attempt to edit configuration has been made. 118 $this->message = 'Configuration value is required for '. $this->field;
119 */ 119 }
120class UnauthorizedConfigException extends Exception 120}
121{ 121
122 /** 122/**
123 * Construct exception. 123 * Exception used if an unauthorized attempt to edit configuration has been made.
124 */ 124 */
125 public function __construct() 125class UnauthorizedConfigException extends Exception
126 { 126{
127 $this->message = 'You are not authorized to alter config.'; 127 /**
128 } 128 * Construct exception.
129} 129 */
130 public function __construct()
131 {
132 $this->message = 'You are not authorized to alter config.';
133 }
134}