mirror of
				https://github.com/pelican-dev/panel.git
				synced 2025-10-27 16:26:51 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			63 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace Pterodactyl\Http\Middleware\Api\Client;
 | |
| 
 | |
| use Closure;
 | |
| use Pterodactyl\Models\User;
 | |
| use Pterodactyl\Models\Backup;
 | |
| use Pterodactyl\Models\Database;
 | |
| use Illuminate\Container\Container;
 | |
| use Pterodactyl\Contracts\Extensions\HashidsInterface;
 | |
| use Pterodactyl\Http\Middleware\Api\ApiSubstituteBindings;
 | |
| use Pterodactyl\Exceptions\Repository\RecordNotFoundException;
 | |
| use Pterodactyl\Contracts\Repository\ServerRepositoryInterface;
 | |
| 
 | |
| class SubstituteClientApiBindings extends ApiSubstituteBindings
 | |
| {
 | |
|     /**
 | |
|      * Perform substitution of route parameters without triggering
 | |
|      * a 404 error if a model is not found.
 | |
|      *
 | |
|      * @param \Illuminate\Http\Request $request
 | |
|      * @param \Closure $next
 | |
|      * @return mixed
 | |
|      */
 | |
|     public function handle($request, Closure $next)
 | |
|     {
 | |
|         // Override default behavior of the model binding to use a specific table
 | |
|         // column rather than the default 'id'.
 | |
|         $this->router->bind('server', function ($value) use ($request) {
 | |
|             try {
 | |
|                 $column = 'uuidShort';
 | |
|                 if (preg_match('/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i', $value)) {
 | |
|                     $column = 'uuid';
 | |
|                 }
 | |
| 
 | |
|                 return Container::getInstance()->make(ServerRepositoryInterface::class)->findFirstWhere([
 | |
|                     [$column, '=', $value],
 | |
|                 ]);
 | |
|             } catch (RecordNotFoundException $ex) {
 | |
|                 $request->attributes->set('is_missing_model', true);
 | |
| 
 | |
|                 return null;
 | |
|             }
 | |
|         });
 | |
| 
 | |
|         $this->router->bind('database', function ($value) use ($request) {
 | |
|             $id = Container::getInstance()->make(HashidsInterface::class)->decodeFirst($value);
 | |
| 
 | |
|             return Database::query()->where('id', $id)->firstOrFail();
 | |
|         });
 | |
| 
 | |
|         $this->router->bind('backup', function ($value) {
 | |
|             return Backup::query()->where('uuid', $value)->firstOrFail();
 | |
|         });
 | |
| 
 | |
|         $this->router->bind('user', function ($value) {
 | |
|             return User::query()->where('uuid', $value)->firstOrFail();
 | |
|         });
 | |
| 
 | |
|         return parent::handle($request, $next);
 | |
|     }
 | |
| }
 | 
