-
Notifications
You must be signed in to change notification settings - Fork 25
/
settings.platformsh.php
127 lines (116 loc) · 4.89 KB
/
settings.platformsh.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
<?php
/**
* @file
* Platform.sh settings.
*/
// Configure the database.
if (getenv('PLATFORM_RELATIONSHIPS')) {
$relationships = json_decode(base64_decode(getenv('PLATFORM_RELATIONSHIPS')), TRUE);
if (empty($databases['default']) && !empty($relationships)) {
foreach ($relationships as $key => $relationship) {
$drupal_key = ($key === 'database') ? 'default' : $key;
foreach ($relationship as $instance) {
if (empty($instance['scheme']) || ($instance['scheme'] !== 'mysql' && $instance['scheme'] !== 'pgsql')) {
continue;
}
$database = [
'driver' => $instance['scheme'],
'database' => $instance['path'],
'username' => $instance['username'],
'password' => $instance['password'],
'host' => $instance['host'],
'port' => $instance['port'],
];
if (!empty($instance['query']['compression'])) {
$database['pdo'][PDO::MYSQL_ATTR_COMPRESS] = TRUE;
}
if (!empty($instance['query']['is_master'])) {
$databases[$drupal_key]['default'] = $database;
}
else {
$databases[$drupal_key]['replica'][] = $database;
}
}
}
}
}
if (getenv('PLATFORM_APP_DIR')) {
// Configure private and temporary file paths.
if (!isset($settings['file_private_path'])) {
$settings['file_private_path'] = getenv('PLATFORM_APP_DIR') . '/private';
}
if (!isset($config['system.file']['path']['temporary'])) {
$config['system.file']['path']['temporary'] = getenv('PLATFORM_APP_DIR') . '/tmp';
}
// Configure the default PhpStorage and Twig template cache directories.
if (!isset($settings['php_storage']['default'])) {
$settings['php_storage']['default']['directory'] = $settings['file_private_path'];
}
if (!isset($settings['php_storage']['twig'])) {
$settings['php_storage']['twig']['directory'] = $settings['file_private_path'];
}
}
// Set trusted hosts based on Platform.sh routes.
if (getenv('PLATFORM_ROUTES') && !isset($settings['trusted_host_patterns'])) {
$routes = json_decode(base64_decode(getenv('PLATFORM_ROUTES')), TRUE);
$settings['trusted_host_patterns'] = [];
foreach ($routes as $url => $route) {
$host = parse_url($url, PHP_URL_HOST);
if ($host !== FALSE && $route['type'] == 'upstream' && $route['upstream'] == getenv('PLATFORM_APPLICATION_NAME')) {
// Replace asterisk wildcards with a regular expression.
$host_pattern = str_replace('\*', '[^\.]+', preg_quote($host));
$settings['trusted_host_patterns'][] = '^' . $host_pattern . '$';
}
}
$settings['trusted_host_patterns'] = array_unique($settings['trusted_host_patterns']);
}
// Import variables prefixed with 'd8settings:' into $settings and 'd8config:'
// into $config.
if (getenv('PLATFORM_VARIABLES')) {
$variables = json_decode(base64_decode(getenv('PLATFORM_VARIABLES')), TRUE);
foreach ($variables as $name => $value) {
$parts = explode(':', $name);
list($prefix, $key) = array_pad($parts, 3, null);
switch ($prefix) {
// Variables that begin with `d8settings` or `drupal` get mapped
// to the $settings array verbatim, even if the value is an array.
// For example, a variable named d8settings:example-setting' with
// value 'foo' becomes $settings['example-setting'] = 'foo';
case 'd8settings':
case 'drupal':
$settings[$key] = $value;
break;
// Variables that begin with `d8config` get mapped to the $config
// array. Deeply nested variable names, with colon delimiters,
// get mapped to deeply nested array elements. Array values
// get added to the end just like a scalar. Variables without
// both a config object name and property are skipped.
// Example: Variable `d8config:conf_file:prop` with value `foo` becomes
// $config['conf_file']['prop'] = 'foo';
// Example: Variable `d8config:conf_file:prop:subprop` with value `foo` becomes
// $config['conf_file']['prop']['subprop'] = 'foo';
// Example: Variable `d8config:conf_file:prop:subprop` with value ['foo' => 'bar'] becomes
// $config['conf_file']['prop']['subprop']['foo'] = 'bar';
// Example: Variable `d8config:prop` is ignored.
case 'd8config':
if (count($parts) > 2) {
$temp = &$config[$key];
foreach (array_slice($parts, 2) as $n) {
$prev = &$temp;
$temp = &$temp[$n];
}
$prev[$n] = $value;
}
break;
}
}
}
// Set the project-specific entropy value, used for generating one-time
// keys and such.
if (getenv('PLATFORM_PROJECT_ENTROPY') && empty($settings['hash_salt'])) {
$settings['hash_salt'] = getenv('PLATFORM_PROJECT_ENTROPY');
}
// Set the deployment identifier, which is used by some Drupal cache systems.
if (getenv('PLATFORM_TREE_ID') && empty($settings['deployment_identifier'])) {
$settings['deployment_identifier'] = getenv('PLATFORM_TREE_ID');
}