Completed
Pull Request — master (#333)
by Elan
01:50 queued 35s
created

ImportController::runImport()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 12
rs 9.8666
c 0
b 0
f 0
cc 3
nc 3
nop 1
1
<?php
2
3
namespace XHGui\Controller;
4
5
use Exception;
6
use InvalidArgumentException;
7
use Slim\App;
8
use Slim\Http\Request;
9
use Slim\Http\Response;
10
use Slim\Slim as App;
0 ignored issues
show
Bug introduced by
This code did not parse for me. Apparently, there is an error somewhere around this line:

Cannot use Slim\Slim as App because the name is already in use
Loading history...
11
use XHGui\AbstractController;
12
use XHGui\Saver\SaverInterface;
13
14
class ImportController extends AbstractController
15
{
16
    /**
17
     * @var SaverInterface
18
     */
19
    private $saver;
20
21
    /** @var string */
22
    private $token;
23
24
    public function __construct(App $app, SaverInterface $saver, $token)
25
    {
26
        parent::__construct($app);
27
        $this->saver = $saver;
28
        $this->token = $token;
29
    }
30
31
    public function import(Request $request, Response $response)
32
    {
33
        try {
34
            $id = $this->runImport($request);
35
            $result = ['ok' => true, 'id' => $id, 'size' => $request->getContentLength()];
36
        } catch (InvalidArgumentException $e) {
37
            $result = ['error' => true, 'message' => $e->getMessage()];
38
            $response->setStatus(401);
39
        } catch (Exception $e) {
40
            $result = ['error' => true, 'message' => $e->getMessage()];
41
            $response->setStatus(500);
42
        }
43
44
        $response['Content-Type'] = 'application/json';
45
        $response->body(json_encode($result));
46
    }
47
48
    private function runImport(Request $request): string
49
    {
50
        if ($this->token) {
51
            if ($this->token !== $request->get('token')) {
52
                throw new InvalidArgumentException('Token validation failed');
53
            }
54
        }
55
56
        $data = json_decode($request->getBody(), true);
57
58
        return $this->saver->save($data);
59
    }
60
}
61