Passed
Branch master (530ffd)
by Aleksander
02:46 queued 54s
created

Event::getResult()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 8
rs 9.4285
cc 1
eloc 6
nc 1
nop 0
1
<?php
2
    namespace Eustatos\gitlab\webhook;
3
4
    /**
5
     * Event
6
     *
7
     * @package Eustatos\gitlab\webhook
8
     * @author  Alexander Astashkin <[email protected]>
9
     */
10
class Event
11
{
12
    private $_command;
13
    private $_output = [];
14
    private $_result;
15
    const TOKEN = 'b2b pushed';
16
17
    /**
18
     * __construct
19
     *
20
     * @param string $command
21
     * @param  string $password
22
     * @access public
23
     */
24
    public function __construct($command, $password)
25
    {
26
        $this->_command = $command;
27
28
        if ($password == self::TOKEN) {
29
            exec(
30
                $this->_command,
31
                $this->_output,
32
                $this->_result
33
            );
34
        }
35
    }
36
37
    /**
38
     * getResult
39
     *
40
     * @access public
41
     * @return void
42
     */
43
    public function getResult()
44
    {
45
        echo 'Result execution: ' . $this->_command . PHP_EOL
46
        . $this->_result . PHP_EOL;
47
        echo '<pre>';
48
            print_r($this->_output);
49
            echo '</pre>';
50
    }
51
52
    /**
53
     * logResult
54
     *
55
     * @param  string $file
56
     * @access public
57
     * @return void
58
     */
59
    public function logResult($file)
60
    {
61
        $this->writeToFile(
62
            $file,
63
            $this->_output
64
        );
65
    }
66
67
    /**
68
     * logRequest
69
     *
70
     * @param  string $file
71
     * @access public
72
     * @return void
73
     */
74
    public function logRequest($file)
0 ignored issues
show
Coding Style introduced by
logRequest uses the super-global variable $_SERVER which is generally not recommended.

Instead of super-globals, we recommend to explicitly inject the dependencies of your class. This makes your code less dependent on global state and it becomes generally more testable:

// Bad
class Router
{
    public function generate($path)
    {
        return $_SERVER['HOST'].$path;
    }
}

// Better
class Router
{
    private $host;

    public function __construct($host)
    {
        $this->host = $host;
    }

    public function generate($path)
    {
        return $this->host.$path;
    }
}

class Controller
{
    public function myAction(Request $request)
    {
        // Instead of
        $page = isset($_GET['page']) ? intval($_GET['page']) : 1;

        // Better (assuming you use the Symfony2 request)
        $page = $request->query->get('page', 1);
    }
}
Loading history...
75
    {
76
        if (strcasecmp($_SERVER['REQUEST_METHOD'], 'POST') != 0) {
77
            throw new Exception('Request method must be POST!');
78
        }
79
        $contentType = isset($_SERVER['CONTENT_TYPE'])
80
            ? trim($_SERVER['CONTENT_TYPE'])
81
            : '';
82
        if (strcasecmp($contentType, 'application/json') != 0) {
83
            throw new Exception('Content type must be: application/json');
84
        }
85
        $jsonRequest = trim(file_get_contents('php://input'));
86
        $jsonRequest = json_decode($jsonRequest, true);
87
        if (!is_array($jsonRequest)) {
88
            throw new Exception('Received content conteined invalid JSON');
89
        }
90
        $this->writeToFile(
91
            $file,
92
            $jsonRequest
93
        );
94
    }
95
96
    /**
97
     * writeToFile
98
     *
99
     * Write to file
100
     *
101
     * @param string $file    relative path to file for write the content
102
     *                        Example: `bashexec.log`
103
     *
104
     * @param  mixed  $content String or array
105
     * @access public
106
     * @return void
107
     */
108
    public function writeToFile($file, $content)
109
    {
110
        file_put_contents(
111
            __DIR__ . DIRECTORY_SEPARATOR . $file,
112
            '--------------' . date('Y-m-d H:m:s') . '------------' . PHP_EOL
113
            . print_r($content, true),
114
            FILE_APPEND | LOCK_EX
115
        );
116
    }
117
}
118