Test Failed
Push — master ( 7bbbf4...34ff55 )
by Julien
04:57
created

Config::__construct()   B

Complexity

Conditions 4
Paths 2

Size

Total Lines 1303
Code Lines 832

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 1058
CRAP Score 4

Importance

Changes 18
Bugs 2 Features 7
Metric Value
cc 4
eloc 832
c 18
b 2
f 7
nc 2
nop 2
dl 0
loc 1303
ccs 1058
cts 1059
cp 0.9991
crap 4
rs 8

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
/**
4
 * This file is part of the Zemit Framework.
5
 *
6
 * (c) Zemit Team <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE.txt
9
 * file that was distributed with this source code.
10
 */
11
12
namespace Zemit\Bootstrap;
13
14
use PDO;
15
use Phalcon\Db\Column;
16
use Phalcon\Security;
17
use Zemit\Filter;
18
use Zemit\Filters;
19
use Zemit\Locale;
20
use Zemit\Version;
21
use Zemit\Provider;
22
use Zemit\Utils\Env;
23
use Zemit\Models;
24
use Zemit\Modules\Cli;
25
use Zemit\Modules\Api;
26
use Zemit\Mvc\Controller\Behavior;
27
use Phalcon\Config as PhalconConfig;
28
29
/**
30
 * Global Zemit Configuration
31
 *
32
 * @property PhalconConfig $core
33
 * @property PhalconConfig $app
34
 * @property PhalconConfig $php
35
 * @property PhalconConfig $debug
36
 * @property PhalconConfig $response
37
 * @property PhalconConfig $identity
38
 * @property PhalconConfig $models
39
 * @property PhalconConfig $providers
40
 * @property PhalconConfig $logger
41
 * @property PhalconConfig $filters
42
 * @property PhalconConfig $modules
43
 * @property PhalconConfig $router
44
 * @property PhalconConfig $gravatar
45
 * @property PhalconConfig $reCaptcha
46
 * @property PhalconConfig $aws
47
 * @property PhalconConfig $locale
48
 * @property PhalconConfig $translate
49
 * @property PhalconConfig $session
50
 * @property PhalconConfig $module
51
 * @property PhalconConfig $security
52
 * @property PhalconConfig $cache
53
 * @property PhalconConfig $metadata
54
 * @property PhalconConfig $annotations
55
 * @property PhalconConfig $mailer
56
 * @property PhalconConfig $cookies
57
 * @property PhalconConfig $oauth2
58
 * @property PhalconConfig $dotenv
59
 * @property PhalconConfig $client
60
 * @property PhalconConfig $permissions
61
 */
