Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
8.57% covered (danger)
8.57%
3 / 35
16.67% covered (danger)
16.67%
1 / 6
CRAP
0.00% covered (danger)
0.00%
0 / 1
Application
8.57% covered (danger)
8.57%
3 / 35
16.67% covered (danger)
16.67%
1 / 6
294.90
0.00% covered (danger)
0.00%
0 / 1
 getNow
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
2
 initializeLogger
0.00% covered (danger)
0.00%
0 / 11
0.00% covered (danger)
0.00%
0 / 1
132
 initializeRequestLimits
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
12
 getLoggerConfig
0.00% covered (danger)
0.00%
0 / 12
0.00% covered (danger)
0.00%
0 / 1
2
 getRequestLimits
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
 initialize
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3/**
4 * @package Zmsbackend
5 * @copyright BerlinOnline Stadtportal GmbH & Co. KG
6 **/
7
8namespace BO\Zmsbackend;
9
10use BO\Slim\LoggerService;
11use BO\Slim\Traits\CacheInitializationTrait;
12use Psr\SimpleCache\CacheInterface;
13
14if (($token = getenv('ZMS_CONFIG_SECURE_TOKEN')) === false || $token === '') {
15    throw new \RuntimeException('ZMS_CONFIG_SECURE_TOKEN environment variable must be set');
16}
17
18define('ZMS_CONFIG_SECURE_TOKEN', getenv('ZMS_CONFIG_SECURE_TOKEN'));
19
20if (!defined('ZMS_BACKEND_TWIG_CACHE')) {
21    $value = getenv('ZMS_BACKEND_TWIG_CACHE');
22    if ($value === false || $value === '' || $value === 'false') {
23        define('ZMS_BACKEND_TWIG_CACHE', false);
24    } else {
25        define('ZMS_BACKEND_TWIG_CACHE', $value);
26    }
27}
28
29define(
30    'ZMSBACKEND_SESSION_DURATION',
31    (($value = getenv('ZMSBACKEND_SESSION_DURATION')) !== false && $value !== '') ? $value : (
32        (($value = getenv('ZMSDB_SESSION_DURATION')) !== false && $value !== '') ? $value : 36000
33    )
34);
35
36class Application extends \BO\Slim\Application
37{
38    use CacheInitializationTrait;
39
40    const string IDENTIFIER = 'zms';
41
42    const string MODULE_NAME = 'zmsbackend';
43
44    public static ?CacheInterface $cache = null;
45    public static string $CACHE_DIR;
46    public static int $SOURCE_CACHE_TTL;
47
48    public static int $LOGGER_MAX_REQUESTS;
49    public static int $LOGGER_MAX_ERROR_REQUESTS;
50    public static int $LOGGER_RESPONSE_LENGTH;
51    public static int $LOGGER_STACK_LINES;
52    public static int $LOGGER_MESSAGE_SIZE;
53    public static int $LOGGER_CACHE_TTL;
54    public static int $LOGGER_MAX_RETRIES;
55    public static int $LOGGER_BACKOFF_MIN;
56    public static int $LOGGER_BACKOFF_MAX;
57    public static int $LOGGER_LOCK_TIMEOUT;
58
59    public static int $MAX_STRING_LENGTH;
60    public static int $MAX_RECURSION_DEPTH;
61
62    const bool DEBUG = false;
63    const TWIG_CACHE = ZMS_BACKEND_TWIG_CACHE;
64    const SESSION_DURATION = ZMSBACKEND_SESSION_DURATION;
65
66    const bool DB_ENABLE_WSREPSYNCWAIT = false;
67    const bool RIGHTSCHECK_ENABLED = true;
68
69    const string DB_DSN_READONLY = 'mysql:dbname=zmsbo;host=127.0.0.1';
70    const string DB_DSN_READWRITE = 'mysql:dbname=zmsbo;host=127.0.0.1';
71    const string DB_STARTINFO = 'startinfo';
72    const string DB_USERNAME = 'server';
73    const string DB_PASSWORD = 'internet';
74    const bool DB_IS_GALERA = true;
75    const string SECURE_TOKEN = ZMS_CONFIG_SECURE_TOKEN;
76
77    public static $locale = 'de';
78    public static $supportedLanguages = [
79        'de' => [
80            'name' => 'Deutsch',
81            'locale' => 'de_DE.utf-8',
82            'default' => true,
83        ],
84    ];
85
86    public static $data = '/data';
87    public static $now = null;
88
89    /**
90     * @psalm-api
91     */
92    public static function getNow(): \DateTimeInterface
93    {
94        if (self::$now instanceof \DateTimeInterface) {
95            return self::$now;
96        }
97        return new \DateTimeImmutable();
98    }
99
100    /**
101     * @SuppressWarnings(PHPMD.NPathComplexity)
102     */
103    private static function initializeLogger(): void
104    {
105        self::$LOGGER_MAX_REQUESTS = (int) (getenv('ZMS_BACKEND_LOGGER_MAX_REQUESTS') ?: 1000);
106        self::$LOGGER_MAX_ERROR_REQUESTS = (int) (getenv('ZMS_BACKEND_LOGGER_MAX_ERROR_REQUESTS') ?: 0);
107        self::$LOGGER_RESPONSE_LENGTH = (int) (getenv('ZMS_BACKEND_LOGGER_RESPONSE_LENGTH') ?: 1048576);
108        self::$LOGGER_STACK_LINES = (int) (getenv('ZMS_BACKEND_LOGGER_STACK_LINES') ?: 20);
109        self::$LOGGER_MESSAGE_SIZE = (int) (getenv('ZMS_BACKEND_LOGGER_MESSAGE_SIZE') ?: 8192);
110        self::$LOGGER_CACHE_TTL = (int) (getenv('ZMS_BACKEND_LOGGER_CACHE_TTL') ?: 60);
111        self::$LOGGER_MAX_RETRIES = (int) (getenv('ZMS_BACKEND_LOGGER_MAX_RETRIES') ?: 3);
112        self::$LOGGER_BACKOFF_MIN = (int) (getenv('ZMS_BACKEND_LOGGER_BACKOFF_MIN') ?: 100);
113        self::$LOGGER_BACKOFF_MAX = (int) (getenv('ZMS_BACKEND_LOGGER_BACKOFF_MAX') ?: 1000);
114        self::$LOGGER_LOCK_TIMEOUT = (int) (getenv('ZMS_BACKEND_LOGGER_LOCK_TIMEOUT') ?: 5);
115        LoggerService::configure(self::getLoggerConfig());
116    }
117
118    private static function initializeRequestLimits(): void
119    {
120        self::$MAX_STRING_LENGTH = (int) (getenv('MAX_STRING_LENGTH') ?: 32768);
121        self::$MAX_RECURSION_DEPTH = (int) (getenv('MAX_RECURSION_DEPTH') ?: 10);
122    }
123
124    public static function getLoggerConfig(): array
125    {
126        return [
127            'maxRequests' => self::$LOGGER_MAX_REQUESTS,
128            'maxErrorRequests' => self::$LOGGER_MAX_ERROR_REQUESTS,
129            'responseLength' => self::$LOGGER_RESPONSE_LENGTH,
130            'stackLines' => self::$LOGGER_STACK_LINES,
131            'messageSize' => self::$LOGGER_MESSAGE_SIZE,
132            'cacheTtl' => self::$LOGGER_CACHE_TTL,
133            'maxRetries' => self::$LOGGER_MAX_RETRIES,
134            'backoffMin' => self::$LOGGER_BACKOFF_MIN,
135            'backoffMax' => self::$LOGGER_BACKOFF_MAX,
136            'lockTimeout' => self::$LOGGER_LOCK_TIMEOUT,
137        ];
138    }
139
140    /** @psalm-api */
141    public static function getRequestLimits(): array
142    {
143        return [
144            'maxStringLength' => self::$MAX_STRING_LENGTH,
145            'maxRecursionDepth' => self::$MAX_RECURSION_DEPTH,
146        ];
147    }
148
149    public static function initialize(): void
150    {
151        self::initializeLogger();
152        self::initializeCache(__DIR__ . '/cache');
153        self::initializeRequestLimits();
154    }
155}
156
157Application::initialize();