Passed
Push — master ( 47edc3...8fd0ce )
by Mohamed
02:58
created

GrafanaOauth::removeUserMainOrg()   A

Complexity

Conditions 2
Paths 3

Size

Total Lines 16
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
eloc 11
c 1
b 0
f 0
nc 3
nop 1
dl 0
loc 16
rs 9.9
1
<?php
2
3
namespace App\Http\Controllers;
4
5
use GuzzleHttp\Client;
6
use Illuminate\Support\Str;
7
8
use Illuminate\Http\Request;
9
10
class GrafanaOauth extends Controller
11
{
12
13
    public function checkOrg(Request $request)
14
    {
15
        $userLogin = $request->user()->email;
16
        $header = [
17
            'Accept' => 'application/json',
18
            'Content-Type' => 'application/json',
19
        ];
20
21
        $client = new Client([
22
            'base_uri' => env('GRAFANA_URL'),
23
            'auth' => [env('GRAFANA_USER'), env('GRAFANA_PASSWORD')],
24
        ]);
25
        try {
26
            $response = $client->request('GET', "/api/users/lookup?loginOrEmail={$userLogin}", [
27
                'headers' =>  $header
28
            ])->getBody();
29
            $data = json_decode($response, true);
30
        } catch (\Throwable $th) {
31
             $this->createGrafanaUser($request);
32
             $data = $this->checkOrg($request);
33
        }
34
        return $data;
35
    }
36
37
    public function updateUserOrg(Request $request, $data)
38
    {
39
        $header = [
40
            'Accept' => 'application/json',
41
            'Content-Type' => 'application/json',
42
        ];
43
        $client = new Client([
44
            'base_uri' => env('GRAFANA_URL'),
45
            'auth' => [env('GRAFANA_USER'), env('GRAFANA_PASSWORD')],
46
        ]);
47
        try {
48
            $client->request('POST', "/api/orgs/{$data['orgId']}/users", [
49
                'auth' => [env('GRAFANA_USER'), env('GRAFANA_PASSWORD')],
50
                'headers' =>  $header,
51
                'json' => [
52
                    'role' => 'Viewer',
53
                    'loginOrEmail' => $request->user()->username
54
                ]
55
            ]);
56
        } catch (\Throwable $th) {
0 ignored issues
show
Coding Style Comprehensibility introduced by
Consider adding a comment why this CATCH block is empty.
Loading history...
57
        }
58
    }
59
60
    public function createGrafanaUser(Request $request)
61
    {
62
        try {
63
            $header = [
64
                'Accept' => 'application/json',
65
                'Content-Type' => 'application/json',
66
            ];
67
            $client = new Client([
68
                'base_uri' => env('GRAFANA_URL'),
69
                'auth' => [env('GRAFANA_USER'), env('GRAFANA_PASSWORD')],
70
            ]);
71
            $response = $client->request('POST', '/api/admin/users', [
72
                'headers' =>  $header,
73
                'json' => [
74
                    'name' => $request->user()->last_name,
75
                    'login' => $request->user()->username,
76
                    'email' => $request->user()->email,
77
                    'password' =>  Str::random(8),
78
                ]
79
            ])->getBody();
80
            $data = json_decode($response, true);
81
            return $data;
82
        } catch (\Throwable $th) {
0 ignored issues
show
Coding Style Comprehensibility introduced by
Consider adding a comment why this CATCH block is empty.
Loading history...
83
        }
84
    }
85
86
    public function removeUserMainOrg($data)
87
    {
88
       try {
89
            $header = [
90
                'Accept' => 'application/json',
91
                'Content-Type' => 'application/json',
92
            ];
93
            $client = new Client([
94
                'base_uri' => env('GRAFANA_URL'),
95
                'auth' => [env('GRAFANA_USER'), env('GRAFANA_PASSWORD')],
96
            ]);
97
            $client->request('DELETE', "/api/orgs/1/users/{$data['user']['id']}", [
98
                'auth' => [env('GRAFANA_USER'), env('GRAFANA_PASSWORD')],
99
                'headers' =>  $header
100
            ]);
101
       } catch (\Throwable $th) {
0 ignored issues
show
Coding Style Comprehensibility introduced by
Consider adding a comment why this CATCH block is empty.
Loading history...
102
       }
103
    }
104
105
    public function getUserOrg(Request $request)
106
    {
107
        if($request->user()->super_admin){
108
            $data = [
109
                [
110
                    "orgId" => 2,
111
                    "userId" => $request->user()->id,
112
                    "role" => 'Admin',
113
                    "name" => 'Schools',
114
                    "email" => $request->user()->username,
115
                    "login" => 'Schools',
116
                ],
117
                [
118
                    "orgId" => 4,
119
                    "userId" => $request->user()->id,
120
                    "role" => 'Admin',
121
                    "name" => 'Zones',
122
                    "email" => $request->user()->username,
123
                    "login" => 'Zones',
124
                ],
125
                [
126
                    "orgId" => 5,
127
                    "userId" => $request->user()->id,
128
                    "role" => 'Admin',
129
                    "name" => 'Provinces',
130
                    "email" => $request->user()->username,
131
                    "login" => 'Provinces',
132
                ]
133
            ];
134
        }elseif ($request->user() &&  (!($request->user()->principal->isEmpty()))  && !is_null($request->user()->principal) && ($request->user()->principal[0]->roles->code == 'PRINCIPAL')) {
135
            $data = $this->checkOrg($request);
136
            if (empty($data) || ( (!empty($data['orgId']) && $data['orgId'] !== 2))) {
137
                $request['data'] = $data;
138
                $data['user'] = $data;
139
                $data['orgId'] = 2;
140
                $this->updateUserOrg($request, $data);
141
                $this->removeUserMainOrg($data);
142
            }
143
            $data = [
144
                [
145
                    "orgId" => 2,
146
                    "userId" => $request->user()->id,
147
                    "role" => 'Viewer',
148
                    "name" => 'Schools',
149
                    "email" => $request->user()->username,
150
                    "login" => 'Schools',
151
                ]
152
            ];
153
        } elseif ($request->user()  &&  (!($request->user()->zonal_cordinator->isEmpty())) && !is_null($request->user()->zonal_cordinator) && ($request->user()->zonal_cordinator[0]->roles->code == 'ZONAL_COORDINATOR')) {
154
            $data = $this->checkOrg($request);
155
            if (empty($data) || ((!empty($data['orgId']) && $data['orgId'] !== 4))) {
156
                $request['data'] = $data;
157
                $data['user'] = $data;
158
                $data['orgId'] = 4;
159
                $this->updateUserOrg($request, $data);
160
                $this->removeUserMainOrg($data);
161
            }
162
            $data = [
163
                [
164
                    "orgId" => 4,
165
                    "userId" => $request->user()->id,
166
                    "role" => 'Viewer',
167
                    "name" => 'Zones',
168
                    "email" => $request->user()->username,
169
                    "login" => 'Zones',
170
                ]
171
            ];
172
        } elseif ($request->user() &&  (!($request->user()->provincial_cordinator->isEmpty())) && !is_null($request->user()->provincial_cordinator) && ($request->user()->provincial_cordinator[0]->roles->code == 'PROVINCIAL_COORDINATOR')) {
173
            $data = $this->checkOrg($request);
174
            if (empty($data)  || ((!empty($data['orgId']) && $data['orgId'] !== 5))) {
175
                $request['data'] = $data;
176
                $data['user'] = $data;
177
                $data['orgId'] = 5;
178
                $this->updateUserOrg($request, $data);
179
                $this->removeUserMainOrg($data);
180
            }
181
            $data = [
182
                [
183
                    "orgId" => 5,
184
                    "userId" => $request->user()->id,
185
                    "role" => 'Viewer',
186
                    "name" => 'Provinces',
187
                    "email" => $request->user()->username,
188
                    "login" => 'Provinces',
189
                ]
190
            ];
191
        }
192
        return $data;
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $data does not seem to be defined for all execution paths leading up to this point.
Loading history...
193
    }
194
}
195