62
class Config extends \Zemit\Config\Config
63
{
64 19
    public function defineConst()
65
    {
66 19
        defined('VENDOR_PATH') || define('VENDOR_PATH', Env::get('ROOT_PATH', 'vendor/'));
67 19
        defined('ROOT_PATH') || define('ROOT_PATH', Env::get('ROOT_PATH'));
68 19
        defined('APP_PATH') || define('APP_PATH', Env::get('APP_PATH'));
69 19
        defined('APPLICATION_ENV') || define('APPLICATION_ENV', Env::get('APPLICATION_ENV', 'development'));
70 19
        defined('CORE_PATH') || define('CORE_PATH', Env::get('CORE_PATH', mb_substr(__DIR__, 0, mb_strlen(basename(__DIR__)) * -1)));
71 19
        defined('PRIVATE_PATH') || define('PRIVATE_PATH', Env::get('APP_PRIVATE_PATH', constant('APP_PATH') . '/private/'));
72
    }
73
    
74
    /**
75
     * Config Constructor
76
     * {@inheritDoc}
77
     */
78 19
    public function __construct(array $data = [], bool $insensitive = true)
79
    {
80 19
        $this->defineConst();
81 19
        $now = new \DateTimeImmutable();
82 19
        parent::__construct([
83
            
84
            /**
85
             * Core only settings
86
             */
87 19
            'core' => [
88 19
                'name' => 'Zemit Core',
89 19
                'version' => Version::get(),
90 19
                'package' => 'zemit-cms',
91 19
                'modules' => [
92 19
                    'zemit-' . \Zemit\Mvc\Module::NAME_FRONTEND => [
93 19
                        'className' => \Zemit\Modules\Frontend\Module::class,
94 19
                        'path' => CORE_PATH . 'Modules/Frontend/Module.php',
95 19
                    ],
96 19
                    'zemit-' . \Zemit\Mvc\Module::NAME_ADMIN => [
97 19
                        'className' => \Zemit\Modules\Admin\Module::class,
98 19
                        'path' => CORE_PATH . 'Modules/Admin/Module.php',
99 19
                    ],
100 19
                    'zemit-' . \Zemit\Mvc\Module::NAME_API => [
101 19
                        'className' => \Zemit\Modules\Api\Module::class,
102 19
                        'path' => CORE_PATH . 'Modules/Api/Module.php',
103 19
                    ],
104 19
                    'zemit-' . \Zemit\Mvc\Module::NAME_OAUTH2 => [
105 19
                        'className' => \Zemit\Modules\Oauth2\Module::class,
106 19
                        'path' => CORE_PATH . 'Modules/Oauth2/Module.php',
107 19
                    ],
108 19
                    'zemit-' . \Zemit\Cli\Module::NAME_CLI => [
109 19
                        'className' => \Zemit\Modules\Cli\Module::class,
110 19
                        'path' => CORE_PATH . 'Modules/Cli/Module.php',
111 19
                    ],
112 19
                ],
113 19
                'dir' => [
114 19
                    'base' => CORE_PATH,
115 19
                    'locales' => CORE_PATH . 'Locales',
116 19
                    'modules' => CORE_PATH . 'Modules',
117 19
                ],
118 19
            ],
119
            
120
            /**
121
             * Application configuration
122
             */
123 19
            'app' => [
124 19
                'namespace' => Env::get('APP_NAMESPACE', 'Zemit'), // Namespace of your application
125 19
                'version' => Env::get('APP_VERSION', date('Ymd')), // allow to set and force a specific version
126 19
                'maintenance' => Env::get('APP_MAINTENANCE', false), // Set true to force the maintenance page
127 19
                'env' => Env::get('APP_ENV', Env::get('APPLICATION_ENV', null)), // Set the current environment
128 19
                'debug' => Env::get('APP_DEBUG', false), // Set true to display debug
129 19
                'cache' => Env::get('APP_CACHE', false), // Set true to activate the cache
130 19
                'minify' => Env::get('APP_MINIFY', false), // Set true to activate minifying
131 19
                'copyright' => Env::get('APP_COPYRIGHT', false), // Set true to activate the copyright
132 19
                'profiler' => Env::get('APP_PROFILER', false), // Set true to return the profiler
133 19
                'logger' => Env::get('APP_LOGGER', false), // Set true to enable logging
134 19
                'uri' => Env::get('APP_URI', '/'), // Base URI of your application
135 19
                'staticUri' => Env::get('APP_STATIC_URI', '/'), // Base URI of your application
136 19
                'encoding' => Env::get('APP_ENCODING', 'UTF-8'), // allow to set encoding to use with the application
137 19
                'timezone' => Env::get('APP_TIMEZONE', 'America/Montreal'), // allow to set timezone to use with the application
138 19
                'timeoutLimit' => Env::get('APP_TIMEOUT_LIMIT', 60), // allow to set timeout limit to use with the application
139 19
                'memoryLimit' => Env::get('APP_MEMORY_LIMIT', '256M'), // allow to set timeout limit to use with the application
140 19
                'sendEmail' => Env::get('APP_SEND_EMAIL', false), // allow to send real email or not
141
                
142 19
                'dir' => [
143
                    // project
144 19
                    'root' => Env::get('APP_ROOT_PATH', defined('ROOT_PATH') ? ROOT_PATH ?: getcwd() : getcwd()),
145 19
                    'vendor' => Env::get('APP_VENDOR_PATH', VENDOR_PATH),
146 19
                    'app' => Env::get('APP_PATH', APP_PATH . '/'),
147 19
                    'public' => Env::get('APP_PUBLIC_PATH', getcwd()),
148
                    
149
                    // app
150 19
                    'bootstrap' => Env::get('APP_BOOTSTRAP_PATH', APP_PATH . '/Bootstrap/'),
151 19
                    'common' => Env::get('APP_COMMON_PATH', APP_PATH . '/Common/'),
152 19
                    'config' => Env::get('APP_CONFIG_PATH', APP_PATH . '/Config/'),
153 19
                    'modules' => Env::get('APP_MODULES_PATH', APP_PATH . '/Modules/'),
154 19
                    'plugins' => Env::get('APP_PLUGINS_PATH', APP_PATH . '/Plugins/'),
155 19
                    'private' => PRIVATE_PATH,
156
                    
157
                    // private
158 19
                    'cache' => Env::get('APP_CACHE_PATH', PRIVATE_PATH . '/cache/'),
159 19
                    'log' => Env::get('APP_LOG_PATH', PRIVATE_PATH . '/log/'),
160 19
                    'files' => Env::get('APP_FILE_PATH', PRIVATE_PATH . '/files/'),
161 19
                    'trash' => Env::get('APP_TRASH_PATH', PRIVATE_PATH . '/trash/'),
162 19
                    'tmp' => Env::get('APP_TMP_PATH', PRIVATE_PATH . '/tmp/'),
163 19
                    'migrations' => Env::get('APP_MIGRATION_PATH', PRIVATE_PATH . '/migrations/'),
164 19
                ],
165 19
            ],
166
            
167 19
            'url' => [
168 19
                'staticBaseUri' => Env::get('URL_STATIC_BASE_URI', null),
169 19
                'baseUri' => Env::get('URL_BASE_URI', '/'),
170 19
                'basePath' => Env::get('URL_BASE_PATH', '/'),
171 19
            ],
172
            
173 19
            'php' => [
174 19
                'locale' => [
175 19
                    'category' => Env::get('PHP_LOCALE_CATEGORY', LC_ALL),
176 19
                    'rest' => explode(',', Env::get('PHP_LOCALE_REST', 'fr_CA.UTF-8,French_Canada.1252')),
177 19
                ],
178 19
                'date' => [
179 19
                    'timezone' => Env::get('PHP_DATE_TIMEZONE', 'America/Montreal'),
180 19
                ],
181 19
                'ini' => [
182 19
                    'zend.exception_ignore_args' => Env::get('PHP_INI_ZEND_EXCEPTION_IGNORE_ARGS', 'On'),
183 19
                ],
184 19
            ],
185
            
186
            /**
187
             * Debug Configuration
188
             */
189 19
            'debug' => [
190 19
                'enable' => Env::get('DEBUG_ENABLE', false),
191 19
                'exception' => Env::get('DEBUG_EXCEPTION', true),
192 19
                'lowSeverity' => Env::get('DEBUG_LOW_SEVERITY', false),
193 19
                'showFiles' => Env::get('DEBUG_SHOW_FILES', true),
194 19
                'showBackTrace' => Env::get('DEBUG_SHOW_BACKTRACE', true),
195 19
                'showFileFragment' => Env::get('DEBUG_SHOW_FRAGMENT', true),
196 19
                'uri' => Env::get('DEBUG_URI'),
197 19
                'blacklist' => [
198 19
                    'server' => [
199 19
                        'PWD',
200 19
                        'PASS',
201 19
                        'PASSWD',
202 19
                        'PASSWORD',
203 19
                        'TOKEN',
204 19
                        'HASH',
205 19
                        'DB_PWD',
206 19
                        'DB_PASS',
207 19
                        'DB_PASSWD',
208 19
                        'DB_PASSWORD',
209 19
                        'DATABASE_PWD',
210 19
                        'DATABASE_PASS',
211 19
                        'DATABASE_PASSWD',
212 19
                        'DATABASE_PASSWORD',
213 19
                        'SECURITY_WORK_FACTOR',
214 19
                        'SECURITY_SALT',
215 19
                        'PASSPHRASE',
216 19
                        'SECRET',
217 19
                        'API_SECRET',
218 19
                        'API_KEY',
219 19
                    ],
220 19
                ],
221 19
            ],
222
            
223
            /**
224
             * Response Provider Configuration
225
             * - Set default security headers
226
             */
227 19
            'response' => [
228 19
                'headers' => [
229 19
                    'Content-Security-Policy-Report-Only' => Env::get('RESPONSE_HEADER_CSP_REPORT_ONLY', "default-src 'self'; img-src 'self' data:; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; object-src 'none'; connect-src 'self';"),
230 19
                    'Strict-Transport-Security' => Env::get('RESPONSE_HEADER_STRICT_TRANSPORT_SECURITY', 'max-age=63072000; includeSubDomains; preload'),
231 19
                    'X-Content-Type-Options' => Env::get('RESPONSE_HEADER_CONTENT_TYPE_OPTIONS', 'nosniff'),
232 19
                    'X-Frame-Options' => Env::get('RESPONSE_HEADER_FRAME_OPTIONS', 'Deny'),
233 19
                    'X-XSS-Protection' => Env::get('RESPONSE_HEADER_XSS_PROTECTION', 0),
234 19
                ],
235 19
                'corsHeaders' => [
236 19
                    'Access-Control-Allow-Origin' => Env::get('RESPONSE_HEADER_ACCESS_CONTROL_ALLOW_ORIGIN', '*'),
237 19
                    'Access-Control-Allow-Methods' => Env::get('RESPONSE_HEADER_ACCESS_CONTROL_ALLOW_METHODS', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'),
238 19
                    'Access-Control-Allow-Headers' => Env::get('RESPONSE_HEADER_ACCESS_CONTROL_ALLOW_HEADERS', 'Origin, X-Requested-With, Content-Range, Content-Disposition, Content-Type, Authorization'),
239 19
                    'Access-Control-Allow-Credentials' => Env::get('RESPONSE_HEADER_ACCESS_CONTROL_ALLOW_CREDENTIALS', 'true'),
240 19
                    'Access-Control-Max-Age' => Env::get('RESPONSE_HEADER_ACCESS_CONTROL_MAX_AGE', '600'),
241 19
//                    'Access-Control-Expose-Headers' => Env::get('RESPONSE_HEADER_ACCESS_CONTROL_EXPOSE_HEADERS', '*'),
242 19
//                    'Access-Control-Request-Headers' => Env::get('RESPONSE_HEADER_ACCESS_CONTROL_REQUEST_HEADERS', ''),
243 19
//                    'Access-Control-Request-Method' => Env::get('RESPONSE_HEADER_ACCESS_CONTROL_REQUEST_METHOD', ''),
244 19
                ],
245 19
            ],
246
            
247
            /**
248
             * Identity Provider Configuration
249
             */
250 19
            'identity' => [
251 19
                'authorizationHeader' => Env::get('IDENTITY_AUTHORIZATION_HEADER', 'Authorization'),
252 19
                'adapter' => Env::get('IDENTITY_ADAPTER', 'session'), // session | database
253 19
                'mode' => Env::get('IDENTITY_SESSION_MODE', 'jwt'), // jwt | string
254 19
                'sessionKey' => Env::get('IDENTITY_SESSION_KEY', 'zemit-identity'),
255 19
                'sessionFallback' => Env::get('IDENTITY_SESSION_FALLBACK', false),
256 19
                'token' => [
257 19
                    'expiration' => $now->modify(Env::get('IDENTITY_TOKEN_EXPIRATION', '+1 day'))->getTimestamp(),
258 19
                ],
259 19
                'refreshToken' => [
260 19
                    'expiration' => $now->modify(Env::get('IDENTITY_REFRESH_TOKEN_EXPIRATION', '+7 day'))->getTimestamp(),
261 19
                ],
262 19
            ],
263
            
264
            /**
265
             *
266
             */
267 19
            'models' => [
268
                
269
                // Base system
270 19
                Models\Backup::class => Models\Backup::class,
0 ignored issues
show
Bug introduced by
The type Zemit\Models\Backup was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
271 19
                Models\Audit::class => Models\Audit::class,
272 19
                Models\AuditDetail::class => Models\AuditDetail::class,
273 19
                Models\Log::class => Models\Log::class,
274 19
                Models\Email::class => Models\Email::class,
275 19
                Models\Job::class => Models\Job::class,
0 ignored issues
show
Bug introduced by
The type Zemit\Models\Job was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
276 19
                Models\File::class => Models\File::class,
277 19
                Models\Session::class => Models\Session::class,
278 19
                Models\Flag::class => Models\Flag::class,
279 19
                Models\Setting::class => Models\Setting::class,
280
                
281
                // Translate
282 19
                Models\Lang::class => Models\Lang::class,
283 19
                Models\Translate::class => Models\Translate::class,
284 19
                Models\TranslateField::class => Models\TranslateField::class,
285 19
                Models\TranslateTable::class => Models\TranslateTable::class,
286
                
287
                // Site & CMS
288 19
                Models\Site::class => Models\Site::class,
289 19
                Models\SiteLang::class => Models\SiteLang::class,
290 19
                Models\Page::class => Models\Page::class,
291 19
                Models\Post::class => Models\Post::class,
292 19
                Models\Template::class => Models\Template::class,
293 19
                Models\Channel::class => Models\Channel::class,
294 19
                Models\Field::class => Models\Field::class,
295
                
296
                // User & Permissions
297 19
                Models\Profile::class => Models\Profile::class,
0 ignored issues
show
Bug introduced by
The type Zemit\Models\Profile was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
298 19
                Models\User::class => Models\User::class,
299 19
                Models\UserType::class => Models\UserType::class,
300 19
                Models\UserGroup::class => Models\UserGroup::class,
301 19
                Models\UserRole::class => Models\UserRole::class,
302 19
                Models\UserFeature::class => Models\UserFeature::class,
0 ignored issues
show
Bug introduced by
The type Zemit\Models\UserFeature was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
303
                
304
                // Role
305 19
                Models\Role::class => Models\Role::class,
306 19
                Models\RoleRole::class => Models\RoleRole::class,
0 ignored issues
show
Bug introduced by
The type Zemit\Models\RoleRole was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
307 19
                Models\RoleFeature::class => Models\RoleFeature::class,
0 ignored issues
show
Bug introduced by
The type Zemit\Models\RoleFeature was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
308
                
309
                // Group
310 19
                Models\Group::class => Models\Group::class,
311 19
                Models\GroupRole::class => Models\GroupRole::class,
312 19
                Models\GroupType::class => Models\GroupType::class,
313 19
                Models\GroupFeature::class => Models\GroupFeature::class,
0 ignored issues
show
Bug introduced by
The type Zemit\Models\GroupFeature was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
314
                
315
                // Type
316 19
                Models\Type::class => Models\Type::class,
317
                
318
                // Feature
319 19
                Models\Feature::class => Models\Feature::class,
0 ignored issues
show
Bug introduced by
The type Zemit\Models\Feature was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
320 19
            ],
321
            
322 19
            'dataLifeCycle' => [
323 19
                'models' => [
324 19
                    Models\Log::class => Env::get('DATA_LIFE_CYCLE_LOG', 'triennially'),
325 19
                    Models\Email::class => Env::get('DATA_LIFE_CYCLE_EMAIL', 'triennially'),
326 19
                    Models\Session::class => Env::get('DATA_LIFE_CYCLE_SESSION', 'monthly'),
327 19
                    Models\Audit::class => Env::get('DATA_LIFE_CYCLE_AUDIT', 'quarterly'),
328 19
                    Models\AuditDetail::class => Env::get('DATA_LIFE_CYCLE_AUDIT_DETAIL', 'quarterly'),
329 19
                ],
330 19
                'policies' => [
331 19
                    'monthly' => [
332 19
                        'query' => [
333 19
                            'conditions' => 'createdAt < :createdAt:',
334 19
                            'bind' => ['createdAt' => $now->modify('-1 month')->format('Y-m-01 00:00:00')],
335 19
                            'bindTypes' => ['createdAt' => Column::BIND_PARAM_STR],
336 19
                        ],
337 19
                    ],
338 19
                    'quarterly' => [
339 19
                        'query' => [
340 19
                            'conditions' => 'createdAt < :createdAt:',
341 19
                            'bind' => ['createdAt' => $now->modify('-3 months')->format('Y-m-01 00:00:00')],
342 19
                            'bindTypes' => ['createdAt' => Column::BIND_PARAM_STR],
343 19
                        ],
344 19
                    ],
345 19
                    'yearly' => [
346 19
                        'query' => [
347 19
                            'conditions' => 'createdAt < :createdAt:',
348 19
                            'bind' => ['createdAt' => $now->modify('-1 year')->format('Y-01-01 00:00:00')],
349 19
                            'bindTypes' => ['createdAt' => Column::BIND_PARAM_STR],
350 19
                        ],
351 19
                    ],
352 19
                    'biennially' => [
353 19
                        'query' => [
354 19
                            'conditions' => 'createdAt < :createdAt:',
355 19
                            'bind' => ['createdAt' => $now->modify('-2 year')->format('Y-01-01 00:00:00')],
356 19
                            'bindTypes' => ['createdAt' => Column::BIND_PARAM_STR],
357 19
                        ],
358 19
                    ],
359 19
                    'triennially' => [
360 19
                        'query' => [
361 19
                            'conditions' => 'createdAt < :createdAt:',
362 19
                            'bind' => ['createdAt' => $now->modify('-3 year')->format('Y-01-01 00:00:00')],
363 19
                            'bindTypes' => ['createdAt' => Column::BIND_PARAM_STR],
364 19
                        ],
365 19
                    ],
366 19
                ],
367 19
            ],
368
            
369
            /**
370
             * Service Provider Configuration
371
             * expected => actual
372
             */
373 19
            'providers' => [
374
                // Application
375 19
                Provider\Application\ServiceProvider::class => Env::get('PROVIDER_APPLICATION', Provider\Application\ServiceProvider::class),
376 19
                Provider\Console\ServiceProvider::class => Env::get('PROVIDER_CONSOLE', Provider\Console\ServiceProvider::class),
377 19
                Provider\Debug\ServiceProvider::class => Env::get('PROVIDER_CONSOLE', Provider\Debug\ServiceProvider::class),
378 19
                Provider\Env\ServiceProvider::class => Env::get('PROVIDER_ENVIRONMENT', Provider\Env\ServiceProvider::class),
379 19
                Provider\Router\ServiceProvider::class => Env::get('PROVIDER_ROUTER', Provider\Router\ServiceProvider::class),
380 19
                Provider\Dispatcher\ServiceProvider::class => Env::get('PROVIDER_DISPATCHER', Provider\Dispatcher\ServiceProvider::class),
381 19
                Provider\Request\ServiceProvider::class => Env::get('PROVIDER_REQUEST', Provider\Request\ServiceProvider::class),
382 19
                Provider\Response\ServiceProvider::class => Env::get('PROVIDER_RESPONSE', Provider\Response\ServiceProvider::class),
383
                
384
                // Security
385 19
                Provider\Security\ServiceProvider::class => Env::get('PROVIDER_SECURITY', Provider\Security\ServiceProvider::class),
386 19
                Provider\Session\ServiceProvider::class => Env::get('PROVIDER_SESSION', Provider\Session\ServiceProvider::class),
387 19
                Provider\Cookies\ServiceProvider::class => Env::get('PROVIDER_COOKIES', Provider\Cookies\ServiceProvider::class),
388 19
                Provider\Crypt\ServiceProvider::class => Env::get('PROVIDER_CRYPT', Provider\Crypt\ServiceProvider::class),
389 19
                Provider\Filter\ServiceProvider::class => Env::get('PROVIDER_FILTER', Provider\Filter\ServiceProvider::class),
390 19
                Provider\Jwt\ServiceProvider::class => Env::get('PROVIDER_JWT', Provider\Jwt\ServiceProvider::class),
391 19
                Provider\ReCaptcha\ServiceProvider::class => Env::get('PROVIDER_CAPTCHA', Provider\ReCaptcha\ServiceProvider::class),
392
                
393
                // Language
394 19
                Provider\Locale\ServiceProvider::class => Env::get('PROVIDER_LOCALE', Provider\Locale\ServiceProvider::class),
395 19
                Provider\Translate\ServiceProvider::class => Env::get('PROVIDER_TRANSLATE', Provider\Translate\ServiceProvider::class),
396
                
397
                // View
398 19
                Provider\View\ServiceProvider::class => Env::get('PROVIDER_VIEW', Provider\View\ServiceProvider::class),
399 19
                Provider\Url\ServiceProvider::class => Env::get('PROVIDER_URL', Provider\Url\ServiceProvider::class),
400 19
                Provider\Volt\ServiceProvider::class => Env::get('PROVIDER_VOLT', Provider\Volt\ServiceProvider::class),
401 19
                Provider\Tag\ServiceProvider::class => Env::get('PROVIDER_TAG', Provider\Tag\ServiceProvider::class),
402 19
                Provider\Assets\ServiceProvider::class => Env::get('PROVIDER_ASSETS', Provider\Assets\ServiceProvider::class),
403 19
                Provider\Flash\ServiceProvider::class => Env::get('PROVIDER_FLASH', Provider\Flash\ServiceProvider::class),
404 19
                Provider\Escaper\ServiceProvider::class => Env::get('PROVIDER_ESCAPER', Provider\Escaper\ServiceProvider::class),
405 19
                Provider\Markdown\ServiceProvider::class => Env::get('PROVIDER_MARKDOWN', Provider\Markdown\ServiceProvider::class),
406
                
407
                // Database & Models
408 19
                Provider\Database\ServiceProvider::class => Env::get('PROVIDER_DATABASE', Provider\Database\ServiceProvider::class),
409 19
                Provider\DatabaseReadOnly\ServiceProvider::class => Env::get('PROVIDER_DATABASE_READ_ONLY', Provider\DatabaseReadOnly\ServiceProvider::class),
410 19
                Provider\ModelsManager\ServiceProvider::class => Env::get('PROVIDER_MODELS_MANAGER', Provider\ModelsManager\ServiceProvider::class),
411
                
412
                // Profiling & Logging
413 19
                Provider\Profiler\ServiceProvider::class => Env::get('PROVIDER_PROFILER', Provider\Profiler\ServiceProvider::class),
414 19
                Provider\Logger\ServiceProvider::class => Env::get('PROVIDER_LOGGER', Provider\Logger\ServiceProvider::class),
415
                
416
                // Caching
417 19
                Provider\Annotations\ServiceProvider::class => Env::get('PROVIDER_ANNOTATIONS', Provider\Annotations\ServiceProvider::class),
418 19
                Provider\ModelsMetadata\ServiceProvider::class => Env::get('PROVIDER_MODELS_METADATA', Provider\ModelsMetadata\ServiceProvider::class),
419 19
                Provider\ModelsCache\ServiceProvider::class => Env::get('PROVIDER_MODELS_CACHE', Provider\ModelsCache\ServiceProvider::class),
420 19
                Provider\Cache\ServiceProvider::class => Env::get('PROVIDER_CACHE', Provider\Cache\ServiceProvider::class),
421
                
422
                // Identity & Auth
423 19
                Provider\Identity\ServiceProvider::class => Env::get('PROVIDER_IDENTITY', Provider\Identity\ServiceProvider::class),
424 19
                Provider\Oauth2Client\ServiceProvider::class => Env::get('PROVIDER_OAUTH_2_FACEBOOK', Provider\Oauth2Client\ServiceProvider::class),
425 19
                Provider\Oauth2Server\ServiceProvider::class => Env::get('PROVIDER_OAUTH_2_FACEBOOK', Provider\Oauth2Server\ServiceProvider::class),
426 19
                Provider\Oauth2Facebook\ServiceProvider::class => Env::get('PROVIDER_OAUTH_2_FACEBOOK', Provider\Oauth2Facebook\ServiceProvider::class),
427 19
                Provider\Oauth2Google\ServiceProvider::class => Env::get('PROVIDER_OAUTH_2_GOOGLE', Provider\Oauth2Google\ServiceProvider::class),
428
    
429
                // Mailing
430 19
                Provider\Mailer\ServiceProvider::class => Env::get('PROVIDER_MAILER', Provider\Mailer\ServiceProvider::class),
431 19
                Provider\Imap\ServiceProvider::class => Env::get('PROVIDER_IMAP', Provider\Imap\ServiceProvider::class),
432
                
433
                // Others
434 19
                Provider\FileSystem\ServiceProvider::class => Env::get('PROVIDER_FILE_SYSTEM', Provider\FileSystem\ServiceProvider::class),
435 19
                Provider\Utils\ServiceProvider::class => Env::get('PROVIDER_UTILS', Provider\Utils\ServiceProvider::class),
436 19
                Provider\Aws\ServiceProvider::class => Env::get('PROVIDER_AWS', Provider\Aws\ServiceProvider::class),
437 19
                Provider\OCR\ServiceProvider::class => Env::get('PROVIDER_OCR', Provider\OCR\ServiceProvider::class),
438 19
                Provider\V8js\ServiceProvider::class => Env::get('PROVIDER_V8_JS', Provider\V8js\ServiceProvider::class),
439 19
                Provider\Gravatar\ServiceProvider::class => Env::get('PROVIDER_GRAVATAR', Provider\Gravatar\ServiceProvider::class),
440 19
                Provider\Clamav\ServiceProvider::class => Env::get('PROVIDER_CLAMAV', Provider\Clamav\ServiceProvider::class),
441 19
                Provider\OpenAi\ServiceProvider::class => Env::get('PROVIDER_OPENAI', Provider\OpenAi\ServiceProvider::class),
442 19
                Provider\LoremIpsum\ServiceProvider::class => Env::get('PROVIDER_LOREM_IPSUM', Provider\LoremIpsum\ServiceProvider::class),
443 19
            ],
444
            
445
            /**
446
             * Logger Configuration
447
             */
448 19
            'logger' => [
449 19
                'enable' => Env::get('LOGGER_ENABLE', false),
450
                
451 19
                'error' => Env::get('LOGGER_ERROR', false),
452 19
                'database' => Env::get('LOGGER_DATABASE', false),
453 19
                'dispatcher' => Env::get('LOGGER_DISPATCHER', false),
454 19
                'profiler' => Env::get('LOGGER_PROFILER', false),
455 19
                'mailer' => Env::get('LOGGER_MAILER', false),
456 19
                'cron' => Env::get('LOGGER_CRON', false),
457 19
                'auth' => Env::get('LOGGER_AUTH', false),
458
                
459 19
                'driver' => explode(',', Env::get('LOGGER_DRIVER', 'noop')),
460 19
                'drivers' => [
461 19
                    'noop' => [
462 19
                        'adapter' => \Phalcon\Logger\Adapter\Noop::class,
463 19
                    ],
464 19
                    'stream' => [
465 19
                        'adapter' => \Phalcon\Logger\Adapter\Stream::class,
466 19
                    ],
467 19
                    'syslog' => [
468 19
                        'adapter' => \Phalcon\Logger\Adapter\Syslog::class,
469 19
                    ],
470 19
                ],
471 19
                'default' => [
472 19
                    'path' => Env::get('LOGGER_PATH', PRIVATE_PATH . '/log/'),
473 19
                    'format' => Env::get('LOGGER_FORMAT', '[%date%][%type%] %message%'),
474 19
                    'date' => Env::get('LOGGER_DATE', 'Y-m-d H:i:s'),
475 19
                    'filename' => Env::get('LOGGER_DEFAULT_FILENAME', 'zemit'),
476 19
                ],
477 19
            ],
478
            
479
            /**
480
             * Default filters
481
             */
482 19
            'filters' => [
483 19
                Filter::FILTER_MD5 => Filters\Md5::class,
484 19
                Filter::FILTER_JSON => Filters\Json::class,
485 19
                Filter::FILTER_IPV4 => Filters\IPv4::class,
486 19
                Filter::FILTER_IPV6 => Filters\IPv6::class,
487 19
            ],
488
            
489
            /**
490
             * Default modules
491
             */
492 19
            'modules' => [
493 19
                \Zemit\Mvc\Module::NAME_FRONTEND => [
494 19
                    'className' => \Zemit\Modules\Frontend\Module::class,
495 19
                    'path' => CORE_PATH . 'Modules/Frontend/Module.php',
496 19
                ],
497 19
                \Zemit\Mvc\Module::NAME_ADMIN => [
498 19
                    'className' => \Zemit\Modules\Admin\Module::class,
499 19
                    'path' => CORE_PATH . 'Modules/Admin/Module.php',
500 19
                ],
501 19
                \Zemit\Mvc\Module::NAME_API => [
502 19
                    'className' => \Zemit\Modules\Api\Module::class,
503 19
                    'path' => CORE_PATH . 'Modules/Api/Module.php',
504 19
                ],
505 19
                \Zemit\Mvc\Module::NAME_OAUTH2 => [
506 19
                    'className' => \Zemit\Modules\Oauth2\Module::class,
507 19
                    'path' => CORE_PATH . 'Modules/Oauth2/Module.php',
508 19
                ],
509 19
                \Zemit\Cli\Module::NAME_CLI => [
510 19
                    'className' => \Zemit\Modules\Cli\Module::class,
511 19
                    'path' => CORE_PATH . 'Modules/Cli/Module.php',
512 19
                ],
513 19
            ],
514
            
515
            /**
516
             * Default router settings
517
             */
518 19
            'router' => [
519 19
                'hostnames' => [],
520 19
                'defaults' => [
521 19
                    'namespace' => Env::get('ROUTER_DEFAULT_NAMESPACE', 'Zemit\\Modules\\Frontend\\Controllers'),
522 19
                    'module' => Env::get('ROUTER_DEFAULT_MODULE', 'frontend'),
523 19
                    'controller' => Env::get('ROUTER_DEFAULT_CONTROLLER', 'index'),
524 19
                    'action' => Env::get('ROUTER_DEFAULT_ACTION', 'index'),
525 19
                ],
526 19
                'cli' => [
527 19
                    'namespace' => Env::get('ROUTER_DEFAULT_NAMESPACE', 'Zemit\\Modules\\Cli\\Tasks'),
528 19
                    'module' => Env::get('ROUTER_DEFAULT_MODULE', 'cli'),
529 19
                    'task' => Env::get('ROUTER_DEFAULT_TASK', 'help'),
530 19
                    'action' => Env::get('ROUTER_DEFAULT_ACTION', 'main'),
531 19
                ],
532 19
                'notFound' => [
533 19
                    'namespace' => Env::get('ROUTER_NOTFOUND_NAMESPACE', null),
534 19
                    'module' => Env::get('ROUTER_NOTFOUND_MODULE', null),
535 19
                    'controller' => Env::get('ROUTER_NOTFOUND_CONTROLLER', 'error'),
536 19
                    'task' => Env::get('ROUTER_NOTFOUND_CONTROLLER', 'error'),
537 19
                    'action' => Env::get('ROUTER_NOTFOUND_ACTION', 'notFound'),
538 19
                ],
539 19
                'fatal' => [
540 19
                    'namespace' => Env::get('ROUTER_FATAL_NAMESPACE', null),
541 19
                    'module' => Env::get('ROUTER_FATAL_MODULE', null),
542 19
                    'controller' => Env::get('ROUTER_FATAL_CONTROLLER', 'error'),
543 19
                    'task' => Env::get('ROUTER_FATAL_CONTROLLER', 'error'),
544 19
                    'action' => Env::get('ROUTER_FATAL_ACTION', 'fatal'),
545 19
                ],
546 19
                'forbidden' => [
547 19
                    'namespace' => Env::get('ROUTER_MAINTENANCE_NAMESPACE', null),
548 19
                    'module' => Env::get('ROUTER_MAINTENANCE_MODULE', null),
549 19
                    'controller' => Env::get('ROUTER_MAINTENANCE_CONTROLLER', 'error'),
550 19
                    'task' => Env::get('ROUTER_MAINTENANCE_CONTROLLER', 'error'),
551 19
                    'action' => Env::get('ROUTER_MAINTENANCE_ACTION', 'forbidden'),
552 19
                ],
553 19
                'unauthorized' => [
554 19
                    'namespace' => Env::get('ROUTER_MAINTENANCE_NAMESPACE', null),
555 19
                    'module' => Env::get('ROUTER_MAINTENANCE_MODULE', null),
556 19
                    'controller' => Env::get('ROUTER_MAINTENANCE_CONTROLLER', 'error'),
557 19
                    'task' => Env::get('ROUTER_MAINTENANCE_CONTROLLER', 'error'),
558 19
                    'action' => Env::get('ROUTER_MAINTENANCE_ACTION', 'unauthorized'),
559 19
                ],
560 19
                'maintenance' => [
561 19
                    'namespace' => Env::get('ROUTER_MAINTENANCE_NAMESPACE', null),
562 19
                    'module' => Env::get('ROUTER_MAINTENANCE_MODULE', null),
563 19
                    'controller' => Env::get('ROUTER_MAINTENANCE_CONTROLLER', 'error'),
564 19
                    'task' => Env::get('ROUTER_MAINTENANCE_CONTROLLER', 'error'),
565 19
                    'action' => Env::get('ROUTER_MAINTENANCE_ACTION', 'maintenance'),
566 19
                ],
567 19
                'error' => [
568 19
                    'namespace' => Env::get('ROUTER_ERROR_NAMESPACE', null),
569 19
                    'module' => Env::get('ROUTER_ERROR_MODULE', null),
570 19
                    'controller' => Env::get('ROUTER_ERROR_CONTROLLER', 'error'),
571 19
                    'task' => Env::get('ROUTER_ERROR_CONTROLLER', 'error'),
572 19
                    'action' => Env::get('ROUTER_ERROR_ACTION', 'index'),
573 19
                ],
574 19
            ],
575
    
576
            /**
577
             * View Configuration
578
             */
579 19
            'view' => [
580 19
                'minify' => Env::get('VIEW_MINIFY', false),
581 19
                'engines' => Env::get('VIEW_ENGINES', [
582 19
                    '.phtml' => \Phalcon\Mvc\View\Engine\Php::class,
583 19
                    '.volt' => \Phalcon\Mvc\View\Engine\Volt::class,
584 19
//                    '.mhtml' => \Phalcon\Mvc\View\Engine\Mustache::class,
585 19
//                    '.twig' => \Phalcon\Mvc\View\Engine\Twig::class,
586 19
//                    '.tpl' => \Phalcon\Mvc\View\Engine\Smarty::class
587 19
                ]),
588 19
            ],
589
    
590
            /**
591
             * Volt Configuration
592
             */
593 19
            'volt' => [
594 19
                'autoescape' => Env::get('VOLT_AUTOESCAPE', false),
595 19
                'always' => Env::get('VOLT_ALWAYS', false),
596 19
                'extension' => Env::get('VOLT_EXTENSION', '.php'),
597 19
                'separator' => Env::get('VOLT_SEPARATOR', '%%'),
598 19
                'path' => Env::get('VOLT_PATH', './'),
599 19
                'prefix' => Env::get('VOLT_PREFIX', null),
600 19
                'stat' => Env::get('VOLT_STAT', true), // Whether Phalcon must check if there are differences between the template file and its compiled path
601 19
            ],
602
            
603
            /**
604
             * Gravatar Configuration
605
             */
606 19
            'gravatar' => [
607 19
                'default_image' => Env::get('GRAVATAR_DEFAULT_IMAGE', 'identicon'),
608 19
                'size' => Env::get('GRAVATAR_SIZE', 24),
609 19
                'rating' => Env::get('GRAVATAR_RATING', 'pg'),
610 19
                'use_https' => Env::get('GRAVATAR_USE_HTTPS', true),
611 19
            ],
612
            
613
            /**
614
             * reCaptcha Configuration
615
             */
616 19
            'reCaptcha' => [
617 19
                'siteKey' => Env::get('RECAPTCHA_KEY'),
618 19
                'secret' => Env::get('RECAPTCHA_SECRET'),
619 19
                'expectedHostname' => Env::get('RECAPTCHA_EXPECTED_HOSTNAME'),
620 19
                'expectedApkPackageName' => Env::get('RECAPTCHA_EXPECTED_APK_PACKAGE_NAME'),
621 19
                'expectedAction' => Env::get('RECAPTCHA_EXPECTED_ACTION', null),
622 19
                'scoreThreshold' => Env::get('RECAPTCHA_SCORE_THRESHOLD', 0.5),
623 19
            ],
624
            
625
            /**
626
             * Locale Service Settings
627
             */
628 19
            'locale' => [
629 19
                'default' => Env::get('LOCALE_DEFAULT', 'en'),
630 19
                'sessionKey' => Env::get('LOCALE_SESSION_KEY', 'zemit-locale'),
631 19
                'mode' => Env::get('LOCALE_MODE', Locale::MODE_SESSION_GEOIP),
632 19
                'allowed' => explode(',', Env::get('LOCALE_ALLOWED', 'en')),
633 19
            ],
634
            
635
            /**
636
             * Translate Service Settings
637
             */
638 19
            'translate' => [
639 19
                'locale' => Env::get('TRANSLATE_LOCALE', 'en_US.utf8'),
640 19
                'defaultDomain' => Env::get('TRANSLATE_DEFAULT_DOMAIN', 'messages'),
641 19
                'category' => Env::get('TRANSLATE_CATEGORY', LC_MESSAGES),
642 19
                'directory' => [
643 19
                    Env::get('TRANSLATE_DEFAULT_DOMAIN', 'messages') => Env::get('TRANSLATE_DEFAULT_PATH', CORE_PATH . 'Locales'),
644 19
                ],
645 19
            ],
646
            
647
            /**
648
             * Default Session Configuration
649
             */
650 19
            'session' => [
651 19
                'driver' => Env::get('SESSION_DRIVER', 'stream'),
652 19
                'drivers' => [
653 19
                    'stream' => [
654 19
                        'adapter' => Env::get('SESSION_STREAM_ADAPTER', \Phalcon\Session\Adapter\Stream::class),
655 19
                        'savePath' => Env::get('SESSION_STREAM_SAVE_PATH', '/tmp'),
656 19
                    ],
657 19
                    'memcached' => [
658 19
                        'adapter' => Env::get('SESSION_MEMCACHED_ADAPTER', \Phalcon\Session\Adapter\Libmemcached::class),
659 19
                        'servers' => [
660 19
                            [
661 19
                                'host' => Env::get('SESSION_MEMCACHED_HOST', Env::get('MEMCACHED_HOST', '127.0.0.1')),
662 19
                                'port' => Env::get('SESSION_MEMCACHED_PORT', Env::get('MEMCACHED_PORT', 11211)),
663 19
                                'weight' => Env::get('SESSION_MEMCACHED_WEIGHT', Env::get('MEMCACHED_WEIGHT', 100)),
664 19
                            ],
665 19
                        ],
666 19
                        'client' => [],
667 19
                    ],
668 19
                    'redis' => [
669 19
                        'adapter' => Env::get('SESSION_REDIS_ADAPTER', \Phalcon\Session\Adapter\Redis::class),
670 19
                        'defaultSerializer' => Env::get('SESSION_REDIS_DEFAULT_SERIALIZER', Env::get('REDIS_DEFAULT_SERIALIZER', 'php')),
671 19
                        'lifetime' => Env::get('SESSION_REDIS_LIFETIME', Env::get('REDIS_LIFETIME', 3600)),
672 19
                        'serializer' => Env::get('SESSION_REDIS_SERIALIZER', Env::get('REDIS_SERIALIZER', null)),
673 19
                        'host' => Env::get('SESSION_REDIS_HOST', Env::get('REDIS_HOST', '127.0.0.1')),
674 19
                        'port' => Env::get('SESSION_REDIS_PORT', Env::get('REDIS_PORT', 6379)),
675 19
                        'index' => Env::get('SESSION_REDIS_INDEX', Env::get('REDIS_INDEX', 1)),
676 19
                        'auth' => Env::get('SESSION_REDIS_AUTH', Env::get('REDIS_AUTH', null)),
677 19
                        'persistent' => Env::get('SESSION_REDIS_PERSISTENT', Env::get('REDIS_PERSISTENT', 0)),
678 19
                        'socket' => Env::get('SESSION_REDIS_SOCKET', Env::get('REDIS_SOCKET', null)),
679 19
                    ],
680 19
                    'noop' => [
681 19
                        'adapter' => Env::get('SESSION_NOOP_ADAPTER', \Phalcon\Session\Adapter\Noop::class),
682 19
                    ],
683 19
                ],
684 19
                'default' => [
685 19
                    'prefix' => Env::get('SESSION_PREFIX', 'zemit_session_'),
686 19
                    'uniqueId' => Env::get('SESSION_UNIQUE_ID', 'zemit_'),
687 19
                    'lifetime' => Env::get('SESSION_LIFETIME', 3600),
688 19
                ],
689 19
                'ini' => [
690 19
                    'session.save_path' => Env::get('SESSION_SAVE_PATH', ''),
691 19
                    'session.name' => Env::get('SESSION_NAME', 'PHPSESSID'),
692 19
                    'session.save_handler' => Env::get('SESSION_SAVE_HANDLER', 'files'),
693 19
                    'session.auto_start' => Env::get('SESSION_AUTO_START', '0'),
694 19
                    'session.gc_probability' => Env::get('SESSION_GC_PROBABILITY', '1'),
695 19
                    'session.gc_divisor' => Env::get('SESSION_GC_DIVISOR', '100'),
696 19
                    'session.gc_maxlifetime' => Env::get('SESSION_GC_MAXLIFETIME', '1440'),
697 19
                    'session.serialize_handler' => Env::get('SESSION_SERIALIZE_HANDLER', 'php'),
698 19
                    'session.cookie_lifetime' => Env::get('SESSION_COOKIE_LIFETIME', '0'),
699 19
                    'session.cookie_path' => Env::get('SESSION_COOKIE_PATH', '/'),
700 19
                    'session.cookie_domain' => Env::get('SESSION_COOKIE_DOMAIN', ''),
701 19
                    'session.cookie_secure' => Env::get('SESSION_COOKIE_SECURE', '1'),
702 19
                    'session.cookie_httponly' => Env::get('SESSION_COOKIE_HTTPONLY', '1'),
703 19
                    'session.cookie_samesite' => Env::get('SESSION_COOKIE_SAMESITE', ''),
704 19
                    'session.use_strict_mode' => Env::get('SESSION_USE_STRICT_MODE', '0'),
705 19
                    'session.use_cookies' => Env::get('SESSION_USE_COOKIES', '1'),
706 19
                    'session.use_only_cookies' => Env::get('SESSION_USE_ONLY_COOKIES', '1'),
707 19
                    'session.referer_check' => Env::get('SESSION_REFERER_CHECK', ''),
708 19
                    'session.cache_limiter' => Env::get('SESSION_CACHE_LIMITER', 'nocache'),
709 19
                    'session.cache_expire' => Env::get('SESSION_CACHE_EXPIRE', '180'),
710 19
                    'session.use_trans_sid' => Env::get('SESSION_USE_TRANS_SID', '0'),
711 19
                    'session.trans_sid_tags' => Env::get('SESSION_TRANS_SID_TAGS', 'a=href,area=href,frame=src,form='),
712 19
                    'session.trans_sid_hosts' => Env::get('SESSION_TRANS_SID_HOSTS', $_SERVER['HTTP_HOST'] ?? ''),
713 19
                    'session.sid_length' => Env::get('SESSION_SID_LENGTH', '32'),
714 19
                    'session.sid_bits_per_character' => Env::get('SESSION_SID_BITS_PER_CHARACTER', '4'),
715 19
                    'session.upload_progress.enabled' => Env::get('SESSION_UPLOAD_PROGRESS_ENABLED', '1'),
716 19
                    'session.upload_progress.cleanup' => Env::get('SESSION_UPLOAD_PROGRESS_CLEANUP', '1'),
717 19
                    'session.upload_progress.prefix' => Env::get('SESSION_UPLOAD_PROGRESS_PREFIX', 'upload_progress_'),
718 19
                    'session.upload_progress.name' => Env::get('SESSION_UPLOAD_PROGRESS_NAME', 'PHP_SESSION_UPLOAD_PROGRESS'),
719 19
                    'session.upload_progress.freq' => Env::get('SESSION_UPLOAD_PROGRESS_FREQ', '1%'),
720 19
                    'session.upload_progress.min_freq' => Env::get('SESSION_UPLOAD_PROGRESS_MIN_FREQ', '1'),
721 19
                    'session.lazy_write' => Env::get('SESSION_LAZY_WRITE', '1'),
722 19
                    'session.hash_function' => Env::get('SESSION_HASH_FUNCTION', '0'),
723 19
                    'session.hash_bits_per_character' => Env::get('SESSION_HASH_BITS_PER_CHARACTER', '4'),
724 19
                    'session.entropy_file' => Env::get('SESSION_ENTROPY_FILE', ''),
725 19
                    'session.entropy_length' => Env::get('SESSION_ENTROPY_LENGTH', '0'),
726 19
                ],
727 19
            ],
728
            
729
            /**
730
             * Default module/plugin structure
731
             */
732 19
            'module' => [
733 19
                'dir' => [
734
                    // default
735 19
                    'modules' => Env::get('MODULE_DIR_MODULES', 'Modules/'),
736 19
                    'controllers' => Env::get('MODULE_DIR_CONTROLLER', 'Controllers/'),
737 19
                    'tasks' => Env::get('MODULE_DIR_TASKS', 'Tasks/'),
738 19
                    'models' => Env::get('MODULE_DIR_MODELS', 'Models/'),
739 19
                    'views' => Env::get('MODULE_DIR_VIEWS', 'Views/'),
740 19
                    'bootstrap' => Env::get('MODULE_DIR_BOOTSTRAP', 'Bootstrap/'),
741 19
                    'locales' => Env::get('MODULE_DIR_LOCALES', 'Locales/'),
742 19
                    'config' => Env::get('MODULE_DIR_CONFIG', 'Config/'),
743
                    
744
                    // private
745 19
                    'migrations' => Env::get('MODULE_DIR_MIGRATION', 'Private/migrations/'),
746 19
                    'cache' => Env::get('MODULE_DIR_MIGRATION', 'Private/migrations/'),
747 19
                    'logs' => Env::get('MODULE_DIR_LOGS', 'Private/migrations/'),
748 19
                    'backups' => Env::get('MODULE_DIR_BACKUPS', 'Private/backups/'),
749 19
                    'files' => Env::get('MODULE_DIR_FILES', 'Private/files/'),
750 19
                    'trash' => Env::get('MODULE_DIR_TRASH', 'Private/trash/'),
751 19
                ],
752 19
            ],
753
            
754
            /**
755
             * Default security settings
756
             */
757 19
            'security' => [ // phalcon security config
758 19
                'workFactor' => Env::get('SECURITY_WORK_FACTOR', 12), // workfactor for the phalcon security service
759 19
                'hash' => Env::get('SECURITY_HASH', Security::CRYPT_SHA512), // set default hash to sha512
760 19
                'salt' => Env::get('SECURITY_SALT', '>mY.Db5fR?k%~<ZWf\}Zh35_IFC]#0Xx'), // salt for the phalcon security service
761 19
                'jwt' => [
762 19
                    'signer' => Env::get('SECURITY_JWT_SIGNER', \Phalcon\Security\JWT\Signer\Hmac::class),
763 19
                    'algo' => Env::get('SECURITY_JWT_ALGO', 'sha512'),
764 19
                    'contentType' => Env::get('SECURITY_JWT_CONTENT_TYPE', 'application/json'),
765 19
                    'expiration' => $now->modify(Env::get('SECURITY_JWT_EXPIRATION', '+1 day'))->getTimestamp(),
766 19
                    'notBefore' => $now->modify(Env::get('SECURITY_JWT_NOT_BEFORE', '-1 minute'))->getTimestamp(),
767 19
                    'issuedAt' => $now->modify(Env::get('SECURITY_JWT_ISSUED_AT', 'now'))->getTimestamp(),
768 19
                    'issuer' => Env::get('SECURITY_JWT_ISSUER', 'ZEMIT_CORE_DEFAULT_ISSUER'),
769 19
                    'audience' => Env::get('SECURITY_JWT_AUDIENCE', 'ZEMIT_CORE_DEFAULT_AUDIENCE'),
770 19
                    'id' => Env::get('SECURITY_JWT_ID', 'ZEMIT_CORE_DEFAULT_ID'),
771 19
                    'subject' => Env::get('SECURITY_JWT_SUBJECT', 'ZEMIT_CORE_DEFAULT_SUBJECT'),
772 19
                    'passphrase' => Env::get('SECURITY_JWT_PASSPHRASE', 'Tf0PHY/^yDdJs*~)?x#xCNj_N[jW/`c*'),
773 19
                ],
774 19
            ],
775
    
776
            /**
777
             * Default crypt settings
778
             * @todo
779
             */
780 19
            'crypt' => [
781 19
                'cipher' => Env::get('CRYPT_CIPHER', 'aes-256-cfb'),
782 19
                'hash' => Env::get('CRYPT_HASH', 'sha256'),
783 19
                'useSigning' => Env::get('CRYPT_USE_SIGNING', false),
784 19
            ],
785
            
786
            /**
787
             * Cache drivers configs
788
             */
789 19
            'cache' => [
790 19
                'cli' => Env::get('CACHE_DRIVER_CLI', 'memory'),
791 19
                'driver' => Env::get('CACHE_DRIVER', 'memory'),
792 19
                'drivers' => [
793 19
                    'memory' => [
794 19
                        'adapter' => Env::get('CACHE_MEMORY_ADAPTER', \Phalcon\Cache\Adapter\Memory::class),
795 19
                    ],
796 19
                    'apcu' => [
797 19
                        'adapter' => Env::get('CACHE_APCU_ADAPTER', \Phalcon\Cache\Adapter\Apcu::class),
798 19
                    ],
799 19
                    'stream' => [
800 19
                        'adapter' => Env::get('CACHE_STREAM_ADAPTER', \Phalcon\Cache\Adapter\Stream::class),
801 19
                        'cacheDir' => Env::get('CACHE_STREAM_DIR', PRIVATE_PATH . '/cache/data/'),
802 19
                    ],
803 19
                    'memcached' => [
804 19
                        'adapter' => Env::get('CACHE_MEMCACHED_ADAPTER', \Phalcon\Cache\Adapter\Libmemcached::class),
805 19
                        'servers' => [
806 19
                            [
807 19
                                'host' => Env::get('CACHE_MEMCACHED_HOST', Env::get('MEMCACHED_HOST', '127.0.0.1')),
808 19
                                'port' => Env::get('CACHE_MEMCACHED_PORT', Env::get('MEMCACHED_PORT', 11211)),
809 19
                                'weight' => Env::get('CACHE_MEMCACHED_WEIGHT', Env::get('MEMCACHED_WEIGHT', 100)),
810 19
                            ],
811 19
                        ],
812 19
                    ],
813 19
                    'redis' => [
814 19
                        'adapter' => Env::get('CACHE_REDIS_ADAPTER', \Phalcon\Cache\Adapter\Redis::class),
815 19
                        'defaultSerializer' => Env::get('CACHE_REDIS_DEFAULT_SERIALIZER', Env::get('REDIS_DEFAULT_SERIALIZER', 'php')),
816 19
                        'lifetime' => Env::get('CACHE_REDIS_LIFETIME', Env::get('REDIS_LIFETIME', 3600)),
817 19
                        'serializer' => Env::get('CACHE_REDIS_SERIALIZER', Env::get('REDIS_SERIALIZER', null)),
818 19
                        'host' => Env::get('CACHE_REDIS_HOST', Env::get('REDIS_HOST', '127.0.0.1')),
819 19
                        'port' => Env::get('CACHE_REDIS_PORT', Env::get('REDIS_PORT', 6379)),
820 19
                        'index' => Env::get('CACHE_REDIS_INDEX', Env::get('REDIS_INDEX', 1)),
821 19
                        'auth' => Env::get('CACHE_REDIS_AUTH', Env::get('REDIS_AUTH', null)),
822 19
                        'persistent' => Env::get('CACHE_REDIS_PERSISTENT', Env::get('REDIS_PERSISTENT', null)),
823 19
                        'socket' => Env::get('CACHE_REDIS_SOCKET', Env::get('REDIS_SOCKET', null)),
824 19
                    ],
825 19
                ],
826 19
                'default' => [
827 19
                    'prefix' => Env::get('CACHE_PREFIX', 'zemit_cache_'),
828 19
                    'lifetime' => Env::get('CACHE_LIFETIME', 86400),
829 19
                    'defaultSerializer' => Env::get('CACHE_DEFAULT_SERIALIZER', 'Php'),
830 19
                ],
831 19
            ],
832
            
833
            /**
834
             * Metadata Configuration
835
             */
836 19
            'metadata' => [
837 19
                'driverCli' => Env::get('METADATA_DRIVER_CLI', 'memory'),
838 19
                'driver' => Env::get('METADATA_DRIVER', 'memory'),
839 19
                'drivers' => [
840 19
                    'apcu' => [
841 19
                        'adapter' => Env::get('METADATA_APCU_ADAPTER', \Phalcon\Mvc\Model\MetaData\Apcu::class),
842 19
                    ],
843 19
                    'memory' => [
844 19
                        'adapter' => Env::get('METADATA_MEMORY_ADAPTER', \Phalcon\Mvc\Model\MetaData\Memory::class),
845 19
                    ],
846 19
                    'stream' => [
847 19
                        'adapter' => Env::get('METADATA_STREAM_ADAPTER', \Phalcon\Mvc\Model\MetaData\Stream::class),
848 19
                        'metaDataDir' => Env::get('METADATA_STREAM_DIR', PRIVATE_PATH . '/cache/metadata/'),
849 19
                    ],
850 19
                    'memcached' => [
851 19
                        'adapter' => Env::get('METADATA_MEMCACHED_ADAPTER', \Phalcon\Mvc\Model\MetaData\Libmemcached::class),
852 19
                        'servers' => [
853 19
                            [
854 19
                                'host' => Env::get('METADATA_MEMCACHED_HOST', Env::get('MEMCACHED_HOST', '127.0.0.1')),
855 19
                                'port' => Env::get('METADATA_MEMCACHED_PORT', Env::get('MEMCACHED_PORT', 11211)),
856 19
                                'weight' => Env::get('METADATA_MEMCACHED_WEIGHT', Env::get('MEMCACHED_WEIGHT', 100)),
857 19
                            ],
858 19
                        ],
859 19
                    ],
860 19
                    'redis' => [
861 19
                        'adapter' => Env::get('METADATA_REDIS_ADAPTER', \Phalcon\Mvc\Model\MetaData\Redis::class),
862 19
                        'defaultSerializer' => Env::get('METADATA_REDIS_DEFAULT_SERIALIZER', Env::get('REDIS_DEFAULT_SERIALIZER', 'php')),
863 19
                        'lifetime' => Env::get('METADATA_REDIS_LIFETIME', Env::get('REDIS_LIFETIME', 3600)),
864 19
                        'serializer' => Env::get('METADATA_REDIS_SERIALIZER', Env::get('REDIS_SERIALIZER', null)),
865 19
                        'host' => Env::get('METADATA_REDIS_HOST', Env::get('REDIS_HOST', '127.0.0.1')),
866 19
                        'port' => Env::get('METADATA_REDIS_PORT', Env::get('REDIS_PORT', 6379)),
867 19
                        'index' => Env::get('METADATA_REDIS_INDEX', Env::get('REDIS_INDEX', 1)),
868 19
                        'auth' => Env::get('METADATA_REDIS_AUTH', Env::get('REDIS_AUTH', null)),
869 19
                        'persistent' => Env::get('METADATA_REDIS_PERSISTENT', Env::get('REDIS_PERSISTENT', null)),
870 19
                        'socket' => Env::get('METADATA_REDIS_SOCKET', Env::get('REDIS_SOCKET', null)),
871 19
                    ],
872 19
                    'wincache' => [
873 19
                        'adapter' => Env::get('METADATA_WINCACHE_ADAPTER', \Phalcon\Mvc\Model\MetaData\Wincache::class),
874 19
                    ],
875 19
                ],
876 19
                'default' => [
877 19
                    'lifetime' => Env::get('METADATA_LIFETIME', 172800),
878 19
                    'prefix' => Env::get('METADATA_PREFIX', 'zemit_metadata_'),
879 19
                ],
880 19
            ],
881
            
882
            /**
883
             * Annotations Configuration
884
             * - Memory
885
             * - Apcu
886
             * - Stream
887
             * - Memcached
888
             * - Redis
889
             * - Aerospike
890
             */
891 19
            'annotations' => [
892 19
                'driver' => Env::get('ANNOTATIONS_DRIVER', 'memory'),
893 19
                'drivers' => [
894 19
                    'memory' => [
895 19
                        'adapter' => Env::get('ANNOTATIONS_MEMORY_ADAPTER', \Phalcon\Annotations\Adapter\Memory::class),
896 19
                    ],
897 19
                    'apcu' => [
898 19
                        'adapter' => Env::get('ANNOTATIONS_APCU_ADAPTER', \Phalcon\Annotations\Adapter\Apcu::class),
899 19
                    ],
900 19
                    'file' => [
901 19
                        'adapter' => Env::get('ANNOTATIONS_STREAM_ADAPTER', \Phalcon\Annotations\Adapter\Stream::class),
902 19
                        'annotationsDir' => Env::get('ANNOTATIONS_STREAM_DIR', PRIVATE_PATH . '/cache/annotations'),
903 19
                    ],
904 19
                    'memcached' => [
905 19
                        'adapter' => Env::get('ANNOTATIONS_MEMCACHED_ADAPTER', \Phalcon\Annotations\Adapter\Memcached::class),
906 19
                        'servers' => [
907 19
                            [
908 19
                                'host' => Env::get('ANNOTATIONS_MEMCACHED_HOST', Env::get('MEMCACHED_HOST', '127.0.0.1')),
909 19
                                'port' => Env::get('ANNOTATIONS_MEMCACHED_PORT', Env::get('MEMCACHED_PORT', 11211)),
910 19
                                'weight' => Env::get('ANNOTATIONS_MEMCACHED_WEIGHT', Env::get('MEMCACHED_WEIGHT', 100)),
911 19
                            ],
912 19
                        ],
913 19
                    ],
914 19
                    'redis' => [
915 19
                        'adapter' => Env::get('ANNOTATIONS_REDIS_ADAPTER', \Phalcon\Annotations\Adapter\Redis::class),
916 19
                        'defaultSerializer' => Env::get('ANNOTATIONS_REDIS_DEFAULT_SERIALIZER', Env::get('REDIS_DEFAULT_SERIALIZER', 'php')),
917 19
                        'lifetime' => Env::get('ANNOTATIONS_REDIS_LIFETIME', Env::get('REDIS_LIFETIME', 3600)),
918 19
                        'serializer' => Env::get('ANNOTATIONS_REDIS_SERIALIZER', Env::get('REDIS_SERIALIZER', null)),
919 19
                        'host' => Env::get('ANNOTATIONS_REDIS_HOST', Env::get('REDIS_HOST', '127.0.0.1')),
920 19
                        'port' => Env::get('ANNOTATIONS_REDIS_PORT', Env::get('REDIS_PORT', 6379)),
921 19
                        'index' => Env::get('ANNOTATIONS_REDIS_INDEX', Env::get('REDIS_INDEX', 1)),
922 19
                        'auth' => Env::get('ANNOTATIONS_REDIS_AUTH', Env::get('REDIS_AUTH', null)),
923 19
                        'persistent' => Env::get('ANNOTATIONS_REDIS_PERSISTENT', Env::get('REDIS_PERSISTENT', null)),
924 19
                        'socket' => Env::get('ANNOTATIONS_REDIS_SOCKET', Env::get('REDIS_SOCKET', null)),
925 19
                    ],
926 19
                    'aerospike' => [
927 19
                        'adapter' => Env::get('ANNOTATIONS_AEROSPIKE_ADAPTER', \Phalcon\Annotations\Adapter\Aerospike::class),
928 19
                    ],
929 19
                ],
930 19
                'default' => [
931 19
                    'prefix' => Env::get('ANNOTATIONS_PREFIX', 'zemit_annotations_'),
932 19
                    'lifetime' => Env::get('ANNOTATIONS_LIFETIME', 86400),
933 19
                ],
934 19
            ],
935
            
936
            /**
937
             * Database configuration
938
             */
939 19
            'database' => [
940 19
                'default' => Env::get('DATABASE_ADAPTER', 'mysql'),
941 19
                'drivers' => [
942 19
                    'mysql' => [
943 19
                        'adapter' => Env::get('DATABASE_MYSQL_ADAPTER', \Phalcon\Db\Adapter\Pdo\Mysql::class),
944 19
                        'dialectClass' => Env::get('DATABASE_DIALECT_CLASS', \Zemit\Db\Dialect\Mysql::class),
945 19
                        'host' => Env::get('DATABASE_HOST', 'localhost'),
946 19
                        'port' => Env::get('DATABASE_PORT', 3306),
947 19
                        'dbname' => Env::get('DATABASE_DBNAME', ''),
948 19
                        'username' => Env::get('DATABASE_USERNAME', 'root'),
949 19
                        'password' => Env::get('DATABASE_PASSWORD', ''),
950 19
                        'charset' => Env::get('DATABASE_CHARSET', 'utf8'),
951 19
                        'options' => [
952 19
                            PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES ' . Env::get('DATABASE_CHARSET', 'utf8'),
953 19
                            PDO::ATTR_EMULATE_PREPARES => Env::get('DATABASE_PDO_EMULATE_PREPARES', false), // https://stackoverflow.com/questions/10113562/pdo-mysql-use-pdoattr-emulate-prepares-or-not
954 19
                            PDO::ATTR_STRINGIFY_FETCHES => Env::get('DATABASE_PDO_STRINGIFY_FETCHES', false),
955 19
                            PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => Env::get('MYSQL_ATTR_SSL_VERIFY_SERVER_CERT', true),
956 19
                        ],
957
                        /**
958
                         * Readonly Configuration
959
                         */
960 19
                        'readonly' => [
961 19
                            'enable' => Env::get('DATABASE_READONLY_ENABLE', false),
962 19
                            'host' => Env::get('DATABASE_READONLY_HOST'),
963 19
                            'port' => Env::get('DATABASE_READONLY_PORT'),
964 19
                            'dbname' => Env::get('DATABASE_READONLY_DBNAME'),
965 19
                            'username' => Env::get('DATABASE_READONLY_USERNAME'),
966 19
                            'password' => Env::get('DATABASE_READONLY_PASSWORD'),
967 19
                            'charset' => Env::get('DATABASE_READONLY_CHARSET'),
968 19
                        ],
969 19
                    ],
970 19
                ],
971 19
            ],
972
            
973
            /**
974
             * Mailer configuration
975
             */
976 19
            'mailer' => [
977 19
                'driver' => Env::get('MAILER_DRIVER', 'sendmail'),
978 19
                'drivers' => [
979 19
                    'mail' => [
980 19
                        'driver' => 'mail',
981 19
                    ],
982 19
                    'sendmail' => [
983 19
                        'driver' => 'sendmail',
984 19
                        'sendmail' => Env::get('MAILER_SENDMAIL', '/usr/sbin/sendmail -bs'),
985 19
                    ],
986 19
                    'smtp' => [
987 19
                        'driver' => 'smtp',
988 19
                        'host' => Env::get('MAILER_SMTP_HOST', 'localhost'),
989 19
                        'port' => Env::get('MAILER_SMTP_PORT', 25),
990 19
                        'encryption' => Env::get('MAILER_SMTP_ENCRYPTION', ''),
991 19
                        'username' => Env::get('MAILER_SMTP_USERNAME', ''),
992 19
                        'password' => Env::get('MAILER_SMTP_PASSWORD', ''),
993 19
                    ],
994 19
                ],
995 19
                'default' => [
996 19
                    'charset' => Env::get('MAILER_CHARSET', 'utf-8'),
997 19
                    'viewsDir' => Env::get('MAILER_VIEWS_DIR', APP_PATH . '/Modules/Frontend/Views/'),
998 19
                    'baseUri' => Env::get('MAILER_BASE_URI', null),
999 19
                ],
1000 19
                'from' => [
1001 19
                    'email' => Env::get('MAILER_FROM_EMAIL', 'zemit@localhost'),
1002 19
                    'name' => Env::get('MAILER_FROM_NAME', 'Zemit'),
1003 19
                ],
1004 19
                'to' => [...explode(',', Env::get('MAILER_TO_EMAIL', ''))],
1005 19
                'cc' => [...explode(',', Env::get('MAILER_CC_EMAIL', ''))],
1006 19
                'bcc' => [...explode(',', Env::get('MAILER_BCC_EMAIL', ''))],
1007 19
            ],
1008
            
1009
            /**
1010
             * Cookies
1011
             */
1012 19
            'cookies' => [
1013 19
                'useEncryption' => Env::get('COOKIES_USE_ENCRYPTION', true),
1014 19
                'signKey' => Env::get('COOKIES_SIGN_KEY', ''),
1015 19
            ],
1016
            
1017
            /**
1018
             * AWS - Amazon Web Service
1019
             */
1020 19
            'aws' => [
1021 19
                'region' => Env::get('AWS_REGION', 'ca-central-1'),
1022 19
                'version' => Env::get('AWS_VERSION', 'latest'),
1023 19
                'credentials' => [
1024 19
                    'key' => Env::get('AWS_CREDENTIALS_KEY', ''),
1025 19
                    'secret' => Env::get('AWS_CREDENTIALS_SECRET', ''),
1026 19
                ],
1027 19
            ],
1028
    
1029
            /**
1030
             * Facebook SDK
1031
             */
1032 19
            'facebook' => [
1033
            
1034 19
            ],
1035
            
1036
            /**
1037
             * Oauth2
1038
             */
1039 19
            'oauth2' => [
1040 19
                'client' => [
1041 19
                    'clientId' => Env::get('OAUTH2_CLIENT_ID'),
1042 19
                    'clientSecret' => Env::get('OAUTH2_CLIENT_SECRET'),
1043 19
                    'redirectUri' => Env::get('OAUTH2_CLIENT_REDIRECT_URI', '/oauth2/client/redirect'),
1044 19
                    'urlAuthorize' => Env::get('OAUTH2_CLIENT_URL_AUTHORIZE', '/oauth2/client/authorize'),
1045 19
                    'urlAccessToken' => Env::get('OAUTH2_CLIENT_URL_ACCESS_TOKEN', '/oauth2/client/token'),
1046 19
                    'urlResourceOwnerDetails' => Env::get('OAUTH2_CLIENT_URL_RESOURCE', '/oauth2/client/resource'),
1047 19
                    'proxy' => Env::get('OAUTH2_CLIENT_PROXY', null),
1048 19
                    'verify' => Env::get('OAUTH2_CLIENT_VERIFY', true),
1049 19
                ],
1050 19
                'facebook' => [
1051 19
                    'clientId' => Env::get('OAUTH2_FACEBOOK_CLIENT_ID'),
1052 19
                    'clientSecret' => Env::get('OAUTH2_FACEBOOK_CLIENT_SECRET'),
1053 19
                    'redirectUri' => Env::get('OAUTH2_FACEBOOK_CLIENT_REDIRECT_URI', '/oauth2/facebook/callback'),
1054 19
                    'graphApiVersion' => Env::get('OAUTH2_FACEBOOK_GRAPH_API_VERSION', 'v2.10'),
1055 19
                ],
1056 19
                'google' => [
1057 19
                    'clientId' => Env::get('OAUTH2_GOOGLE_CLIENT_ID'),
1058 19
                    'clientSecret' => Env::get('OAUTH2_GOOGLE_CLIENT_SECRET'),
1059 19
                    'redirectUri' => Env::get('OAUTH2_FACEBOOK_CLIENT_REDIRECT_URI', '/oauth2/google/callback'),
1060 19
                    'hostedDomain' => Env::get('OAUTH2_FACEBOOK_CLIENT_HOSTED_DOMAIN', null), // optional; used to restrict access to users on your G Suite/Google Apps for Business accounts
1061 19
                ],
1062 19
                'instagram' => [
1063
                
1064 19
                ],
1065 19
                'linked' => [
1066
                
1067 19
                ],
1068 19
                'twitter' => [
1069
                
1070 19
                ],
1071 19
                'github' => [
1072
                
1073 19
                ],
1074 19
                'apple' => [
1075
                
1076 19
                ],
1077 19
            ],
1078
            
1079 19
            'openai' => [
1080 19
                'secretKey' => Env::get('OPENAI_SECRET_KEY'),
1081 19
                'organizationId' => Env::get('OPENAI_ORGANIZATION_ID'),
1082 19
            ],
1083
            
1084
            /**
1085
             * Imap
1086
             * https://packagist.org/packages/php-imap/php-imap
1087
             */
1088 19
            'imap' => [
1089 19
                'path' => Env::get('IMAP_PATH'), // IMAP server and mailbox folder
1090 19
                'login' => Env::get('IMAP_LOGIN'), // Username for the before configured mailbox
1091 19
                'password' => Env::get('IMAP_PASSWORD'), // Password for the before configured username
1092 19
                'attachmentsDir' => Env::get('IMAP_ATTACHMENTS_DIR'), // Server encoding (optional)
1093 19
                'serverEncoding' => Env::get('IMAP_SERVER_ENCODING', 'UTF-8'), // Directory, where attachments will be saved (optional)
1094 19
                'trimImapPath' => Env::get('IMAP_TRIM_IMAP_PATH', true),   // Trim leading/ending whitespaces of IMAP path (optional)
1095 19
                'attachmentFilenameMode' => Env::get('IMAP_ATTACHMENT_FILENAME_MODE', false), // Attachment filename mode (optional; false = random filename; true = original filename)
1096 19
            ],
1097
            
1098 19
            'clamav' => [
1099 19
                'address' => Env::get('CLAMAV_ADDRESS', 'unix:///run/clamd.scan/clamd.sock'),
1100 19
                'timeout' => Env::get('CLAMAV_TIMEOUT', 30),
1101 19
            ],
1102
            
1103
            /**
1104
             * Dotenv
1105
             */
1106 19
            'dotenv' => [
1107 19
                'filePath' => '',
1108 19
            ],
1109
            
1110
            /**
1111
             * Client config to pass to front-end
1112
             */
1113 19
            'client' => [],
1114
            
1115
            /**
1116
             * Application permissions
1117
             */
1118 19
            'permissions' => [
1119
                
1120
                /**
1121
                 * Feature permissions
1122
                 */
1123 19
                'features' => [
1124
                    
1125 19
                    'test' => [
1126 19
                        'components' => [
1127 19
                            Api\Controllers\TestController::class => ['*'],
1128 19
                        ],
1129 19
                    ],
1130
                    
1131 19
                    'base' => [
1132 19
                        'components' => [
1133 19
                            Api\Controllers\AuthController::class => ['get'],
1134 19
                            Models\Audit::class => ['create'],
1135 19
                            Models\AuditDetail::class => ['create'],
1136 19
                            Models\Session::class => ['*'],
1137 19
                        ],
1138 19
                    ],
1139
                    
1140 19
                    'login' => [
1141 19
                        'components' => [
1142 19
                            Api\Controllers\AuthController::class => ['login'],
1143 19
                            Models\User::class => ['find'],
1144 19
                        ],
1145 19
                    ],
1146
                    
1147 19
                    'logout' => [
1148 19
                        'components' => [
1149 19
                            Api\Controllers\AuthController::class => ['logout'],
1150 19
                        ],
1151 19
                    ],
1152
                    
1153 19
                    'register' => [
1154 19
                        'components' => [
1155 19
                            Api\Controllers\AuthController::class => ['register'],
1156 19
                            Models\User::class => ['find', 'create'],
1157 19
                        ],
1158 19
                    ],
1159
                    
1160 19
                    'cron' => [
1161 19
                        'components' => [
1162 19
                            Cli\Tasks\CronTask::class => ['*'],
1163 19
                        ],
1164 19
                    ],
1165
                    
1166 19
                    'manageRoleList' => [
1167 19
                        'components' => [
1168 19
                            Api\Controllers\RoleController::class => ['*'],
1169 19
                            Models\Role::class => ['*'],
1170 19
                            Models\UserRole::class => ['*'],
1171 19
                        ],
1172 19
                        'behaviors' => [
1173 19
                            Api\Controllers\RoleController::class => [
1174 19
                                Behavior\Skip\SkipIdentityCondition::class,
1175 19
                                Behavior\Skip\SkipSoftDeleteCondition::class,
1176 19
                            ],
1177 19
                        ],
1178 19
                    ],
1179
                    
1180 19
                    'manageGroupList' => [
1181 19
                        'components' => [
1182 19
                            Api\Controllers\GroupController::class => ['*'],
1183 19
                            Models\Group::class => ['*'],
1184 19
                        ],
1185 19
                        'behaviors' => [
1186 19
                            Api\Controllers\GroupController::class => [
1187 19
                                Behavior\Skip\SkipIdentityCondition::class,
1188 19
                                Behavior\Skip\SkipSoftDeleteCondition::class,
1189 19
                            ],
1190 19
                        ],
1191 19
                    ],
1192
                    
1193 19
                    'manageTypeList' => [
1194 19
                        'components' => [
1195 19
                            Api\Controllers\TypeController::class => ['*'],
1196 19
                            Models\Group::class => ['*'],
1197 19
                        ],
1198 19
                        'behaviors' => [
1199 19
                            Api\Controllers\TypeController::class => [
1200 19
                                Behavior\Skip\SkipIdentityCondition::class,
1201 19
                                Behavior\Skip\SkipSoftDeleteCondition::class,
1202 19
                            ],
1203 19
                        ],
1204 19
                    ],
1205
                    
1206 19
                    'manageLangList' => [
1207 19
                        'components' => [
1208 19
                            Api\Controllers\LangController::class => ['*'],
1209 19
                            Models\Lang::class => ['*'],
1210 19
                        ],
1211 19
                        'behaviors' => [
1212 19
                            Api\Controllers\LangController::class => [
1213 19
                                Behavior\Skip\SkipIdentityCondition::class,
1214 19
                                Behavior\Skip\SkipSoftDeleteCondition::class,
1215 19
                            ],
1216 19
                        ],
1217 19
                    ],
1218
                    
1219 19
                    'manageUserList' => [
1220 19
                        'components' => [
1221 19
                            Api\Controllers\UserController::class => ['*'],
1222 19
                            Models\User::class => ['*'],
1223 19
                        ],
1224 19
                        'behaviors' => [
1225 19
                            Api\Controllers\UserController::class => [
1226 19
                                Behavior\Skip\SkipIdentityCondition::class,
1227 19
                                Behavior\Skip\SkipSoftDeleteCondition::class,
1228 19
                            ],
1229 19
                        ],
1230 19
                    ],
1231
                    
1232 19
                    'manageTemplateList' => [
1233 19
                        'components' => [
1234 19
                            Api\Controllers\TemplateController::class => ['*'],
1235 19
                            Models\Template::class => ['*'],
1236 19
                        ],
1237 19
                        'behaviors' => [
1238 19
                            Api\Controllers\TemplateController::class => [
1239 19
                                Behavior\Skip\SkipIdentityCondition::class,
1240 19
                                Behavior\Skip\SkipSoftDeleteCondition::class,
1241 19
                            ],
1242 19
                        ],
1243 19
                    ],
1244
                    
1245 19
                    'manageAuditList' => [
1246 19
                        'components' => [
1247 19
                            Api\Controllers\AuditController::class => ['*'],
1248 19
                            Models\Audit::class => ['*'],
1249 19
                        ],
1250 19
                        'behaviors' => [
1251 19
                            Api\Controllers\AuditController::class => [
1252 19
                                Behavior\Skip\SkipIdentityCondition::class,
1253 19
                                Behavior\Skip\SkipSoftDeleteCondition::class,
1254 19
                            ],
1255 19
                        ],
1256 19
                    ],
1257
                    
1258 19
                    'manageSiteList' => [
1259 19
                        'components' => [
1260 19
                            Api\Controllers\SiteController::class => ['*'],
1261 19
                            Models\Site::class => ['*'],
1262 19
                            Models\SiteLang::class => ['*'],
1263 19
                        ],
1264 19
                        'behaviors' => [
1265 19
                            Api\Controllers\SiteController::class => [
1266 19
                                Behavior\Skip\SkipIdentityCondition::class,
1267 19
                                Behavior\Skip\SkipSoftDeleteCondition::class,
1268 19
                            ],
1269 19
                        ],
1270 19
                    ],
1271
                    
1272 19
                    'managePageList' => [
1273 19
                        'components' => [
1274 19
                            Api\Controllers\PageController::class => ['*'],
1275 19
                            Models\Page::class => ['*'],
1276 19
                        ],
1277 19
                        'behaviors' => [
1278 19
                            Api\Controllers\PageController::class => [
1279 19
                                Behavior\Skip\SkipIdentityCondition::class,
1280 19
                                Behavior\Skip\SkipSoftDeleteCondition::class,
1281 19
                            ],
1282 19
                        ],
1283 19
                    ],
1284
                    
1285 19
                    'managePostList' => [
1286 19
                        'components' => [
1287 19
                            Api\Controllers\PostController::class => ['*'],
1288 19
                            Models\Post::class => ['*'],
1289 19
                        ],
1290 19
                        'behaviors' => [
1291 19
                            Api\Controllers\PostController::class => [
1292 19
                                Behavior\Skip\SkipIdentityCondition::class,
1293 19
                                Behavior\Skip\SkipSoftDeleteCondition::class,
1294 19
                            ],
1295 19
                        ],
1296 19
                    ],
1297 19
                ],
1298
                
1299
                /**
1300
                 * Roles permissions
1301
                 */
1302 19
                'roles' => [
1303
                    
1304
                    // Console (CLI)
1305 19
                    'cli' => [
1306 19
                        'components' => [
1307 19
                            Cli\Tasks\BuildTask::class => ['*'],
1308 19
                            Cli\Tasks\CacheTask::class => ['*'],
1309 19
                            Cli\Tasks\CronTask::class => ['*'],
1310 19
                            Cli\Tasks\ErrorTask::class => ['*'],
1311 19
                            Cli\Tasks\DeploymentTask::class => ['*'],
1312 19
                            Cli\Tasks\DataLifeCycleTask::class => ['*'],
1313 19
                            Cli\Tasks\HelpTask::class => ['*'],
1314 19
                            Cli\Tasks\ScaffoldTask::class => ['*'],
1315 19
                            Cli\Tasks\TestTask::class => ['*'],
1316 19
                        ],
1317 19
                    ],
1318
                    
1319
                    // Everyone with or without role
1320 19
                    'everyone' => [
1321 19
                        'features' => [
1322 19
                            'base',
1323 19
                        ],
1324 19
                        'components' => [
1325 19
                            Api\Controllers\ClamavController::class => ['*']
0 ignored issues
show
Bug introduced by
The type Zemit\Modules\Api\Controllers\ClamavController was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
1326 19
                        ],
1327 19
                    ],
1328
                    
1329
                    // Everyone without role
1330 19
                    'guest' => [
1331 19
                        'features' => [
1332 19
                            'login',
1333 19
                            'logout',
1334 19
                            'register',
1335 19
                        ],
1336 19
                    ],
1337
                    
1338
                    // User
1339 19
                    'user' => [
1340 19
                        'features' => [
1341 19
                            'logout',
1342 19
                        ],
1343 19
                    ],
1344
                    
1345
                    // Admin
1346 19
                    'admin' => [
1347 19
                        'features' => [
1348 19
                            'manageUserList',
1349 19
                            'manageLangList',
1350 19
                            'manageSiteList',
1351 19
                            'managePageList',
1352 19
                            'managePostList',
1353 19
                            'manageTemplateList',
1354 19
                        ],
1355 19
                        'inherit' => [
1356 19
                            'user',
1357 19
                        ],
1358 19
                        'behaviors' => [
1359 19
                        ],
1360 19
                    ],
1361
                    
1362
                    // Dev
1363 19
                    'dev' => [
1364 19
                        'features' => [
1365 19
                            'manageRoleList',
1366 19
                            'manageGroupList',
1367 19
                            'manageTypeList',
1368 19
                            'manageAuditList',
1369 19
                        ],
1370 19
                        'inherit' => [
1371 19
                            'user',
1372 19
                            'admin',
1373 19
                        ],
1374 19
                    ],
1375 19
                ],
1376 19
            ],
1377 19
        ], $insensitive);
1378
        
1379 19
        if (!empty($data)) {
1380
            $this->merge(new PhalconConfig($data, $insensitive));
1381
        }
1382
    }
1383
}
1384