api refactoring

This commit is contained in:
Čarodej
2022-05-11 09:19:55 +02:00
parent d2371e667f
commit c0e431b384
76 changed files with 1142 additions and 690 deletions
+4 -2
View File
@@ -43,9 +43,9 @@ class RouteServiceProvider extends ServiceProvider
->middleware('api')
->group(base_path('routes/share.php'));
Route::prefix('api/upload-request')
Route::prefix('api/file-request')
->middleware('api')
->group(base_path('routes/upload-request.php'));
->group(base_path('routes/file-request.php'));
Route::prefix('api/admin')
->middleware(['api', 'auth:sanctum', 'admin'])
@@ -85,5 +85,7 @@ class RouteServiceProvider extends ServiceProvider
? Limit::perMinute(1000)->by($request->user()->id)
: Limit::perMinute(100)->by($request->ip());
});
RateLimiter::for('login', fn (Request $request) => Limit::perMinute(5)->by($request->ip()));
}
}
@@ -0,0 +1,35 @@
<?php
namespace App\Users\Controllers\Account;
use Illuminate\Http\JsonResponse;
use App\Http\Controllers\Controller;
use App\Users\Requests\UpdateAvatarRequest;
class UpdateAvatarController extends Controller
{
/**
* Update user settings
*/
public function __invoke(
UpdateAvatarRequest $request
): JsonResponse {
$successMessage = [
'type' => 'success',
'message' => 'The avatar was successfully updated.',
];
// Check if is demo
if (isDemoAccount()) {
return response()->json($successMessage);
}
$request
->user()
->settings()
->update([
'avatar' => store_avatar($request, 'avatar'),
]);
return response()->json($successMessage);
}
}
@@ -3,7 +3,6 @@ namespace App\Users\Controllers\Account;
use Illuminate\Http\JsonResponse;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use Illuminate\Database\QueryException;
use App\Users\Requests\UpdateUserProfileSettingsRequest;
@@ -25,23 +24,10 @@ class UpdateProfileSettingsController extends Controller
return response()->json($successMessage);
}
// Get user
$user = Auth::user();
// Update avatar
if ($request->hasFile('avatar')) {
$user
->settings()
->update([
'avatar' => store_avatar($request, 'avatar'),
]);
return response()->json($successMessage);
}
// Try to store user option
try {
$user
$request
->user()
->settings()
->update(make_single_input($request));
} catch (QueryException $e) {
@@ -0,0 +1,39 @@
<?php
namespace App\Users\Controllers\Authentication;
use Hash;
use App\Users\Models\User;
use Illuminate\Http\JsonResponse;
use App\Http\Controllers\Controller;
use App\Users\Requests\LoginUserRequest;
use Illuminate\Validation\ValidationException;
class AuthenticateAndReturnBearerTokenController extends Controller
{
/**
* @throws ValidationException
*/
public function __invoke(LoginUserRequest $request): JsonResponse
{
// Get user
$user = User::where('email', $request->input('email'))
->firstOrFail();
// Check the credentials
if (! Hash::check($request->input('password'), $user->password)) {
throw ValidationException::withMessages(['email' => ['The provided credentials are incorrect.'], ]);
}
// Create access token
$token = $user->createToken('login');
// Return token
return response()->json([
'type' => 'success',
'message' => 'You were successfully authenticated',
'data' => [
'token' => $token->plainTextToken,
],
]);
}
}
@@ -21,7 +21,7 @@ class CheckAccountController extends Controller
return response()->json([
'type' => 'error',
'message' => __t('user_not_fount'),
]);
], 404);
}
return response()->json([
@@ -0,0 +1,33 @@
<?php
namespace App\Users\Controllers\Authentication;
use Illuminate\Http\JsonResponse;
use App\Http\Controllers\Controller;
use Laravel\Sanctum\PersonalAccessToken;
class DestroyActiveBearerTokenController extends Controller
{
public function __invoke(): JsonResponse
{
[$id, $token] = explode('|', request()->bearerToken(), 2);
// Get token
$instance = PersonalAccessToken::findOrFail($id);
// Check the correct token
if (hash_equals($instance->token, hash('sha256', $token))) {
// Delete token
$instance->delete();
return response()->json([
'type' => 'success',
'message' => 'You were successfully logged out',
]);
}
return response()->json([
'type' => 'error',
'message' => 'You are not authorized',
], 401);
}
}
+1 -1
View File
@@ -109,7 +109,7 @@ class User extends Authenticatable implements MustVerifyEmail
'used' => (float) get_storage_percentage($this->usedCapacity, $this->limitations->max_storage_amount),
'used_formatted' => get_storage_percentage($this->usedCapacity, $this->limitations->max_storage_amount) . '%',
'capacity' => $this->limitations->max_storage_amount,
'capacity_formatted' => format_gigabytes($this->limitations->max_storage_amount),
'capacity_formatted' => toGigabytes($this->limitations->max_storage_amount),
];
}
+1 -1
View File
@@ -59,7 +59,7 @@ class UserLimitation extends Model
return [
'use' => Metric::bytes($userCapacity)->format(),
'total' => format_gigabytes($this->max_storage_amount),
'total' => toGigabytes($this->max_storage_amount),
'percentage' => get_storage_percentage($userCapacity, $this->max_storage_amount),
];
}
@@ -0,0 +1,30 @@
<?php
namespace App\Users\Requests;
use Illuminate\Foundation\Http\FormRequest;
class LoginUserRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'email' => 'required|email',
'password' => 'required|string',
];
}
}
@@ -0,0 +1,29 @@
<?php
namespace App\Users\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UpdateAvatarRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'avatar' => 'required|file',
];
}
}
@@ -24,8 +24,7 @@ class UpdateUserProfileSettingsRequest extends FormRequest
{
return [
'name' => 'required|string',
'value' => 'sometimes|string',
'avatar' => 'sometimes|file',
'value' => 'required|string',
];
}
}
@@ -30,7 +30,7 @@ class UserStorageResource extends JsonResource
'type' => 'storage',
'attributes' => [
'used' => Metric::bytes($this->usedCapacity)->format(),
'capacity' => format_gigabytes($totalCapacity),
'capacity' => toGigabytes($totalCapacity),
'percentage' => (float) get_storage_percentage($this->usedCapacity, $totalCapacity),
],
'meta' => [
+1 -1
View File
@@ -30,7 +30,7 @@ class UserSubscription extends JsonResource
'canceled' => $this->subscription('main')->cancelled(),
'name' => $subscription['product']['name'],
'capacity' => (int) $subscription['product']['metadata']['capacity'],
'capacity_formatted' => format_gigabytes($subscription['product']['metadata']['capacity']),
'capacity_formatted' => toGigabytes($subscription['product']['metadata']['capacity']),
'slug' => $subscription['plan']['id'],
'canceled_at' => format_date($active_subscription['canceled_at'], 'd. M. Y'),
'created_at' => format_date($active_subscription['current_period_start'], 'd. M. Y'),