2525
2626namespace Pterodactyl \Http \Controllers \Base ;
2727
28- use Log ;
29- use Alert ;
3028use Illuminate \Http \Request ;
3129use Pterodactyl \Models \APIKey ;
30+ use Prologue \Alerts \AlertsMessageBag ;
3231use Pterodactyl \Models \APIPermission ;
33- use Pterodactyl \Repositories \APIRepository ;
34- use Pterodactyl \Exceptions \DisplayException ;
32+ use Pterodactyl \Services \ApiKeyService ;
3533use Pterodactyl \Http \Controllers \Controller ;
36- use Pterodactyl \Exceptions \ DisplayValidationException ;
34+ use Pterodactyl \Http \ Requests \ ApiKeyRequest ;
3735
3836class APIController extends Controller
3937{
38+ /**
39+ * @var \Prologue\Alerts\AlertsMessageBag
40+ */
41+ protected $ alert ;
42+
43+ /**
44+ * @var \Pterodactyl\Models\APIKey
45+ */
46+ protected $ model ;
47+
48+ /**
49+ * @var \Pterodactyl\Services\ApiKeyService
50+ */
51+ protected $ service ;
52+
53+ /**
54+ * APIController constructor.
55+ *
56+ * @param \Prologue\Alerts\AlertsMessageBag $alert
57+ * @param \Pterodactyl\Services\ApiKeyService $service
58+ */
59+ public function __construct (AlertsMessageBag $ alert , ApiKeyService $ service , APIKey $ model )
60+ {
61+ $ this ->alert = $ alert ;
62+ $ this ->model = $ model ;
63+ $ this ->service = $ service ;
64+ }
65+
4066 /**
4167 * Display base API index page.
4268 *
43- * @param \Illuminate\Http\Request $request
69+ * @param \Illuminate\Http\Request $request
4470 * @return \Illuminate\View\View
4571 */
4672 public function index (Request $ request )
@@ -53,68 +79,61 @@ public function index(Request $request)
5379 /**
5480 * Display API key creation page.
5581 *
56- * @param \Illuminate\Http\Request $request
5782 * @return \Illuminate\View\View
5883 */
59- public function create (Request $ request )
84+ public function create ()
6085 {
6186 return view ('base.api.new ' , [
6287 'permissions ' => [
63- 'user ' => collect (APIPermission::permissions () )->pull ('_user ' ),
64- 'admin ' => collect (APIPermission::permissions () )->except ('_user ' )->toArray (),
88+ 'user ' => collect (APIPermission::PERMISSIONS )->pull ('_user ' ),
89+ 'admin ' => collect (APIPermission::PERMISSIONS )->except ('_user ' )->toArray (),
6590 ],
6691 ]);
6792 }
6893
6994 /**
7095 * Handle saving new API key.
7196 *
72- * @param \Illuminate \Http\Request $request
97+ * @param \Pterodactyl \Http\Requests\ApiKeyRequest $request
7398 * @return \Illuminate\Http\RedirectResponse
99+ *
100+ * @throws \Exception
101+ * @throws \Pterodactyl\Exceptions\Model\DataValidationException
74102 */
75- public function store (Request $ request )
103+ public function store (ApiKeyRequest $ request )
76104 {
77- try {
78- $ repo = new APIRepository ($ request ->user ());
79- $ secret = $ repo ->create ($ request ->intersect ([
80- 'memo ' , 'allowed_ips ' ,
81- 'admin_permissions ' , 'permissions ' ,
82- ]));
83- Alert::success ('An API Key-Pair has successfully been generated. The API secret for this public key is shown below and will not be shown again.<br /><br /><code> ' . $ secret . '</code> ' )->flash ();
84-
85- return redirect ()->route ('account.api ' );
86- } catch (DisplayValidationException $ ex ) {
87- return redirect ()->route ('account.api.new ' )->withErrors (json_decode ($ ex ->getMessage ()))->withInput ();
88- } catch (DisplayException $ ex ) {
89- Alert::danger ($ ex ->getMessage ())->flash ();
90- } catch (\Exception $ ex ) {
91- Log::error ($ ex );
92- Alert::danger ('An unhandled exception occured while attempting to add this API key. ' )->flash ();
105+ $ adminPermissions = [];
106+ if ($ request ->user ()->isRootAdmin ()) {
107+ $ adminPermissions = $ request ->input ('admin_permissions ' ) ?? [];
93108 }
94109
95- return redirect ()->route ('account.api.new ' )->withInput ();
110+ $ secret = $ this ->service ->create ([
111+ 'user_id ' => $ request ->user ()->id ,
112+ 'allowed_ips ' => $ request ->input ('allowed_ips ' ),
113+ 'memo ' => $ request ->input ('memo ' ),
114+ ], $ request ->input ('permissions ' ) ?? [], $ adminPermissions );
115+
116+ $ this ->alert ->success ('An API Key-Pair has successfully been generated. The API secret for this public key is shown below and will not be shown again.<br /><br /><code> ' . $ secret . '</code> ' )->flash ();
117+
118+ return redirect ()->route ('account.api ' );
96119 }
97120
98121 /**
99- * Handle revoking API key.
100- *
101122 * @param \Illuminate\Http\Request $request
102123 * @param string $key
103- * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Response
124+ * @return \Illuminate\Http\Response
125+ *
126+ * @throws \Exception
104127 */
105128 public function revoke (Request $ request , $ key )
106129 {
107- try {
108- $ repo = new APIRepository ($ request ->user ());
109- $ repo ->revoke ($ key );
130+ $ key = $ this ->model ->newQuery ()
131+ ->where ('user_id ' , $ request ->user ()->id )
132+ ->where ('public ' , $ key )
133+ ->firstOrFail ();
110134
111- return response ('' , 204 );
112- } catch (\Exception $ ex ) {
113- Log::error ($ ex );
135+ $ this ->service ->revoke ($ key );
114136
115- return response ()->json ([
116- 'error ' => 'An error occured while attempting to remove this key. ' ,
117- ], 503 );
118- }
137+ return response ('' , 204 );
119138 }
120139}
0 commit comments