Test Failed
Push — master ( d28b9e...d373cf )
by Julien
18:34 queued 14:17
created

Config::getModelClass()   A

Complexity

Conditions 2
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 2
Bugs 1 Features 1
Metric Value
eloc 1
c 2
b 1
f 1
dl 0
loc 3
ccs 0
cts 2
cp 0
rs 10
cc 2
nc 1
nop 1
crap 6
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 Zemit\Filter;
16
use Zemit\Filters;
17
use Zemit\Locale;
18
use Zemit\Version;
19
use Zemit\Provider;
20
use Zemit\Utils\Env;
21
use Zemit\Models;
22
use Zemit\Modules\Admin;
23
use Zemit\Modules\Frontend;
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
 * Zemit\Bootstrap\Config
31
 *
32
 * Global Zemit Configuration
33
 *
34
 * @property Config $core
35
 * @property Config $app
36
 * @property Config $php
37
 * @property Config $debug
38
 * @property Config $response
39
 * @property Config $identity
40
 * @property Config $models
41
 * @property Config $providers
42
 * @property Config $logger
43
 * @property Config $filters
44
 * @property Config $modules
45
 * @property Config $router
46
 * @property Config $gravatar
47
 * @property Config $reCaptcha
48
 * @property Config $aws
49
 * @property Config $locale
50
 * @property Config $translate
51
 * @property Config $session
52
 * @property Config $module
53
 * @property Config $security
54
 * @property Config $cache
55
 * @property Config $metadata
56
 * @property Config $annotations
57
 * @property Config $mailer
58
 * @property Config $cookies
59
 * @property Config $oauth2
60
 * @property Config $dotenv
61
 * @property Config $client
62
 * @property Config $permissions
63
 */
