IncomingWebhookController::fireEventFor()   B
last analyzed

Complexity

Conditions 8
Paths 8

Size

Total Lines 26
Code Lines 24

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 8
eloc 24
nc 8
nop 2
dl 0
loc 26
rs 8.4444
c 0
b 0
f 0
1
<?php
2
3
namespace Meema\MediaConverter\Http\Controllers;
4
5
use Aws\Sns\Message;
6
use Illuminate\Routing\Controller;
7
use Illuminate\Support\Facades\Http;
8
use Illuminate\Support\Facades\Log;
9
use Meema\MediaConverter\Events\ConversionHasCompleted;
10
use Meema\MediaConverter\Events\ConversionHasError;
11
use Meema\MediaConverter\Events\ConversionHasInputInformation;
12
use Meema\MediaConverter\Events\ConversionHasNewWarning;
13
use Meema\MediaConverter\Events\ConversionHasStatusUpdate;
14
use Meema\MediaConverter\Events\ConversionIsProgressing;
15
use Meema\MediaConverter\Events\ConversionQueueHop;
16
17
class IncomingWebhookController extends Controller
18
{
19
    public function __construct()
20
    {
21
        $this->middleware('verify-signature');
22
    }
23
24
    /**
25
     * @throws \Exception
26
     */
27
    public function __invoke()
28
    {
29
        try {
30
            $message = $this->ensureSubscriptionIsConfirmed();
31
32
            Log::info('incoming MediaConvert webhook message', $message);
33
34
            if (! array_key_exists('detail', $message)) {
35
                Log::alert('incoming MediaConvert webhook: "detail"-key does not exist');
36
37
                return;
38
            }
39
40
            $detail = $message['detail'];
41
42
            if (! array_key_exists('status', $detail)) {
43
                Log::alert('incoming MediaConvert webhook: "status"-key does not exist');
44
45
                return;
46
            }
47
48
            $status = $detail['status'];
49
50
            $this->fireEventFor($status, $message);
51
        } catch (\Exception $e) {
52
            throw new \Exception($e);
53
        }
54
    }
55
56
    /**
57
     * @param $status
58
     * @param $message
59
     *
60
     * @throws \Exception
61
     */
62
    public function fireEventFor($status, $message)
63
    {
64
        switch ($status) {
65
            case 'PROGRESSING':
66
                event(new ConversionIsProgressing($message));
67
                break;
68
            case 'INPUT_INFORMATION':
69
                event(new ConversionHasInputInformation($message));
70
                break;
71
            case 'COMPLETE':
72
                event(new ConversionHasCompleted($message));
73
                break;
74
            case 'STATUS_UPDATE':
75
                event(new ConversionHasStatusUpdate($message));
76
                break;
77
            case 'NEW_WARNING':
78
                event(new ConversionHasNewWarning($message));
79
                break;
80
            case 'QUEUE_HOP':
81
                event(new ConversionQueueHop($message));
82
                break;
83
            case 'ERROR':
84
                event(new ConversionHasError($message));
85
                break;
86
            default:
87
                throw new \Exception();
88
        }
89
    }
90
91
    /**
92
     * @return array
93
     */
94
    public function ensureSubscriptionIsConfirmed(): array
95
    {
96
        $message = Message::fromRawPostData()->toArray();
97
98
        if (array_key_exists('SubscribeURL', $message)) {
99
            Http::get($message['SubscribeURL']);
100
        }
101
102
        return json_decode($message['Message'], true);
103
    }
104
}
105