Completed
Branch master (46d8ce)
by Stephen
23:22 queued 15:39
created

LogoutDiscourseUser::handle()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 26
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 15
CRAP Score 3

Importance

Changes 2
Bugs 0 Features 0
Metric Value
cc 3
eloc 16
c 2
b 0
f 0
nc 3
nop 1
dl 0
loc 26
ccs 15
cts 15
cp 1
crap 3
rs 9.7333
1
<?php
2
3
namespace Spinen\Discourse\Listeners;
4
5
use GuzzleHttp\Client;
6
use Illuminate\Contracts\Config\Repository;
7
use Illuminate\Contracts\Queue\ShouldQueue;
8
use Illuminate\Support\Facades\Log;
9
use Symfony\Component\HttpKernel\Log\Logger;
10
11
/**
12
 * Class LogoutDiscourseUser
13
 *
14
 * Send a Logout request to Discourse for the corresponding Laravel User.
15
 *
16
 * @package Spinen\Discourse\Listeners
17
 */
18
class LogoutDiscourseUser implements ShouldQueue
19
{
20
    /**
21
     * @var Client
22
     */
23
    public $client;
24
25
    /**
26
     * @var Repository
27
     */
28
    public $config_repository;
29
30
    /**
31
     * @var Logger
32
     */
33
    public $logger;
34
35
    /**
36
     * Create the event listener.
37
     *
38
     * @param Client $client
39
     * @param Repository $config_repository
40
     * @param Logger $logger
41
     *
42
     * @return void
43
     */
44 4
    public function __construct(Client $client, Repository $config_repository, Logger $logger)
45
    {
46 4
        $this->client = $client;
47 4
        $this->config_repository = $config_repository;
48 4
        $this->logger = $logger;
49
    }
50
51
    /**
52
     * Handle the event.
53
     *
54
     * @param mixed $event
55
     *
56
     * @return void
57
     */
58 3
    public function handle($event)
59
    {
60 3
        if (!$event->user) {
61 1
            return;
62
        }
63
64
        $configs = [
65 2
            'base_uri' => $this->config_repository->get('services.discourse.url'),
66
            'headers'  => [
67 2
                'Api-Key'      => $this->config_repository->get('services.discourse.api.key'),
68 2
                'Api-Username' => $this->config_repository->get('services.discourse.api.user'),
69
            ],
70
        ];
71
72
        // Get Discourse user to match this one, and send a Logout request to Discourse and get the response
73 2
        $user = json_decode(
74 2
            $this->client->get("users/by-external/{$event->user->id}.json", $configs)
75 2
                         ->getBody()
76 2
        )->user;
77
78 2
        $response = $this->client->post("admin/users/{$user->id}/log_out");
79
80 2
        if ($response->getStatusCode() !== 200) {
81 1
            $this->logger->notice(
82 1
                "When logging out user {$event->user->id} Discourse returned status code {$response->getStatusCode()}:",
83 1
                ['reason' => $response->getReasonPhrase()]
84
            );
85
        }
86
    }
87
}
88