mirror of
				https://github.com/pelican-dev/panel.git
				synced 2025-10-31 05:36:51 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			198 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			198 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace Pterodactyl\Http\Controllers\Server;
 | |
| 
 | |
| use Illuminate\View\View;
 | |
| use Illuminate\Http\Request;
 | |
| use Illuminate\Http\Response;
 | |
| use Pterodactyl\Models\Permission;
 | |
| use Illuminate\Http\RedirectResponse;
 | |
| use Prologue\Alerts\AlertsMessageBag;
 | |
| use Pterodactyl\Http\Controllers\Controller;
 | |
| use Pterodactyl\Services\Subusers\SubuserUpdateService;
 | |
| use Pterodactyl\Traits\Controllers\JavascriptInjection;
 | |
| use Pterodactyl\Services\Subusers\SubuserCreationService;
 | |
| use Pterodactyl\Services\Subusers\SubuserDeletionService;
 | |
| use Pterodactyl\Contracts\Repository\SubuserRepositoryInterface;
 | |
| use Pterodactyl\Http\Requests\Server\Subuser\SubuserStoreFormRequest;
 | |
| use Pterodactyl\Http\Requests\Server\Subuser\SubuserUpdateFormRequest;
 | |
| 
 | |
| class SubuserController extends Controller
 | |
