forked from ekpono/sentry-my-customer-frontend
/
LoginController.php
131 lines (112 loc) · 4.62 KB
/
LoginController.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use GuzzleHttp\Client;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Support\Facades\Cookie;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use GuzzleHttp\Exception\RequestException;
// use Illuminate\Support\Facades\Http;
class LoginController extends Controller
{
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
protected $host;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->host = env('API_URL', 'https://dev.api.customerpay.me');
}
public function index()
{
if (Cookie::get('api_token')) {
return redirect()->route('dashboard');
}
return view('backend.login');
}
public function authenticate(Request $request)
{
$request->validate([
'phone_number' => 'required|min:6|max:16',
'password' => 'required|min:6'
]);
try {
$client = new Client();
$response = $client->post($this->host . '/login/user', [
'form_params' => [
'phone_number' => $request->input('phone_number'),
'password' => $request->input('password')
]
]);
if ($response->getStatusCode() == 200) {
$response = json_decode($response->getBody());
if (isset($response->success) && $response->success) {
$data = $response->data->user->local;
// store data to cookie
Cookie::queue('api_token', $response->data->user->api_token);
Cookie::queue('user_role', $response->data->user->local->user_role);
Cookie::queue('first_name', $response->data->user->local->first_name);
Cookie::queue('email', $response->data->user->local->email);
Cookie::queue('last_name', $response->data->user->local->last_name);
Cookie::queue('is_active', $data->is_active);
Cookie::queue('phone_number', $data->phone_number);
Cookie::queue('user_id', $response->data->user->_id);
Cookie::queue('expires', strtotime('+ 1 day'));
//show success message
$request->session()->flash('alert-class', 'alert-success');
$request->session()->flash('message', $response->message);
//check if active
if ($data->is_active == false) {
return redirect()->route('activate.user');
}
return redirect()->route('dashboard');
} else {
$message = isset($response->Message) ? $response->Message : $response->message;
$request->session()->flash('message', $message);
return redirect()->route('login');
}
}
$message = isset($response->Message) ? $response->Message : $response->message;
$request->session()->flash('message', $message);
return redirect()->route('login');
} catch (RequestException $e) {
//log error;
Log::error('Catch error: LoginController - ' . $e->getMessage());
if ($e->hasResponse()) {
// get response to catch 4xx errors
$response = json_decode($e->getResponse()->getBody());
$request->session()->flash('alert-class', 'alert-danger');
$request->session()->flash('message', $response->error->description);
return redirect()->route('login');
}
// check for 500 server error
return view('errors.500');
} catch (\Exception $e) {
//log error;
Log::error('Catch error: LoginController - ' . $e->getMessage());
return view('errors.500');
}
return redirect()->route('login');
}
}