Skip to content

Commit 83a6294

Browse files
committed
Add support for logging HTTP requests and responses
1 parent c3ef7fb commit 83a6294

File tree

6 files changed

+99
-2
lines changed

6 files changed

+99
-2
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
# CHANGELOG
22

33
## [Unreleased]
4+
### Added
5+
* It is now possible to log HTTP requests and responses to the Firebase APIs
6+
by specifying a logger's service ID. You can do so by setting
7+
`http_request_logger` and `http_request_debug_logger` with the service ID
8+
of an already configured logger, e.g. `monolog.logger`.
49

510
## [2.1.0] - 2020-06-23
611
### Added

README.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,11 @@ kreait_firebase:
112112
default_dynamic_links_domain: 'https://my_project.page.link'
113113
# Optional: Used to cache Google's public keys. Must implement
114114
# \Psr\SimpleCache\CacheInterface (PSR-16)
115-
verifier_cache: 'cache.app'
115+
verifier_cache: null # Example: cache.app
116+
# If set, logs simple HTTP request and response statuses
117+
http_request_logger: null # Example: monolog.logger.firebase
118+
# If set, logs detailed HTTP request and response statuses
119+
http_request_debug_logger: null # Example: monolog.logger.firebase_debug
116120
```
117121

118122
## Documentation

src/DependencyInjection/Configuration.php

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,11 +58,21 @@ public function getConfigTreeBuilder(): TreeBuilder
5858
->example('https://my-project.page.link')
5959
->info('The default domain for dynamic links')
6060
->end()
61-
->scalarNode('verifier_cache')
61+
->scalarNode('verifier_cache')
6262
->defaultNull()
6363
->example('cache.app')
6464
->info('Used to cache Google\'s public keys.')
6565
->end()
66+
->scalarNode('http_request_logger')
67+
->defaultNull()
68+
->example('monolog.logger.firebase')
69+
->info('If set, logs simple HTTP request and response statuses')
70+
->end()
71+
->scalarNode('http_request_debug_logger')
72+
->defaultNull()
73+
->example('monolog.logger.firebase_debug')
74+
->info('If set, logs detailed HTTP request and response statuses')
75+
->end()
6676
->end()
6777
->end()
6878
->end()

src/DependencyInjection/Factory/ProjectFactory.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use Kreait\Firebase;
88
use Kreait\Firebase\Factory;
99
use Psr\Cache\CacheItemPoolInterface;
10+
use Psr\Log\LoggerInterface;
1011
use Psr\SimpleCache\CacheInterface;
1112
use Symfony\Component\Cache\Psr16Cache;
1213
use Symfony\Component\Cache\Simple\Psr6Cache;
@@ -19,6 +20,12 @@ class ProjectFactory
1920
/** @var CacheInterface|null */
2021
private $verifierCache;
2122

23+
/** @var LoggerInterface|null */
24+
private $httpRequestLogger;
25+
26+
/** @var LoggerInterface|null */
27+
private $httpRequestDebugLogger;
28+
2229
public function __construct(Factory $firebaseFactory)
2330
{
2431
$this->firebaseFactory = $firebaseFactory;
@@ -40,6 +47,16 @@ public function setVerifierCache($verifierCache = null): void
4047
$this->verifierCache = $verifierCache;
4148
}
4249

50+
public function setHttpRequestLogger(?LoggerInterface $logger = null): void
51+
{
52+
$this->httpRequestLogger = $logger;
53+
}
54+
55+
public function setHttpRequestDebugLogger(?LoggerInterface $logger = null): void
56+
{
57+
$this->httpRequestDebugLogger = $logger;
58+
}
59+
4360
public function createFactory(array $config = []): Factory
4461
{
4562
$factory = clone $this->firebaseFactory; // Ensure a new instance
@@ -58,6 +75,14 @@ public function createFactory(array $config = []): Factory
5875
$factory = $factory->withVerifierCache($this->verifierCache);
5976
}
6077

78+
if ($this->httpRequestLogger) {
79+
$factory = $factory->withHttpLogger($this->httpRequestLogger);
80+
}
81+
82+
if ($this->httpRequestDebugLogger) {
83+
$factory = $factory->withHttpDebugLogger($this->httpRequestDebugLogger);
84+
}
85+
6186
return $factory;
6287
}
6388

src/DependencyInjection/FirebaseExtension.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,14 @@ private function registerService(string $name, array $config, string $class, Con
7373
$factory->addMethodCall('setVerifierCache', [new Reference($config['verifier_cache'])]);
7474
}
7575

76+
if ($config['http_request_logger'] ?? null) {
77+
$factory->addMethodCall('setHttpRequestLogger', [new Reference($config['http_request_logger'])]);
78+
}
79+
80+
if ($config['http_request_debug_logger'] ?? null) {
81+
$factory->addMethodCall('setHttpRequestDebugLogger', [new Reference($config['http_request_debug_logger'])]);
82+
}
83+
7684
$container->register($projectServiceId, $class)
7785
->setFactory([$factory, $method])
7886
->addArgument($config)

tests/DependencyInjection/FirebaseExtensionTest.php

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use Kreait\Firebase;
88
use Kreait\Firebase\Symfony\Bundle\DependencyInjection\FirebaseExtension;
99
use PHPUnit\Framework\TestCase;
10+
use Psr\Log\LoggerInterface;
1011
use Psr\SimpleCache\CacheInterface;
1112
use stdClass;
1213
use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException;
@@ -84,6 +85,50 @@ public function a_verifier_cache_can_be_used(): void
8485
$this->addToAssertionCount(1);
8586
}
8687

88+
/**
89+
* @test
90+
*/
91+
public function a_request_logger_can_be_used(): void
92+
{
93+
$loggerServiceId = 'firebase_logger';
94+
95+
$container = $this->createContainer([
96+
'projects' => [
97+
'foo' => [
98+
'credentials' => __DIR__.'/../_fixtures/valid_credentials.json',
99+
'http_request_logger' => $loggerServiceId,
100+
],
101+
],
102+
]);
103+
$logger = $this->createMock(LoggerInterface::class);
104+
$container->set($loggerServiceId, $logger);
105+
106+
$container->get(Firebase\Auth::class);
107+
$this->addToAssertionCount(1);
108+
}
109+
110+
/**
111+
* @test
112+
*/
113+
public function a_request_debug_logger_can_be_used(): void
114+
{
115+
$loggerServiceId = 'firebase_debug_logger';
116+
117+
$container = $this->createContainer([
118+
'projects' => [
119+
'foo' => [
120+
'credentials' => __DIR__.'/../_fixtures/valid_credentials.json',
121+
'http_request_debug_logger' => $loggerServiceId,
122+
],
123+
],
124+
]);
125+
$logger = $this->createMock(LoggerInterface::class);
126+
$container->set($loggerServiceId, $logger);
127+
128+
$container->get(Firebase\Auth::class);
129+
$this->addToAssertionCount(1);
130+
}
131+
87132
/**
88133
* @test
89134
*/

0 commit comments

Comments
 (0)