PagantisLogModuleFrontController   A
last analyzed

Complexity

Total Complexity 15

Size/Duplication

Total Lines 78
Duplicated Lines 0 %

Importance

Changes 3
Bugs 0 Features 0
Metric Value
eloc 38
c 3
b 0
f 0
dl 0
loc 78
rs 10
wmc 15

3 Methods

Rating   Name   Duplication   Size   Complexity  
B postProcess() 0 26 9
A jsonResponse() 0 13 2
A authorize() 0 14 4
1
<?php
2
/**
3
 * This file is part of the official Pagantis module for PrestaShop.
4
 *
5
 * @author    Pagantis <[email protected]>
6
 * @copyright 2019 Pagantis
7
 * @license   proprietary
8
 */
9
10
/**
11
 * Class PagantisLogModuleFrontController
12
 */
13
class PagantisLogModuleFrontController extends ModuleFrontController
0 ignored issues
show
Bug introduced by
The type ModuleFrontController was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
14
{
15
    /**
16
     * @var string $message
17
     */
18
    protected $message;
19
20
    /**
21
     * @var bool $error
22
     */
23
    protected $error = false;
24
25
    /**
26
     * Controller index method:
27
     */
28
    public function postProcess()
29
    {
30
        if (!$this->authorize()) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $this->authorize() of type null|true is loosely compared to false; this is ambiguous if the boolean can be false. You might want to explicitly use !== null instead.

If an expression can have both false, and null as possible values. It is generally a good practice to always use strict comparison to clearly distinguish between those two values.

$a = canBeFalseAndNull();

// Instead of
if ( ! $a) { }

// Better use one of the explicit versions:
if ($a !== null) { }
if ($a !== false) { }
if ($a !== null && $a !== false) { }
Loading history...
31
            return;
32
        };
33
        $limit = 200;
34
        $where = '';
35
        if (Tools::getValue('limit', false) && is_numeric(Tools::getValue('limit'))) {
0 ignored issues
show
Bug introduced by
The type Tools was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
36
            $limit = Tools::getValue('limit');
37
        }
38
        if (Tools::getValue('from', false)) {
39
            $where = 'WHERE createdAt >= \'' . Tools::getValue('from') . '\'';
40
        }
41
        $sql = 'SELECT * FROM ' . _DB_PREFIX_ . 'pagantis_log ' . $where . ' ORDER BY id desc LIMIT ' . $limit;
0 ignored issues
show
Bug introduced by
The constant _DB_PREFIX_ was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
42
        if ($results = Db::getInstance()->ExecuteS($sql)) {
0 ignored issues
show
Bug introduced by
The type Db was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
43
            foreach ($results as $row) {
44
                $data = (is_null(json_decode($row['log']))) ? $row['log'] : json_decode($row['log']);
45
                if (is_array($data)) {
46
                    $data['timestamp'] = $row['createdAt'];
47
                } else {
48
                    $data = array("message" => $data, 'timestamp' => $row['createdAt']);
49
                }
50
                $this->message[] = $data;
51
            }
52
        }
53
        $this->jsonResponse();
54
    }
55
56
    /**
57
     * Send a jsonResponse
58
     */
59
    public function jsonResponse()
60
    {
61
        $result = json_encode($this->message);
62
        if ($result === 'null') {
63
            $result = array();
64
        }
65
66
        header('HTTP/1.1 200 Ok', true, 200);
67
        header('Content-Type: application/json', true);
68
        header('Content-Length: ' . Tools::strlen($result));
69
70
        echo $result;
0 ignored issues
show
Bug introduced by
Are you sure $result of type array|string can be used in echo? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

70
        echo /** @scrutinizer ignore-type */ $result;
Loading history...
71
        exit();
0 ignored issues
show
Best Practice introduced by
Using exit here is not recommended.

In general, usage of exit should be done with care and only when running in a scripting context like a CLI script.

Loading history...
72
    }
73
74
    /**
75
     * @return bool|null
76
     */
77
    public function authorize()
78
    {
79
        $productCode = Tools::getValue('product', false);
80
        $products = explode(',', Pagantis::getExtraConfig('PRODUCTS', null));
81
        $privateKey = Configuration::get(Tools::strtolower($productCode) . '_private_key');
0 ignored issues
show
Bug introduced by
The type Configuration was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
82
        $privateKeyGet = Tools::getValue('secret', false);
83
        if (!empty($privateKeyGet) && $privateKeyGet === $privateKey && in_array(Tools::strtoupper($productCode), $products)) {
84
            return true;
85
        }
86
87
        header('HTTP/1.1 403 Forbidden', true, 403);
88
        header('Content-Type: application/json', true);
89
90
        exit();
91
    }
92
}
93