| {
 | |
|     use JavascriptInjection;
 | |
| 
 | |
|     /**
 | |
|      * @var \Prologue\Alerts\AlertsMessageBag
 | |
|      */
 | |
|     protected $alert;
 | |
| 
 | |
|     /**
 | |
|      * @var \Pterodactyl\Contracts\Repository\SubuserRepositoryInterface
 | |
|      */
 | |
|     protected $repository;
 | |
| 
 | |
|     /**
 | |
|      * @var \Pterodactyl\Services\Subusers\SubuserCreationService
 | |
|      */
 | |
|     protected $subuserCreationService;
 | |
| 
 | |
|     /**
 | |
|      * @var \Pterodactyl\Services\Subusers\SubuserDeletionService
 | |
|      */
 | |
|     protected $subuserDeletionService;
 | |
| 
 | |
|     /**
 | |
|      * @var \Pterodactyl\Services\Subusers\SubuserUpdateService
 | |
|      */
 | |
|     protected $subuserUpdateService;
 | |
| 
 | |
|     /**
 | |
|      * SubuserController constructor.
 | |
|      *
 | |
|      * @param \Prologue\Alerts\AlertsMessageBag                            $alert
 | |
|      * @param \Pterodactyl\Services\Subusers\SubuserCreationService        $subuserCreationService
 | |
|      * @param \Pterodactyl\Services\Subusers\SubuserDeletionService        $subuserDeletionService
 | |
|      * @param \Pterodactyl\Contracts\Repository\SubuserRepositoryInterface $repository
 | |
|      * @param \Pterodactyl\Services\Subusers\SubuserUpdateService          $subuserUpdateService
 | |
|      */
 | |
|     public function __construct(
 | |
|         AlertsMessageBag $alert,
 | |
|         SubuserCreationService $subuserCreationService,
 | |
|         SubuserDeletionService $subuserDeletionService,
 | |
|         SubuserRepositoryInterface $repository,
 | |
|         SubuserUpdateService $subuserUpdateService
 | |
|     ) {
 | |
|         $this->alert = $alert;
 | |
|         $this->repository = $repository;
 | |
|         $this->subuserCreationService = $subuserCreationService;
 | |
|         $this->subuserDeletionService = $subuserDeletionService;
 | |
|         $this->subuserUpdateService = $subuserUpdateService;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Displays the subuser overview index.
 | |
|      *
 | |
|      * @param \Illuminate\Http\Request $request
 | |
|      * @return \Illuminate\View\View
 | |
|      *
 | |
|      * @throws \Illuminate\Auth\Access\AuthorizationException
 | |
|      */
 | |
|     public function index(Request $request): View
 | |
|     {
 | |
|         $server = $request->attributes->get('server');
 | |
|         $this->authorize('list-subusers', $server);
 | |
|         $this->setRequest($request)->injectJavascript();
 | |
| 
 | |
|         return view('server.users.index', [
 | |
|             'subusers' => $this->repository->findWhere([['server_id', '=', $server->id]]),
 | |
|         ]);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Displays a single subuser overview.
 | |
|      *
 | |
|      * @param \Illuminate\Http\Request $request
 | |
|      * @return \Illuminate\View\View
 | |
|      *
 | |
|      * @throws \Illuminate\Auth\Access\AuthorizationException
 | |
|      */
 | |
|     public function view(Request $request): View
 | |
|     {
 | |
|         $server = $request->attributes->get('server');
 | |
|         $this->authorize('view-subuser', $server);
 | |
| 
 | |
|         $subuser = $this->repository->getWithPermissions($request->attributes->get('subuser'));
 | |
|         $this->setRequest($request)->injectJavascript();
 | |
| 
 | |
|         return view('server.users.view', [
 | |
|             'subuser' => $subuser,
 | |
|             'permlist' => Permission::getPermissions(),
 | |
|             'permissions' => $subuser->getRelation('permissions')->mapWithKeys(function ($item) {
 | |
|                 return [$item->permission => true];
 | |
|             }),
 | |
|         ]);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Handles editing a subuser.
 | |
|      *
 | |
|      * @param \Pterodactyl\Http\Requests\Server\Subuser\SubuserUpdateFormRequest $request
 | |
|      * @param string                                                             $uuid
 | |
|      * @param string                                                             $hash
 | |
|      * @return \Illuminate\Http\RedirectResponse
 | |
|      *
 | |
|      * @throws \Illuminate\Auth\Access\AuthorizationException
 | |
|      * @throws \Pterodactyl\Exceptions\DisplayException
 | |
|      * @throws \Pterodactyl\Exceptions\Model\DataValidationException
 | |
|      * @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
 | |
|      */
 | |
|     public function update(SubuserUpdateFormRequest $request, string $uuid, string $hash): RedirectResponse
 | |
|     {
 | |
|         $this->subuserUpdateService->handle($request->attributes->get('subuser'), $request->input('permissions', []));
 | |
|         $this->alert->success(trans('server.users.user_updated'))->flash();
 | |
| 
 | |
|         return redirect()->route('server.subusers.view', ['uuid' => $uuid, 'subuser' => $hash]);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Display new subuser creation page.
 | |
|      *
 | |
|      * @param \Illuminate\Http\Request $request
 | |
|      * @return \Illuminate\View\View
 | |
|      * @throws \Illuminate\Auth\Access\AuthorizationException
 | |
|      */
 | |
|     public function create(Request $request): View
 | |
|     {
 | |
|         $server = $request->attributes->get('server');
 | |
|         $this->authorize('create-subuser', $server);
 | |
|         $this->setRequest($request)->injectJavascript();
 | |
| 
 | |
|         return view('server.users.new', ['permissions' => Permission::getPermissions()]);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Handles creating a new subuser.
 | |
|      *
 | |
|      * @param \Pterodactyl\Http\Requests\Server\Subuser\SubuserStoreFormRequest $request
 | |
|      * @return \Illuminate\Http\RedirectResponse
 | |
|      *
 | |
|      * @throws \Exception
 | |
|      * @throws \Pterodactyl\Exceptions\Model\DataValidationException
 | |
|      * @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
 | |
|      * @throws \Pterodactyl\Exceptions\Service\Subuser\ServerSubuserExistsException
 | |
|      * @throws \Pterodactyl\Exceptions\Service\Subuser\UserIsServerOwnerException
 | |
|      */
 | |
|     public function store(SubuserStoreFormRequest $request): RedirectResponse
 | |
|     {
 | |
|         $server = $request->attributes->get('server');
 | |
| 
 | |
|         $subuser = $this->subuserCreationService->handle($server, $request->input('email'), $request->input('permissions', []));
 | |
|         $this->alert->success(trans('server.users.user_assigned'))->flash();
 | |
| 
 | |
|         return redirect()->route('server.subusers.view', [
 | |
|             'uuid' => $server->uuidShort,
 | |
|             'id' => $subuser->hashid,
 | |
|         ]);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Handles deleting a subuser.
 | |
|      *
 | |
|      * @param \Illuminate\Http\Request $request
 | |
|      * @return \Illuminate\Http\Response
 | |
|      *
 | |
|      * @throws \Illuminate\Auth\Access\AuthorizationException
 | |
|      * @throws \Pterodactyl\Exceptions\DisplayException
 | |
|      * @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
 | |
|      */
 | |
|     public function delete(Request $request): Response
 | |
|     {
 | |
|         $server = $request->attributes->get('server');
 | |
|         $this->authorize('delete-subuser', $server);
 | |
| 
 | |
|         $this->subuserDeletionService->handle($request->attributes->get('subuser'));
 | |
| 
 | |
|         return response('', 204);
 | |
|     }
 | |
| }
 | 
