8
8
9
9
namespace le0daniel \Laravel \ImageEngine \Http \Controllers ;
10
10
11
- use Illuminate \Http \Request ;
12
11
use Illuminate \Routing \Controller as BaseController ;
13
- use le0daniel \ Laravel \ ImageEngine \ Image \ Image ;
12
+ use Illuminate \ Support \ Facades \ Log ;
14
13
use le0daniel \Laravel \ImageEngine \Image \ImageException ;
15
- use le0daniel \Laravel \ImageEngine \Image \Renderer ;
16
- use le0daniel \Laravel \ImageEngine \Image \ Signer ;
14
+ use le0daniel \Laravel \ImageEngine \Image \ImageEngine ;
15
+ use le0daniel \Laravel \ImageEngine \Utility \ SignatureException ;
17
16
18
17
class ImageController extends BaseController
19
18
{
20
- /**
21
- * @var Signer
22
- */
23
- protected $ signer ;
19
+ private ImageEngine $ imageEngine ;
24
20
25
- /**
26
- * @var Renderer
27
- */
28
- protected $ renderer ;
29
-
30
- /**
31
- * ImageController constructor.
32
- * @param Signer $signer
33
- * @param Renderer $renderer
34
- */
35
- public function __construct (Signer $ signer , Renderer $ renderer )
21
+ public function __construct (ImageEngine $ imageEngine )
36
22
{
37
- $ this ->signer = $ signer ;
38
- $ this ->renderer = $ renderer ;
23
+ $ this ->imageEngine = $ imageEngine ;
39
24
}
40
25
26
+ private function expired ()
27
+ {
28
+ return response ()->json (
29
+ [
30
+ 'error ' => 'Expired '
31
+ ],
32
+ 410
33
+ );
34
+ }
41
35
42
- /**
43
- * @param string $unverifiedPayload
44
- * @param string $signature
45
- * @param string $extension
46
- * @return \Illuminate\Http\JsonResponse|\Symfony\Component\HttpFoundation\BinaryFileResponse
47
- * @throws \Exception
48
- */
49
- public function image (string $ unverifiedPayload , string $ signature , string $ extension )
36
+ public function image (string $ folder , string $ path , string $ extension )
50
37
{
51
38
try {
52
- $ payload = $ this ->signer ->verifyAndUnpack ($ unverifiedPayload , $ signature );
53
- } catch (\Exception $ error ) {
54
- return response ()->json ([
55
- 'error ' => 'Invalid signature. '
56
- ], 403 );
57
- }
58
-
59
- $ image = Image::createFromPayload ($ payload );
39
+ $ imageRepresentation = $ this ->imageEngine ->getImageSignedString ($ folder . $ path );
40
+ if ($ imageRepresentation ->isExpired ) {
41
+ return $ this ->expired ();
42
+ }
60
43
61
- // Check if expired
62
- if ($ image ->isExpired ()) {
63
- response ()->json ([
64
- 'error ' => 'Expired '
65
- ], 403 );
66
- }
44
+ $ absoluteImagePath = $ this ->imageEngine ->render (
45
+ $ imageRepresentation ,
46
+ $ extension ,
47
+ false
48
+ );
67
49
68
- try {
69
50
return response ()->file (
70
- $ this ->renderer ->render ($ image , $ extension ),
71
- $ image ->cacheControlHeaders ()
51
+ $ absoluteImagePath ,
52
+ $ imageRepresentation ->cacheControlHeaders ()
53
+ );
54
+ } catch (SignatureException $ signatureException ) {
55
+ Log::error ('Image Rendering: ' . $ signatureException ->getMessage ());
56
+ return response ()->json (
57
+ [
58
+ 'Error ' => 'Invalid signature provided ' ,
59
+ ],
60
+ 422
61
+ );
62
+ } catch (ImageException $ error ) {
63
+ Log::error ('Image Rendering: ' . $ error ->getMessage () . ' => ' . $ error ->getHint ());
64
+ return response ()->json (
65
+ [
66
+ 'Error ' => 'Internal rendering error ' ,
67
+ ],
68
+ 500
72
69
);
73
- } catch (ImageException $ exception ) {
74
- if (config ('app.debug ' ) === true ) {
75
- return response ()->json ([
76
- 'error ' => $ exception ->getMessage (),
77
- 'hint ' => $ exception ->getHint (),
78
- ], 500 );
79
- }
80
- return response ()->json ([
81
- 'error ' => 'Invalid request. Forbidden '
82
- ], 403 );
83
70
}
84
71
}
85
72
86
- }
73
+ }
0 commit comments