Skip to content

Commit b17cece

Browse files
committed
v9.3.5
1 parent 9e4d302 commit b17cece

9 files changed

Lines changed: 1305 additions & 873 deletions

‎latest/apache/docker-daemon.sh‎

Lines changed: 122 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/bin/bash
22

3-
set -eu
3+
set -euo pipefail
44

55
# entrypoint-utils.sh
66
configPrefix="ESPOCRM_CONFIG_"
@@ -15,7 +15,7 @@ compareVersion() {
1515
local version2="$2"
1616
local operator="$3"
1717

18-
echo $(php -r "echo version_compare('$version1', '$version2', '$operator');")
18+
php -r 'echo version_compare($argv[1], $argv[2], $argv[3]);' "$version1" "$version2" "$operator"
1919
}
2020

2121
join() {
@@ -28,46 +28,50 @@ getConfigParamFromFile() {
2828
local name="$1"
2929

3030
php -r "
31+
\$name = \$argv[1];
32+
3133
if (file_exists('/var/www/html/data/state.php')) {
3234
\$config=include('/var/www/html/data/state.php');
3335
34-
if (array_key_exists('$name', \$config)) {
35-
echo \$config['$name'];
36+
if (array_key_exists(\$name, \$config)) {
37+
echo \$config[\$name];
3638
exit;
3739
}
3840
}
3941
4042
if (file_exists('/var/www/html/data/config-internal.php')) {
4143
\$config=include('/var/www/html/data/config-internal.php');
4244
43-
if (array_key_exists('$name', \$config)) {
44-
echo \$config['$name'];
45+
if (array_key_exists(\$name, \$config)) {
46+
echo \$config[\$name];
4547
exit;
4648
}
4749
}
4850
4951
if (file_exists('/var/www/html/data/config.php')) {
5052
\$config=include('/var/www/html/data/config.php');
5153
52-
if (array_key_exists('$name', \$config)) {
53-
echo \$config['$name'];
54+
if (array_key_exists(\$name, \$config)) {
55+
echo \$config[\$name];
5456
exit;
5557
}
5658
}
57-
"
59+
" "$name"
5860
}
5961

6062
getConfigParam() {
6163
local name="$1"
6264

6365
php -r "
66+
\$name = \$argv[1];
67+
6468
require_once('/var/www/html/bootstrap.php');
6569
6670
\$app = new \Espo\Core\Application();
6771
\$config = \$app->getContainer()->get('config');
6872
69-
echo \$config->get('$name');
70-
"
73+
echo \$config->get(\$name);
74+
" "$name"
7175
}
7276

7377
# Bool: saveConfigParam "jobRunInParallel" "true"
@@ -77,21 +81,50 @@ saveConfigParam() {
7781
local value="$2"
7882

7983
php -r "
84+
\$name = \$argv[1];
85+
\$rawValue = \$argv[2];
86+
87+
\$normalizeValue = static function (string \$value) {
88+
if (\$value === 'null') {
89+
return null;
90+
}
91+
92+
if (\$value === 'true') {
93+
return true;
94+
}
95+
96+
if (\$value === 'false') {
97+
return false;
98+
}
99+
100+
if (preg_match('/^-?(?:0|[1-9][0-9]*)$/', \$value)) {
101+
return (int) \$value;
102+
}
103+
104+
if (preg_match('/^-?(?:[0-9]*\\.[0-9]+|[0-9]+\\.[0-9]*)$/', \$value)) {
105+
return (float) \$value;
106+
}
107+
108+
return \$value;
109+
};
110+
111+
\$value = \$normalizeValue(\$rawValue);
112+
80113
require_once('/var/www/html/bootstrap.php');
81114
82115
\$app = new \Espo\Core\Application();
83116
\$config = \$app->getContainer()->get('config');
84117
85-
if (\$config->get('$name') === $value) {
118+
if (\$config->get(\$name) === \$value) {
86119
return;
87120
}
88121
89122
\$injectableFactory = \$app->getContainer()->get('injectableFactory');
90123
\$configWriter = \$injectableFactory->create('\\Espo\\Core\\Utils\\Config\\ConfigWriter');
91124
92-
\$configWriter->set('$name', $value);
125+
\$configWriter->set(\$name, \$value);
93126
\$configWriter->save();
94-
"
127+
" "$name" "$value"
95128
}
96129

97130
saveConfigArrayParam() {
@@ -100,40 +133,72 @@ saveConfigArrayParam() {
100133
local value="$3"
101134

102135
php -r "
136+
\$key1 = \$argv[1];
137+
\$key2 = \$argv[2];
138+
\$rawValue = \$argv[3];
139+
140+
\$normalizeValue = static function (string \$value) {
141+
if (\$value === 'null') {
142+
return null;
143+
}
144+
145+
if (\$value === 'true') {
146+
return true;
147+
}
148+
149+
if (\$value === 'false') {
150+
return false;
151+
}
152+
153+
if (preg_match('/^-?(?:0|[1-9][0-9]*)$/', \$value)) {
154+
return (int) \$value;
155+
}
156+
157+
if (preg_match('/^-?(?:[0-9]*\\.[0-9]+|[0-9]+\\.[0-9]*)$/', \$value)) {
158+
return (float) \$value;
159+
}
160+
161+
return \$value;
162+
};
163+
164+
\$value = \$normalizeValue(\$rawValue);
165+
103166
require_once('/var/www/html/bootstrap.php');
104167
105168
\$app = new \Espo\Core\Application();
106169
\$config = \$app->getContainer()->get('config');
107170
108-
\$arrayValue = \$config->get('$key1') ?? [];
171+
\$arrayValue = \$config->get(\$key1) ?? [];
109172
110173
if (!is_array(\$arrayValue)) {
111174
return;
112175
}
113176
114-
if (array_key_exists('$key2', \$arrayValue) && \$arrayValue['$key2'] === $value) {
177+
if (array_key_exists(\$key2, \$arrayValue) && \$arrayValue[\$key2] === \$value) {
115178
return;
116179
}
117180
118181
\$injectableFactory = \$app->getContainer()->get('injectableFactory');
119182
\$configWriter = \$injectableFactory->create('\\Espo\\Core\\Utils\\Config\\ConfigWriter');
120183
121-
\$arrayValue['$key2'] = $value;
184+
\$arrayValue[\$key2] = \$value;
122185
123-
\$configWriter->set('$key1', \$arrayValue);
186+
\$configWriter->set(\$key1, \$arrayValue);
124187
\$configWriter->save();
125-
"
188+
" "$key1" "$key2" "$value"
126189
}
127190

128191
checkInstanceReady() {
129-
local isInstalled=$(getConfigParamFromFile "isInstalled")
192+
local isInstalled
193+
isInstalled=$(getConfigParamFromFile "isInstalled")
130194

131195
if [ -z "$isInstalled" ] || [ "$isInstalled" != 1 ]; then
132196
echo >&2 "Instance is not ready: installation in progress"
133197
exit 0
134198
fi
135199

136-
local maintenanceMode=$(getConfigParamFromFile "maintenanceMode")
200+
local maintenanceMode
201+
maintenanceMode=$(getConfigParamFromFile "maintenanceMode")
137202

138203
if [ -n "$maintenanceMode" ] && [ "$maintenanceMode" = 1 ]; then
139204
echo >&2 "Instance is not ready: waiting for maintenance mode to be disabled"
@@ -156,38 +221,32 @@ isDatabaseReady() {
156221
157222
try {
158223
\$helper->createPDO();
159-
}
160-
catch (Exception \$e) {
161-
echo false;
162-
exit;
224+
} catch (\Throwable \$e) {
225+
exit(1);
163226
}
164227
165-
echo true;
228+
exit(0);
166229
"
167230
}
168231

169232
verifyDatabaseReady() {
170233
for i in {1..40}
171234
do
172-
isReady=$(isDatabaseReady 2>&1)
173-
174-
if [ -n "$isReady" ]; then
175-
return 0 #true
235+
if isDatabaseReady; then
236+
return 0
176237
fi
177238

178239
echo >&2 "Waiting for database connection (attempt $i/40)..."
179240
sleep 3
180241
done
181242

182243
echo >&2 "error: Database connection failed"
183-
return 1 #false
244+
return 1
184245
}
185246

186247
applyConfigEnvironments() {
187248
local envName
188249
local envValue
189-
local configParamName
190-
local configParamValue
191250

192251
compgen -v | while read -r envName; do
193252

@@ -207,50 +266,15 @@ applyConfigEnvironments() {
207266
done
208267
}
209268

210-
isValueQuoted() {
211-
local value="$1"
212-
213-
php -r "
214-
echo isQuote('$value');
215-
216-
function isQuote (\$value) {
217-
\$value = trim(\$value);
218-
219-
if (\$value === '0') {
220-
return false;
221-
}
222-
223-
if (empty(\$value)) {
224-
return true;
225-
}
226-
227-
if (filter_var(\$value, FILTER_VALIDATE_IP)) {
228-
return true;
229-
}
230-
231-
if (!preg_match('/[^0-9.]+/', \$value)) {
232-
return false;
233-
}
234-
235-
if (in_array(\$value, ['null', '1'], true)) {
236-
return false;
237-
}
238-
239-
if (in_array(\$value, ['true', 'false'])) {
240-
return false;
241-
}
242-
243-
return true;
244-
}
245-
"
246-
}
247-
248269
normalizeConfigParamName() {
249270
local value="$1"
250271
local prefix=${2:-"$configPrefix"}
251272

252273
php -r "
253-
\$value = str_ireplace('$prefix', '', '$value');
274+
\$value = \$argv[1];
275+
\$prefix = \$argv[2];
276+
277+
\$value = str_ireplace(\$prefix, '', \$value);
254278
\$value = strtolower(\$value);
255279
256280
\$value = preg_replace_callback(
@@ -262,20 +286,23 @@ normalizeConfigParamName() {
262286
);
263287
264288
echo \$value;
265-
"
289+
" "$value" "$prefix"
266290
}
267291

268292
normalizeConfigParamValue() {
269-
local value=${1//\'/\\\'}
293+
local value="$1"
270294

271-
local isValueQuoted=$(isValueQuoted "$value")
295+
php -r "
296+
\$value = \$argv[1];
297+
\$trimmed = trim(\$value);
272298
273-
if [ -n "$isValueQuoted" ] && [ "$isValueQuoted" = 1 ]; then
274-
echo "'$value'"
275-
return
276-
fi
299+
if (preg_match('/^\'(.*)\'$/s', \$trimmed, \$matches)) {
300+
echo str_replace('\\\\\'', '\'', \$matches[1]);
301+
return;
302+
}
277303
278-
echo "$value"
304+
echo \$value;
305+
" "$value"
279306
}
280307

281308
isConfigArrayParam() {
@@ -297,8 +324,11 @@ saveConfigValue() {
297324
local envName="$1"
298325
local envValue="$2"
299326

300-
local key=$(normalizeConfigParamName "$envName")
301-
local value=$(normalizeConfigParamValue "$envValue")
327+
local key
328+
key=$(normalizeConfigParamName "$envName")
329+
330+
local value
331+
value=$(normalizeConfigParamValue "$envValue")
302332

303333
saveConfigParam "$key" "$value"
304334
}
@@ -314,12 +344,15 @@ saveConfigArrayValue() {
314344
fi
315345

316346
local key1="$i"
317-
local key2=$(normalizeConfigParamName "$envName" "${configPrefixArrayList[$i]}")
347+
348+
local key2
349+
key2=$(normalizeConfigParamName "$envName" "${configPrefixArrayList[$i]}")
318350

319351
break
320352
done
321353

322-
local value=$(normalizeConfigParamValue "$envValue")
354+
local value
355+
value=$(normalizeConfigParamValue "$envValue")
323356

324357
saveConfigArrayParam "$key1" "$key2" "$value"
325358
}
@@ -341,12 +374,15 @@ setEnvValue() {
341374
export "$var"="$val"
342375
unset "$fileVar"
343376
}
377+
378+
urlEncode() {
379+
local value="${1-}"
380+
php -r 'echo rawurlencode($argv[1]);' "$value"
381+
}
344382
# END: entrypoint-utils.sh
345383

346384
checkInstanceReady
347385

348386
applyConfigEnvironments
349387

350388
/usr/local/bin/php /var/www/html/daemon.php
351-
352-
exec "$@"

0 commit comments

Comments
 (0)