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    getenv('ZMSBACKEND_SESSION_DURATION') ? getenv('ZMSBACKEND_SESSION_DURATION') : (
32        getenv('ZMSDB_SESSION_DURATION') ? getenv('ZMSDB_SESSION_DURATION') : 28800
33    )
34);
35
36class Application extends \BO\Slim\Application
37{
38    use CacheInitializationTrait;
39
40    const IDENTIFIER = 'zms';
41
42    const 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 DEBUG = false;
63    const TWIG_CACHE = ZMS_BACKEND_TWIG_CACHE;
64    const SESSION_DURATION = ZMSBACKEND_SESSION_DURATION;
65
66    const DB_ENABLE_WSREPSYNCWAIT = false;
67    const RIGHTSCHECK_ENABLED = true;
68
69    const DB_DSN_READONLY = 'mysql:dbname=zmsbo;host=127.0.0.1';
70    const DB_DSN_READWRITE = 'mysql:dbname=zmsbo;host=127.0.0.1';
71    const DB_STARTINFO = 'startinfo';
72    const DB_USERNAME = 'server';
73    const DB_PASSWORD = 'internet';
74    const DB_IS_GALERA = true;
75    const 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    public static function getNow()
90    {
91        if (self::$now instanceof \DateTimeInterface) {
92            return self::$now;
93        }
94        return new \DateTimeImmutable();
95    }
96
97    /**
98     * @SuppressWarnings(PHPMD.NPathComplexity)
99     */
100    private static function initializeLogger(): void
101    {
102        self::$LOGGER_MAX_REQUESTS = (int) (getenv('ZMS_BACKEND_LOGGER_MAX_REQUESTS') ?: 1000);
103        self::$LOGGER_MAX_ERROR_REQUESTS = (int) (getenv('ZMS_BACKEND_LOGGER_MAX_ERROR_REQUESTS') ?: 0);
104        self::$LOGGER_RESPONSE_LENGTH = (int) (getenv('ZMS_BACKEND_LOGGER_RESPONSE_LENGTH') ?: 1048576);
105        self::$LOGGER_STACK_LINES = (int) (getenv('ZMS_BACKEND_LOGGER_STACK_LINES') ?: 20);
106        self::$LOGGER_MESSAGE_SIZE = (int) (getenv('ZMS_BACKEND_LOGGER_MESSAGE_SIZE') ?: 8192);
107        self::$LOGGER_CACHE_TTL = (int) (getenv('ZMS_BACKEND_LOGGER_CACHE_TTL') ?: 60);
108        self::$LOGGER_MAX_RETRIES = (int) (getenv('ZMS_BACKEND_LOGGER_MAX_RETRIES') ?: 3);
109        self::$LOGGER_BACKOFF_MIN = (int) (getenv('ZMS_BACKEND_LOGGER_BACKOFF_MIN') ?: 100);
110        self::$LOGGER_BACKOFF_MAX = (int) (getenv('ZMS_BACKEND_LOGGER_BACKOFF_MAX') ?: 1000);
111        self::$LOGGER_LOCK_TIMEOUT = (int) (getenv('ZMS_BACKEND_LOGGER_LOCK_TIMEOUT') ?: 5);
112        LoggerService::configure(self::getLoggerConfig());
113    }
114
115    private static function initializeRequestLimits(): void
116    {
117        self::$MAX_STRING_LENGTH = (int) (getenv('MAX_STRING_LENGTH') ?: 32768);
118        self::$MAX_RECURSION_DEPTH = (int) (getenv('MAX_RECURSION_DEPTH') ?: 10);
119    }
120
121    public static function getLoggerConfig(): array
122    {
123        return [
124            'maxRequests' => self::$LOGGER_MAX_REQUESTS,
125            'maxErrorRequests' => self::$LOGGER_MAX_ERROR_REQUESTS,
126            'responseLength' => self::$LOGGER_RESPONSE_LENGTH,
127            'stackLines' => self::$LOGGER_STACK_LINES,
128            'messageSize' => self::$LOGGER_MESSAGE_SIZE,
129            'cacheTtl' => self::$LOGGER_CACHE_TTL,
130            'maxRetries' => self::$LOGGER_MAX_RETRIES,
131            'backoffMin' => self::$LOGGER_BACKOFF_MIN,
132            'backoffMax' => self::$LOGGER_BACKOFF_MAX,
133            'lockTimeout' => self::$LOGGER_LOCK_TIMEOUT,
134        ];
135    }
136
137    public static function getRequestLimits(): array
138    {
139        return [
140            'maxStringLength' => self::$MAX_STRING_LENGTH,
141            'maxRecursionDepth' => self::$MAX_RECURSION_DEPTH,
142        ];
143    }
144
145    public static function initialize(): void
146    {
147        self::initializeLogger();
148        self::initializeCache(__DIR__ . '/cache');
149        self::initializeRequestLimits();
150    }
151}
152
153Application::initialize();