mirror of
https://github.com/crater-invoice/crater.git
synced 2025-10-29 20:51:09 -04:00
init crater
This commit is contained in:
194
app/Http/Controllers/Auth/AccessTokensController.php
Normal file
194
app/Http/Controllers/Auth/AccessTokensController.php
Normal file
@ -0,0 +1,194 @@
|
||||
<?php
|
||||
namespace Laraspace\Http\Controllers\Auth;
|
||||
|
||||
use Laraspace\Proxy\HttpKernelProxy;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Response;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use Illuminate\Foundation\Auth\ThrottlesLogins;
|
||||
use Validator;
|
||||
use Hash;
|
||||
use Laraspace\User;
|
||||
use Auth;
|
||||
use Laraspace\Http\Controllers\Controller;
|
||||
|
||||
class AccessTokensController extends Controller
|
||||
{
|
||||
use ThrottlesLogins;
|
||||
|
||||
/**
|
||||
* A tool for proxying requests to the existing application.
|
||||
*
|
||||
* @var HttpKernelProxy
|
||||
*/
|
||||
protected $proxy;
|
||||
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(HttpKernelProxy $proxy)
|
||||
{
|
||||
$this->middleware('api')->except(['store', 'update']);
|
||||
$this->proxy = $proxy;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the login username to be used by the controller.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function username()
|
||||
{
|
||||
return 'email';
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate a new access token.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'username' => 'required|email',
|
||||
'password' => 'required|string',
|
||||
]);
|
||||
|
||||
if ($this->hasTooManyLoginAttempts($request)) {
|
||||
$this->fireLockoutEvent($request);
|
||||
|
||||
return $this->sendLockoutResponse($request);
|
||||
}
|
||||
|
||||
return $this->requestPasswordGrant($request);
|
||||
}
|
||||
|
||||
/**
|
||||
* Refresh an access token.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function update(Request $request)
|
||||
{
|
||||
$token = $request->cookie('refresh_token');
|
||||
|
||||
if (!$token) {
|
||||
throw ValidationException::withMessages([
|
||||
'refresh_token' => trans('oauth.missing_refresh_token')
|
||||
]);
|
||||
}
|
||||
|
||||
$response = $this->proxy->postJson('oauth/token', [
|
||||
'client_id' => config('auth.proxy.client_id'),
|
||||
'client_secret' => config('auth.proxy.client_secret'),
|
||||
'grant_type' => 'refresh_token',
|
||||
'refresh_token' => $token,
|
||||
'scopes' => '[*]',
|
||||
]);
|
||||
|
||||
if ($response->isSuccessful()) {
|
||||
return $this->sendSuccessResponse($response);
|
||||
}
|
||||
|
||||
return response($response->getContent(), $response->getStatusCode());
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the guard to be used during authentication.
|
||||
*
|
||||
* @return \Illuminate\Contracts\Auth\StatefulGuard
|
||||
*/
|
||||
protected function guard()
|
||||
{
|
||||
return Auth::guard('api');
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param int $id
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function destroy(Request $request)
|
||||
{
|
||||
$accessToken = Auth::user()->token();
|
||||
|
||||
\DB::table('oauth_refresh_tokens')
|
||||
->where('access_token_id', $accessToken->id)
|
||||
->update([
|
||||
'revoked' => true
|
||||
]);
|
||||
|
||||
$accessToken->revoke();
|
||||
|
||||
return response()->json(null, 200);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new access token from a password grant client.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function requestPasswordGrant(Request $request)
|
||||
{
|
||||
$response = $this->proxy->postJson('oauth/token', [
|
||||
'client_id' => config('auth.proxy.client_id'),
|
||||
'client_secret' => config('auth.proxy.client_secret'),
|
||||
'grant_type' => config('auth.proxy.grant_type'),
|
||||
'username' => $request->username,
|
||||
'password' => $request->password,
|
||||
'scopes' => '[*]'
|
||||
]);
|
||||
|
||||
$user = User::where('email', $request->username)->first();
|
||||
|
||||
if ($response->isSuccessful()) {
|
||||
$this->clearLoginAttempts($request);
|
||||
return $this->sendSuccessResponse($response, $user);
|
||||
}
|
||||
|
||||
$this->incrementLoginAttempts($request);
|
||||
|
||||
return response($response->getContent(), $response->getStatusCode());
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a successful response for requesting an api token.
|
||||
*
|
||||
* @param \Illuminate\Http\Response $response
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function sendSuccessResponse(Response $response, $user)
|
||||
{
|
||||
$data = json_decode($response->getContent());
|
||||
|
||||
$content = [
|
||||
'access_token' => $data->access_token,
|
||||
'expires_in' => $data->expires_in,
|
||||
];
|
||||
|
||||
return response($content, $response->getStatusCode())->cookie(
|
||||
'refresh_token',
|
||||
$data->refresh_token,
|
||||
10 * 24 * 60,
|
||||
"",
|
||||
"",
|
||||
true,
|
||||
true
|
||||
);
|
||||
}
|
||||
|
||||
public function isRegistered(Request $request)
|
||||
{
|
||||
if (User::whereEmail($request->email)->first()) {
|
||||
return 'true';
|
||||
} else {
|
||||
return 'false';
|
||||
}
|
||||
}
|
||||
}
|
||||
59
app/Http/Controllers/Auth/ForgotPasswordController.php
Normal file
59
app/Http/Controllers/Auth/ForgotPasswordController.php
Normal file
@ -0,0 +1,59 @@
|
||||
<?php
|
||||
namespace Laraspace\Http\Controllers\Auth;
|
||||
|
||||
use Laraspace\Http\Controllers\Controller;
|
||||
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class ForgotPasswordController extends Controller
|
||||
{
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Password Reset Controller
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This controller is responsible for handling password reset emails and
|
||||
| includes a trait which assists in sending these notifications from
|
||||
| your application to your users. Feel free to explore this trait.
|
||||
|
|
||||
*/
|
||||
|
||||
use SendsPasswordResetEmails;
|
||||
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
// $this->middleware('guest');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the response for a successful password reset link.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param string $response
|
||||
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
protected function sendResetLinkResponse(Request $request, $response)
|
||||
{
|
||||
return response()->json([
|
||||
'message' => 'Password reset email sent.',
|
||||
'data' => $response,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the response for a failed password reset link.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param string $response
|
||||
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
protected function sendResetLinkFailedResponse(Request $request, $response)
|
||||
{
|
||||
return response('Email could not be sent to this email address.', 403);
|
||||
}
|
||||
}
|
||||
85
app/Http/Controllers/Auth/ResetPasswordController.php
Normal file
85
app/Http/Controllers/Auth/ResetPasswordController.php
Normal file
@ -0,0 +1,85 @@
|
||||
<?php
|
||||
namespace Laraspace\Http\Controllers\Auth;
|
||||
|
||||
use Laraspace\Http\Controllers\Controller;
|
||||
use Illuminate\Foundation\Auth\ResetsPasswords;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Auth\Events\PasswordReset;
|
||||
|
||||
class ResetPasswordController extends Controller
|
||||
{
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Password Reset Controller
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This controller is responsible for handling password reset requests
|
||||
| and uses a simple trait to include this behavior. You're free to
|
||||
| explore this trait and override any methods you wish to tweak.
|
||||
|
|
||||
*/
|
||||
|
||||
use ResetsPasswords;
|
||||
|
||||
/**
|
||||
* Where to redirect users after resetting their password.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $redirectTo = '/';
|
||||
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
// $this->middleware('guest');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the response for a successful password reset.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param string $response
|
||||
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
protected function sendResetResponse(Request $request, $response)
|
||||
{
|
||||
return response()->json([
|
||||
'message' => 'Password reset successfully.'
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset the given user's password.
|
||||
*
|
||||
* @param \Illuminate\Contracts\Auth\CanResetPassword $user
|
||||
* @param string $password
|
||||
* @return void
|
||||
*/
|
||||
protected function resetPassword($user, $password)
|
||||
{
|
||||
$user->password = \Hash::make($password);
|
||||
|
||||
$user->setRememberToken(Str::random(60));
|
||||
|
||||
$user->save();
|
||||
|
||||
event(new PasswordReset($user));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the response for a failed password reset.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param string $response
|
||||
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
protected function sendResetFailedResponse(Request $request, $response)
|
||||
{
|
||||
return response('Failed, Invalid Token.', 403);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user