Add all files

This commit is contained in:
root
2025-11-30 11:57:22 +01:00
parent 2ee51cac4f
commit 044271db3d
1476 changed files with 142544 additions and 0 deletions

View File

@@ -0,0 +1,44 @@
<?php
namespace App\Http\Middleware\Api;
use App\Models\ApiKey;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class AdminApi
{
/**
* Handle an incoming request.
*
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
*/
public function handle(Request $request, Closure $next): Response
{
// Validate bearers token
if (!$request->bearerToken()) {
return response()->json(['error' => 'The request is missing a valid bearer token.'], 401);
}
$token = ApiKey::where('token', hash('sha256', $request->bearerToken()))
->where('enabled', true)
->firstOr(function () {
return response()->json(['error' => 'The provided API key is invalid or has been disabled.'], 401);
});
// Check if the token is of type 'admin'
if ($token->type !== 'admin' || ($token->ip_addresses && !in_array($request->ip(), $token->ip_addresses))) {
return response()->json(['error' => 'You do not have permission to access this resource.'], 403);
}
$token->last_used_at = now();
$token->save();
// Attach the token to the request for further use
$request->attributes->set('api_key', $token);
$request->attributes->set('api_key_permissions', $token->permissions);
return $next($request);
}
}

View File

@@ -0,0 +1,24 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class EnsureUserHasPermissions
{
/**
* Handle an incoming request.
*
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
*/
public function handle(Request $request, Closure $next, string $permission): Response
{
if (!$request->user()->hasPermission($permission)) {
return abort(403);
}
return $next($request);
}
}

View File

@@ -0,0 +1,30 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Symfony\Component\HttpFoundation\Response;
class ImpersonateMiddleware
{
/**
* Handle an incoming request.
*
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
*/
public function handle(Request $request, Closure $next): Response
{
if (session()->has('impersonating')) {
if ($request->is('admin/*')) {
// Unset session
session()->forget('impersonating');
} else {
Auth::onceUsingId(session('impersonating'));
}
}
return $next($request);
}
}

View File

@@ -0,0 +1,24 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class MustVerfiyEmail
{
/**
* Handle an incoming request.
*
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
*/
public function handle(Request $request, Closure $next): Response
{
if (config('settings.mail_must_verify') && $request->user() && !$request->user()->hasVerifiedEmail()) {
return redirect()->route('verification.notice');
}
return $next($request);
}
}

View File

@@ -0,0 +1,35 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class ProxyMiddleware
{
protected $headers = Request::HEADER_X_FORWARDED_FOR |
Request::HEADER_X_FORWARDED_HOST |
Request::HEADER_X_FORWARDED_PORT |
Request::HEADER_X_FORWARDED_PROTO |
Request::HEADER_X_FORWARDED_PREFIX |
Request::HEADER_X_FORWARDED_AWS_ELB;
/**
* Handle an incoming request.
*
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
*/
public function handle(Request $request, Closure $next): Response
{
if (count(config('settings.trusted_proxies', [])) > 0) {
if (in_array('*', config('settings.trusted_proxies'))) {
$request->setTrustedProxies([$request->server->get('REMOTE_ADDR')], $this->headers);
} else {
$request->setTrustedProxies(config('settings.trusted_proxies'), $this->headers);
}
}
return $next($request);
}
}

View File

@@ -0,0 +1,20 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
class SetLocale
{
public function handle(Request $request, Closure $next)
{
if (session()->has('locale')) {
$locale = session()->get('locale');
App::setLocale($locale);
}
return $next($request);
}
}