birzha-legalizasia/app/Http/Controllers/API/ClientController.php

242 lines
7.0 KiB
PHP
Raw Normal View History

2022-06-24 11:56:01 +00:00
<?php
2022-07-26 06:36:47 +00:00
namespace App\Http\Controllers\API;
2022-06-24 11:56:01 +00:00
2022-10-04 10:43:32 +00:00
use App\Http\Requests\API\AddClientRequest;
2022-07-07 14:19:10 +00:00
use App\Http\Requests\API\LoginRequest;
use App\Http\Requests\API\RegisterRequest;
2022-07-29 07:51:49 +00:00
use App\Http\Requests\API\ClientRequest;
2023-02-27 12:44:48 +00:00
use App\Http\Requests\API\ResetPassword;
2022-07-07 14:19:10 +00:00
use App\Http\Resources\ClientResource;
2022-07-06 12:38:03 +00:00
use App\Mail\EmailVerification;
2022-07-08 11:05:21 +00:00
use App\Models\Account;
2022-06-24 11:56:01 +00:00
use App\Models\Client;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
2022-09-20 08:32:28 +00:00
use Illuminate\Support\Facades\Log;
2022-06-30 14:55:51 +00:00
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Lang;
2022-07-26 06:36:47 +00:00
use App\Http\Controllers\Controller;
2022-12-07 10:28:40 +00:00
use App\Notifications\EmailVerify;
2022-12-07 10:07:43 +00:00
use App\Notifications\PasswordReset;
2022-10-04 10:43:32 +00:00
class ClientController extends Controller
2022-06-24 11:56:01 +00:00
{
2022-07-07 14:19:10 +00:00
public function login(LoginRequest $request){
2022-06-24 11:56:01 +00:00
2022-07-07 14:19:10 +00:00
$client = Client::where('email', $request->input('email'))->first();
2022-06-24 11:56:01 +00:00
2022-09-20 08:46:31 +00:00
if($client)
{
if($client->is_suspended)
{
return response()->json([
2022-12-07 09:01:37 +00:00
'message' => trans('auth.suspended')
2022-10-05 08:02:46 +00:00
], 422);
}
2022-09-20 08:46:31 +00:00
elseif (!$client->is_verified)
{
2022-07-07 09:16:39 +00:00
return response()->json([
2022-09-20 08:46:31 +00:00
'message' => trans('auth.not_verified')
2022-10-05 08:02:46 +00:00
], 422);
2022-07-06 12:38:03 +00:00
}
2022-09-20 08:46:31 +00:00
if (!Hash::check(request()->password, $client->password)){
2022-07-08 11:05:21 +00:00
return response()->json([
2022-09-20 08:46:31 +00:00
'message' => trans('auth.unauthorized')
2022-10-05 08:02:46 +00:00
], 422);
2022-07-08 11:05:21 +00:00
}
2022-07-07 09:16:39 +00:00
2022-07-13 10:38:12 +00:00
$credentials = $request->only('email', 'password');
Auth::attempt($credentials);
2022-07-07 14:19:10 +00:00
$client->tokens()->delete();
2022-07-08 09:40:16 +00:00
2022-07-07 14:19:10 +00:00
$client->token = $client->createToken('auth_token')->plainTextToken;
2022-07-07 09:16:39 +00:00
2022-07-07 14:19:10 +00:00
return ClientResource::make($client);
}
return response()->json(['message' => Lang::get('auth.email_not_found')], 404);
2022-06-24 11:56:01 +00:00
}
2022-10-04 10:43:32 +00:00
public function signup(RegisterRequest $request){
$client = new Client($request->only(['email','firstname','lastname']));
$client->password = Hash::make($request->input('password'));
2022-07-06 13:41:48 +00:00
$email_verification = (bool) config('settings.email_verification');
$client->is_verified = ! $email_verification;
2022-07-06 13:41:48 +00:00
if($email_verification)
{
$client->verification_token = rand(10000, 99999);
2022-12-07 10:28:40 +00:00
$client->notify(new EmailVerify($request->firstname, $client->verification_token));
}
2022-07-06 13:41:48 +00:00
$account = Account::create([
2022-07-13 18:34:24 +00:00
'country_id' => $request->country,
'type' => $request->account_type
2022-07-13 18:34:24 +00:00
]);
2022-07-06 13:41:48 +00:00
$client->account()->associate($account)->save();
if($client->is_verified){
2022-07-07 14:19:10 +00:00
Auth::login($client);
$client->token = $client->createToken('auth_token')->plainTextToken;
2022-06-27 06:32:28 +00:00
}
2022-07-07 14:19:10 +00:00
return ClientResource::make($client);
2022-06-24 11:56:01 +00:00
}
2022-07-06 12:38:03 +00:00
public function verifyEmail(Request $request){
2022-07-07 07:48:12 +00:00
$request->validate([
'email' => 'required|email',
'token' => 'required'
]);
2022-07-06 13:37:51 +00:00
2022-07-07 07:48:12 +00:00
$client = Client::where('email', $request->email)->first();
2022-07-06 13:37:51 +00:00
2022-07-07 07:48:12 +00:00
if($client){
if($client->verification_token === $request->token){
2022-07-08 11:05:51 +00:00
$client->is_verified = 1;
$client->save();
2022-07-07 07:48:12 +00:00
Auth::login($client);
2022-07-08 09:40:16 +00:00
2022-07-08 11:05:51 +00:00
$client->token = $client->createToken('auth_token')->plainTextToken;
2022-07-07 07:48:12 +00:00
2022-07-08 10:48:32 +00:00
return ClientResource::make($client);
2022-07-06 13:37:51 +00:00
}
else{
2022-12-07 09:01:37 +00:00
return response()->json(['message' => trans('auth.token_mismatch')], 401);
2022-07-06 13:37:51 +00:00
}
}
2022-07-07 07:48:12 +00:00
else{
2022-07-07 07:18:57 +00:00
return response()->json([
2022-12-07 09:01:37 +00:00
'message' => trans('auth.user_not_found')
2022-07-07 07:18:57 +00:00
], 404);
2022-07-06 13:37:51 +00:00
}
2022-07-06 12:38:03 +00:00
}
2022-06-30 14:55:51 +00:00
public function client(Request $request) {
2022-07-07 14:19:10 +00:00
if($client = $request->user()){
return ClientResource::make($client);
2022-06-30 14:55:51 +00:00
}
2022-07-07 14:19:10 +00:00
return response()->json([
2022-09-20 07:19:32 +00:00
'message' => trans('auth.token_expired')
2022-07-07 14:19:10 +00:00
], 401);
2022-06-30 14:55:51 +00:00
}
public function logout(Request $request) {
2022-07-07 14:19:10 +00:00
$request->user()->currentAccessToken()->delete();
return response()->json([
'message' => 'ok'
], 200);
2022-06-30 14:55:51 +00:00
}
public function sendPasswordResetLinkEmail(Request $request) {
2022-07-07 06:13:12 +00:00
try{
$request->validate(['email' => 'required|email']);
2022-06-30 14:55:51 +00:00
2022-07-07 06:13:12 +00:00
$user = Client::where('email', $request->email)->first();
if (!$user) {
return response()->json([
2022-12-07 09:01:37 +00:00
'message' => trans('auth.user_not_found')
2022-07-07 06:13:12 +00:00
], 404);
}
2022-06-30 14:55:51 +00:00
2022-07-07 06:13:12 +00:00
$token = rand(1000, 9999);
2022-06-30 14:55:51 +00:00
2022-12-07 10:07:43 +00:00
$user->notify(new PasswordReset($user->firstname, $token));
2022-09-20 08:03:28 +00:00
$user['verification_token'] = $token;
$user->save();
2022-07-07 06:13:12 +00:00
return response()->json([
2022-12-07 09:01:37 +00:00
'message' => trans('auth.sent_reset_code')
2022-07-07 06:13:12 +00:00
], 200);
}
catch(\Exception $e){
return response()->json([
2022-07-07 09:16:39 +00:00
'message' => $e->getMessage()
2022-07-07 06:13:12 +00:00
], 200);
}
2022-06-30 14:55:51 +00:00
}
2023-02-27 12:44:48 +00:00
public function updatePassword(ResetPassword $request) {
2022-07-07 06:13:12 +00:00
try{
2022-07-07 07:18:57 +00:00
2022-07-07 06:13:12 +00:00
$user = Client::where('email', $request->email)->first();
2023-02-28 05:44:32 +00:00
if(!$user){
return response()->json([
'message' => trans('auth.user_not_found')
], 404);
}
2023-03-02 05:28:01 +00:00
Log::info($user);
Log::info($request);
2023-02-28 05:44:32 +00:00
if($request->token == $user->token){
2022-07-07 06:13:12 +00:00
$user['password'] = Hash::make($request->password);
$user->save();
return response()->json([
2022-07-07 09:16:39 +00:00
'message' => 'OK'
2022-07-07 06:13:12 +00:00
], 200);
}
2022-07-07 07:18:57 +00:00
2022-06-30 14:55:51 +00:00
return response()->json([
2023-02-28 05:44:32 +00:00
'message' => trans('auth.invalid_token')
2022-07-07 06:13:12 +00:00
], 404);
}
catch(\Exception $e){
return response()->json([
2022-07-07 09:16:39 +00:00
'message' => $e->getMessage()
2022-10-04 10:43:32 +00:00
], 400);
2022-06-30 14:55:51 +00:00
}
}
2022-07-29 07:51:49 +00:00
public function updateClient(ClientRequest $request){
2022-07-07 10:50:39 +00:00
$client = $request->user();
$data = $request->only('firstname', 'lastname', 'password');
2022-07-08 09:40:16 +00:00
if (!isset($data['password']) || !$data['password']) {
2022-07-07 10:50:39 +00:00
unset($data['password']);
2022-07-08 09:40:16 +00:00
}
else {
2022-07-20 12:22:43 +00:00
$data['password'] = Hash::make($data['password']);
}
2022-07-07 10:50:39 +00:00
2022-07-07 14:19:10 +00:00
if($client->fill($data)->save()){
return ClientResource::make($client);
}
2022-07-07 10:50:39 +00:00
return response()->json([
2022-12-07 09:01:37 +00:00
'message' => trans('app.account.update_profile_error')
2022-10-04 10:43:32 +00:00
],400);
}
public function registerClient(AddClientRequest $request)
{
$client = new Client($request->only(['email','firstname','lastname']));
$client->password = Hash::make($request->input('password'));
$client->is_verified = true;
$client->account_id = $request->user()->account_id;
if($client->save()){
return ClientResource::make($client);
}
return response()->json([
2022-12-07 09:01:37 +00:00
'message' => trans('app.account.update_profile_error')
2022-10-04 10:43:32 +00:00
],400);
}
public function accountClients(){
2022-10-07 06:37:11 +00:00
return ClientResource::collection(request()->user()->account->clients);
}
2022-06-24 11:56:01 +00:00
}