Passed
Push — master ( 10a915...0d23d6 )
by Mattia
08:28 queued 11s
created

BaseApiController::generateHttpCacheHeaders()   A

Complexity

Conditions 3
Paths 2

Size

Total Lines 16
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 11
c 0
b 0
f 0
nc 2
nop 3
dl 0
loc 16
rs 9.9
1
<?php
2
3
declare(strict_types=1);
4
5
namespace App\Http\Controllers\Api;
6
7
use App\Core as MinepicCore;
8
use App\Models\Account;
9
use Illuminate\Http\Request;
10
use Illuminate\Http\Response;
11
use Laravel\Lumen\Http\ResponseFactory;
12
use Laravel\Lumen\Routing\Controller as BaseController;
13
14
/**
15
 * Class BaseApiController.
16
 */
17
abstract class BaseApiController extends BaseController
18
{
19
    /**
20
     * @var MinepicCore
21
     */
22
    protected $minepic;
23
24
    /** @var ResponseFactory */
25
    protected $responseFactory;
26
27
    /**
28
     * Api constructor.
29
     *
30
     * @param MinepicCore     $minepic         Minepic Core Instance
31
     * @param ResponseFactory $responseFactory Response Factory
32
     */
33
    public function __construct(
34
        MinepicCore $minepic,
35
        ResponseFactory $responseFactory
36
    ) {
37
        $this->minepic = $minepic;
38
        $this->responseFactory = $responseFactory;
39
    }
40
41
    /**
42
     * @param Request $request    Injected Request
43
     * @param string  $uuidOrName
44
     * @param int     $size       Avatar size User UUID or name
45
     *
46
     * @return Response
47
     */
48
    abstract public function serve(Request $request, $uuidOrName = '', $size = 0): Response;
49
50
    /**
51
     * Isometric Avatar with Size.
52
     *
53
     * @param Request $request    Injected Request
54
     * @param int     $size       Avatar size
55
     * @param string  $uuidOrName User UUID or name
56
     *
57
     * @return Response
58
     */
59
    public function serveWithSize(Request $request, $size = 0, $uuidOrName = ''): Response
60
    {
61
        return $this->serve($request, $uuidOrName, $size);
62
    }
63
64
    /**
65
     * HTTP Headers for current user.
66
     *
67
     * @param Account $account
68
     * @param $size
69
     * @param string $type
70
     *
71
     * @return array
72
     */
73
    public function generateHttpCacheHeaders(?Account $account, $size, $type = 'avatar'): array
74
    {
75
        if ($account !== null && $account->uuid !== null) {
76
            return [
77
                'Cache-Control' => 'private, max-age='.env('USERDATA_CACHE_TIME'),
78
                'Last-Modified' => \gmdate('D, d M Y H:i:s \G\M\T', $account->updated_at->timestamp),
0 ignored issues
show
Bug introduced by
The property timestamp does not exist on string.
Loading history...
79
                'Expires' => \gmdate('D, d M Y H:i:s \G\M\T', $account->updated_at->timestamp + env('USERDATA_CACHE_TIME')),
80
                'ETag' => \md5($type.$account->updated_at->timestamp.$account->uuid.$account->username.$size),
81
            ];
82
        }
83
84
        return [
85
            'Cache-Control' => 'private, max-age=7776000',
86
            'ETag' => \md5("{$type}_FFS_STOP_STEVE_SPAM_{$size}"),
87
            'Last-Modified' => \gmdate('D, d M Y H:i:s \G\M\T', \strtotime('2017-02-01 00:00')),
88
            'Expires' => \gmdate('D, d M Y H:i:s \G\M\T', \strtotime('2017-02-01 00:00')),
89
        ];
90
    }
91
}
92