zend-blog-3-backend

Форк
0
/
DefaultController.php 
135 строк · 3.8 Кб
1
<?php
2

3
namespace App\Controller;
4

5
use App\Entity\Post;
6
use App\Repository\ViewCommentRepository;
7
use GuzzleHttp\Client;
8
use GuzzleHttp\Exception\GuzzleException;
9
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
10
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
11
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
12
use Symfony\Component\HttpFoundation\JsonResponse;
13
use Symfony\Component\HttpFoundation\Response;
14
use Symfony\Component\Routing\Annotation\Route;
15

16
/**
17
 * Class DefaultController
18
 */
19
class DefaultController extends AbstractController
20
{
21
    /**
22
     * @var string
23
     */
24
    private string $kernelEnv;
25

26
    /**
27
     * @var string
28
     */
29
    private string $cdnUrl;
30

31
    private string $blogUrl;
32

33
    public function __construct(string $kernelEnv, string $cdnUrl, string $frontendSite)
34
    {
35
        $this->kernelEnv = $kernelEnv;
36
        $this->cdnUrl = $cdnUrl;
37
        $this->blogUrl = $frontendSite;
38
    }
39

40
    /**
41
     * @Route("/")
42
     * @Template()
43
     *
44
     * @throws \JsonException
45
     *
46
     * @return array
47
     */
48
    public function indexAction(): array
49
    {
50
        $isDev = $this->kernelEnv === 'dev';
51

52
        $environment = [
53
            'modulePrefix' => 'mtt-blog',
54
            'environment' => ($this->kernelEnv === 'prod') ? 'production' : 'development',
55
            'baseURL' => '/',
56
            'locationType' => 'hash',
57
            'EmberENV' => [
58
                'FEATURES' => [],
59
            ],
60
            'APP' => [
61
                'LOG_ACTIVE_GENERATION' => $isDev,
62
                'LOG_TRANSITIONS' => $isDev,
63
                'LOG_TRANSITIONS_INTERNAL' => $isDev,
64
                'LOG_VIEW_LOOKUPS' => $isDev,
65
                'LOG_BINDINGS' => $isDev,
66
                'name' => 'mtt-blog',
67
                'version' => '0.0.1 a8c1ef27',
68
            ],
69
            'contentSecurityPolicyHeader' => 'Content-Security-Policy-Report-Only',
70
            'contentSecurityPolicy' => [
71
                'default-src' => "'none'",
72
                'script-src' => "'self' 'unsafe-eval'",
73
                'font-src' => "'self'",
74
                'connect-src' => "'self'",
75
                'img-src' => "'self'",
76
                'style-src' => "'self'",
77
                'media-src' => "'self'",
78
            ],
79
            'exportApplicationGlobal' => true,
80
            'appParameters' => [
81
                'apiURL' => $this->generateUrl('api_root'),
82
                'cdnURL' => $this->cdnUrl,
83
            ],
84
        ];
85

86
        return [
87
            'env' => urlencode(json_encode($environment, JSON_THROW_ON_ERROR)),
88
        ];
89
    }
90

91
    /**
92
     * @Route("/preview/{slug}", name="post_preview", options={"expose"=true})
93
     * @ParamConverter("post", options={"mapping": {"slug": "url"}})
94
     * @Template()
95
     *
96
     * @param Post|null $post
97
     * @param ViewCommentRepository $repository
98
     *
99
     * @return array
100
     */
101
    public function previewAction(ViewCommentRepository $repository, Post $post = null): array
102
    {
103
        if (!$post) {
104
            throw $this->createNotFoundException();
105
        }
106

107
        $comments = $repository->getCommentsByPost($post);
108

109
        return compact('post', 'comments');
110
    }
111

112
    /**
113
     * @Route("/purge-cache", name="purge_cache", options={"expose"=true}, methods={"POST"})
114
     *
115
     * @return JsonResponse
116
     */
117
    public function purgeBlogCacheAction(): JsonResponse
118
    {
119
        $httpClient = new Client(['base_uri' => $this->blogUrl]);
120
        try {
121
            $response = $httpClient->request(
122
                'POST',
123
                '/purge-cache',
124
                [
125
                    'headers' => ['X-Ban-Token' => getenv('VARNISH_BAN_TOKEN')],
126
                ]
127
            );
128
            $status = $response->getStatusCode();
129
        } catch (GuzzleException $e) {
130
            $status = Response::HTTP_BAD_REQUEST;
131
        }
132

133
        return new JsonResponse([], $status);
134
    }
135
}
136

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.