|
4 | 4 | namespace Spaze\Session\DI;
|
5 | 5 |
|
6 | 6 | use Nette\DI\CompilerExtension;
|
| 7 | +use Nette\DI\Definitions\ServiceDefinition; |
7 | 8 | use Nette\DI\Statement;
|
8 |
| - |
| 9 | +use Nette\Schema\Expect; |
| 10 | +use Nette\Schema\Schema; |
| 11 | +use Spaze\Encryption\Symmetric\StaticKey; |
| 12 | +use stdClass; |
| 13 | + |
| 14 | +/** |
| 15 | + * @property stdClass $config |
| 16 | + */ |
9 | 17 | class MysqlSessionHandlerExtension extends CompilerExtension
|
10 | 18 | {
|
11 | 19 |
|
12 |
| - private array $defaults = [ |
13 |
| - 'tableName' => 'sessions', |
14 |
| - 'lockTimeout' => 5, |
15 |
| - 'unchangedUpdateDelay' => 300, |
16 |
| - 'encryptionService' => null, |
17 |
| - ]; |
| 20 | + public function getConfigSchema(): Schema |
| 21 | + { |
| 22 | + return Expect::structure([ |
| 23 | + 'tableName' => Expect::string()->default('sessions'), |
| 24 | + 'lockTimeout' => Expect::int()->default(5), |
| 25 | + 'unchangedUpdateDelay' => Expect::int()->default(300), |
| 26 | + 'encryptionService' => Expect::string(StaticKey::class), |
| 27 | + ]); |
| 28 | + } |
18 | 29 |
|
19 | 30 |
|
20 | 31 | public function loadConfiguration(): void
|
21 | 32 | {
|
22 |
| - $this->validateConfig($this->defaults); |
23 |
| - |
24 | 33 | $builder = $this->getContainerBuilder();
|
25 | 34 |
|
26 | 35 | $definition = $builder->addDefinition($this->prefix('sessionHandler'))
|
27 | 36 | ->setClass('Spaze\Session\MysqlSessionHandler')
|
28 |
| - ->addSetup('setTableName', [$this->config['tableName']]) |
29 |
| - ->addSetup('setLockTimeout', [$this->config['lockTimeout']]) |
30 |
| - ->addSetup('setUnchangedUpdateDelay', [$this->config['unchangedUpdateDelay']]); |
| 37 | + ->addSetup('setTableName', [$this->config->tableName]) |
| 38 | + ->addSetup('setLockTimeout', [$this->config->lockTimeout]) |
| 39 | + ->addSetup('setUnchangedUpdateDelay', [$this->config->unchangedUpdateDelay]); |
31 | 40 |
|
32 |
| - if ($this->config['encryptionService']) { |
33 |
| - $definition->addSetup('setEncryptionService', [$this->config['encryptionService']]); |
| 41 | + if ($this->config->encryptionService) { |
| 42 | + $definition->addSetup('setEncryptionService', [$this->config->encryptionService]); |
34 | 43 | }
|
35 | 44 |
|
| 45 | + /** @var ServiceDefinition */ |
36 | 46 | $sessionDefinition = $builder->getDefinition('session');
|
37 | 47 | $sessionSetup = $sessionDefinition->getSetup();
|
38 | 48 | # Prepend setHandler method to other possible setups (setExpiration) which would start session prematurely
|
|
0 commit comments