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

226 lines
6.6 KiB
PHP
Executable File

<?php
namespace App\Http\Controllers\API;
use App\Http\Requests\API\LoginRequest;
use App\Http\Requests\API\RegisterRequest;
use App\Http\Requests\API\ClientRequest;
use App\Http\Resources\ClientResource;
use App\Mail\EmailVerification;
use App\Mail\ResetPassword;
use App\Models\Account;
use App\Models\Client;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Lang;
use App\Http\Controllers\Controller;
class AuthController extends Controller
{
public function login(LoginRequest $request){
$client = Client::where('email', $request->input('email'))->first();
if($client)
{
if($client->is_suspended)
{
return response()->json([
'message' => trans('auth.auth.suspended')
], 403);
}
elseif (!$client->is_verified)
{
return response()->json([
'message' => trans('auth.not_verified')
], 401);
}
if (!Hash::check(request()->password, $client->password)){
return response()->json([
'message' => trans('auth.unauthorized')
], 403);
}
$credentials = $request->only('email', 'password');
Auth::attempt($credentials);
$client->tokens()->delete();
$client->token = $client->createToken('auth_token')->plainTextToken;
return ClientResource::make($client);
}
return response()->json(['message' => Lang::get('auth.email_not_found')], 404);
}
public function register(RegisterRequest $request){
$client = new Client($request->only(['email','firstname','lastname']));
$client->password = Hash::make($request->input('password'));
$email_verification = (bool) config('settings.email_verification');
$client->is_verified = ! $email_verification;
if($email_verification)
{
$client->verification_token = rand(10000, 99999);
//try{
Mail::to($request->email)
->queue(new EmailVerification($request->firstname, $client->verification_token));
// }catch (\Exception $ex){
// //eger email ugradyp bolmasa verification edip bolmaz
// $client->is_verified = true;
// Log::error($ex->getMessage());
// }
}
$account = Account::create([
'country_id' => $request->country,
'type' => $request->account_type
]);
$client->account()->associate($account)->save();
if($client->is_verified){
Auth::login($client);
$client->token = $client->createToken('auth_token')->plainTextToken;
}
return ClientResource::make($client);
}
public function verifyEmail(Request $request){
$request->validate([
'email' => 'required|email',
'token' => 'required'
]);
$client = Client::where('email', $request->email)->first();
if($client){
if($client->verification_token === $request->token){
$client->is_verified = 1;
$client->save();
Auth::login($client);
$client->token = $client->createToken('auth_token')->plainTextToken;
return ClientResource::make($client);
}
else{
return response()->json(['message' => 'tokens don\'t match'], 401);
}
}
else{
return response()->json([
'message' => trans('auth.auth.user_not_found')
], 404);
}
}
public function client(Request $request) {
if($client = $request->user()){
return ClientResource::make($client);
}
return response()->json([
'message' => trans('auth.token_expired')
], 401);
}
public function logout(Request $request) {
$request->user()->currentAccessToken()->delete();
return response()->json([
'message' => 'ok'
], 200);
}
public function sendPasswordResetLinkEmail(Request $request) {
try{
$request->validate(['email' => 'required|email']);
$user = Client::where('email', $request->email)->first();
if (!$user) {
return response()->json([
'message' => trans('auth.auth.user_not_found')
], 404);
}
$token = rand(1000, 9999);
Mail::to($request->email)->queue(new ResetPassword($user->firstname, $token));
$user['verification_token'] = $token;
$user->save();
return response()->json([
'message' => 'sent reset code'
], 200);
}
catch(\Exception $e){
return response()->json([
'message' => $e->getMessage()
], 200);
}
}
public function updatePassword(Request $request) {
try{
$this->validate($request, [
'token' => 'required',
'email' => 'required|email',
'password' => 'required',
'confirm_password' => 'required|same:password'
]);
$user = Client::where('email', $request->email)->first();
if($user && $request->token == $user->token){
$user['password'] = Hash::make($request->password);
$user->save();
return response()->json([
'message' => 'OK'
], 200);
}
return response()->json([
'message' => trans('auth.auth.user_not_found')
], 404);
}
catch(\Exception $e){
return response()->json([
'message' => $e->getMessage()
], 500);
}
}
public function updateClient(ClientRequest $request){
$client = $request->user();
$data = $request->only('firstname', 'lastname', 'password');
if (!isset($data['password']) || !$data['password']) {
unset($data['password']);
}
else {
$data['password'] = Hash::make($data['password']);
}
if($client->fill($data)->save()){
return ClientResource::make($client);
}
return response()->json([
'message' => trans('auth.app.account.update_profile_error')
],500);
}
}