zend-blog-3-backend

Форк
0
/
GitRepoController.php 
60 строк · 1.8 Кб
1
<?php
2

3
namespace App\Controller;
4

5
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
6
use Symfony\Component\HttpFoundation\Request;
7
use Symfony\Component\HttpFoundation\Response;
8
use Symfony\Component\Routing\Annotation\Route;
9

10
class GitRepoController extends AbstractController
11
{
12
    private string $secretToken;
13

14
    public function __construct(string $secretToken)
15
    {
16
        $this->secretToken = $secretToken;
17
    }
18

19
    /**
20
     * @Route("/webhook/gitflic", methods={"POST"})
21
     *
22
     * @param Request $request
23
     *
24
     * @return Response
25
     */
26
    public function webHookAction(Request $request): Response
27
    {
28
        $logfile = fopen(APP_VAR_DIR . '/logs/gitflic.log', 'a');
29

30
        $token = $request->headers->get('gitflic-webhook-secret');
31
        if (!hash_equals(sha1($this->secretToken), sha1($token))) {
32
            fwrite($logfile, date('Y-m-d H:i:s') . ": 403 Forbidden\n");
33
            fclose($logfile);
34

35
            return new Response("Get out!\n", 403);
36
        }
37

38
        $action = $request->request->get('action');
39
        $push = $request->request->get('push');
40
        if ($action === 'BRANCH_UPDATE' && !empty($push['ref'])) {
41
            if ($push['ref'] === 'refs/heads/master') {
42
                fwrite($logfile, date('Y-m-d H:i:s') . ": Updating...\n");
43
            } else {
44
                fwrite($logfile, sprintf("%s: Skip ref: %s\n", date('Y-m-d H:i:s'), $push['ref']));
45
            }
46
        }
47

48
        if (empty($push['ref']) || empty($action)) {
49
            fwrite($logfile, date('Y-m-d H:i:s') . ": Something wrong...\n");
50
            $content = $request->getContent();
51
            if (!empty($content)) {
52
                fwrite($logfile, date('Y-m-d H:i:s') . ': ' . $content . "\n");
53
            }
54
        }
55

56
        fclose($logfile);
57

58
        return new Response("ok\n");
59
    }
60
}
61

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

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

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

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