64
class Config extends \Zemit\Config\Config
65
{
66
    public function defineConst()
67
    {
68
        defined('VENDOR_PATH') || define('VENDOR_PATH', Env::get('ROOT_PATH', 'vendor/'));
69
        defined('ROOT_PATH') || define('ROOT_PATH', Env::get('ROOT_PATH'));
70
        defined('APP_PATH') || define('APP_PATH', Env::get('APP_PATH'));
71
        defined('APPLICATION_ENV') || define('APPLICATION_ENV', Env::get('APPLICATION_ENV', 'development'));
72 7
        defined('CORE_PATH') || define('CORE_PATH', Env::get('CORE_PATH', mb_substr(__DIR__, 0, mb_strlen(basename(__DIR__)) * -1)));
73
        defined('PRIVATE_PATH') || define('PRIVATE_PATH', Env::get('APP_PRIVATE_PATH', constant('APP_PATH') . '/private/'));
74 7
    }
75 7
    
76 7
    /**
77 7
     * Config Constructor
78 7
     * {@inheritDoc}
79 7
     *
80
     * @param array $data
81
     * @param bool $insensitive
82
     */
83
    public function __construct(array $data = [], bool $insensitive = true)
84
    {
85
        $this->defineConst();
86
        $now = new \DateTimeImmutable();
87
        parent::__construct([
88
            
89 7
            /**
90
             * Core only settings
91 7
             */
92
            'core' => [
93 7
                'name' => 'Zemit Core',
94
                'version' => Version::get(),
95 7
                'package' => 'zemit-cms',
96
                'modules' => [
97
                    'zemit-' . \Zemit\Mvc\Module::NAME_FRONTEND => [
98
                        'className' => \Zemit\Modules\Frontend\Module::class,
99
                        'path' => CORE_PATH . 'Modules/Frontend/Module.php',
100 7
                    ],
101 7
                    'zemit-' . \Zemit\Mvc\Module::NAME_ADMIN => [
102 7
                        'className' => \Zemit\Modules\Admin\Module::class,
103 7
                        'path' => CORE_PATH . 'Modules/Admin/Module.php',
104 7
                    ],
105 7
                    'zemit-' . \Zemit\Mvc\Module::NAME_API => [
106 7
                        'className' => \Zemit\Modules\Api\Module::class,
107 7
                        'path' => CORE_PATH . 'Modules/Api/Module.php',
108 7
                    ],
109 7
                    'zemit-' . \Zemit\Mvc\Module::NAME_CLI => [
110 7
                        'className' => \Zemit\Modules\Cli\Module::class,
111 7
                        'path' => CORE_PATH . 'Modules/Cli/Module.php',
112 7
                    ],
113 7
                    'zemit-' . \Zemit\Mvc\Module::NAME_OAUTH2 => [
114 7
                        'className' => \Zemit\Modules\Oauth2\Module::class,
115 7
                        'path' => CORE_PATH . 'Modules/Oauth2/Module.php',
116 7
                    ],
117 7
                ],
118 7
                'dir' => [
119 7
                    'base' => CORE_PATH,
120 7
                    'locales' => CORE_PATH . 'Locales',
121 7
                    'modules' => CORE_PATH . 'Modules',
122 7
                ],
123 7
            ],
124 7
            
125 7
            /**
126 7
             * Application configuration
127 7
             */
128 7
            'app' => [
129 7
                'namespace' => Env::get('APP_NAMESPACE', 'Zemit'), // Namespace of your application
130 7
                'version' => Env::get('APP_VERSION', date('Ymd')), // allow to set and force a specific version
131 7
                'maintenance' => Env::get('APP_MAINTENANCE', false), // Set true to force the maintenance page
132
                'env' => Env::get('APP_ENV', Env::get('APPLICATION_ENV', null)), // Set the current environment
133
                'debug' => Env::get('APP_DEBUG', false), // Set true to display debug
134
                'cache' => Env::get('APP_CACHE', false), // Set true to activate the cache
135
                'minify' => Env::get('APP_MINIFY', false), // Set true to activate minifying
136 7
                'copyright' => Env::get('APP_COPYRIGHT', false), // Set true to activate the copyright
137 7
                'profiler' => Env::get('APP_PROFILER', false), // Set true to return the profiler
138 7
                'logger' => Env::get('APP_LOGGER', false), // Set true to enable logging
139 7
                'uri' => Env::get('APP_URI', '/'), // Base URI of your application
140 7
                'staticUri' => Env::get('APP_STATIC_URI', '/'), // Base URI of your application
141 7
                'encoding' => Env::get('APP_ENCODING', 'UTF-8'), // allow to set encoding to use with the application
142 7
                'timezone' => Env::get('APP_TIMEZONE', 'America/Montreal'), // allow to set timezone to use with the application
143 7
                'timeoutLimit' => Env::get('APP_TIMEOUT_LIMIT', 60), // allow to set timeout limit to use with the application
144 7
                'memoryLimit' => Env::get('APP_MEMORY_LIMIT', '256M'), // allow to set timeout limit to use with the application
145 7
                'postLimit' => Env::get('APP_POST_LIMIT', '20M'), // allow to set timeout limit to use with the application
146 7
                'sendEmail' => Env::get('APP_SEND_EMAIL', false), // allow to send real email or not
147 7
                
148 7
                'dir' => [
149 7
                    // project
150 7
                    'root' => Env::get('APP_ROOT_PATH', defined('ROOT_PATH') ? ROOT_PATH ?: getcwd() : getcwd()),
151 7
                    'vendor' => Env::get('APP_VENDOR_PATH', VENDOR_PATH),
152 7
                    'app' => Env::get('APP_PATH', APP_PATH . '/'),
153 7
                    'public' => Env::get('APP_PUBLIC_PATH', getcwd()),
154 7
                    
155
                    // app
156 7
                    'bootstrap' => Env::get('APP_BOOTSTRAP_PATH', APP_PATH . '/Bootstrap/'),
157
                    'common' => Env::get('APP_COMMON_PATH', APP_PATH . '/Common/'),
158 7
                    'config' => Env::get('APP_CONFIG_PATH', APP_PATH . '/Config/'),
159 7
                    'modules' => Env::get('APP_MODULES_PATH', APP_PATH . '/Modules/'),
160 7
                    'plugins' => Env::get('APP_PLUGINS_PATH', APP_PATH . '/Plugins/'),
161 7
                    'private' => PRIVATE_PATH,
162
                    
163
                    // private
164 7
                    'cache' => Env::get('APP_CACHE_PATH', PRIVATE_PATH . '/cache/'),
165 7
                    'log' => Env::get('APP_LOG_PATH', PRIVATE_PATH . '/log/'),
166 7
                    'files' => Env::get('APP_FILE_PATH', PRIVATE_PATH . '/files/'),
167 7
                    'trash' => Env::get('APP_TRASH_PATH', PRIVATE_PATH . '/trash/'),
168 7
                    'tmp' => Env::get('APP_TMP_PATH', PRIVATE_PATH . '/tmp/'),
169 7
                    'migrations' => Env::get('APP_MIGRATION_PATH', PRIVATE_PATH . '/migrations/'),
170
                ],
171
            ],
172 7
            
173 7
            'url' => [
174 7
                'staticBaseUri' => Env::get('URL_STATIC_BASE_URI', null),
175 7
                'baseUri' => Env::get('URL_BASE_URI', '/'),
176 7
                'basePath' => Env::get('URL_BASE_PATH', '/'),
177 7
            ],
178 7
            
179 7
            'php' => [
180
                'ini' => [
181 7
                    'zend.exception_ignore_args' => Env::get('PHP_INI_ZEND_EXCEPTION_IGNORE_ARGS', 'On'),
182 7
                ],
183 7
            ],
184 7
            
185 7
            /**
186
             * Debug Configuration
187
             */
188
            'debug' => [
189
                'enable' => Env::get('DEBUG_ENABLE', false),
190 7
                'exception' => Env::get('DEBUG_EXCEPTION', true),
191 7
                'lowSeverity' => Env::get('DEBUG_LOW_SEVERITY', false),
192 7
                'showFiles' => Env::get('DEBUG_SHOW_FILES', true),
193 7
                'showBackTrace' => Env::get('DEBUG_SHOW_BACKTRACE', true),
194 7
                'showFileFragment' => Env::get('DEBUG_SHOW_FRAGMENT', true),
195 7
                'uri' => Env::get('DEBUG_URI'),
196 7
                'blacklist' => [
197 7
                    'server' => [
198 7
                        'PWD',
199 7
                        'PASS',
200 7
                        'PASSWD',
201 7
                        'PASSWORD',
202 7
                        'TOKEN',
203 7
                        'HASH',
204 7
                        'DB_PWD',
205 7
                        'DB_PASS',
206 7
                        'DB_PASSWD',
207 7
                        'DB_PASSWORD',
208 7
                        'DATABASE_PWD',
209 7
                        'DATABASE_PASS',
210 7
                        'DATABASE_PASSWD',
211 7
                        'DATABASE_PASSWORD',
212 7
                        'SECURITY_WORKFACTOR',
213 7
                        'SECURITY_SALT',
214 7
                        'PASSPHRASE',
215 7
                        'SECRET',
216 7
                        'API_SECRET',
217 7
                        'API_KEY',
218 7
                    ],
219 7
                ],
220 7
            ],
221 7
            
222 7
            /**
223
             * Response Provider Configuration
224
             * - Set default security headers
225
             */
226
            'response' => [
227
                'headers' => [
228 7
                    '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';"),
229 7
                    'Strict-Transport-Security' => Env::get('RESPONSE_HEADER_STRICT_TRANSPORT_SECURITY', 'max-age=63072000; includeSubDomains; preload'),
230 7
                    'X-Content-Type-Options' => Env::get('RESPONSE_HEADER_CONTENT_TYPE_OPTIONS', 'nosniff'),
231 7
                    'X-Frame-Options' => Env::get('RESPONSE_HEADER_FRAME_OPTIONS', 'Deny'),
232 7
                    'X-XSS-Protection' => Env::get('RESPONSE_HEADER_XSS_PROTECTION', 0),
233 7
                ],
234 7
                'corsHeaders' => [
235 7
                    'Access-Control-Allow-Origin' => Env::get('RESPONSE_HEADER_ACCESS_CONTROL_ALLOW_ORIGIN', '*'),
236 7
                    'Access-Control-Allow-Methods' => Env::get('RESPONSE_HEADER_ACCESS_CONTROL_ALLOW_METHODS', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'),
237 7
                    'Access-Control-Allow-Headers' => Env::get('RESPONSE_HEADER_ACCESS_CONTROL_ALLOW_HEADERS', 'Origin, X-Requested-With, Content-Range, Content-Disposition, Content-Type, Authorization'),
238 7
                    'Access-Control-Allow-Credentials' => Env::get('RESPONSE_HEADER_ACCESS_CONTROL_ALLOW_CREDENTIALS', 'true'),
239 7
                    'Access-Control-Max-Age' => Env::get('RESPONSE_HEADER_ACCESS_CONTROL_MAX_AGE', '600'),
240 7
//                    'Access-Control-Expose-Headers' => Env::get('RESPONSE_HEADER_ACCESS_CONTROL_EXPOSE_HEADERS', '*'),
241 7
//                    'Access-Control-Request-Headers' => Env::get('RESPONSE_HEADER_ACCESS_CONTROL_REQUEST_HEADERS', ''),
242 7
//                    'Access-Control-Request-Method' => Env::get('RESPONSE_HEADER_ACCESS_CONTROL_REQUEST_METHOD', ''),
243 7
                ],
244 7
            ],
245 7
            
246 7
            /**
247
             * Identity Provider Configuration
248
             */
249
            'identity' => [
250
                'authorizationHeader' => Env::get('IDENTITY_AUTHORIZATION_HEADER', 'Authorization'),
251 7
                'adapter' => Env::get('IDENTITY_ADAPTER', 'session'), // session | database
252 7
                'mode' => Env::get('IDENTITY_SESSION_MODE', 'jwt'), // jwt | string
253 7
                'sessionKey' => Env::get('IDENTITY_SESSION_KEY', 'zemit-identity'),
254 7
                'sessionFallback' => Env::get('IDENTITY_SESSION_FALLBACK', false),
255 7
            ],
256 7
            
257 7
            /**
258
             *
259
             */
260
            'models' => [
261
                
262 7
                // Base system
263
                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...
264
                Models\Audit::class => Models\Audit::class,
265 7
                Models\AuditDetail::class => Models\AuditDetail::class,
266 7
                Models\Log::class => Models\Log::class,
267 7
                Models\Email::class => Models\Email::class,
268 7
                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...
269 7
                Models\File::class => Models\File::class,
270 7
                Models\Session::class => Models\Session::class,
271 7
                Models\Flag::class => Models\Flag::class,
272 7
                Models\Setting::class => Models\Setting::class,
273 7
                
274 7
                // Translate
275
                Models\Lang::class => Models\Lang::class,
276
                Models\Translate::class => Models\Translate::class,
277 7
                Models\TranslateField::class => Models\TranslateField::class,
278 7
                Models\TranslateTable::class => Models\TranslateTable::class,
279 7
                
280 7
                // Site & CMS
281
                Models\Site::class => Models\Site::class,
282
                Models\SiteLang::class => Models\SiteLang::class,
283 7
                Models\Page::class => Models\Page::class,
284 7
                Models\Post::class => Models\Post::class,
285 7
                Models\Template::class => Models\Template::class,
286 7
                Models\Channel::class => Models\Channel::class,
287 7
                Models\Field::class => Models\Field::class,
288 7
                
289 7
                // User & Permissions
290
                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...
291
                Models\User::class => Models\User::class,
292 7
                Models\UserType::class => Models\UserType::class,
293 7
                Models\UserGroup::class => Models\UserGroup::class,
294 7
                Models\UserRole::class => Models\UserRole::class,
295 7
                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...
296 7
                
297 7
                // Role
298
                Models\Role::class => Models\Role::class,
299
                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...
300 7
                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...
301 7
                
302 7
                // Group
303
                Models\Group::class => Models\Group::class,
304
                Models\GroupRole::class => Models\GroupRole::class,
305 7
                Models\GroupType::class => Models\GroupType::class,
306 7
                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...
307 7
                
308 7
                // Type
309
                Models\Type::class => Models\Type::class,
310
                
311 7
                // Feature
312
                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...
313
            ],
314 7
            
315 7
            /**
316
             * Service Provider Configuration
317
             */
318
            'providers' => [
319
                // abstract => concrete
320 7
                Provider\Env\ServiceProvider::class => Env::get('PROVIDER_ENVIRONMENT', Provider\Env\ServiceProvider::class),
321
                Provider\Security\ServiceProvider::class => Env::get('PROVIDER_SECURITY', Provider\Security\ServiceProvider::class),
322 7
                Provider\Session\ServiceProvider::class => Env::get('PROVIDER_SESSION', Provider\Session\ServiceProvider::class),
323 7
                Provider\Cookies\ServiceProvider::class => Env::get('PROVIDER_COOKIES', Provider\Cookies\ServiceProvider::class),
324 7
                
325 7
                Provider\Locale\ServiceProvider::class => Env::get('PROVIDER_LOCALE', Provider\Locale\ServiceProvider::class),
326
                Provider\Translate\ServiceProvider::class => Env::get('PROVIDER_TRANSLATE', Provider\Translate\ServiceProvider::class),
327 7
                Provider\Url\ServiceProvider::class => Env::get('PROVIDER_URL', Provider\Url\ServiceProvider::class),
328 7
                Provider\Request\ServiceProvider::class => Env::get('PROVIDER_REQUEST', Provider\Request\ServiceProvider::class),
329 7
                Provider\Response\ServiceProvider::class => Env::get('PROVIDER_RESPONSE', Provider\Response\ServiceProvider::class),
330 7
                Provider\Router\ServiceProvider::class => Env::get('PROVIDER_ROUTER', Provider\Router\ServiceProvider::class),
331 7
                Provider\Dispatcher\ServiceProvider::class => Env::get('PROVIDER_DISPATCHER', Provider\Dispatcher\ServiceProvider::class),
332 7
                Provider\VoltTemplate\ServiceProvider::class => Env::get('PROVIDER_VOLT_TEMPLATE', Provider\VoltTemplate\ServiceProvider::class),
333 7
                Provider\View\ServiceProvider::class => Env::get('PROVIDER_VIEW', Provider\View\ServiceProvider::class),
334 7
                
335 7
                Provider\Profiler\ServiceProvider::class => Env::get('PROVIDER_PROFILER', Provider\Profiler\ServiceProvider::class),
336
                Provider\Database\ServiceProvider::class => Env::get('PROVIDER_DATABASE', Provider\Database\ServiceProvider::class),
337 7
                Provider\DatabaseReadOnly\ServiceProvider::class => Env::get('PROVIDER_DATABASE_READ_ONLY', Provider\DatabaseReadOnly\ServiceProvider::class),
338 7
                Provider\Annotations\ServiceProvider::class => Env::get('PROVIDER_ANNOTATIONS', Provider\Annotations\ServiceProvider::class),
339 7
                Provider\ModelsManager\ServiceProvider::class => Env::get('PROVIDER_MODELS_MANAGER', Provider\ModelsManager\ServiceProvider::class),
340 7
                Provider\ModelsMetadata\ServiceProvider::class => Env::get('PROVIDER_MODELS_METADATA', Provider\ModelsMetadata\ServiceProvider::class),
341 7
                Provider\ModelsCache\ServiceProvider::class => Env::get('PROVIDER_MODELS_CACHE', Provider\ModelsCache\ServiceProvider::class),
342 7
                Provider\Cache\ServiceProvider::class => Env::get('PROVIDER_CACHE', Provider\Cache\ServiceProvider::class),
343 7
                Provider\Mailer\ServiceProvider::class => Env::get('PROVIDER_MAILER', Provider\Mailer\ServiceProvider::class),
344 7
                Provider\Logger\ServiceProvider::class => Env::get('PROVIDER_LOGGER', Provider\Logger\ServiceProvider::class),
345 7
                Provider\FileSystem\ServiceProvider::class => Env::get('PROVIDER_FILE_SYSTEM', Provider\FileSystem\ServiceProvider::class),
346 7
                
347 7
                Provider\Assets\ServiceProvider::class => Env::get('PROVIDER_ASSETS', Provider\Assets\ServiceProvider::class),
348
                Provider\Tag\ServiceProvider::class => Env::get('PROVIDER_TAG', Provider\Tag\ServiceProvider::class),
349 7
                Provider\Filter\ServiceProvider::class => Env::get('PROVIDER_FILTER', Provider\Filter\ServiceProvider::class),
350 7
                Provider\Flash\ServiceProvider::class => Env::get('PROVIDER_FLASH', Provider\Flash\ServiceProvider::class),
351 7
                Provider\Escaper\ServiceProvider::class => Env::get('PROVIDER_ESCAPER', Provider\Escaper\ServiceProvider::class),
352 7
                Provider\Markdown\ServiceProvider::class => Env::get('PROVIDER_MARKDOWN', Provider\Markdown\ServiceProvider::class),
353 7
                Provider\Utils\ServiceProvider::class => Env::get('PROVIDER_UTILS', Provider\Utils\ServiceProvider::class),
354 7
                Provider\Crypt\ServiceProvider::class => Env::get('PROVIDER_CRYPT', Provider\Crypt\ServiceProvider::class),
355 7
                
356 7
                // oauth2
357
                Provider\Identity\ServiceProvider::class => Env::get('PROVIDER_IDENTITY', Provider\Identity\ServiceProvider::class),
358
                Provider\Oauth2Facebook\ServiceProvider::class => Env::get('PROVIDER_OAUTH_2_FACEBOOK', Provider\Oauth2Facebook\ServiceProvider::class),
359 7
                Provider\Oauth2Google\ServiceProvider::class => Env::get('PROVIDER_OAUTH_2_GOOGLE', Provider\Oauth2Google\ServiceProvider::class),
360 7
                
361 7
                // lib
362
                Provider\Aws\ServiceProvider::class => Env::get('PROVIDER_AWS', Provider\Aws\ServiceProvider::class),
363
                Provider\OCR\ServiceProvider::class => Env::get('PROVIDER_OCR', Provider\OCR\ServiceProvider::class),
364 7
                Provider\Jwt\ServiceProvider::class => Env::get('PROVIDER_JWT', Provider\Jwt\ServiceProvider::class),
365 7
                Provider\V8js\ServiceProvider::class => Env::get('PROVIDER_V8_JS', Provider\V8js\ServiceProvider::class),
366 7
                Provider\ReCaptcha\ServiceProvider::class => Env::get('PROVIDER_CAPTCHA', Provider\ReCaptcha\ServiceProvider::class),
367 7
                Provider\Gravatar\ServiceProvider::class => Env::get('PROVIDER_GRAVATAR', Provider\Gravatar\ServiceProvider::class),
368 7
                Provider\Clamav\ServiceProvider::class => Env::get('PROVIDER_CLAMAV', Provider\Clamav\ServiceProvider::class),
369 7
                Provider\Imap\ServiceProvider::class => Env::get('PROVIDER_IMAP', Provider\Imap\ServiceProvider::class),
370 7
                Provider\OpenAi\ServiceProvider::class => Env::get('PROVIDER_OPENAI', Provider\OpenAi\ServiceProvider::class),
371 7
                Provider\LoremIpsum\ServiceProvider::class => Env::get('PROVIDER_LOREM_IPSUM', Provider\LoremIpsum\ServiceProvider::class),
372 7
//                Snowair\Debugbar\ServiceProvider::class => \Snowair\Debugbar\ServiceProvider::class,
373 7
            ],
374 7
            
375 7
            /**
376
             * Logger Configuration
377
             */
378
            'logger' => [
379
                'enable' => Env::get('LOGGER_ENABLE', false),
380 7
                
381 7
                'error' => Env::get('LOGGER_ERROR', false),
382
                'database' => Env::get('LOGGER_DATABASE', false),
383 7
                'dispatcher' => Env::get('LOGGER_DISPATCHER', false),
384 7
                'profiler' => Env::get('LOGGER_PROFILER', false),
385 7
                'mailer' => Env::get('LOGGER_MAILER', false),
386 7
                'cron' => Env::get('LOGGER_CRON', false),
387 7
                'auth' => Env::get('LOGGER_AUTH', false),
388 7
                
389 7
                'driver' => explode(',', Env::get('LOGGER_DRIVER', 'noop')),
390
                'drivers' => [
391 7
                    'noop' => [
392 7
                        'adapter' => \Phalcon\Logger\Adapter\Noop::class,
393 7
                    ],
394 7
                    'stream' => [
395 7
                        'adapter' => \Phalcon\Logger\Adapter\Stream::class,
396 7
                    ],
397 7
                    'syslog' => [
398 7
                        'adapter' => \Phalcon\Logger\Adapter\Syslog::class,
399 7
                    ],
400 7
                ],
401 7
                'default' => [
402 7
                    'path' => Env::get('LOGGER_PATH', PRIVATE_PATH . '/log/'),
403 7
                    'format' => Env::get('LOGGER_FORMAT', '[%date%][%type%] %message%'),
404 7
                    'date' => Env::get('LOGGER_DATE', 'Y-m-d H:i:s'),
405 7
                    'filename' => Env::get('LOGGER_DEFAULT_FILENAME', 'zemit'),
406 7
                ],
407 7
            ],
408 7
            
409 7
            /**
410
             * Default filters
411
             */
412
            'filters' => [
413
                Filter::FILTER_MD5 => Filters\Md5::class,
414 7
                Filter::FILTER_JSON => Filters\Json::class,
415 7
                Filter::FILTER_IPV4 => Filters\IPv4::class,
416 7
                Filter::FILTER_IPV6 => Filters\IPv6::class,
417 7
            ],
418 7
            
419 7
            /**
420
             * Default modules
421
             * @todo change this to class => [class => '', path => '']
422
             */
423
            'modules' => [
424
                \Zemit\Mvc\Module::NAME_FRONTEND => [
425 7
                    'className' => \Zemit\Modules\Frontend\Module::class,
426 7
                    'path' => CORE_PATH . 'Modules/Frontend/Module.php',
427 7
                ],
428 7
                \Zemit\Mvc\Module::NAME_ADMIN => [
429 7
                    'className' => \Zemit\Modules\Admin\Module::class,
430 7
                    'path' => CORE_PATH . 'Modules/Admin/Module.php',
431 7
                ],
432 7
                \Zemit\Mvc\Module::NAME_API => [
433 7
                    'className' => \Zemit\Modules\Api\Module::class,
434 7
                    'path' => CORE_PATH . 'Modules/Api/Module.php',
435 7
                ],
436 7
                \Zemit\Mvc\Module::NAME_CLI => [
437 7
                    'className' => \Zemit\Modules\Cli\Module::class,
438 7
                    'path' => CORE_PATH . 'Modules/Cli/Module.php',
439 7
                ],
440 7
                \Zemit\Mvc\Module::NAME_OAUTH2 => [
441 7
                    'className' => \Zemit\Modules\Oauth2\Module::class,
442 7
                    'path' => CORE_PATH . 'Modules/Oauth2/Module.php',
443 7
                ],
444 7
                /**
445 7
                 * @TODO support this way too
446 7
                 */
447 7
//                \Zemit\Modules\Frontend\Module::class => \Zemit\Modules\Frontend\Module::class,
448 7
//                \Zemit\Modules\Admin\Module::class => \Zemit\Modules\Admin\Module::class,
449 7
//                \Zemit\Modules\Api\Module::class => \Zemit\Modules\Api\Module::class,
450 7
//                \Zemit\Modules\Cli\Module::class => \Zemit\Modules\Cli\Module::class,
451 7
            ],
452 7
            
453 7
            /**
454
             * Default router settings
455
             */
456
            'router' => [
457
                'hostnames' => [],
458 7
                'defaults' => [
459 7
                    'namespace' => Env::get('ROUTER_DEFAULT_NAMESPACE', 'Zemit\\Modules\\Frontend\\Controllers'),
460 7
                    'module' => Env::get('ROUTER_DEFAULT_MODULE', 'frontend'),
461 7
                    'controller' => Env::get('ROUTER_DEFAULT_CONTROLLER', 'index'),
462 7
                    'action' => Env::get('ROUTER_DEFAULT_ACTION', 'index'),
463 7
                ],
464 7
                'cli' => [
465 7
                    'namespace' => Env::get('ROUTER_DEFAULT_NAMESPACE', 'Zemit\\Modules\\Cli\\Tasks'),
466 7
                    'module' => Env::get('ROUTER_DEFAULT_MODULE', 'cli'),
467 7
                    'task' => Env::get('ROUTER_DEFAULT_TASK', 'help'),
468 7
                    'action' => Env::get('ROUTER_DEFAULT_ACTION', 'main'),
469 7
                ],
470 7
                'notFound' => [
471 7
                    'namespace' => Env::get('ROUTER_NOTFOUND_NAMESPACE', null),
472 7
                    'module' => Env::get('ROUTER_NOTFOUND_MODULE', null),
473 7
                    'controller' => Env::get('ROUTER_NOTFOUND_CONTROLLER', 'error'),
474 7
                    'task' => Env::get('ROUTER_NOTFOUND_CONTROLLER', 'error'),
475 7
                    'action' => Env::get('ROUTER_NOTFOUND_ACTION', 'notFound'),
476 7
                ],
477 7
                'fatal' => [
478 7
                    'namespace' => Env::get('ROUTER_FATAL_NAMESPACE', null),
479 7
                    'module' => Env::get('ROUTER_FATAL_MODULE', null),
480 7
                    'controller' => Env::get('ROUTER_FATAL_CONTROLLER', 'error'),
481 7
                    'task' => Env::get('ROUTER_FATAL_CONTROLLER', 'error'),
482 7
                    'action' => Env::get('ROUTER_FATAL_ACTION', 'fatal'),
483 7
                ],
484 7
                'forbidden' => [
485 7
                    'namespace' => Env::get('ROUTER_MAINTENANCE_NAMESPACE', null),
486 7
                    'module' => Env::get('ROUTER_MAINTENANCE_MODULE', null),
487 7
                    'controller' => Env::get('ROUTER_MAINTENANCE_CONTROLLER', 'error'),
488 7
                    'task' => Env::get('ROUTER_MAINTENANCE_CONTROLLER', 'error'),
489 7
                    'action' => Env::get('ROUTER_MAINTENANCE_ACTION', 'forbidden'),
490 7
                ],
491 7
                'unauthorized' => [
492 7
                    'namespace' => Env::get('ROUTER_MAINTENANCE_NAMESPACE', null),
493 7
                    'module' => Env::get('ROUTER_MAINTENANCE_MODULE', null),
494 7
                    'controller' => Env::get('ROUTER_MAINTENANCE_CONTROLLER', 'error'),
495 7
                    'task' => Env::get('ROUTER_MAINTENANCE_CONTROLLER', 'error'),
496 7
                    'action' => Env::get('ROUTER_MAINTENANCE_ACTION', 'unauthorized'),
497 7
                ],
498 7
                'maintenance' => [
499 7
                    'namespace' => Env::get('ROUTER_MAINTENANCE_NAMESPACE', null),
500 7
                    'module' => Env::get('ROUTER_MAINTENANCE_MODULE', null),
501 7
                    'controller' => Env::get('ROUTER_MAINTENANCE_CONTROLLER', 'error'),
502 7
                    'task' => Env::get('ROUTER_MAINTENANCE_CONTROLLER', 'error'),
503 7
                    'action' => Env::get('ROUTER_MAINTENANCE_ACTION', 'maintenance'),
504 7
                ],
505 7
                'error' => [
506 7
                    'namespace' => Env::get('ROUTER_ERROR_NAMESPACE', null),
507 7
                    'module' => Env::get('ROUTER_ERROR_MODULE', null),
508 7
                    'controller' => Env::get('ROUTER_ERROR_CONTROLLER', 'error'),
509 7
                    'task' => Env::get('ROUTER_ERROR_CONTROLLER', 'error'),
510 7
                    'action' => Env::get('ROUTER_ERROR_ACTION', 'index'),
511 7
                ],
512 7
            ],
513 7
    
514 7
            /**
515
             * View Configuration
516
             */
517
            'view' => [
518
                'minify' => Env::get('VIEW_MINIFY', false),
519 7
                'engines' => Env::get('VIEW_ENGINES', [
520 7
                    '.phtml' => \Phalcon\Mvc\View\Engine\Php::class,
521 7
                    '.volt' => \Phalcon\Mvc\View\Engine\Volt::class,
522 7
//                    '.mhtml' => \Phalcon\Mvc\View\Engine\Mustache::class,
523 7
//                    '.twig' => \Phalcon\Mvc\View\Engine\Twig::class,
524 7
//                    '.tpl' => \Phalcon\Mvc\View\Engine\Smarty::class
525
                ]),
526
            ],
527
            
528
            /**
529 7
             * Gravatar Configuration
530 7
             */
531 7
            'gravatar' => [
532 7
                'default_image' => Env::get('GRAVATAR_DEFAULT_IMAGE', 'identicon'),
533
                'size' => Env::get('GRAVATAR_SIZE', 24),
534
                'rating' => Env::get('GRAVATAR_RATING', 'pg'),
535
                'use_https' => Env::get('GRAVATAR_HTPPS', true),
536
            ],
537 7
            
538 7
            /**
539 7
             * reCaptcha Configuration
540 7
             */
541 7
            'reCaptcha' => [
542 7
                'siteKey' => Env::get('RECAPTCHA_KEY'),
543
                'secret' => Env::get('RECAPTCHA_SECRET'),
544
                'expectedHostname' => Env::get('RECAPTCHA_EXPECTED_HOSTNAME'),
545
                'expectedApkPackageName' => Env::get('RECAPTCHA_EXPECTED_APK_PACKAGE_NAME'),
546
                'expectedAction' => Env::get('RECAPTCHA_EXPECTED_ACTION', null),
547 7
                'scoreThreshold' => Env::get('RECAPTCHA_SCORE_THRESHOLD', 0.5),
548 7
            ],
549 7
            
550 7
            /**
551 7
             * Locale Service Settings
552 7
             */
553 7
            'locale' => [
554 7
                'default' => Env::get('LOCALE_DEFAULT', 'en'),
555
                'sessionKey' => Env::get('LOCALE_SESSION_KEY', 'zemit-locale'),
556
                'mode' => Env::get('LOCALE_MODE', Locale::MODE_SESSION_GEOIP),
557
                'allowed' => explode(',', Env::get('LOCALE_ALLOWED', 'en')),
558
            ],
559 7
            
560 7
            /**
561 7
             * Translate Service Settings
562 7
             */
563 7
            'translate' => [
564 7
                'locale' => Env::get('TRANSLATE_LOCALE', 'en_US.utf8'),
565 7
                'defaultDomain' => Env::get('TRANSLATE_DEFAULT_DOMAIN', 'messages'),
566 7
                'category' => Env::get('TRANSLATE_CATEGORY', LC_MESSAGES),
567 7
                'directory' => [
568 7
                    Env::get('TRANSLATE_DEFAULT_DOMAIN', 'messages') => Env::get('TRANSLATE_DEFAULT_PATH', CORE_PATH . 'Locales'),
569 7
                ],
570 7
            ],
571 7
            
572 7
            /**
573 7
             * Default Session Configuration
574 7
             */
575 7
            'session' => [
576 7
                'driver' => Env::get('SESSION_DRIVER', 'stream'),
577 7
                'drivers' => [
578 7
                    'stream' => [
579 7
                        'adapter' => Env::get('SESSION_STREAM_ADAPTER', \Phalcon\Session\Adapter\Stream::class),
580 7
                        'savePath' => Env::get('SESSION_STREAM_SAVE_PATH', '/tmp'),
581 7
                    ],
582 7
                    'memcached' => [
583 7
                        'adapter' => Env::get('SESSION_MEMCACHED_ADAPTER', \Phalcon\Session\Adapter\Libmemcached::class),
584 7
                        'servers' => [
585 7
                            [
586 7
                                'host' => Env::get('SESSION_MEMCACHED_HOST', Env::get('MEMCACHED_HOST', '127.0.0.1')),
587 7
                                'port' => Env::get('SESSION_MEMCACHED_PORT', Env::get('MEMCACHED_PORT', 11211)),
588 7
                                'weight' => Env::get('SESSION_MEMCACHED_WEIGHT', Env::get('MEMCACHED_WEIGHT', 100)),
589 7
                            ],
590 7
                        ],
591 7
                        'client' => [],
592 7
                    ],
593 7
                    'redis' => [
594 7
                        'adapter' => Env::get('SESSION_REDIS_ADAPTER', \Phalcon\Session\Adapter\Redis::class),
595 7
                        'defaultSerializer' => Env::get('SESSION_REDIS_DEFAULT_SERIALIZER', Env::get('REDIS_DEFAULT_SERIALIZER', 'php')),
596 7
                        'lifetime' => Env::get('SESSION_REDIS_LIFETIME', Env::get('REDIS_LIFETIME', 3600)),
597 7
                        'serializer' => Env::get('SESSION_REDIS_SERIALIZER', Env::get('REDIS_SERIALIZER', null)),
598 7
                        'host' => Env::get('SESSION_REDIS_HOST', Env::get('REDIS_HOST', '127.0.0.1')),
599 7
                        'port' => Env::get('SESSION_REDIS_PORT', Env::get('REDIS_PORT', 6379)),
600 7
                        'index' => Env::get('SESSION_REDIS_INDEX', Env::get('REDIS_INDEX', 1)),
601 7
                        'auth' => Env::get('SESSION_REDIS_AUTH', Env::get('REDIS_AUTH', null)),
602 7
                        'persistent' => Env::get('SESSION_REDIS_PERSISTENT', Env::get('REDIS_PERSISTENT', 0)),
603 7
                        'socket' => Env::get('SESSION_REDIS_SOCKET', Env::get('REDIS_SOCKET', null)),
604 7
                    ],
605 7
                    'noop' => [
606 7
                        'adapter' => Env::get('SESSION_NOOP_ADAPTER', \Phalcon\Session\Adapter\Noop::class),
607 7
                    ],
608 7
                ],
609 7
                'default' => [
610 7
                    'prefix' => Env::get('SESSION_PREFIX', 'zemit_session_'),
611 7
                    'uniqueId' => Env::get('SESSION_UNIQUE_ID', 'zemit_'),
612 7
                    'lifetime' => Env::get('SESSION_LIFETIME', 3600),
613 7
                ],
614 7
                'ini' => [
615 7
                    'session.save_path' => Env::get('SESSION_SAVE_PATH', ''),
616 7
                    'session.name' => Env::get('SESSION_NAME', 'PHPSESSID'),
617 7
                    'session.save_handler' => Env::get('SESSION_SAVE_HANDLER', 'files'),
618 7
                    'session.auto_start' => Env::get('SESSION_AUTO_START', '0'),
619 7
                    'session.gc_probability' => Env::get('SESSION_GC_PROBABILITY', '1'),
620 7
                    'session.gc_divisor' => Env::get('SESSION_GC_DIVISOR', '100'),
621 7
                    'session.gc_maxlifetime' => Env::get('SESSION_GC_MAXLIFETIME', '1440'),
622 7
                    'session.serialize_handler' => Env::get('SESSION_SERIALIZE_HANDLER', 'php'),
623 7
                    'session.cookie_lifetime' => Env::get('SESSION_COOKIE_LIFETIME', '0'),
624 7
                    'session.cookie_path' => Env::get('SESSION_COOKIE_PATH', '/'),
625 7
                    'session.cookie_domain' => Env::get('SESSION_COOKIE_DOMAIN', ''),
626 7
                    'session.cookie_secure' => Env::get('SESSION_COOKIE_SECURE', '1'),
627 7
                    'session.cookie_httponly' => Env::get('SESSION_COOKIE_HTTPONLY', '1'),
628 7
                    'session.cookie_samesite' => Env::get('SESSION_COOKIE_SAMESITE', ''),
629 7
                    'session.use_strict_mode' => Env::get('SESSION_USE_STRICT_MODE', '0'),
630 7
                    'session.use_cookies' => Env::get('SESSION_USE_COOKIES', '1'),
631 7
                    'session.use_only_cookies' => Env::get('SESSION_USE_ONLY_COOKIES', '1'),
632 7
                    'session.referer_check' => Env::get('SESSION_REFERER_CHECK', ''),
633 7
                    'session.cache_limiter' => Env::get('SESSION_CACHE_LIMITER', 'nocache'),
634 7
                    'session.cache_expire' => Env::get('SESSION_CACHE_EXPIRE', '180'),
635 7
                    'session.use_trans_sid' => Env::get('SESSION_USE_TRANS_SID', '0'),
636 7
                    'session.trans_sid_tags' => Env::get('SESSION_TRANS_SID_TAGS', 'a=href,area=href,frame=src,form='),
637
                    'session.trans_sid_hosts' => Env::get('SESSION_TRANS_SID_HOSTS', $_SERVER['HTTP_HOST'] ?? ''),
638
                    'session.sid_length' => Env::get('SESSION_SID_LENGTH', '32'),
639
                    'session.sid_bits_per_character' => Env::get('SESSION_SID_BITS_PER_CHARACTER', '4'),
640
                    'session.upload_progress.enabled' => Env::get('SESSION_UPLOAD_PROGRESS_ENABLED', '1'),
641 7
                    'session.upload_progress.cleanup' => Env::get('SESSION_UPLOAD_PROGRESS_CLEANUP', '1'),
642 7
                    'session.upload_progress.prefix' => Env::get('SESSION_UPLOAD_PROGRESS_PREFIX', 'upload_progress_'),
643
                    'session.upload_progress.name' => Env::get('SESSION_UPLOAD_PROGRESS_NAME', 'PHP_SESSION_UPLOAD_PROGRESS'),
644 7
                    'session.upload_progress.freq' => Env::get('SESSION_UPLOAD_PROGRESS_FREQ', '1%'),
645 7
                    'session.upload_progress.min_freq' => Env::get('SESSION_UPLOAD_PROGRESS_MIN_FREQ', '1'),
646 7
                    'session.lazy_write' => Env::get('SESSION_LAZY_WRITE', '1'),
647 7
                    'session.hash_function' => Env::get('SESSION_HASH_FUNCTION', '0'),
648 7
                    'session.hash_bits_per_character' => Env::get('SESSION_HASH_BITS_PER_CHARACTER', '4'),
649 7
                    'session.entropy_file' => Env::get('SESSION_ENTROPY_FILE', ''),
650 7
                    'session.entropy_length' => Env::get('SESSION_ENTROPY_LENGTH', '0'),
651 7
                ],
652
            ],
653
            
654 7
            /**
655 7
             * Default module/plugin structure
656 7
             */
657 7
            'module' => [
658 7
                'dir' => [
659 7
                    // default
660 7
                    'modules' => Env::get('MODULE_DIR_MODULES', 'Modules/'),
661 7
                    'controllers' => Env::get('MODULE_DIR_CONTROLLER', 'Controllers/'),
662
                    'tasks' => Env::get('MODULE_DIR_TASKS', 'Tasks/'),
663
                    'models' => Env::get('MODULE_DIR_MODELS', 'Models/'),
664
                    'views' => Env::get('MODULE_DIR_VIEWS', 'Views/'),
665
                    'bootstrap' => Env::get('MODULE_DIR_BOOTSTRAP', 'Bootstrap/'),
666 7
                    'locales' => Env::get('MODULE_DIR_LOCALES', 'Locales/'),
667 7
                    'config' => Env::get('MODULE_DIR_CONFIG', 'Config/'),
668 7
                    
669 7
                    // private
670 7
                    'migrations' => Env::get('MODULE_DIR_MIGRATION', 'Private/migrations/'),
671 7
                    'cache' => Env::get('MODULE_DIR_MIGRATION', 'Private/migrations/'),
672 7
                    'logs' => Env::get('MODULE_DIR_LOGS', 'Private/migrations/'),
673 7
                    'backups' => Env::get('MODULE_DIR_BACKUPS', 'Private/backups/'),
674 7
                    'files' => Env::get('MODULE_DIR_FILES', 'Private/files/'),
675 7
                    'trash' => Env::get('MODULE_DIR_TRASH', 'Private/trash/'),
676 7
                ],
677 7
            ],
678 7
            
679 7
            /**
680 7
             * Default security settings
681 7
             */
682 7
            'security' => [ // phalcon security config
683
                'workfactor' => Env::get('SECURITY_WORKFACTOR', 12), // workfactor for the phalcon security service
684
                'salt' => Env::get('SECURITY_SALT', '>mY.Db5fR?k%~<ZWf\}Zh35_IFC]#0Xx'), // salt for the phalcon security service
685
                'jwt' => [
686
                    'signer' => Env::get('SECURITY_JWT_SIGNER', \Phalcon\Security\JWT\Signer\Hmac::class),
687 7
                    'algo' => Env::get('SECURITY_JWT_ALGO', 'sha512'),
688 7
                    'contentType' => Env::get('SECURITY_JWT_CONTENT_TYPE', 'application/json'),
689 7
                    'expiration' => $now->modify(Env::get('SECURITY_JWT_EXPIRATION', '+1 day'))->getTimestamp(),
690 7
                    'notBefore' => $now->modify(Env::get('SECURITY_JWT_NOT_BEFORE', '-1 minute'))->getTimestamp(),
691 7
                    'issuedAt' => $now->modify(Env::get('SECURITY_JWT_ISSUED_AT', 'now'))->getTimestamp(),
692 7
                    'issuer' => Env::get('SECURITY_JWT_ISSUER', 'ZEMIT_CORE_DEFAULT_ISSUER'),
693 7
                    'audience' => Env::get('SECURITY_JWT_AUDIENCE', 'ZEMIT_CORE_DEFAULT_AUDIENCE'),
694 7
                    'id' => Env::get('SECURITY_JWT_ID', 'ZEMIT_CORE_DEFAULT_ID'),
695 7
                    'subject' => Env::get('SECURITY_JWT_SUBJECT', 'ZEMIT_CORE_DEFAULT_SUBJECT'),
696 7
                    'passphrase' => Env::get('SECURITY_JWT_PASSPHRASE', 'Tf0PHY/^yDdJs*~)?x#xCNj_N[jW/`c*'),
697 7
                ],
698 7
            ],
699 7
    
700 7
            /**
701 7
             * Default crypt settings
702 7
             */
703 7
            'crypt' => [
704 7
                'cipher' => Env::get('CRYPT_CIPHER', 'aes-256-cfb'),
705 7
                'useSigning' => Env::get('CRYPT_USE_SIGNING', false),
706 7
            ],
707 7
            
708 7
            /**
709 7
             * Cache drivers configs
710 7
             */
711 7
            'cache' => [
712 7
                'cli' => Env::get('CACHE_DRIVER_CLI', 'memory'),
713 7
                'driver' => Env::get('CACHE_DRIVER', 'memory'),
714 7
                'drivers' => [
715 7
                    'memory' => [
716 7
                        'adapter' => Env::get('CACHE_MEMORY_ADAPTER', \Phalcon\Cache\Adapter\Memory::class),
717 7
                    ],
718 7
                    'apcu' => [
719 7
                        'adapter' => Env::get('CACHE_APCU_ADAPTER', \Phalcon\Cache\Adapter\Apcu::class),
720 7
                    ],
721 7
                    'stream' => [
722 7
                        'adapter' => Env::get('CACHE_STREAM_ADAPTER', \Phalcon\Cache\Adapter\Stream::class),
723 7
                        'cacheDir' => Env::get('CACHE_STREAM_DIR', PRIVATE_PATH . '/cache/data/'),
724 7
                    ],
725 7
                    'memcached' => [
726 7
                        'adapter' => Env::get('CACHE_MEMCACHED_ADAPTER', \Phalcon\Cache\Adapter\Libmemcached::class),
727 7
                        'servers' => [
728 7
                            [
729 7
                                'host' => Env::get('CACHE_MEMCACHED_HOST', Env::get('MEMCACHED_HOST', '127.0.0.1')),
730
                                'port' => Env::get('CACHE_MEMCACHED_PORT', Env::get('MEMCACHED_PORT', 11211)),
731
                                'weight' => Env::get('CACHE_MEMCACHED_WEIGHT', Env::get('MEMCACHED_WEIGHT', 100)),
732
                            ],
733
                        ],
734 7
                    ],
735 7
                    'redis' => [
736 7
                        'adapter' => Env::get('CACHE_REDIS_ADAPTER', \Phalcon\Cache\Adapter\Redis::class),
737 7
                        'defaultSerializer' => Env::get('CACHE_REDIS_DEFAULT_SERIALIZER', Env::get('REDIS_DEFAULT_SERIALIZER', 'php')),
738 7
                        'lifetime' => Env::get('CACHE_REDIS_LIFETIME', Env::get('REDIS_LIFETIME', 3600)),
739 7
                        'serializer' => Env::get('CACHE_REDIS_SERIALIZER', Env::get('REDIS_SERIALIZER', null)),
740 7
                        'host' => Env::get('CACHE_REDIS_HOST', Env::get('REDIS_HOST', '127.0.0.1')),
741 7
                        'port' => Env::get('CACHE_REDIS_PORT', Env::get('REDIS_PORT', 6379)),
742 7
                        'index' => Env::get('CACHE_REDIS_INDEX', Env::get('REDIS_INDEX', 1)),
743 7
                        'auth' => Env::get('CACHE_REDIS_AUTH', Env::get('REDIS_AUTH', null)),
744 7
                        'persistent' => Env::get('CACHE_REDIS_PERSISTENT', Env::get('REDIS_PERSISTENT', null)),
745 7
                        'socket' => Env::get('CACHE_REDIS_SOCKET', Env::get('REDIS_SOCKET', null)),
746 7
                    ],
747 7
                ],
748 7
                'default' => [
749 7
                    'prefix' => Env::get('CACHE_PREFIX', 'zemit_cache_'),
750 7
                    'lifetime' => Env::get('CACHE_LIFETIME', 86400),
751 7
                    'defaultSerializer' => Env::get('CACHE_DEFAULT_SERIALIZER', 'Php'),
752 7
                ],
753 7
            ],
754 7
            
755 7
            /**
756 7
             * Metadata Configuration
757 7
             */
758 7
            'metadata' => [
759 7
                'driverCli' => Env::get('METADATA_DRIVER_CLI', 'memory'),
760 7
                'driver' => Env::get('METADATA_DRIVER', 'memory'),
761 7
                'drivers' => [
762 7
                    'apcu' => [
763 7
                        'adapter' => Env::get('METADATA_APCU_ADAPTER', \Phalcon\Mvc\Model\MetaData\Apcu::class),
764 7
                    ],
765 7
                    'memory' => [
766 7
                        'adapter' => Env::get('METADATA_MEMORY_ADAPTER', \Phalcon\Mvc\Model\MetaData\Memory::class),
767 7
                    ],
768 7
                    'stream' => [
769 7
                        'adapter' => Env::get('METADATA_STREAM_ADAPTER', \Phalcon\Mvc\Model\MetaData\Stream::class),
770 7
                        'metaDataDir' => Env::get('METADATA_STREAM_DIR', PRIVATE_PATH . '/cache/metadata/'),
771 7
                    ],
772 7
                    'memcached' => [
773 7
                        'adapter' => Env::get('METADATA_MEMCACHED_ADAPTER', \Phalcon\Mvc\Model\MetaData\Libmemcached::class),
774 7
                        'servers' => [
775 7
                            [
776 7
                                'host' => Env::get('METADATA_MEMCACHED_HOST', Env::get('MEMCACHED_HOST', '127.0.0.1')),
777 7
                                'port' => Env::get('METADATA_MEMCACHED_PORT', Env::get('MEMCACHED_PORT', 11211)),
778 7
                                'weight' => Env::get('METADATA_MEMCACHED_WEIGHT', Env::get('MEMCACHED_WEIGHT', 100)),
779
                            ],
780
                        ],
781
                    ],
782
                    'redis' => [
783
                        'adapter' => Env::get('METADATA_REDIS_ADAPTER', \Phalcon\Mvc\Model\MetaData\Redis::class),
784
                        'defaultSerializer' => Env::get('METADATA_REDIS_DEFAULT_SERIALIZER', Env::get('REDIS_DEFAULT_SERIALIZER', 'php')),
785
                        'lifetime' => Env::get('METADATA_REDIS_LIFETIME', Env::get('REDIS_LIFETIME', 3600)),
786
                        'serializer' => Env::get('METADATA_REDIS_SERIALIZER', Env::get('REDIS_SERIALIZER', null)),
787
                        'host' => Env::get('METADATA_REDIS_HOST', Env::get('REDIS_HOST', '127.0.0.1')),
788
                        'port' => Env::get('METADATA_REDIS_PORT', Env::get('REDIS_PORT', 6379)),
789 7
                        'index' => Env::get('METADATA_REDIS_INDEX', Env::get('REDIS_INDEX', 1)),
790 7
                        'auth' => Env::get('METADATA_REDIS_AUTH', Env::get('REDIS_AUTH', null)),
791 7
                        'persistent' => Env::get('METADATA_REDIS_PERSISTENT', Env::get('REDIS_PERSISTENT', null)),
792 7
                        'socket' => Env::get('METADATA_REDIS_SOCKET', Env::get('REDIS_SOCKET', null)),
793 7
                    ],
794 7
                    'wincache' => [
795 7
                        'adapter' => Env::get('METADATA_WINCACHE_ADAPTER', \Phalcon\Mvc\Model\MetaData\Wincache::class),
796 7
                    ],
797 7
                ],
798 7
                'default' => [
799 7
                    'lifetime' => Env::get('METADATA_LIFETIME', 172800),
800 7
                    'prefix' => Env::get('METADATA_PREFIX', 'zemit_metadata_'),
801 7
                ],
802 7
            ],
803 7
            
804 7
            /**
805 7
             * Annotations Configuration
806 7
             * - Memory
807 7
             * - Apcu
808 7
             * - Stream
809 7
             * - Memcached
810 7
             * - Redis
811 7
             * - Aerospike
812 7
             */
813 7
            'annotations' => [
814 7
                'driver' => Env::get('ANNOTATIONS_DRIVER', 'memory'),
815 7
                'drivers' => [
816 7
                    'memory' => [
817 7
                        'adapter' => Env::get('ANNOTATIONS_MEMORY_ADAPTER', \Phalcon\Annotations\Adapter\Memory::class),
818 7
                    ],
819 7
                    'apcu' => [
820 7
                        'adapter' => Env::get('ANNOTATIONS_APCU_ADAPTER', \Phalcon\Annotations\Adapter\Apcu::class),
821 7
                    ],
822 7
                    'file' => [
823 7
                        'adapter' => Env::get('ANNOTATIONS_STREAM_ADAPTER', \Phalcon\Annotations\Adapter\Stream::class),
824 7
                        'annotationsDir' => Env::get('ANNOTATIONS_STREAM_DIR', PRIVATE_PATH . '/cache/annotations'),
825 7
                    ],
826 7
                    'memcached' => [
827 7
                        'adapter' => Env::get('ANNOTATIONS_MEMCACHED_ADAPTER', \Phalcon\Annotations\Adapter\Memcached::class),
828 7
                        'servers' => [
829 7
                            [
830 7
                                'host' => Env::get('ANNOTATIONS_MEMCACHED_HOST', Env::get('MEMCACHED_HOST', '127.0.0.1')),
831
                                'port' => Env::get('ANNOTATIONS_MEMCACHED_PORT', Env::get('MEMCACHED_PORT', 11211)),
832
                                'weight' => Env::get('ANNOTATIONS_MEMCACHED_WEIGHT', Env::get('MEMCACHED_WEIGHT', 100)),
833
                            ],
834
                        ],
835 7
                    ],
836 7
                    'redis' => [
837 7
                        'adapter' => Env::get('ANNOTATIONS_REDIS_ADAPTER', \Phalcon\Annotations\Adapter\Redis::class),
838 7
                        'defaultSerializer' => Env::get('ANNOTATIONS_REDIS_DEFAULT_SERIALIZER', Env::get('REDIS_DEFAULT_SERIALIZER', 'php')),
839 7
                        'lifetime' => Env::get('ANNOTATIONS_REDIS_LIFETIME', Env::get('REDIS_LIFETIME', 3600)),
840 7
                        'serializer' => Env::get('ANNOTATIONS_REDIS_SERIALIZER', Env::get('REDIS_SERIALIZER', null)),
841 7
                        'host' => Env::get('ANNOTATIONS_REDIS_HOST', Env::get('REDIS_HOST', '127.0.0.1')),
842 7
                        'port' => Env::get('ANNOTATIONS_REDIS_PORT', Env::get('REDIS_PORT', 6379)),
843 7
                        'index' => Env::get('ANNOTATIONS_REDIS_INDEX', Env::get('REDIS_INDEX', 1)),
844 7
                        'auth' => Env::get('ANNOTATIONS_REDIS_AUTH', Env::get('REDIS_AUTH', null)),
845 7
                        'persistent' => Env::get('ANNOTATIONS_REDIS_PERSISTENT', Env::get('REDIS_PERSISTENT', null)),
846 7
                        'socket' => Env::get('ANNOTATIONS_REDIS_SOCKET', Env::get('REDIS_SOCKET', null)),
847 7
                    ],
848 7
                    'aerospike' => [
849 7
                        'adapter' => Env::get('ANNOTATIONS_AEROSPIKE_ADAPTER', \Phalcon\Annotations\Adapter\Aerospike::class),
850 7
                    ],
851 7
                ],
852 7
                'default' => [
853
                    'prefix' => Env::get('ANNOTATIONS_PREFIX', 'zemit_annotations_'),
854
                    'lifetime' => Env::get('ANNOTATIONS_LIFETIME', 86400),
855
                ],
856 7
            ],
857 7
            
858 7
            /**
859 7
             * Database configuration
860 7
             */
861 7
            'database' => [
862 7
                'default' => Env::get('DATABASE_ADAPTER', 'mysql'),
863 7
                'drivers' => [
864 7
                    'mysql' => [
865 7
                        'adapter' => 'Mysql',
866 7
                        'dialectClass' => Env::get('DATABASE_DIALECT_CLASS', \Zemit\Db\Dialect\Mysql::class),
867 7
                        'host' => Env::get('DATABASE_HOST', 'localhost'),
868
                        'port' => Env::get('DATABASE_PORT', 3306),
869
                        'dbname' => Env::get('DATABASE_DBNAME', ''),
870
                        'username' => Env::get('DATABASE_USERNAME', 'root'),
871
                        'password' => Env::get('DATABASE_PASSWORD', ''),
872 7
                        'charset' => Env::get('DATABASE_CHARSET', 'utf8'),
873 7
                        'options' => [
874 7
                            PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES ' . Env::get('DATABASE_CHARSET', 'utf8'),
875 7
                            PDO::ATTR_EMULATE_PREPARES => Env::get('DATABASE_PDO_EMULATE_PREPARES', false), // https://stackoverflow.com/questions/10113562/pdo-mysql-use-pdoattr-emulate-prepares-or-not
876 7
                            PDO::ATTR_STRINGIFY_FETCHES => Env::get('DATABASE_PDO_STRINGIFY_FETCHES', false),
877 7
                            PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => Env::get('MYSQL_ATTR_SSL_VERIFY_SERVER_CERT', true),
878 7
                        ],
879 7
                        /**
880 7
                         * ReadOnly Configuration
881 7
                         */
882 7
                        'readOnly' => [
883 7
                            'enable' => Env::get('DATABASE_READONLY_ENABLE', false),
884 7
                            'host' => Env::get('DATABASE_READONLY_HOST'),
885 7
                            'port' => Env::get('DATABASE_READONLY_PORT'),
886 7
                            'dbname' => Env::get('DATABASE_READONLY_DBNAME'),
887 7
                            'username' => Env::get('DATABASE_READONLY_USERNAME'),
888 7
                            'password' => Env::get('DATABASE_READONLY_PASSWORD'),
889 7
                            'charset' => Env::get('DATABASE_READONLY_CHARSET'),
890 7
                        ],
891 7
                    ],
892 7
                ],
893 7
            ],
894 7
            
895 7
            /**
896 7
             * Mailer configuration
897 7
             */
898 7
            'mailer' => [
899 7
                'driver' => Env::get('MAILER_DRIVER', 'sendmail'),
900 7
                'drivers' => [
901 7
                    'mail' => [
902 7
                        'driver' => 'mail',
903 7
                    ],
904
                    'sendmail' => [
905
                        'driver' => 'sendmail',
906
                        'sendmail' => Env::get('MAILER_SENDMAIL', '/usr/sbin/sendmail -bs'),
907
                    ],
908 7
                    'smtp' => [
909 7
                        'driver' => 'smtp',
910 7
                        'host' => Env::get('MAILER_SMTP_HOST', 'localhost'),
911 7
                        'port' => Env::get('MAILER_SMTP_PORT', 25),
912
                        'encryption' => Env::get('MAILER_SMTP_ENCRYPTION', ''),
913
                        'username' => Env::get('MAILER_SMTP_USERNAME', ''),
914
                        'password' => Env::get('MAILER_SMTP_PASSWORD', ''),
915
                    ],
916 7
                ],
917 7
                'default' => [
918 7
                    'charset' => Env::get('MAILER_CHARSET', 'utf-8'),
919 7
                    'viewsDir' => Env::get('MAILER_VIEWS_DIR', APP_PATH . '/Modules/Frontend/Views/'),
920 7
                    'baseUri' => Env::get('MAILER_BASE_URI', null),
921 7
                ],
922 7
                'from' => [
923 7
                    'email' => Env::get('MAILER_FROM_EMAIL', 'zemit@localhost'),
924
                    'name' => Env::get('MAILER_FROM_NAME', 'Zemit'),
925
                ],
926
                'to' => [...explode(',', Env::get('MAILER_TO_EMAIL', ''))],
927
                'cc' => [...explode(',', Env::get('MAILER_CC_EMAIL', ''))],
928 7
                'bcc' => [...explode(',', Env::get('MAILER_BCC_EMAIL', ''))],
929 7
            ],
930 7
            
931 7
            /**
932 7
             * Cookies
933 7
             */
934 7
            'cookies' => [
935 7
                'useEncryption' => Env::get('COOKIES_USE_ENCRYPTION', true),
936 7
                'signKey' => Env::get('COOKIES_SIGN_KEY', ''),
937 7
            ],
938 7
            
939 7
            /**
940 7
             * AWS - Amazon Web Service
941 7
             */
942 7
            'aws' => [
943 7
                'region' => Env::get('AWS_REGION', 'ca-central-1'),
944 7
                'version' => Env::get('AWS_VERSION', 'latest'),
945 7
                'credentials' => [
946 7
                    'key' => Env::get('AWS_CREDENTIALS_KEY', ''),
947 7
                    'secret' => Env::get('AWS_CREDENTIALS_SECRET', ''),
948 7
                ],
949 7
            ],
950 7
    
951 7
            /**
952
             * Facebook SDK
953 7
             */
954 7
            'facebook' => [
955
            
956 7
            ],
957 7
            
958
            /**
959 7
             * Oauth2
960 7
             */
961
            'oauth2' => [
962 7
                'client' => [
963 7
                    'clientId' => Env::get('OAUTH2_CLIENT_ID'),
964
                    'clientSecret' => Env::get('OAUTH2_CLIENT_SECRET'),
965 7
                    'redirectUri' => Env::get('OAUTH2_CLIENT_REDIRECT_URI', '/oauth2/client/redirect'),
966 7
                    'urlAuthorize' => Env::get('OAUTH2_CLIENT_URL_AUTHORIZE', '/oauth2/client/authorize'),
967
                    'urlAccessToken' => Env::get('OAUTH2_CLIENT_URL_ACCESS_TOKEN', '/oauth2/client/token'),
968 7
                    'urlResourceOwnerDetails' => Env::get('OAUTH2_CLIENT_URL_RESOURCE', '/oauth2/client/resource'),
969 7
                    'proxy' => Env::get('OAUTH2_CLIENT_PROXY', null),
970 7
                    'verify' => Env::get('OAUTH2_CLIENT_VERIFY', true),
971 7
                ],
972
                'facebook' => [
973
                    'clientId' => Env::get('OAUTH2_FACEBOOK_CLIENT_ID'),
974
                    'clientSecret' => Env::get('OAUTH2_FACEBOOK_CLIENT_SECRET'),
975
                    'redirectUri' => Env::get('OAUTH2_FACEBOOK_CLIENT_REDIRECT_URI', '/oauth2/facebook/callback'),
976
                    'graphApiVersion' => Env::get('OAUTH2_FACEBOOK_GRAPH_API_VERSION', 'v2.10'),
977 7
                ],
978 7
                'google' => [
979 7
                    'clientId' => Env::get('OAUTH2_GOOGLE_CLIENT_ID'),
980 7
                    'clientSecret' => Env::get('OAUTH2_GOOGLE_CLIENT_SECRET'),
981 7
                    'redirectUri' => Env::get('OAUTH2_FACEBOOK_CLIENT_REDIRECT_URI', '/oauth2/google/callback'),
982 7
                    '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
983 7
                ],
984 7
                'instagram' => [
985 7
                
986
                ],
987
                'linked' => [
988
                
989
                ],
990 7
                'twitter' => [
991 7
                
992 7
                ],
993
                'github' => [
994
                
995
                ],
996
                'apple' => [
997 7
                
998
                ],
999
            ],
1000
            
1001
            'openai' => [
1002 7
                'secretKey' => Env::get('OPENAI_SECRET_KEY'),
1003
                'organizationId' => Env::get('OPENAI_ORGANIZATION_ID'),
1004
            ],
1005
            
1006
            /**
1007 7
             * Imap
1008
             * https://packagist.org/packages/php-imap/php-imap
1009 7
             */
1010 7
            'imap' => [
1011 7
                'path' => Env::get('IMAP_PATH'), // IMAP server and mailbox folder
1012 7
                'login' => Env::get('IMAP_LOGIN'), // Username for the before configured mailbox
1013 7
                'password' => Env::get('IMAP_PASSWORD'), // Password for the before configured username
1014
                'attachmentsDir' => Env::get('IMAP_ATTACHMENTS_DIR'), // Server encoding (optional)
1015 7
                'serverEncoding' => Env::get('IMAP_SERVER_ENCODING', 'UTF-8'), // Directory, where attachments will be saved (optional)
1016 7
                'trimImapPath' => Env::get('IMAP_TRIM_IMAP_PATH', true),   // Trim leading/ending whitespaces of IMAP path (optional)
1017 7
                'attachmentFilenameMode' => Env::get('IMAP_ATTACHMENT_FILENAME_MODE', false), // Attachment filename mode (optional; false = random filename; true = original filename)
1018 7
            ],
1019 7
            
1020 7
            /**
1021 7
             * Dotenv
1022 7
             */
1023
            'dotenv' => [
1024 7
                'filePath' => '',
1025 7
            ],
1026 7
            
1027 7
            /**
1028 7
             * Client config to pass to front-end
1029 7
             */
1030
            'client' => [],
1031 7
            
1032 7
            /**
1033 7
             * Application permissions
1034 7
             */
1035 7
            'permissions' => [
1036
                
1037 7
                /**
1038 7
                 * Feature permissions
1039 7
                 */
1040 7
                'features' => [
1041 7
                    
1042 7
                    'test' => [
1043
                        'components' => [
1044 7
                            Api\Controllers\TestController::class => ['*'],
1045 7
                        ],
1046 7
                    ],
1047 7
                    
1048 7
                    'base' => [
1049
                        'components' => [
1050 7
                            Api\Controllers\AuthController::class => ['get'],
1051 7
                            Models\Audit::class => ['create'],
1052 7
                            Models\AuditDetail::class => ['create'],
1053 7
                            Models\Session::class => ['*'],
1054 7
                        ],
1055 7
                    ],
1056 7
                    
1057 7
                    'login' => [
1058 7
                        'components' => [
1059 7
                            Api\Controllers\AuthController::class => ['login'],
1060 7
                            Models\User::class => ['find'],
1061 7
                        ],
1062 7
                    ],
1063
                    
1064 7
                    'logout' => [
1065 7
                        'components' => [
1066 7
                            Api\Controllers\AuthController::class => ['logout'],
1067 7
                        ],
1068 7
                    ],
1069 7
                    
1070 7
                    'register' => [
1071 7
                        'components' => [
1072 7
                            Api\Controllers\AuthController::class => ['register'],
1073 7
                            Models\User::class => ['find', 'create'],
1074 7
                        ],
1075 7
                    ],
1076
                    
1077 7
                    'cron' => [
1078 7
                        'components' => [
1079 7
                            Cli\Tasks\CronTask::class => ['*'],
1080 7
                        ],
1081 7
                    ],
1082 7
                    
1083 7
                    'manageRoleList' => [
1084 7
                        'components' => [
1085 7
                            Api\Controllers\RoleController::class => ['*'],
1086 7
                            Models\Role::class => ['*'],
1087 7
                            Models\UserRole::class => ['*'],
1088 7
                        ],
1089
                        'behaviors' => [
1090 7
                            Api\Controllers\RoleController::class => [
1091 7
                                Behavior\Skip\SkipIdentityCondition::class,
1092 7
                                Behavior\Skip\SkipSoftDeleteCondition::class,
1093 7
                            ],
1094 7
                        ],
1095 7
                    ],
1096 7
                    
1097 7
                    'manageGroupList' => [
1098 7
                        'components' => [
1099 7
                            Api\Controllers\GroupController::class => ['*'],
1100 7
                            Models\Group::class => ['*'],
1101 7
                        ],
1102
                        'behaviors' => [
1103 7
                            Api\Controllers\GroupController::class => [
1104 7
                                Behavior\Skip\SkipIdentityCondition::class,
1105 7
                                Behavior\Skip\SkipSoftDeleteCondition::class,
1106 7
                            ],
1107 7
                        ],
1108 7
                    ],
1109 7
                    
1110 7
                    'manageTypeList' => [
1111 7
                        'components' => [
1112 7
                            Api\Controllers\TypeController::class => ['*'],
1113 7
                            Models\Group::class => ['*'],
1114 7
                        ],
1115
                        'behaviors' => [
1116 7
                            Api\Controllers\TypeController::class => [
1117 7
                                Behavior\Skip\SkipIdentityCondition::class,
1118 7
                                Behavior\Skip\SkipSoftDeleteCondition::class,
1119 7
                            ],
1120 7
                        ],
1121 7
                    ],
1122 7
                    
1123 7
                    'manageLangList' => [
1124 7
                        'components' => [
1125 7
                            Api\Controllers\LangController::class => ['*'],
1126 7
                            Models\Lang::class => ['*'],
1127 7
                        ],
1128
                        'behaviors' => [
1129 7
                            Api\Controllers\LangController::class => [
1130 7
                                Behavior\Skip\SkipIdentityCondition::class,
1131 7
                                Behavior\Skip\SkipSoftDeleteCondition::class,
1132 7
                            ],
1133 7
                        ],
1134 7
                    ],
1135 7
                    
1136 7
                    'manageUserList' => [
1137 7
                        'components' => [
1138 7
                            Api\Controllers\UserController::class => ['*'],
1139 7
                            Models\User::class => ['*'],
1140 7
                        ],
1141
                        'behaviors' => [
1142 7
                            Api\Controllers\UserController::class => [
1143 7
                                Behavior\Skip\SkipIdentityCondition::class,
1144 7
                                Behavior\Skip\SkipSoftDeleteCondition::class,
1145 7
                            ],
1146 7
                        ],
1147 7
                    ],
1148 7
                    
1149 7
                    'manageTemplateList' => [
1150 7
                        'components' => [
1151 7
                            Api\Controllers\TemplateController::class => ['*'],
1152 7
                            Models\Template::class => ['*'],
1153 7
                        ],
1154 7
                        'behaviors' => [
1155
                            Api\Controllers\TemplateController::class => [
1156 7
                                Behavior\Skip\SkipIdentityCondition::class,
1157 7
                                Behavior\Skip\SkipSoftDeleteCondition::class,
1158 7
                            ],
1159 7
                        ],
1160 7
                    ],
1161 7
                    
1162 7
                    'manageAuditList' => [
1163 7
                        'components' => [
1164 7
                            Api\Controllers\AuditController::class => ['*'],
1165 7
                            Models\Audit::class => ['*'],
1166 7
                        ],
1167 7
                        'behaviors' => [
1168
                            Api\Controllers\AuditController::class => [
1169 7
                                Behavior\Skip\SkipIdentityCondition::class,
1170 7
                                Behavior\Skip\SkipSoftDeleteCondition::class,
1171 7
                            ],
1172 7
                        ],
1173 7
                    ],
1174 7
                    
1175 7
                    'manageSiteList' => [
1176 7
                        'components' => [
1177 7
                            Api\Controllers\SiteController::class => ['*'],
1178 7
                            Models\Site::class => ['*'],
1179 7
                            Models\SiteLang::class => ['*'],
1180 7
                        ],
1181 7
                        'behaviors' => [
1182
                            Api\Controllers\SiteController::class => [
1183
                                Behavior\Skip\SkipIdentityCondition::class,
1184
                                Behavior\Skip\SkipSoftDeleteCondition::class,
1185
                            ],
1186 7
                        ],
1187
                    ],
1188
                    
1189 7
                    'managePageList' => [
1190 7
                        'components' => [
1191 7
                            Api\Controllers\PageController::class => ['*'],
1192 7
                            Models\Page::class => ['*'],
1193 7
                        ],
1194 7
                        'behaviors' => [
1195 7
                            Api\Controllers\PageController::class => [
1196 7
                                Behavior\Skip\SkipIdentityCondition::class,
1197 7
                                Behavior\Skip\SkipSoftDeleteCondition::class,
1198 7
                            ],
1199 7
                        ],
1200 7
                    ],
1201
                    
1202
                    'managePostList' => [
1203 7
                        'components' => [
1204 7
                            Api\Controllers\PostController::class => ['*'],
1205 7
                            Models\Post::class => ['*'],
1206 7
                        ],
1207 7
                        'behaviors' => [
1208
                            Api\Controllers\PostController::class => [
1209
                                Behavior\Skip\SkipIdentityCondition::class,
1210 7
                                Behavior\Skip\SkipSoftDeleteCondition::class,
1211 7
                            ],
1212 7
                        ],
1213 7
                    ],
1214 7
                ],
1215 7
                
1216 7
                /**
1217
                 * Roles permissions
1218
                 */
1219 7
                'roles' => [
1220 7
                    
1221 7
                    // Console (CLI)
1222 7
                    'cli' => [
1223 7
                        'components' => [
1224
                            Cli\Tasks\BuildTask::class => ['*'],
1225
                            Cli\Tasks\CacheTask::class => ['*'],
1226 7
                            Cli\Tasks\CronTask::class => ['*'],
1227 7
                            Cli\Tasks\ErrorTask::class => ['*'],
1228 7
                            Cli\Tasks\DeploymentTask::class => ['*'],
1229 7
                            Cli\Tasks\HelpTask::class => ['*'],
1230 7
                            Cli\Tasks\ScaffoldTask::class => ['*'],
1231 7
                            Cli\Tasks\TestTask::class => ['*'],
1232 7
                        ],
1233 7
                    ],
1234 7
                    
1235 7
                    // Everyone with or without role
1236 7
                    'everyone' => [
1237 7
                        'features' => [
1238 7
                            'base',
1239 7
                        ],
1240 7
                    ],
1241
                    
1242
                    // Everyone without role
1243 7
                    'guest' => [
1244 7
                        'features' => [
1245 7
                            'login',
1246 7
                            'logout',
1247 7
                            'register',
1248 7
                        ],
1249 7
                    ],
1250 7
                    
1251 7
                    // User
1252 7
                    'user' => [
1253 7
                        'features' => [
1254 7
                            'logout',
1255 7
                        ],
1256 7
                    ],
1257 7
                    
1258 7
                    // Admin
1259
                    'admin' => [
1260
                        'features' => [
1261
                            'manageUserList',
1262
                            'manageLangList',
1263
                            'manageSiteList',
1264
                            'managePageList',
1265
                            'managePostList',
1266
                            'manageTemplateList',
1267
                        ],
1268
                        'inherit' => [
1269
                            'user',
1270
                        ],
1271 7
                        'behaviors' => [
1272
                        ],
1273 7
                    ],
1274
                    
1275 7
                    // Dev
1276
                    'dev' => [
1277
                        'features' => [
1278
                            'manageRoleList',
1279
                            'manageGroupList',
1280
                            'manageTypeList',
1281
                            'manageAuditList',
1282
                        ],
1283
                        'inherit' => [
1284
                            'user',
1285 7
                            'admin',
1286
                        ],
1287
                    ],
1288
                ],
1289
            ],
1290
        ], $insensitive);
1291
        if (!empty($data)) {
1292
            $this->merge(new PhalconConfig($data, $insensitive));
1293
        }
1294
    }
1295
    
1296
    /**
1297
     * Merge the specified environment config with this one
1298
     * This should be used to overwrite specific values only
1299
     *
1300
     * @param null|string $env If null, will fetch the current environement from $this->app->env
1301
     *
1302
     * @return Config $this Return the merged current config
1303
     */
1304
    public function mergeEnvConfig(?string $env = null): self
1305
    {
1306
        $configFile = $this->app->dir->config . (isset($env) ? $env : $this->app->env) . '.php';
0 ignored issues
show
Bug Best Practice introduced by
The property env does not exist on Zemit\Bootstrap\Config. Since you implemented __get, consider adding a @property annotation.
Loading history...
Bug Best Practice introduced by
The property dir does not exist on Zemit\Bootstrap\Config. Since you implemented __get, consider adding a @property annotation.
Loading history...
1307
        if (file_exists($configFile)) {
1308
            $envConfig = require_once $configFile;
1309
            if (!empty($envConfig)) {
1310
                $envConfig = is_callable($envConfig) ? $envConfig() : $envConfig;
1311
                if (is_array($envConfig)) {
1312
                    $this->merge(new PhalconConfig($envConfig));
1313
                }
1314
            }
1315
        }
1316
        
1317
        return $this;
1318
    }
1319
}
1320
1321
//if (php_sapi_name() === 'cli') {
1322
//    $devtoolConfig = new Config();
1323
//    return $devtoolConfig->mergeEnvConfig();
1324
//}
1325