Passed
Push — main ( ed4df2...e4f5cf )
by Tim
15:46 queued 08:39
created

ClientController::index()   B

Complexity

Conditions 7
Paths 6

Size

Total Lines 24
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 7
eloc 15
c 1
b 0
f 0
nc 6
nop 1
dl 0
loc 24
rs 8.8333
1
<?php
2
3
namespace BiffBangPow\SSMonitor\Client\Control;
4
5
use BiffBangPow\SSMonitor\Client\Core\ClientInterface;
6
use BiffBangPow\SSMonitor\Client\Helper\EncryptionHelper;
7
use SilverStripe\CMS\Controllers\ContentController;
8
use SilverStripe\Control\Director;
9
use SilverStripe\Control\HTTPRequest;
10
use SilverStripe\Control\Util\IPUtils;
11
use SilverStripe\Core\ClassInfo;
12
use SilverStripe\Core\Environment;
13
14
/**
15
 * Class \BiffBangPow\SSMonitor\Client\Control\ClientController
16
 *
17
 */
18
class ClientController extends ContentController
19
{
20
    public function index(HTTPRequest $request)
21
    {
22
        $api_key = Environment::getEnv('MONITORING_API_KEY');
23
        $authKey = $request->postVar('key');
24
        if ((!$api_key) || ($api_key !== $authKey)) {
25
            return (Director::isDev())
26
                ? $this->httpError(400, _t(__CLASS__ . '.IncorrectAPIKey', 'API key not recognised'))
27
                : $this->httpError(404);
28
        }
29
30
        $validIP = Environment::getEnv('MONITORING_VALID_IP');
31
        if ($validIP) {
32
            $requestIP = $request->getIP();
33
            if (!IPUtils::checkIP($requestIP, $validIP)) {
34
                return (Director::isDev())
35
                    ? $this->httpError(400, _t(__CLASS__ . '.InvalidIP', 'Invalid request IP ({requestip})', [
36
                        'requestip' => $requestIP
37
                    ]))
38
                    : $this->httpError(404);
39
            }
40
        }
41
42
43
        return $this->getReportResponse();
44
    }
45
46
47
    private function getReportResponse()
48
    {
49
        $classes = ClassInfo::implementorsOf(ClientInterface::class);
50
51
        $result = [
52
            'clientid' => Environment::getEnv('MONITORING_UUID')
53
        ];
54
55
        foreach ($classes as $class) {
56
            $classOut = (new $class)->getResult();
57
            $result = array_merge($result, $classOut);
58
        }
59
60
        $resultJson = serialize($result);
61
        $encHelper = new EncryptionHelper();
62
        return $encHelper->encrypt($resultJson);
63
    }
64
}
65