zend-blog-3-backend
60 строк · 1.8 Кб
1<?php
2
3namespace App\Controller;
4
5use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
6use Symfony\Component\HttpFoundation\Request;
7use Symfony\Component\HttpFoundation\Response;
8use Symfony\Component\Routing\Annotation\Route;
9
10class GitRepoController extends AbstractController
11{
12private string $secretToken;
13
14public 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*/
26public 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');
31if (!hash_equals(sha1($this->secretToken), sha1($token))) {
32fwrite($logfile, date('Y-m-d H:i:s') . ": 403 Forbidden\n");
33fclose($logfile);
34
35return new Response("Get out!\n", 403);
36}
37
38$action = $request->request->get('action');
39$push = $request->request->get('push');
40if ($action === 'BRANCH_UPDATE' && !empty($push['ref'])) {
41if ($push['ref'] === 'refs/heads/master') {
42fwrite($logfile, date('Y-m-d H:i:s') . ": Updating...\n");
43} else {
44fwrite($logfile, sprintf("%s: Skip ref: %s\n", date('Y-m-d H:i:s'), $push['ref']));
45}
46}
47
48if (empty($push['ref']) || empty($action)) {
49fwrite($logfile, date('Y-m-d H:i:s') . ": Something wrong...\n");
50$content = $request->getContent();
51if (!empty($content)) {
52fwrite($logfile, date('Y-m-d H:i:s') . ': ' . $content . "\n");
53}
54}
55
56fclose($logfile);
57
58return new Response("ok\n");
59}
60}
61