Skip to content

Commit 4cd8aef

Browse files
author
Illia Sakovich
committed
wip
1 parent f4858f8 commit 4cd8aef

File tree

7 files changed

+96
-55
lines changed

7 files changed

+96
-55
lines changed

config/dynamic-renderer.php

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,17 @@
66

77
'rendering_criteria' => [
88
// \Coderello\DynamicRenderer\RenderingCriteria\IsProduction::class,
9-
\Coderello\DynamicRenderer\RenderingCriteria\IsNotRenderer::class,
109
\Coderello\DynamicRenderer\RenderingCriteria\IsCrawler::class,
1110
],
1211

13-
'driver' => env('DYNAMIC_RENDERER_DRIVER', 'prerender_local'),
12+
'driver' => env('DYNAMIC_RENDERER_DRIVER', 'prerender'),
1413

15-
'prerender_local' => [
16-
'service_url' => env('PRERENDER_LOCAL_SERVICE_URL', 'http://localhost:3000'),
14+
'prerender' => [
15+
'url' => env('PRERENDER_URL', 'http://localhost:3000'),
1716
],
1817

19-
'prerender_io' => [
20-
// todo: token?
18+
'rendertron' => [
19+
'url' => env('RENDERTRON_URL', 'http://localhost:3000'),
2120
],
2221

2322
];

src/Managers/DynamicRendererManager.php

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22

33
namespace Coderello\DynamicRenderer\Managers;
44

5-
use Coderello\DynamicRenderer\Renderers\PrerenderLocalRenderer;
5+
use Coderello\DynamicRenderer\Renderers\PrerenderRenderer;
66
use Coderello\DynamicRenderer\Renderers\Renderer;
7+
use Coderello\DynamicRenderer\Renderers\RendertronRenderer;
78
use Coderello\DynamicRenderer\Support\RenderingResult;
89
use Illuminate\Support\Facades\Config;
910
use Illuminate\Support\Manager;
@@ -15,9 +16,9 @@ class DynamicRendererManager extends Manager implements Renderer
1516
*
1617
* @return string
1718
*/
18-
public function getDefaultDriver()
19+
public function getDefaultDriver(): string
1920
{
20-
return $this->getConfigValue('dynamic-renderer.driver', 'prerender_local');
21+
return $this->getConfigValue('dynamic-renderer.driver');
2122
}
2223

2324
private function getConfigValue(string $key, $default = null)
@@ -26,10 +27,17 @@ private function getConfigValue(string $key, $default = null)
2627
return Config::get($key, $default);
2728
}
2829

29-
public function createPrerenderLocalDriver()
30+
public function createPrerenderDriver(): PrerenderRenderer
3031
{
31-
return new PrerenderLocalRenderer(
32-
$this->getConfigValue('dynamic-renderer.prerender_local', [])
32+
return new PrerenderRenderer(
33+
$this->getConfigValue('dynamic-renderer.prerender', [])
34+
);
35+
}
36+
37+
public function createRendertronDriver(): RendertronRenderer
38+
{
39+
return new RendertronRenderer(
40+
$this->getConfigValue('dynamic-renderer.rendertron', [])
3341
);
3442
}
3543

@@ -40,4 +48,12 @@ public function render(string $url): RenderingResult
4048

4149
return $driver->render($url);
4250
}
51+
52+
public function getUserAgentPatterns(): array
53+
{
54+
/** @var Renderer $driver */
55+
$driver = $this->driver();
56+
57+
return $driver->getUserAgentPatterns();
58+
}
4359
}

src/Renderers/PrerenderLocalRenderer.php renamed to src/Renderers/PrerenderRenderer.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,23 @@
77
use GuzzleHttp\RequestOptions;
88
use Illuminate\Support\Str;
99

10-
class PrerenderLocalRenderer implements Renderer
10+
class PrerenderRenderer implements Renderer
1111
{
1212
/**
1313
* @var string|null
1414
*/
15-
protected $serviceUrl;
15+
protected $prerenderUrl;
1616

1717
public function __construct(array $options = [])
1818
{
19-
$this->serviceUrl = $options['service_url'] ?? null;
19+
$this->prerenderUrl = $options['url'] ?? null;
2020
}
2121

2222
public function render(string $url): RenderingResult
2323
{
2424
$client = new Client;
2525

26-
$response = $client->get(Str::finish($this->serviceUrl, '/').$url, [
26+
$response = $client->get(Str::finish($this->prerenderUrl, '/').$url, [
2727
RequestOptions::HTTP_ERRORS => false,
2828
]);
2929

src/Renderers/RendertronRenderer.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
3+
namespace Coderello\DynamicRenderer\Renderers;
4+
5+
use Coderello\DynamicRenderer\Support\RenderingResult;
6+
use GuzzleHttp\Client;
7+
use GuzzleHttp\RequestOptions;
8+
use Illuminate\Support\Str;
9+
10+
class RendertronRenderer implements Renderer
11+
{
12+
/**
13+
* @var string|null
14+
*/
15+
protected $rendertronUrl;
16+
17+
public function __construct(array $options = [])
18+
{
19+
$this->rendertronUrl = $options['url'] ?? null;
20+
}
21+
22+
public function render(string $url): RenderingResult
23+
{
24+
$client = new Client;
25+
26+
$response = $client->get(Str::finish($this->rendertronUrl, '/render/').$url, [
27+
RequestOptions::HTTP_ERRORS => false,
28+
]);
29+
30+
return (new RenderingResult)
31+
->setContent($response->getBody()->getContents())
32+
->setStatusCode($response->getStatusCode());
33+
}
34+
}

src/RenderingCriteria/IsCrawler.php

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,36 @@ public function __construct(CrawlerDetect $crawlerDetect)
2121

2222
public function matches(Request $request): bool
2323
{
24-
$userAgent = $request->userAgent();
24+
$userAgent = strtolower($request->userAgent());
2525

26-
return $this->crawlerDetect->isCrawler(
27-
$userAgent
28-
);
26+
foreach ($this->botUserAgents() as $botUserAgent) {
27+
if ($userAgent === strtolower($botUserAgent)) {
28+
return true;
29+
}
30+
}
31+
32+
return false;
33+
}
34+
35+
protected function botUserAgents(): array
36+
{
37+
return [
38+
'Baiduspider',
39+
'bingbot',
40+
'Embedly',
41+
'facebookexternalhit',
42+
'LinkedInBot',
43+
'outbrain',
44+
'pinterest',
45+
'quora link preview',
46+
'rogerbot',
47+
'showyoubot',
48+
'Slackbot',
49+
'TelegramBot',
50+
'Twitterbot',
51+
'vkShare',
52+
'W3C_Validator',
53+
'WhatsApp',
54+
];
2955
}
3056
}

src/RenderingCriteria/IsNotRenderer.php

Lines changed: 0 additions & 34 deletions
This file was deleted.

tests/DynamicRendererTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
namespace Coderello\DynamicRenderer\Tests;
44

55
use Coderello\DynamicRenderer\Facades\DynamicRenderer;
6-
use Coderello\DynamicRenderer\Renderers\PrerenderLocalRenderer;
6+
use Coderello\DynamicRenderer\Renderers\PrerenderRenderer;
77
use Coderello\DynamicRenderer\Renderers\Renderer;
88
use Symfony\Component\Process\Process;
99

0 commit comments

Comments
 (0)