Completed
Push — master ( 59cf45...89a6d0 )
by Markus
02:34
created

SynologyHandler::canHandle()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
eloc 2
nc 2
nop 0
dl 0
loc 4
ccs 0
cts 2
cp 0
crap 6
rs 10
c 1
b 0
f 0
1
<?php
2
3
namespace SSpkS\Handler;
4
5
use \SSpkS\Output\JsonOutput;
6
use \SSpkS\Output\UrlFixer;
7
use \SSpkS\Package\PackageFinder;
8
use \SSpkS\Package\PackageFilter;
9
10
/*
11
example data passed by a syno
12
13
language = enu
14
timezone = Brussels
15
unique = synology_cedarview_412
16
arch = cedarview
17
major = 4
18
minor = 1
19
build = 2636
20
package_update_channel = stable
21
22
    [package_update_channel] => beta
23
    [unique] => synology_avoton_415+
24
    [build] => 7393
25
    [language] => enu
26
    [major] => 6
27
    [arch] => avoton
28
    [minor] => 0
29
    [timezone] => Amsterdam
30
*/
31
32
class SynologyHandler extends AbstractHandler
33
{
34
    public function canHandle()
35
    {
36
        return (isset($_REQUEST['unique']) && substr($_REQUEST['unique'], 0, 8) == 'synology');
37
    }
38
39
    public function handle()
40
    {
41
        // Synology request --> show JSON
42
        $arch     = trim($_REQUEST['arch']);
43
        $major    = trim($_REQUEST['major']);
44
        $minor    = trim($_REQUEST['minor']);
45
        $build    = trim($_REQUEST['build']);
46
        $channel  = trim($_REQUEST['package_update_channel']);
47
        // more parameters: language, timezone and unique
48
49
        if ($arch == '88f6282') {
50
            $arch = '88f6281';
51
        }
52
53
        // Make sure, that the "client" knows that output is sent in JSON format
54
        header('Content-type: application/json');
55
        $fw_version = $major . '.' . $minor . '.' . $build;
56
        $pkgs = new PackageFinder($this->config->paths['packages']);
57
        $pkgf = new PackageFilter($pkgs->getAllPackages());
58
        $pkgf->setArchitectureFilter($arch);
59
        $pkgf->setChannelFilter($channel);
60
        $pkgf->setFirmwareVersionFilter($fw_version);
61
        $pkgf->setOldVersionFilter(true);
62
        $filteredPkgList = $pkgf->getFilteredPackageList();
63
64
        $uf = new UrlFixer($this->config->baseUrl);
65
        $uf->fixPackageList($filteredPkgList);
66
67
        $jo = new JsonOutput($this->config);
68
        $jo->setExcludedServices($this->config->excludedSynoServices);
69
        $jo->outputPackages($filteredPkgList);
70
    }
71
}
72