-
Notifications
You must be signed in to change notification settings - Fork 75
Expand file tree
/
Copy pathNoxlogicRateLimitExtension.php
More file actions
executable file
·124 lines (112 loc) · 5.8 KB
/
NoxlogicRateLimitExtension.php
File metadata and controls
executable file
·124 lines (112 loc) · 5.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
<?php
namespace Noxlogic\RateLimitBundle\DependencyInjection;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Loader;
use Symfony\Component\DependencyInjection\Reference;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
/**
* This is the class that loads and manages your bundle configuration
*
* To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/extension.html}
*/
class NoxlogicRateLimitExtension extends Extension
{
/**
* {@inheritDoc}
* @param mixed[][] $configs
*/
public function load(array $configs, ContainerBuilder $container): void
{
$configuration = new Configuration();
$config = $this->processConfiguration($configuration, $configs);
$this->loadServices($container, $config);
}
private function loadServices(ContainerBuilder $container, array $config): void
{
$loader = new Loader\XmlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config'));
$loader->load('services.xml');
$container->setParameter('noxlogic_rate_limit.enabled', $config['enabled']);
$container->setParameter('noxlogic_rate_limit.rate_response_exception', $config['rate_response_exception']);
$container->setParameter('noxlogic_rate_limit.rate_response_code', $config['rate_response_code']);
$container->setParameter('noxlogic_rate_limit.rate_response_message', $config['rate_response_message']);
$container->setParameter('noxlogic_rate_limit.display_headers', $config['display_headers']);
$container->setParameter('noxlogic_rate_limit.headers.limit.name', $config['headers']['limit']);
$container->setParameter('noxlogic_rate_limit.headers.remaining.name', $config['headers']['remaining']);
$container->setParameter('noxlogic_rate_limit.headers.reset.name', $config['headers']['reset']);
$container->setParameter('noxlogic_rate_limit.path_limits', $config['path_limits']);
$container->setParameter('noxlogic_rate_limit.fail_open', $config['fail_open']);
switch ($config['storage_engine']) {
case 'memcache':
$container->setParameter('noxlogic_rate_limit.storage.class', 'Noxlogic\RateLimitBundle\Service\Storage\Memcache');
if (isset($config['memcache_client'])) {
$service = 'memcache.' . $config['memcache_client'];
} else {
$service = $config['memcache_service'];
}
$container->getDefinition('noxlogic_rate_limit.storage')->replaceArgument(
0,
new Reference($service)
);
break;
case 'redis':
$container->setParameter('noxlogic_rate_limit.storage.class', 'Noxlogic\RateLimitBundle\Service\Storage\Redis');
if (isset($config['redis_service'])) {
$service = $config['redis_service'];
} else {
$service = 'snc_redis.' . $config['redis_client'];
}
$container->getDefinition('noxlogic_rate_limit.storage')->replaceArgument(
0,
new Reference($service)
);
break;
case 'doctrine':
$container->setParameter('noxlogic_rate_limit.storage.class', 'Noxlogic\RateLimitBundle\Service\Storage\DoctrineCache');
if (isset($config['doctrine_provider'])) {
$service = 'doctrine_cache.providers.' . $config['doctrine_provider'];
} else {
$service = $config['doctrine_service'];
}
$container->getDefinition('noxlogic_rate_limit.storage')->replaceArgument(
0,
new Reference($service)
);
break;
case 'php_redis':
$container->setParameter('noxlogic_rate_limit.storage.class', 'Noxlogic\RateLimitBundle\Service\Storage\PhpRedis');
$container->getDefinition('noxlogic_rate_limit.storage')->replaceArgument(
0,
new Reference($config['php_redis_service'])
);
break;
case 'php_redis_cluster':
$container->setParameter('noxlogic_rate_limit.storage.class', 'Noxlogic\RateLimitBundle\Service\Storage\PhpRedisCluster');
$container->getDefinition('noxlogic_rate_limit.storage')->replaceArgument(
0,
new Reference($config['php_redis_service'])
);
break;
case 'simple_cache':
$container->setParameter('noxlogic_rate_limit.storage.class', 'Noxlogic\RateLimitBundle\Service\Storage\SimpleCache');
$container->getDefinition('noxlogic_rate_limit.storage')->replaceArgument(
0,
new Reference($config['simple_cache_service'])
);
break;
case 'cache':
$container->setParameter('noxlogic_rate_limit.storage.class', 'Noxlogic\RateLimitBundle\Service\Storage\PsrCache');
$container->getDefinition('noxlogic_rate_limit.storage')->replaceArgument(
0,
new Reference($config['cache_service'])
);
break;
}
if ($config['fos_oauth_key_listener']) {
$tokenStorageReference = new Reference('security.token_storage');
$container->getDefinition('noxlogic_rate_limit.oauth_key_generate_listener')->replaceArgument(0, $tokenStorageReference);
} else {
$container->removeDefinition('noxlogic_rate_limit.oauth_key_generate_listener');
}
}
}