17
17
use Shopware \Core \System \SalesChannel \Context \SalesChannelContextFactory ;
18
18
use Shopware \Core \System \SalesChannel \Context \SalesChannelContextService ;
19
19
use Shopware \Core \System \SalesChannel \SalesChannelContext ;
20
+ use Shopware \Core \System \SystemConfig \SystemConfigService ;
20
21
use Shopware \Storefront \Framework \Routing \RequestTransformer ;
21
22
use Symfony \Component \DependencyInjection \Attribute \Autowire ;
22
23
use Symfony \Component \EventDispatcher \EventSubscriberInterface ;
@@ -36,6 +37,7 @@ public function __construct(
36
37
private readonly EntityRepository $ tinectRedirectsRedirectRepository ,
37
38
private readonly SeoUrlPlaceholderHandlerInterface $ seoUrlPlaceholderHandler ,
38
39
#[Autowire(service: SalesChannelContextFactory::class)] private readonly AbstractSalesChannelContextFactory $ salesChannelContextFactory ,
40
+ private readonly SystemConfigService $ systemConfigService ,
39
41
private readonly MessageBusInterface $ messageBus ,
40
42
) {
41
43
}
@@ -90,7 +92,7 @@ private function handleRequest(Request $request): ?Response
90
92
$ message = new TinectRedirectUpdateMessage (
91
93
source: $ path ,
92
94
salesChannelDomainId: $ salesChannelDomainId ,
93
- ipAddress: $ request -> getClientIp () ?? '' ,
95
+ ipAddress: $ this -> getIpAddress ( $ request ) ,
94
96
userAgent: $ request ->headers ->get ('User-Agent ' ) ?? '' ,
95
97
);
96
98
@@ -162,4 +164,24 @@ private function createSalesChannelContext(string $salesChannelId, string $langu
162
164
{
163
165
return $ this ->salesChannelContextFactory ->create ('' , $ salesChannelId , [SalesChannelContextService::LANGUAGE_ID => $ languageId ]);
164
166
}
167
+
168
+ private function getIpAddress (Request $ request ): string
169
+ {
170
+ $ salesChannelId = $ request ->attributes ->get (PlatformRequest::ATTRIBUTE_SALES_CHANNEL_ID );
171
+
172
+ if (!\is_string ($ salesChannelId ) || empty ($ salesChannelId )) {
173
+ $ salesChannelId = null ;
174
+ }
175
+
176
+ if (!$ this ->canSaveIpAddress ($ salesChannelId )) {
177
+ return '' ;
178
+ }
179
+
180
+ return $ request ->getClientIp () ?? '' ;
181
+ }
182
+
183
+ private function canSaveIpAddress (?string $ salesChannelId ): bool
184
+ {
185
+ return $ this ->systemConfigService ->getBool ('TinectRedirects.config.saveIpAddresses ' , $ salesChannelId );
186
+ }
165
187
}
0 commit comments